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 @@ + + + + + + + + + + + + + +
+ GM Whisper + + APOCTHULHU + Sheet Type + +
+ + +
+
+
+ +
+
+ + + + + + + + + + + + + +

HP

+ +

WP

+ +
+ + + / + + + +
+

ARMOR

+ +

skills

+
+
+

name

+

skill %

+

roll

+
+
+
+ + + +
+
+
+

attacks

+
+
+

attack

+

skill %

+

base range

+

damage

+

armor prce

+

pris/worn/junk

+

lethality %

+

kill radius

+

ammo

+

notes

+

roll

+
+
+
+ + + + + + + + + + + + + + + +
+
+
+

other notes

+
+
+

name

+

notes

+
+
+
+ + +
+
+
+
+
+
+ + +
+ +
+
+

survivor details

+
+
+
+

Survivor's Name

+ +
+

Archetype

+ +
+
+
+

Setting

+ +
+

Current Home

+ +
+
+
+

Sex

+ +
+

Age

+ +
+

Birthplace

+ +
+
+
+
+ +
+
+

statistical data

+
+ +
+
+

Statistics

+
+

score

+
+

x5

+
+

distinguishing features

+
+ +
+ +
+
+ + +
+ +
+ +
+
+ + +
+ +
+ +
+
+ + +
+ +
+ +
+
+ + +
+ +
+ +
+
+ + +
+ +
+ +
+
+ + +
+
+ +
+
+

Derived Attributes

+
+

maximum

+
+

current

+
+
+

hit points

HP +
+
+
+ + +
+
+

willpower points

WP +
+
+
+ + +
+ +
+
+ + +
+
+

recover SAN

+
+
+
+ + + + +
+
+

breaking point

BP +
+
+
+ + +
+ +
+

damage bonus

DB +
+
+
+ + +
+ + + +
+
+ % + +
+
+
+ +
+

physical description

+ +
+
+
+ +
+
+

bonds and disorders

+
+
+ +
+
+

Individual Bonds

+
+

score

+
+
+
+
+ +
+ +
+
+
+
+ +
+
+

Community Bonds

+
+

score

+
+
+
+
+ +
+ +
+
+
+
+ + + +
+
+

motivations and mental disorders

+ +
+
+
+
+

incidents of san loss without going insane

+
+
+

violence

+ + + adapted +

helplessness

+ + + adapted +
+
+
+
+ +
+
+

Skills

+
+
+
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ +
+ + + +
+ + +
+ + + +
+ + + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + + +
+ + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+
+ + + +
+ + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ + +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+
+ + + + +
+ + + +
+ + +
+ + + +
+ + +
+ + + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ +
+ + + +
+ +
+ +
+

foriegn languages and other skills:

+
+
+
+ + + +
+ +
+
+
+
+
Check a box when you attempt to use a skill and fail. After the session, add 1d4-1 to each checked skill and erase all checks.
+
+
+ +
+
+

injuries

+
+
+

wounds and ailments

+
+ +
+
Has First Aid been attempted since the last injury? + yes: only Medicine, Surgery, or long-term rest can help further. +
+
+
+ +
+
+

equipment & resources

+
+ +
+
+

armor and gear

+

(record pristine/worn/junk status)

+ +
+ +
+ +
+

resources

+ +
+ +
+

permanent resources

+ +
+
+ + + + + + +
+ +
+
+

resources
at hand

+ + +
+
+
+

resources
stowed

+ + +
+
+
+

resources
in storage

+ + +
+
+ +
+
+
+ + +
+
+

weapons

+
+
+
Body armor reduces the damage of all attacks except Called Shots and successful Lethality rolls.
+
+

weapons

+
+

skill %

+
+

base range

+
+

damage

+
+

armor prce

+
+

pris/worn/junk

+
+

lethality %

+
+

kill radius

+
+

ammo

+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + +
+
+
+
+
+ +
+
+

remarks

+
+
+
+

personal details and notes

+ +
+
+
+
+ + + +
+ +
{{#header}} +
{{#name}} +

{{name}}


{{/name}} +

{{header}}

+

{{#subheader}}({{subheader}}%){{/subheader}}

+
{{/header}} +
{{#dice}} +
{{dice}}%
{{#rollTotal() dice 1}} +
Critical
{{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 1}} + {{#rollBetween() dice 2 10}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 2 10}} + {{#rollTotal() dice 11}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 11}} + {{#rollBetween() dice 12 21}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 12 21}} + {{#rollTotal() dice 22}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 22}} + {{#rollBetween() dice 23 32}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 23 32}} + {{#rollTotal() dice 33}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 33}} + {{#rollBetween() dice 34 43}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 34 43}} + {{#rollTotal() dice 44}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 44}} + {{#rollBetween() dice 45 54}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 45 54}} + {{#rollTotal() dice 55}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 55}} + {{#rollBetween() dice 56 65}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 56 65}} + {{#rollTotal() dice 66}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 66}} + {{#rollBetween() dice 67 76}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 67 76}} + {{#rollTotal() dice 77}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 77}} + {{#rollBetween() dice 78 87}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 78 87}} + {{#rollTotal() dice 88}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 88}} + {{#rollBetween() dice 89 98}} + {{#rollGreater() dice rating}} +
Failure
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Success
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality}}
{{/rollTotal() haslethality 1}} + {{/rollBetween() dice 89 98}} + {{#rollTotal() dice 99}} + {{#rollGreater() dice rating}} +
Fumble
{{/rollGreater() dice rating}} + {{#^rollGreater() dice rating}} +
Critical
{{/^rollGreater() dice rating}} + {{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 99}} + {{#rollTotal() dice 100}} +
Fumble
{{#rollTotal() hasdamage 1}} +
{{damage_critical}}
{{/rollTotal() hasdamage 1}} + {{#rollTotal() haslethality 1}} +
{{lethality_critical}}
{{/rollTotal() haslethality 1}} + {{/rollTotal() dice 100}} + {{/dice}} + {{#desc}} +
{{desc}}
{{/desc}} +
+
+
+
+
+ +
{{#header}} +
+

{{header}}

+

{{#subheader}}({{subheader}}%){{/subheader}}

+
{{/header}} +
{{#dice}} +
{{dice}}%
{{#rollLess() stat 20}} + {{#^rollGreater() dice score}} + {{#rollTotal() dice 1}} +
Critical
{{/rollTotal() dice 1}} + {{#rollBetween() dice 2 10}} +
Success
{{/rollBetween() dice 2 10}} + {{#rollTotal() dice 11}} +
Critical
{{/rollTotal() dice 11}} + {{#rollBetween() dice 12 21}} +
Success
{{/rollBetween() dice 12 21}} + {{#rollTotal() dice 22}} +
Critical
{{/rollTotal() dice 22}} + {{#rollBetween() dice 23 32}} +
Success
{{/rollBetween() dice 23 32}} + {{#rollTotal() dice 33}} +
Critical
{{/rollTotal() dice 33}} + {{#rollBetween() dice 34 43}} +
Success
{{/rollBetween() dice 34 43}} + {{#rollTotal() dice 44}} +
Critical
{{/rollTotal() dice 44}} + {{#rollBetween() dice 45 54}} +
Success
{{/rollBetween() dice 45 54}} + {{#rollTotal() dice 55}} +
Critical
{{/rollTotal() dice 55}} + {{#rollBetween() dice 56 65}} +
Success
{{/rollBetween() dice 56 65}} + {{#rollTotal() dice 66}} +
Critical
{{/rollTotal() dice 66}} + {{#rollBetween() dice 67 76}} +
Success
{{/rollBetween() dice 67 76}} + {{#rollTotal() dice 77}} +
Critical
{{/rollTotal() dice 77}} + {{#rollBetween() dice 78 87}} +
Success
{{/rollBetween() dice 78 87}} + {{#rollTotal() dice 88}} +
Critical
{{/rollTotal() dice 88}} + {{#rollBetween() dice 89 98}} +
Success
{{/rollBetween() dice 89 98}} + {{#rollTotal() dice 99}} +
Critical
{{/rollTotal() dice 99}} + {{/^rollGreater() dice score}} + {{#rollGreater() dice score}} + {{#rollTotal() dice 100}} +
Fumble
{{/rollTotal() dice 100}} + {{#rollBetween() dice 2 10}} +
Failure
{{/rollBetween() dice 2 10}} + {{#rollTotal() dice 11}} +
Fumble
{{/rollTotal() dice 11}} + {{#rollBetween() dice 12 21}} +
Failure
{{/rollBetween() dice 12 21}} + {{#rollTotal() dice 22}} +
Fumble
{{/rollTotal() dice 22}} + {{#rollBetween() dice 23 32}} +
Failure
{{/rollBetween() dice 23 32}} + {{#rollTotal() dice 33}} +
Fumble
{{/rollTotal() dice 33}} + {{#rollBetween() dice 34 43}} +
Failure
{{/rollBetween() dice 34 43}} + {{#rollTotal() dice 44}} +
Fumble
{{/rollTotal() dice 44}} + {{#rollBetween() dice 45 54}} +
Failure
{{/rollBetween() dice 45 54}} + {{#rollTotal() dice 55}} +
Fumble
{{/rollTotal() dice 55}} + {{#rollBetween() dice 56 65}} +
Failure
{{/rollBetween() dice 56 65}} + {{#rollTotal() dice 66}} +
Fumble
{{/rollTotal() dice 66}} + {{#rollBetween() dice 67 76}} +
Failure
{{/rollBetween() dice 67 76}} + {{#rollTotal() dice 77}} +
Fumble
{{/rollTotal() dice 77}} + {{#rollBetween() dice 78 87}} +
Failure
{{/rollBetween() dice 78 87}} + {{#rollTotal() dice 88}} +
Fumble
{{/rollTotal() dice 88}} + {{#rollBetween() dice 89 98}} +
Failure
{{/rollBetween() dice 89 98}} + {{#rollTotal() dice 99}} +
Fumble
{{/rollTotal() dice 99}} + {{/rollGreater() dice score}} + {{/rollLess() stat 20}} + {{#^rollLess() stat 20}} + {{#^rollGreater() dice stat}} + {{#rollTotal() dice 100}} +
Fumble
{{/rollTotal() dice 100}} + {{#^rollTotal() dice 100}} +
Critical
{{/^rollTotal() dice 100}} + {{/^rollGreater() dice stat}} + {{#rollGreater() dice stat}} + {{#rollBetween() dice 12 21}} +
Success
{{/rollBetween() dice 12 21}} + {{#rollTotal() dice 22}} +
Critical
{{/rollTotal() dice 22}} + {{#rollBetween() dice 23 32}} +
Success
{{/rollBetween() dice 23 32}} + {{#rollTotal() dice 33}} +
Critical
{{/rollTotal() dice 33}} + {{#rollBetween() dice 34 43}} +
Success
{{/rollBetween() dice 34 43}} + {{#rollTotal() dice 44}} +
Critical
{{/rollTotal() dice 44}} + {{#rollBetween() dice 45 54}} +
Success
{{/rollBetween() dice 45 54}} + {{#rollTotal() dice 55}} +
Critical
{{/rollTotal() dice 55}} + {{#rollBetween() dice 56 65}} +
Success
{{/rollBetween() dice 56 65}} + {{#rollTotal() dice 66}} +
Critical
{{/rollTotal() dice 66}} + {{#rollBetween() dice 67 76}} +
Success
{{/rollBetween() dice 67 76}} + {{#rollTotal() dice 77}} +
Critical
{{/rollTotal() dice 77}} + {{#rollBetween() dice 78 87}} +
Success
{{/rollBetween() dice 78 87}} + {{#rollTotal() dice 88}} +
Critical
{{/rollTotal() dice 88}} + {{#rollBetween() dice 89 98}} +
Success
{{/rollBetween() dice 89 98}} + {{#rollTotal() dice 99}} +
Critical
{{/rollTotal() dice 99}} + {{#rollTotal() dice 100}} +
Fumble
{{/rollTotal() dice 100}} + {{/rollGreater() dice stat}} + {{/^rollLess() stat 20}} + {{/dice}} + {{#damage}} +
{{damage}}
{{/damage}} + {{#desc}} +
{{desc}}
{{/desc}} +
+
+
+
+
+ +
{{#header}} +
+

{{header}}

+

{{#subheader}}({{subheader}}){{/subheader}}

+
{{/header}} +
+
{{damage}}
+ {{#^rollTotal() AP 0}} +
Armor Piercing: {{AP}}
{{/^rollTotal() AP 0}} +
+
+
+
+
+ +
{{#header}} +
+

{{header}}

+

({{subheader}}%)

+
{{/header}} +
+
{{lethality}}%
{{#^rollGreater() lethality lethality_rating}} +
DEATH
+ {{#rollTotal() lethality 1 }} +
(or damage: 11)
+ {{/rollTotal() lethality 1 }} + + {{#rollTotal() lethality 2 }} +
(or damage: 12)
+ {{/rollTotal() lethality 2 }} + + {{#rollTotal() lethality 3 }} +
(or damage: 13)
+ {{/rollTotal() lethality 3 }} + + {{#rollTotal() lethality 4 }} +
(or damage: 14)
+ {{/rollTotal() lethality 4 }} + + {{#rollTotal() lethality 5 }} +
(or damage: 15)
+ {{/rollTotal() lethality 5 }} + + {{#rollTotal() lethality 6 }} +
(or damage: 16)
+ {{/rollTotal() lethality 6 }} + + {{#rollTotal() lethality 7 }} +
(or damage: 17)
+ {{/rollTotal() lethality 7 }} + + {{#rollTotal() lethality 8 }} +
(or damage: 18)
+ {{/rollTotal() lethality 8 }} + + {{#rollTotal() lethality 9 }} +
(or damage: 19)
+ {{/rollTotal() lethality 9 }} + + {{#rollTotal() lethality 10 }} +
(or damage: 11)
+ {{/rollTotal() lethality 10 }} + + {{#rollTotal() lethality 11 }} +
(or damage: 2)
+ {{/rollTotal() lethality 11 }} + + {{#rollTotal() lethality 12 }} +
(or damage: 3)
+ {{/rollTotal() lethality 12 }} + + {{#rollTotal() lethality 13 }} +
(or damage: 4)
+ {{/rollTotal() lethality 13 }} + + {{#rollTotal() lethality 14 }} +
(or damage: 5)
+ {{/rollTotal() lethality 14 }} + + {{#rollTotal() lethality 15 }} +
(or damage: 6)
+ {{/rollTotal() lethality 15 }} + + {{#rollTotal() lethality 16 }} +
(or damage: 7)
+ {{/rollTotal() lethality 16 }} + + {{#rollTotal() lethality 17 }} +
(or damage: 8)
+ {{/rollTotal() lethality 17 }} + + {{#rollTotal() lethality 18 }} +
(or damage: 9)
+ {{/rollTotal() lethality 18 }} + + {{#rollTotal() lethality 19 }} +
(or damage: 10)
+ {{/rollTotal() lethality 19 }} + + {{#rollTotal() lethality 20 }} +
(or damage: 12)
+ {{/rollTotal() lethality 20 }} + + {{#rollTotal() lethality 21 }} +
(or damage: 3)
+ {{/rollTotal() lethality 21 }} + + {{#rollTotal() lethality 22 }} +
(or damage: 4)
+ {{/rollTotal() lethality 22 }} + + {{#rollTotal() lethality 23 }} +
(or damage: 5)
+ {{/rollTotal() lethality 23 }} + + {{#rollTotal() lethality 24 }} +
(or damage: 6)
+ {{/rollTotal() lethality 24 }} + + {{#rollTotal() lethality 25 }} +
(or damage: 7)
+ {{/rollTotal() lethality 25 }} + + {{#rollTotal() lethality 26 }} +
(or damage: 8)
+ {{/rollTotal() lethality 26 }} + + {{#rollTotal() lethality 27 }} +
(or damage: 9)
+ {{/rollTotal() lethality 27 }} + + {{#rollTotal() lethality 28 }} +
(or damage: 10)
+ {{/rollTotal() lethality 28 }} + + {{#rollTotal() lethality 29 }} +
(or damage: 11)
+ {{/rollTotal() lethality 29 }} + + {{#rollTotal() lethality 30 }} +
(or damage: 13)
+ {{/rollTotal() lethality 30 }} + + {{#rollTotal() lethality 31 }} +
(or damage: 4)
+ {{/rollTotal() lethality 31 }} + + {{#rollTotal() lethality 32 }} +
(or damage: 5)
+ {{/rollTotal() lethality 32 }} + + {{#rollTotal() lethality 33 }} +
(or damage: 6)
+ {{/rollTotal() lethality 33 }} + + {{#rollTotal() lethality 34 }} +
(or damage: 7)
+ {{/rollTotal() lethality 34 }} + + {{#rollTotal() lethality 35 }} +
(or damage: 8)
+ {{/rollTotal() lethality 35 }} + + {{#rollTotal() lethality 36 }} +
(or damage: 9)
+ {{/rollTotal() lethality 36 }} + + {{#rollTotal() lethality 37 }} +
(or damage: 10)
+ {{/rollTotal() lethality 37 }} + + {{#rollTotal() lethality 38 }} +
(or damage: 11)
+ {{/rollTotal() lethality 38 }} + + {{#rollTotal() lethality 39 }} +
(or damage: 12)
+ {{/rollTotal() lethality 39 }} + + {{#rollTotal() lethality 40 }} +
(or damage: 14)
+ {{/rollTotal() lethality 40 }} + + {{#rollTotal() lethality 41 }} +
(or damage: 5)
+ {{/rollTotal() lethality 41 }} + + {{#rollTotal() lethality 42 }} +
(or damage: 6)
+ {{/rollTotal() lethality 42 }} + + {{#rollTotal() lethality 43 }} +
(or damage: 7)
+ {{/rollTotal() lethality 43 }} + + {{#rollTotal() lethality 44 }} +
(or damage: 8)
+ {{/rollTotal() lethality 44 }} + + {{#rollTotal() lethality 45 }} +
(or damage: 9)
+ {{/rollTotal() lethality 45 }} + + {{#rollTotal() lethality 46 }} +
(or damage: 10)
+ {{/rollTotal() lethality 46 }} + + {{#rollTotal() lethality 47 }} +
(or damage: 11)
+ {{/rollTotal() lethality 47 }} + + {{#rollTotal() lethality 48 }} +
(or damage: 12)
+ {{/rollTotal() lethality 48 }} + + {{#rollTotal() lethality 49 }} +
(or damage: 13)
+ {{/rollTotal() lethality 49 }} + + {{#rollTotal() lethality 50 }} +
(or damage: 15)
+ {{/rollTotal() lethality 50 }} + + {{#rollTotal() lethality 51 }} +
(or damage: 6)
+ {{/rollTotal() lethality 51 }} + + {{#rollTotal() lethality 52 }} +
(or damage: 7)
+ {{/rollTotal() lethality 52 }} + + {{#rollTotal() lethality 53 }} +
(or damage: 8)
+ {{/rollTotal() lethality 53 }} + + {{#rollTotal() lethality 54 }} +
(or damage: 9)
+ {{/rollTotal() lethality 54 }} + + {{#rollTotal() lethality 55 }} +
(or damage: 10)
+ {{/rollTotal() lethality 55 }} + + {{#rollTotal() lethality 56 }} +
(or damage: 11)
+ {{/rollTotal() lethality 56 }} + + {{#rollTotal() lethality 57 }} +
(or damage: 12)
+ {{/rollTotal() lethality 57 }} + + {{#rollTotal() lethality 58 }} +
(or damage: 13)
+ {{/rollTotal() lethality 58 }} + + {{#rollTotal() lethality 59 }} +
(or damage: 14)
+ {{/rollTotal() lethality 59 }} + + {{#rollTotal() lethality 60 }} +
(or damage: 16)
+ {{/rollTotal() lethality 60 }} + + {{#rollTotal() lethality 61 }} +
(or damage: 7)
+ {{/rollTotal() lethality 61 }} + + {{#rollTotal() lethality 62 }} +
(or damage: 8)
+ {{/rollTotal() lethality 62 }} + + {{#rollTotal() lethality 63 }} +
(or damage: 9)
+ {{/rollTotal() lethality 63 }} + + {{#rollTotal() lethality 64 }} +
(or damage: 10)
+ {{/rollTotal() lethality 64 }} + + {{#rollTotal() lethality 65 }} +
(or damage: 11)
+ {{/rollTotal() lethality 65 }} + + {{#rollTotal() lethality 66 }} +
(or damage: 12)
+ {{/rollTotal() lethality 66 }} + + {{#rollTotal() lethality 67 }} +
(or damage: 13)
+ {{/rollTotal() lethality 67 }} + + {{#rollTotal() lethality 68 }} +
(or damage: 14)
+ {{/rollTotal() lethality 68 }} + + {{#rollTotal() lethality 69 }} +
(or damage: 15)
+ {{/rollTotal() lethality 69 }} + + {{#rollTotal() lethality 70 }} +
(or damage: 17)
+ {{/rollTotal() lethality 70 }} + + {{#rollTotal() lethality 71 }} +
(or damage: 8)
+ {{/rollTotal() lethality 71 }} + + {{#rollTotal() lethality 72 }} +
(or damage: 9)
+ {{/rollTotal() lethality 72 }} + + {{#rollTotal() lethality 73 }} +
(or damage: 10)
+ {{/rollTotal() lethality 73 }} + + {{#rollTotal() lethality 74 }} +
(or damage: 11)
+ {{/rollTotal() lethality 74 }} + + {{#rollTotal() lethality 75 }} +
(or damage: 12)
+ {{/rollTotal() lethality 75 }} + + {{#rollTotal() lethality 76 }} +
(or damage: 13)
+ {{/rollTotal() lethality 76 }} + + {{#rollTotal() lethality 77 }} +
(or damage: 14)
+ {{/rollTotal() lethality 77 }} + + {{#rollTotal() lethality 78 }} +
(or damage: 15)
+ {{/rollTotal() lethality 78 }} + + {{#rollTotal() lethality 79 }} +
(or damage: 16)
+ {{/rollTotal() lethality 79 }} + + {{#rollTotal() lethality 80 }} +
(or damage: 18)
+ {{/rollTotal() lethality 80 }} + + {{#rollTotal() lethality 81 }} +
(or damage: 9)
+ {{/rollTotal() lethality 81 }} + + {{#rollTotal() lethality 82 }} +
(or damage: 10)
+ {{/rollTotal() lethality 82 }} + + {{#rollTotal() lethality 83 }} +
(or damage: 11)
+ {{/rollTotal() lethality 83 }} + + {{#rollTotal() lethality 84 }} +
(or damage: 12)
+ {{/rollTotal() lethality 84 }} + + {{#rollTotal() lethality 85 }} +
(or damage: 13)
+ {{/rollTotal() lethality 85 }} + + {{#rollTotal() lethality 86 }} +
(or damage: 14)
+ {{/rollTotal() lethality 86 }} + + {{#rollTotal() lethality 87 }} +
(or damage: 15)
+ {{/rollTotal() lethality 87 }} + + {{#rollTotal() lethality 88 }} +
(or damage: 16)
+ {{/rollTotal() lethality 88 }} + + {{#rollTotal() lethality 89 }} +
(or damage: 17)
+ {{/rollTotal() lethality 89 }} + + {{#rollTotal() lethality 90 }} +
(or damage: 19)
+ {{/rollTotal() lethality 90 }} + + {{#rollTotal() lethality 91 }} +
(or damage: 10)
+ {{/rollTotal() lethality 91 }} + + {{#rollTotal() lethality 92 }} +
(or damage: 11)
+ {{/rollTotal() lethality 92 }} + + {{#rollTotal() lethality 93 }} +
(or damage: 12)
+ {{/rollTotal() lethality 93 }} + + {{#rollTotal() lethality 94 }} +
(or damage: 13)
+ {{/rollTotal() lethality 94 }} + + {{#rollTotal() lethality 95 }} +
(or damage: 14)
+ {{/rollTotal() lethality 95 }} + + {{#rollTotal() lethality 96 }} +
(or damage: 15)
+ {{/rollTotal() lethality 96 }} + + {{#rollTotal() lethality 97 }} +
(or damage: 16)
+ {{/rollTotal() lethality 97 }} + + {{#rollTotal() lethality 98 }} +
(or damage: 17)
+ {{/rollTotal() lethality 98 }} + + {{#rollTotal() lethality 99 }} +
(or damage: 18)
+ {{/rollTotal() lethality 99 }} + + {{#rollTotal() lethality 100 }} +
(or damage: 20)
+ {{/rollTotal() lethality 100 }} + {{/^rollGreater() lethality lethality_rating}} + {{#rollGreater() lethality lethality_rating}} + {{#rollTotal() lethality 1 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 1 }} + + {{#rollTotal() lethality 2 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 2 }} + + {{#rollTotal() lethality 3 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 3 }} + + {{#rollTotal() lethality 4 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 4 }} + + {{#rollTotal() lethality 5 }} +
Normal Damage: 15
+ {{/rollTotal() lethality 5 }} + + {{#rollTotal() lethality 6 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 6 }} + + {{#rollTotal() lethality 7 }} +
Normal Damage: 17
+ {{/rollTotal() lethality 7 }} + + {{#rollTotal() lethality 8 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 8 }} + + {{#rollTotal() lethality 9 }} +
Normal Damage: 19
+ {{/rollTotal() lethality 9 }} + + {{#rollTotal() lethality 10 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 10 }} + + {{#rollTotal() lethality 11 }} +
Normal Damage: 2
+ {{/rollTotal() lethality 11 }} + + {{#rollTotal() lethality 12 }} +
Normal Damage: 3
+ {{/rollTotal() lethality 12 }} + + {{#rollTotal() lethality 13 }} +
Normal Damage: 4
+ {{/rollTotal() lethality 13 }} + + {{#rollTotal() lethality 14 }} +
Normal Damage: 5
+ {{/rollTotal() lethality 14 }} + + {{#rollTotal() lethality 15 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 15 }} + + {{#rollTotal() lethality 16 }} +
Normal Damage: 7
+ {{/rollTotal() lethality 16 }} + + {{#rollTotal() lethality 17 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 17 }} + + {{#rollTotal() lethality 18 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 18 }} + + {{#rollTotal() lethality 19 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 19 }} + + {{#rollTotal() lethality 20 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 20 }} + + {{#rollTotal() lethality 21 }} +
Normal Damage: 3
+ {{/rollTotal() lethality 21 }} + + {{#rollTotal() lethality 22 }} +
Normal Damage: 4
+ {{/rollTotal() lethality 22 }} + + {{#rollTotal() lethality 23 }} +
Normal Damage: 5
+ {{/rollTotal() lethality 23 }} + + {{#rollTotal() lethality 24 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 24 }} + + {{#rollTotal() lethality 25 }} +
Normal Damage: 7
+ {{/rollTotal() lethality 25 }} + + {{#rollTotal() lethality 26 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 26 }} + + {{#rollTotal() lethality 27 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 27 }} + + {{#rollTotal() lethality 28 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 28 }} + + {{#rollTotal() lethality 29 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 29 }} + + {{#rollTotal() lethality 30 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 30 }} + + {{#rollTotal() lethality 31 }} +
Normal Damage: 4
+ {{/rollTotal() lethality 31 }} + + {{#rollTotal() lethality 32 }} +
Normal Damage: 5
+ {{/rollTotal() lethality 32 }} + + {{#rollTotal() lethality 33 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 33 }} + + {{#rollTotal() lethality 34 }} +
Normal Damage: 7
+ {{/rollTotal() lethality 34 }} + + {{#rollTotal() lethality 35 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 35 }} + + {{#rollTotal() lethality 36 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 36 }} + + {{#rollTotal() lethality 37 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 37 }} + + {{#rollTotal() lethality 38 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 38 }} + + {{#rollTotal() lethality 39 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 39 }} + + {{#rollTotal() lethality 40 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 40 }} + + {{#rollTotal() lethality 41 }} +
Normal Damage: 5
+ {{/rollTotal() lethality 41 }} + + {{#rollTotal() lethality 42 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 42 }} + + {{#rollTotal() lethality 43 }} +
Normal Damage: 7
+ {{/rollTotal() lethality 43 }} + + {{#rollTotal() lethality 44 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 44 }} + + {{#rollTotal() lethality 45 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 45 }} + + {{#rollTotal() lethality 46 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 46 }} + + {{#rollTotal() lethality 47 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 47 }} + + {{#rollTotal() lethality 48 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 48 }} + + {{#rollTotal() lethality 49 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 49 }} + + {{#rollTotal() lethality 50 }} +
Normal Damage: 15
+ {{/rollTotal() lethality 50 }} + + {{#rollTotal() lethality 51 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 51 }} + + {{#rollTotal() lethality 52 }} +
Normal Damage: 7
+ {{/rollTotal() lethality 52 }} + + {{#rollTotal() lethality 53 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 53 }} + + {{#rollTotal() lethality 54 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 54 }} + + {{#rollTotal() lethality 55 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 55 }} + + {{#rollTotal() lethality 56 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 56 }} + + {{#rollTotal() lethality 57 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 57 }} + + {{#rollTotal() lethality 58 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 58 }} + + {{#rollTotal() lethality 59 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 59 }} + + {{#rollTotal() lethality 60 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 60 }} + + {{#rollTotal() lethality 61 }} +
Normal Damage: 7
+ {{/rollTotal() lethality 61 }} + + {{#rollTotal() lethality 62 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 62 }} + + {{#rollTotal() lethality 63 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 63 }} + + {{#rollTotal() lethality 64 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 64 }} + + {{#rollTotal() lethality 65 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 65 }} + + {{#rollTotal() lethality 66 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 66 }} + + {{#rollTotal() lethality 67 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 67 }} + + {{#rollTotal() lethality 68 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 68 }} + + {{#rollTotal() lethality 69 }} +
Normal Damage: 15
+ {{/rollTotal() lethality 69 }} + + {{#rollTotal() lethality 70 }} +
Normal Damage: 17
+ {{/rollTotal() lethality 70 }} + + {{#rollTotal() lethality 71 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 71 }} + + {{#rollTotal() lethality 72 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 72 }} + + {{#rollTotal() lethality 73 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 73 }} + + {{#rollTotal() lethality 74 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 74 }} + + {{#rollTotal() lethality 75 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 75 }} + + {{#rollTotal() lethality 76 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 76 }} + + {{#rollTotal() lethality 77 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 77 }} + + {{#rollTotal() lethality 78 }} +
Normal Damage: 15
+ {{/rollTotal() lethality 78 }} + + {{#rollTotal() lethality 79 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 79 }} + + {{#rollTotal() lethality 80 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 80 }} + + {{#rollTotal() lethality 81 }} +
Normal Damage: 9
+ {{/rollTotal() lethality 81 }} + + {{#rollTotal() lethality 82 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 82 }} + + {{#rollTotal() lethality 83 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 83 }} + + {{#rollTotal() lethality 84 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 84 }} + + {{#rollTotal() lethality 85 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 85 }} + + {{#rollTotal() lethality 86 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 86 }} + + {{#rollTotal() lethality 87 }} +
Normal Damage: 15
+ {{/rollTotal() lethality 87 }} + + {{#rollTotal() lethality 88 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 88 }} + + {{#rollTotal() lethality 89 }} +
Normal Damage: 17
+ {{/rollTotal() lethality 89 }} + + {{#rollTotal() lethality 90 }} +
Normal Damage: 19
+ {{/rollTotal() lethality 90 }} + + {{#rollTotal() lethality 91 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 91 }} + + {{#rollTotal() lethality 92 }} +
Normal Damage: 11
+ {{/rollTotal() lethality 92 }} + + {{#rollTotal() lethality 93 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 93 }} + + {{#rollTotal() lethality 94 }} +
Normal Damage: 13
+ {{/rollTotal() lethality 94 }} + + {{#rollTotal() lethality 95 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 95 }} + + {{#rollTotal() lethality 96 }} +
Normal Damage: 15
+ {{/rollTotal() lethality 96 }} + + {{#rollTotal() lethality 97 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 97 }} + + {{#rollTotal() lethality 98 }} +
Normal Damage: 17
+ {{/rollTotal() lethality 98 }} + + {{#rollTotal() lethality 99 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 99 }} + + {{#rollTotal() lethality 100 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 100 }} + {{/rollGreater() lethality lethality_rating}} + + {{#^rollTotal() AP 0}} +
Armor Piercing: {{AP}}
{{/^rollTotal() AP 0}} +
+
+
+
+
+ +
{{#header}} +
+

{{header}}

+

({{subheader}}%)

+
{{/header}} +
+
{{lethality}}%
{{#^rollGreater() lethality lethality_rating}} +
DEATH
+ {{#rollTotal() lethality 1 }} +
(or damage: 22)
+ {{/rollTotal() lethality 1 }} + + {{#rollTotal() lethality 2 }} +
(or damage: 24)
+ {{/rollTotal() lethality 2 }} + + {{#rollTotal() lethality 3 }} +
(or damage: 26)
+ {{/rollTotal() lethality 3 }} + + {{#rollTotal() lethality 4 }} +
(or damage: 28)
+ {{/rollTotal() lethality 4 }} + + {{#rollTotal() lethality 5 }} +
(or damage: 30)
+ {{/rollTotal() lethality 5 }} + + {{#rollTotal() lethality 6 }} +
(or damage: 32)
+ {{/rollTotal() lethality 6 }} + + {{#rollTotal() lethality 7 }} +
(or damage: 34)
+ {{/rollTotal() lethality 7 }} + + {{#rollTotal() lethality 8 }} +
(or damage: 36)
+ {{/rollTotal() lethality 8 }} + + {{#rollTotal() lethality 9 }} +
(or damage: 38)
+ {{/rollTotal() lethality 9 }} + + {{#rollTotal() lethality 10 }} +
(or damage: 22)
+ {{/rollTotal() lethality 10 }} + + {{#rollTotal() lethality 11 }} +
(or damage: 4)
+ {{/rollTotal() lethality 11 }} + + {{#rollTotal() lethality 12 }} +
(or damage: 6)
+ {{/rollTotal() lethality 12 }} + + {{#rollTotal() lethality 13 }} +
(or damage: 8)
+ {{/rollTotal() lethality 13 }} + + {{#rollTotal() lethality 14 }} +
(or damage: 10)
+ {{/rollTotal() lethality 14 }} + + {{#rollTotal() lethality 15 }} +
(or damage: 12)
+ {{/rollTotal() lethality 15 }} + + {{#rollTotal() lethality 16 }} +
(or damage: 14)
+ {{/rollTotal() lethality 16 }} + + {{#rollTotal() lethality 17 }} +
(or damage: 16)
+ {{/rollTotal() lethality 17 }} + + {{#rollTotal() lethality 18 }} +
(or damage: 18)
+ {{/rollTotal() lethality 18 }} + + {{#rollTotal() lethality 19 }} +
(or damage: 20)
+ {{/rollTotal() lethality 19 }} + + {{#rollTotal() lethality 20 }} +
(or damage: 24)
+ {{/rollTotal() lethality 20 }} + + {{#rollTotal() lethality 21 }} +
(or damage: 6)
+ {{/rollTotal() lethality 21 }} + + {{#rollTotal() lethality 22 }} +
(or damage: 8)
+ {{/rollTotal() lethality 22 }} + + {{#rollTotal() lethality 23 }} +
(or damage: 10)
+ {{/rollTotal() lethality 23 }} + + {{#rollTotal() lethality 24 }} +
(or damage: 12)
+ {{/rollTotal() lethality 24 }} + + {{#rollTotal() lethality 25 }} +
(or damage: 14)
+ {{/rollTotal() lethality 25 }} + + {{#rollTotal() lethality 26 }} +
(or damage: 16)
+ {{/rollTotal() lethality 26 }} + + {{#rollTotal() lethality 27 }} +
(or damage: 18)
+ {{/rollTotal() lethality 27 }} + + {{#rollTotal() lethality 28 }} +
(or damage: 20)
+ {{/rollTotal() lethality 28 }} + + {{#rollTotal() lethality 29 }} +
(or damage: 22)
+ {{/rollTotal() lethality 29 }} + + {{#rollTotal() lethality 30 }} +
(or damage: 26)
+ {{/rollTotal() lethality 30 }} + + {{#rollTotal() lethality 31 }} +
(or damage: 8)
+ {{/rollTotal() lethality 31 }} + + {{#rollTotal() lethality 32 }} +
(or damage: 10)
+ {{/rollTotal() lethality 32 }} + + {{#rollTotal() lethality 33 }} +
(or damage: 12)
+ {{/rollTotal() lethality 33 }} + + {{#rollTotal() lethality 34 }} +
(or damage: 14)
+ {{/rollTotal() lethality 34 }} + + {{#rollTotal() lethality 35 }} +
(or damage: 16)
+ {{/rollTotal() lethality 35 }} + + {{#rollTotal() lethality 36 }} +
(or damage: 18)
+ {{/rollTotal() lethality 36 }} + + {{#rollTotal() lethality 37 }} +
(or damage: 20)
+ {{/rollTotal() lethality 37 }} + + {{#rollTotal() lethality 38 }} +
(or damage: 22)
+ {{/rollTotal() lethality 38 }} + + {{#rollTotal() lethality 39 }} +
(or damage: 24)
+ {{/rollTotal() lethality 39 }} + + {{#rollTotal() lethality 40 }} +
(or damage: 28)
+ {{/rollTotal() lethality 40 }} + + {{#rollTotal() lethality 41 }} +
(or damage: 10)
+ {{/rollTotal() lethality 41 }} + + {{#rollTotal() lethality 42 }} +
(or damage: 12)
+ {{/rollTotal() lethality 42 }} + + {{#rollTotal() lethality 43 }} +
(or damage: 14)
+ {{/rollTotal() lethality 43 }} + + {{#rollTotal() lethality 44 }} +
(or damage: 16)
+ {{/rollTotal() lethality 44 }} + + {{#rollTotal() lethality 45 }} +
(or damage: 18)
+ {{/rollTotal() lethality 45 }} + + {{#rollTotal() lethality 46 }} +
(or damage: 20)
+ {{/rollTotal() lethality 46 }} + + {{#rollTotal() lethality 47 }} +
(or damage: 22)
+ {{/rollTotal() lethality 47 }} + + {{#rollTotal() lethality 48 }} +
(or damage: 24)
+ {{/rollTotal() lethality 48 }} + + {{#rollTotal() lethality 49 }} +
(or damage: 26)
+ {{/rollTotal() lethality 49 }} + + {{#rollTotal() lethality 50 }} +
(or damage: 30)
+ {{/rollTotal() lethality 50 }} + + {{#rollTotal() lethality 51 }} +
(or damage: 12)
+ {{/rollTotal() lethality 51 }} + + {{#rollTotal() lethality 52 }} +
(or damage: 14)
+ {{/rollTotal() lethality 52 }} + + {{#rollTotal() lethality 53 }} +
(or damage: 16)
+ {{/rollTotal() lethality 53 }} + + {{#rollTotal() lethality 54 }} +
(or damage: 18)
+ {{/rollTotal() lethality 54 }} + + {{#rollTotal() lethality 55 }} +
(or damage: 20)
+ {{/rollTotal() lethality 55 }} + + {{#rollTotal() lethality 56 }} +
(or damage: 22)
+ {{/rollTotal() lethality 56 }} + + {{#rollTotal() lethality 57 }} +
(or damage: 24)
+ {{/rollTotal() lethality 57 }} + + {{#rollTotal() lethality 58 }} +
(or damage: 26)
+ {{/rollTotal() lethality 58 }} + + {{#rollTotal() lethality 59 }} +
(or damage: 28)
+ {{/rollTotal() lethality 59 }} + + {{#rollTotal() lethality 60 }} +
(or damage: 32)
+ {{/rollTotal() lethality 60 }} + + {{#rollTotal() lethality 61 }} +
(or damage: 14)
+ {{/rollTotal() lethality 61 }} + + {{#rollTotal() lethality 62 }} +
(or damage: 16)
+ {{/rollTotal() lethality 62 }} + + {{#rollTotal() lethality 63 }} +
(or damage: 18)
+ {{/rollTotal() lethality 63 }} + + {{#rollTotal() lethality 64 }} +
(or damage: 20)
+ {{/rollTotal() lethality 64 }} + + {{#rollTotal() lethality 65 }} +
(or damage: 22)
+ {{/rollTotal() lethality 65 }} + + {{#rollTotal() lethality 66 }} +
(or damage: 24)
+ {{/rollTotal() lethality 66 }} + + {{#rollTotal() lethality 67 }} +
(or damage: 26)
+ {{/rollTotal() lethality 67 }} + + {{#rollTotal() lethality 68 }} +
(or damage: 28)
+ {{/rollTotal() lethality 68 }} + + {{#rollTotal() lethality 69 }} +
(or damage: 30)
+ {{/rollTotal() lethality 69 }} + + {{#rollTotal() lethality 70 }} +
(or damage: 34)
+ {{/rollTotal() lethality 70 }} + + {{#rollTotal() lethality 71 }} +
(or damage: 16)
+ {{/rollTotal() lethality 71 }} + + {{#rollTotal() lethality 72 }} +
(or damage: 18)
+ {{/rollTotal() lethality 72 }} + + {{#rollTotal() lethality 73 }} +
(or damage: 20)
+ {{/rollTotal() lethality 73 }} + + {{#rollTotal() lethality 74 }} +
(or damage: 22)
+ {{/rollTotal() lethality 74 }} + + {{#rollTotal() lethality 75 }} +
(or damage: 24)
+ {{/rollTotal() lethality 75 }} + + {{#rollTotal() lethality 76 }} +
(or damage: 26)
+ {{/rollTotal() lethality 76 }} + + {{#rollTotal() lethality 77 }} +
(or damage: 28)
+ {{/rollTotal() lethality 77 }} + + {{#rollTotal() lethality 78 }} +
(or damage: 30)
+ {{/rollTotal() lethality 78 }} + + {{#rollTotal() lethality 79 }} +
(or damage: 32)
+ {{/rollTotal() lethality 79 }} + + {{#rollTotal() lethality 80 }} +
(or damage: 36)
+ {{/rollTotal() lethality 80 }} + + {{#rollTotal() lethality 81 }} +
(or damage: 18)
+ {{/rollTotal() lethality 81 }} + + {{#rollTotal() lethality 82 }} +
(or damage: 20)
+ {{/rollTotal() lethality 82 }} + + {{#rollTotal() lethality 83 }} +
(or damage: 22)
+ {{/rollTotal() lethality 83 }} + + {{#rollTotal() lethality 84 }} +
(or damage: 24)
+ {{/rollTotal() lethality 84 }} + + {{#rollTotal() lethality 85 }} +
(or damage: 26)
+ {{/rollTotal() lethality 85 }} + + {{#rollTotal() lethality 86 }} +
(or damage: 28)
+ {{/rollTotal() lethality 86 }} + + {{#rollTotal() lethality 87 }} +
(or damage: 30)
+ {{/rollTotal() lethality 87 }} + + {{#rollTotal() lethality 88 }} +
(or damage: 32)
+ {{/rollTotal() lethality 88 }} + + {{#rollTotal() lethality 89 }} +
(or damage: 34)
+ {{/rollTotal() lethality 89 }} + + {{#rollTotal() lethality 90 }} +
(or damage: 38)
+ {{/rollTotal() lethality 90 }} + + {{#rollTotal() lethality 91 }} +
(or damage: 20)
+ {{/rollTotal() lethality 91 }} + + {{#rollTotal() lethality 92 }} +
(or damage: 22)
+ {{/rollTotal() lethality 92 }} + + {{#rollTotal() lethality 93 }} +
(or damage: 24)
+ {{/rollTotal() lethality 93 }} + + {{#rollTotal() lethality 94 }} +
(or damage: 26)
+ {{/rollTotal() lethality 94 }} + + {{#rollTotal() lethality 95 }} +
(or damage: 28)
+ {{/rollTotal() lethality 95 }} + + {{#rollTotal() lethality 96 }} +
(or damage: 30)
+ {{/rollTotal() lethality 96 }} + + {{#rollTotal() lethality 97 }} +
(or damage: 32)
+ {{/rollTotal() lethality 97 }} + + {{#rollTotal() lethality 98 }} +
(or damage: 34)
+ {{/rollTotal() lethality 98 }} + + {{#rollTotal() lethality 99 }} +
(or damage: 36)
+ {{/rollTotal() lethality 99 }} + + {{#rollTotal() lethality 100 }} +
(or damage: 40)
+ {{/rollTotal() lethality 100 }} + {{/^rollGreater() lethality lethality_rating}} + {{#rollGreater() lethality lethality_rating}} + {{#rollTotal() lethality 1 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 1 }} + + {{#rollTotal() lethality 2 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 2 }} + + {{#rollTotal() lethality 3 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 3 }} + + {{#rollTotal() lethality 4 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 4 }} + + {{#rollTotal() lethality 5 }} +
Normal Damage: 30
+ {{/rollTotal() lethality 5 }} + + {{#rollTotal() lethality 6 }} +
Normal Damage: 32
+ {{/rollTotal() lethality 6 }} + + {{#rollTotal() lethality 7 }} +
Normal Damage: 34
+ {{/rollTotal() lethality 7 }} + + {{#rollTotal() lethality 8 }} +
Normal Damage: 36
+ {{/rollTotal() lethality 8 }} + + {{#rollTotal() lethality 9 }} +
Normal Damage: 38
+ {{/rollTotal() lethality 9 }} + + {{#rollTotal() lethality 10 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 10 }} + + {{#rollTotal() lethality 11 }} +
Normal Damage: 4
+ {{/rollTotal() lethality 11 }} + + {{#rollTotal() lethality 12 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 12 }} + + {{#rollTotal() lethality 13 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 13 }} + + {{#rollTotal() lethality 14 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 14 }} + + {{#rollTotal() lethality 15 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 15 }} + + {{#rollTotal() lethality 16 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 16 }} + + {{#rollTotal() lethality 17 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 17 }} + + {{#rollTotal() lethality 18 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 18 }} + + {{#rollTotal() lethality 19 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 19 }} + + {{#rollTotal() lethality 20 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 20 }} + + {{#rollTotal() lethality 21 }} +
Normal Damage: 6
+ {{/rollTotal() lethality 21 }} + + {{#rollTotal() lethality 22 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 22 }} + + {{#rollTotal() lethality 23 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 23 }} + + {{#rollTotal() lethality 24 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 24 }} + + {{#rollTotal() lethality 25 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 25 }} + + {{#rollTotal() lethality 26 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 26 }} + + {{#rollTotal() lethality 27 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 27 }} + + {{#rollTotal() lethality 28 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 28 }} + + {{#rollTotal() lethality 29 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 29 }} + + {{#rollTotal() lethality 30 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 30 }} + + {{#rollTotal() lethality 31 }} +
Normal Damage: 8
+ {{/rollTotal() lethality 31 }} + + {{#rollTotal() lethality 32 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 32 }} + + {{#rollTotal() lethality 33 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 33 }} + + {{#rollTotal() lethality 34 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 34 }} + + {{#rollTotal() lethality 35 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 35 }} + + {{#rollTotal() lethality 36 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 36 }} + + {{#rollTotal() lethality 37 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 37 }} + + {{#rollTotal() lethality 38 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 38 }} + + {{#rollTotal() lethality 39 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 39 }} + + {{#rollTotal() lethality 40 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 40 }} + + {{#rollTotal() lethality 41 }} +
Normal Damage: 10
+ {{/rollTotal() lethality 41 }} + + {{#rollTotal() lethality 42 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 42 }} + + {{#rollTotal() lethality 43 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 43 }} + + {{#rollTotal() lethality 44 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 44 }} + + {{#rollTotal() lethality 45 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 45 }} + + {{#rollTotal() lethality 46 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 46 }} + + {{#rollTotal() lethality 47 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 47 }} + + {{#rollTotal() lethality 48 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 48 }} + + {{#rollTotal() lethality 49 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 49 }} + + {{#rollTotal() lethality 50 }} +
Normal Damage: 30
+ {{/rollTotal() lethality 50 }} + + {{#rollTotal() lethality 51 }} +
Normal Damage: 12
+ {{/rollTotal() lethality 51 }} + + {{#rollTotal() lethality 52 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 52 }} + + {{#rollTotal() lethality 53 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 53 }} + + {{#rollTotal() lethality 54 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 54 }} + + {{#rollTotal() lethality 55 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 55 }} + + {{#rollTotal() lethality 56 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 56 }} + + {{#rollTotal() lethality 57 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 57 }} + + {{#rollTotal() lethality 58 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 58 }} + + {{#rollTotal() lethality 59 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 59 }} + + {{#rollTotal() lethality 60 }} +
Normal Damage: 32
+ {{/rollTotal() lethality 60 }} + + {{#rollTotal() lethality 61 }} +
Normal Damage: 14
+ {{/rollTotal() lethality 61 }} + + {{#rollTotal() lethality 62 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 62 }} + + {{#rollTotal() lethality 63 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 63 }} + + {{#rollTotal() lethality 64 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 64 }} + + {{#rollTotal() lethality 65 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 65 }} + + {{#rollTotal() lethality 66 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 66 }} + + {{#rollTotal() lethality 67 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 67 }} + + {{#rollTotal() lethality 68 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 68 }} + + {{#rollTotal() lethality 69 }} +
Normal Damage: 30
+ {{/rollTotal() lethality 69 }} + + {{#rollTotal() lethality 70 }} +
Normal Damage: 34
+ {{/rollTotal() lethality 70 }} + + {{#rollTotal() lethality 71 }} +
Normal Damage: 16
+ {{/rollTotal() lethality 71 }} + + {{#rollTotal() lethality 72 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 72 }} + + {{#rollTotal() lethality 73 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 73 }} + + {{#rollTotal() lethality 74 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 74 }} + + {{#rollTotal() lethality 75 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 75 }} + + {{#rollTotal() lethality 76 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 76 }} + + {{#rollTotal() lethality 77 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 77 }} + + {{#rollTotal() lethality 78 }} +
Normal Damage: 30
+ {{/rollTotal() lethality 78 }} + + {{#rollTotal() lethality 79 }} +
Normal Damage: 32
+ {{/rollTotal() lethality 79 }} + + {{#rollTotal() lethality 80 }} +
Normal Damage: 36
+ {{/rollTotal() lethality 80 }} + + {{#rollTotal() lethality 81 }} +
Normal Damage: 18
+ {{/rollTotal() lethality 81 }} + + {{#rollTotal() lethality 82 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 82 }} + + {{#rollTotal() lethality 83 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 83 }} + + {{#rollTotal() lethality 84 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 84 }} + + {{#rollTotal() lethality 85 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 85 }} + + {{#rollTotal() lethality 86 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 86 }} + + {{#rollTotal() lethality 87 }} +
Normal Damage: 30
+ {{/rollTotal() lethality 87 }} + + {{#rollTotal() lethality 88 }} +
Normal Damage: 32
+ {{/rollTotal() lethality 88 }} + + {{#rollTotal() lethality 89 }} +
Normal Damage: 34
+ {{/rollTotal() lethality 89 }} + + {{#rollTotal() lethality 90 }} +
Normal Damage: 38
+ {{/rollTotal() lethality 90 }} + + {{#rollTotal() lethality 91 }} +
Normal Damage: 20
+ {{/rollTotal() lethality 91 }} + + {{#rollTotal() lethality 92 }} +
Normal Damage: 22
+ {{/rollTotal() lethality 92 }} + + {{#rollTotal() lethality 93 }} +
Normal Damage: 24
+ {{/rollTotal() lethality 93 }} + + {{#rollTotal() lethality 94 }} +
Normal Damage: 26
+ {{/rollTotal() lethality 94 }} + + {{#rollTotal() lethality 95 }} +
Normal Damage: 28
+ {{/rollTotal() lethality 95 }} + + {{#rollTotal() lethality 96 }} +
Normal Damage: 30
+ {{/rollTotal() lethality 96 }} + + {{#rollTotal() lethality 97 }} +
Normal Damage: 32
+ {{/rollTotal() lethality 97 }} + + {{#rollTotal() lethality 98 }} +
Normal Damage: 34
+ {{/rollTotal() lethality 98 }} + + {{#rollTotal() lethality 99 }} +
Normal Damage: 36
+ {{/rollTotal() lethality 99 }} + + {{#rollTotal() lethality 100 }} +
Normal Damage: 40
+ {{/rollTotal() lethality 100 }} + {{/rollGreater() lethality lethality_rating}} + + {{#^rollTotal() AP 0}} +
Armor Piercing: {{AP}}
{{/^rollTotal() AP 0}} +
+
+
+
+
+ +
+
+

{{type}}

+

( {{#rollTotal() hasminsan 1}}{{success}}{{/rollTotal() hasminsan 1}} {{#^rollTotal() hasminsan 1}}-{{/^rollTotal() hasminsan 1}} / {{#rollTotal() hasmaxsan 1}}{{failure}}{{/rollTotal() hasmaxsan 1}} {{#^rollTotal() hasmaxsan 1}}-{{/^rollTotal() hasmaxsan 1}} )

+
+
+
{{#rollTotal() hasminsan 1}}{{roll1}}{{/rollTotal() hasminsan 1}} {{#^rollTotal() hasminsan 1}}-{{/^rollTotal() hasminsan 1}} / {{#rollTotal() hasmaxsan 1}}{{roll2}}{{/rollTotal() hasmaxsan 1}} {{#^rollTotal() hasmaxsan 1}}-{{/^rollTotal() hasmaxsan 1}}
+
+
+
+
+
+ +
{{#header}} +
+

{{header}}

+

{{#subheader}}({{subheader}}%){{/subheader}}

+
{{/header}} +
{{#dice}} +
{{dice}}%
{{#rollGreater() dice 50}} +
Failure
{{/rollGreater() dice 50}} + {{#^rollGreater() dice 50}} +
Success
{{/^rollGreater() dice 50}} + {{/dice}} +
+
+
+
+ + + \ No newline at end of file diff --git a/APOCTHULHU/img/apocthulhu-logo.jpg b/APOCTHULHU/img/apocthulhu-logo.jpg new file mode 100644 index 0000000000..db9c294d5f Binary files /dev/null and b/APOCTHULHU/img/apocthulhu-logo.jpg differ diff --git a/APOCTHULHU/preview.png b/APOCTHULHU/preview.png new file mode 100644 index 0000000000..15f9802938 Binary files /dev/null and b/APOCTHULHU/preview.png differ diff --git a/APOCTHULHU/sheet.json b/APOCTHULHU/sheet.json new file mode 100644 index 0000000000..3459a06c3d --- /dev/null +++ b/APOCTHULHU/sheet.json @@ -0,0 +1,9 @@ +{ + "html": "apocthulhu.html", + "css": "apocthulhu.css", + "authors": "Emerald Productions, Marco M., Cthulhu Reborn Publishing", + "roll20userid": "557736,3726,7375113", + "preview": "preview.png", + "version": "Version 1.05", + "instructions": "*Published by arrangement with Cthulhu Reborn, creators of the APOCTHULHU RPG*" +} diff --git a/APOCTHULHU/translation.json b/APOCTHULHU/translation.json new file mode 100644 index 0000000000..a42db2af12 --- /dev/null +++ b/APOCTHULHU/translation.json @@ -0,0 +1,356 @@ +{ + "art": "art" + ,"armor prce":"armor prce" + ,"(0%)": "(0%)" + ,"(10%)": "(10%)" + ,"(20%)": "(20%)" + ,"(30%)": "(30%)" + ,"(40%)":"(40%)" + ,"(record pristine/worn/junk status)":"(record pristine/worn/junk status)" + ,"0": "0" + ,"Survivor's Name": "Survivor's Name" + ,"10": "10" + ,"Individual Bonds": "Individual Bonds" + ,"Community Bonds": "Community Bonds" + ,"112382":"112382" + ,"motivations and mental disorders": "motivations and mental disorders" + ,"incidents of san loss without going insane": "incidents of san loss without going insane" + ,"wounds and ailments":"wounds and ailments" + ,"armor and gear":"armor and gear" + ,"weapons":"weapons" + ,"personal details and notes": "personal details and notes" + ,"Archetype": "Archetype" + ,"Setting": "Setting" + ,"315":"315" + ,"Current Home": "Current Home" + ,"Sex": "Sex" + ,"Age": "Age" + ,"Birthplace": "Birthplace" + ,"8 points of thick hide": "8 points of thick hide" + ,"adapted": "adapted" + ,"age": "age" + ,"agent signature": "agent signature" + ,"alertness fail checkbox": "alertness fail checkbox" + ,"alertness rank": "alertness rank" + ,"alertness": "alertness" + ,"ammo input": "ammo input" + ,"ammo":"ammo" + ,"anthropology fail checkbox": "anthropology fail checkbox" + ,"anthropology rank": "anthropology rank" + ,"anthropology": "anthropology" + ,"appraise fail checkbox": "appraise fail checkbox" + ,"appraise rank": "appraise rank" + ,"appraise": "appraise" + ,"Skills":"Skills" + ,"archeology fail checkbox": "archeology fail checkbox" + ,"archeology rank": "archeology rank" + ,"archeology": "archeology" + ,"armor and gear":"armor and gear" + ,"armor piercing input": "armor piercing input" + ,"armor piercing":"armor piercing" + ,"armor": "armor" + ,"art fail checkbox": "art fail checkbox" + ,"art name": "art name" + ,"art rank":"art rank" + ,"art roll": "art roll" + ,"artillery fail checkbox": "artillery fail checkbox" + ,"artillery rank": "artillery rank" + ,"artillery roll": "artillery roll" + ,"artillery": "artillery" + ,"athletics fail checkbox": "athletics fail checkbox" + ,"athletics rank":"athletics rank" + ,"athletics roll": "athletics roll" + ,"athletics": "athletics" + ,"attack": "attack" + ,"attacks":"attacks" + ,"authorizing officer":"authorizing officer" + ,"base range input": "base range input" + ,"base range":"base range" + ,"Body armor reduces the damage of all attacks except Called Shots and successful Lethality rolls." : "Body armor reduces the damage of all attacks except Called Shots and successful Lethality rolls." + ,"bond name": "bond name" + ,"bond score": "bond score" + ,"bond flag": "bond flag" + ,"BP":"BP" + ,"breaking point":"breaking point" + ,"CHA": "CHA" + ,"character name" : "Character name" + ,"charisma distinguishing features":"charisma distinguishing features" + ,"charisma roll":"charisma roll" + ,"charisma score":"charisma score" + ,"charisma":"charisma" + ,"Check a box when you attempt to use a skill and fail. After the session, add 1d4-1 to each checked skill and erase all checks." : "Check a box when you attempt to use a skill and fail. After the session, add 1d4-1 to each checked skill and erase all checks." + ,"checkbox for first aid":"checkbox for first aid" + ,"CON": "CON" + ,"constitution distinguishing features": "constitution distinguishing features" + ,"constitution roll": "constitution roll" + ,"constitution score": "constitution score" + ,"constitution": "constitution" + ,"craft fail checkbox": "craft fail checkbox" + ,"craft name": "craft name" + ,"craft rank": "craft rank" + ,"craft roll": "craft roll" + ,"craft":"craft" + ,"current status:": "current status:" + ,"damage input": "damage input" + ,"damage":"damage" + ,"damage bonus":"damage bonus" + ,"damage (×2)":"damage (×2)" + ,"DB":"DB" + ,"DD":"DD" + ,"demolitions fail checkbox": "demolitions fail checkbox" + ,"demolitions rank": "demolitions rank" + ,"demolitions roll": "demolitions roll" + ,"demolitions": "demolitions" + ,"developments which affect home and family": "developments which affect home and family" + ,"DEX": "DEX" + ,"dexterity distinguishing features": "dexterity distinguishing features" + ,"dexterity roll": "dexterity roll" + ,"dexterity score": "dexterity score" + ,"dexterity": "dexterity" + ,"disguise fail checkbox": "disguise fail checkbox" + ,"disguise rank":"disguise rank" + ,"disguise roll":"disguise roll" + ,"disguise": "disguise" + ,"distinguishing features": "distinguishing features" + ,"dodge fail checkbox":"dodge fail checkbox" + ,"dodge rank":"dodge rank" + ,"dodge roll":"dodge roll" + ,"dodge":"dodge" + ,"drive fail checkbox": "drive fail checkbox" + ,"drive rank": "drive rank" + ,"drive roll": "drive roll" + ,"drive":"drive" + ,"education":"education and occupational history" + ,"employer": "employer" + ,"enter a name for non-player character": "enter a name for non-player character" + ,"enter armor text": "enter armor text" + ,"enter hit points": "enter hit points" + ,"enter npc description": "enter npc description" + ,"enter sanity loss": "enter sanity loss" + ,"enter willpower points": "enter willpower points" + ,"equipment & resources":"equipment & resources" + ,"firearms fail checkbox": "firearms fail checkbox" + ,"firearms rank":"firearms rank" + ,"firearms roll": "firearms roll" + ,"firearms":"firearms" + ,"first aid fail checkbox":"first aid fail checkbox" + ,"first aid rank":"first aid rank" + ,"first aid roll":"first aid roll" + ,"first aid":"first aid" + ,"forensics fail checkbox":"forensics fail checkbox" + ,"forensics rank": "forensics rank" + ,"forensics roll":"forensics roll" + ,"forensics": "forensics" + ,"foriegn languages and other skills:":"foriegn languages and other skills:" + ,"gm whisper toggle": "gm whisper toggle" + ,"GM Whisper": "GM Whisper" + ,"Has First Aid been attempted since the last injury?":"Has First Aid been attempted since the last injury?" + ,"heavy machinery fail checkbox":"heavy machinery fail checkbox" + ,"heavy machinery rank":"heavy machinery rank" + ,"heavy machinery roll":"heavy machinery roll" + ,"heavy machinery":"heavy machinery" + ,"heavy weapons fail checkbox":"heavy weapons fail checkbox" + ,"heavy weapons rank":"heavy weapons rank" + ,"heavy weapons roll":"heavy weapons roll" + ,"heavy weapons":"heavy weapons" + ,"helplessness 1": "helplessness 1" + ,"helplessness 2": "helplessness 2" + ,"helplessness 3": "helplessness 3" + ,"helplessness": "helplessness" + ,"history fail checkbox":"history fail checkbox" + ,"history rank":"history rank" + ,"history roll":"history roll" + ,"history":"history" + ,"hit points": "hit points" + ,"HP": "HP" + ,"insight fail checkbox":"insight fail checkbox" + ,"insight rank":"insight rank" + ,"insight roll":"insight roll" + ,"insight":"insight" + ,"injuries":"injuries" + ,"INT": "INT" + ,"intelligence distinguishing features": "intelligence distinguishing features" + ,"intelligence roll": "intelligence roll" + ,"intelligence score": "intelligence score" + ,"intelligence": "intelligence" + ,"kill radius input": "kill radius input" + ,"kill radius":"kill radius" + ,"law fail checkbox":"law fail checkbox" + ,"law rank":"law rank" + ,"law roll":"law roll" + ,"law":"law" + ,"lethality % input": "lethality % input" + ,"lethality %":"lethality %" + ,"lethality":"lethality" + ,"lethality (×2)":"lethality (×2)" + ,"luck":"Luck" + ,"Luck":"Luck" + ,"medicine fail checkbox":"medicine fail checkbox" + ,"medicine rank":"medicine rank" + ,"medicine roll":"medicine roll" + ,"medicine":"medicine" + ,"melee weapons fail checkbox":"melee weapons fail checkbox" + ,"melee weapons rank":"melee weapons rank" + ,"melee weapons roll":"melee weapons roll" + ,"melee weapons":"melee weapons" + ,"military science fail checkbox":"military science fail checkbox" + ,"military science name":"military science name" + ,"military science rank":"military science rank" + ,"military science roll":"military science roll" + ,"military science":"military science" + ,"motivations":"motivations" + ,"name": "name" + ,"nationality": "nationality" + ,"navigate fail checkbox":"navigate fail checkbox" + ,"navigate rank":"navigate rank" + ,"navigate roll":"navigate roll" + ,"navigate":"navigate" + ,"notes": "notes" + ,"npc": "NPC" + ,"occult fail checkbox":"occult fail checkbox" + ,"occult rank":"occult rank" + ,"occult roll":"occult roll" + ,"occult":"occult" + ,"off":"off" + ,"on": "on" + ,"other notes name": "other notes name" + ,"other notes": "other notes" + ,"other notes":"other notes" + ,"pc": "PC" + ,"permanent resources":"permanent resources" + ,"personal data": "personal data" + ,"persuade fail checkbox":"persuade fail checkbox" + ,"persuade rank":"persuade rank" + ,"persuade roll":"persuade roll" + ,"persuade":"persuade" + ,"pharmacy fail checkbox":"pharmacy fail checkbox" + ,"pharmacy rank":"pharmacy rank" + ,"pharmacy roll":"pharmacy roll" + ,"pharmacy":"pharmacy" + ,"pilot fail checkbox":"pilot fail checkbox" + ,"pilot name":"pilot name" + ,"pilot rank":"pilot rank" + ,"pilot roll":"pilot roll" + ,"pilot":"pilot" + ,"Please indicate why this agent was recruited and why the agent agreed to be recruited.":"Please indicate why this agent was recruited and why the agent agreed to be recruited." + ,"post apoc lore fail checkbox":"post apoc lore fail checkbox" + ,"post apoc lore name":"post apoc lore name" + ,"post apoc lore rank":"post apoc lore rank" + ,"post apoc lore roll":"post apoc lore roll" + ,"post apoc lore":"post apoc lore" + ,"POW": "POW" + ,"power distinguishing features": "power distinguishing features" + ,"power roll": "power roll" + ,"power score": "power score" + ,"power": "power" + ,"pris/worn/junk":"pris/worn/junk" + ,"pristine":"pristine" + ,"reassure fail checkbox":"reassure fail checkbox" + ,"reassure rank":"reassure rank" + ,"reassure roll":"reassure roll" + ,"reassure":"reassure" + ,"research fail checkbox":"research fail checkbox" + ,"research rank":"research rank" + ,"research roll":"research roll" + ,"research":"research" + ,"resource checks":"resource checks" + ,"resources at hand":"resources at hand" + ,"resources stowed":"resources stowed" + ,"resources in storage":"resources in storage" + ,"bonds and disorders":"bonds and disorders" + ,"rank": "skill %" + ,"recovery SAN": "recovery SAN" + ,"remarks": "remarks" + ,"ranged weapons fail checkbox":"ranged weapons fail checkbox" + ,"ranged weapons rank":"ranged weapons rank" + ,"ranged weapons roll":"ranged weapons roll" + ,"ranged weapons":"ranged weapons" + ,"resources":"resources" + ,"ride fail checkbox":"ride fail checkbox" + ,"ride rank":"ride rank" + ,"ride roll":"ride roll" + ,"ride":"ride" + ,"roll" : "roll" + ,"SAN":"SAN" + ,"SAN LOSS":"SAN LOSS" + ,"sanity points": "sanity points" + ,"scavenge fail checkbox":"scavenge fail checkbox" + ,"scavenge rank":"scavenge rank" + ,"scavenge roll":"scavenge roll" + ,"scavenge":"scavenge" + ,"science fail checkbox":"science fail checkbox" + ,"science name":"science name" + ,"science rank":"science rank" + ,"science roll":"science roll" + ,"science":"science" + ,"score": "score" + ,"search fail checkbox":"search fail checkbox" + ,"search rank":"search rank" + ,"search roll":"search roll" + ,"search":"search" + ,"sex": "sex" + ,"sheet settings toggle": "sheet settings toggle" + ,"sheet settings": "sheet settings" + ,"sheet type": "Sheet Type" + ,"Sheet Type": "Sheet Type" + ,"skill % input": "skill % input" + ,"skill %":"skill %" + ,"skill fail checkbox":"skill fail checkbox" + ,"specialization name": "specialization name" + ,"skill or stat used": "skill or stat used" + ,"skill rank": "skill rank" + ,"skill roll":"skill roll" + ,"skill": "name" + ,"skills":"skills" + ,"special training input": "special training input" + ,"statistical data": "statistical data" + ,"Statistics": "Statistics" + ,"stealth fail checkbox":"stealth fail checkbox" + ,"stealth rank":"stealth rank" + ,"stealth roll":"stealth roll" + ,"stealth":"stealth" + ,"STR": "STR" + ,"strength distinguishing features": "strength distinguishing features" + ,"strength roll": "strength roll" + ,"strength score": "strength score" + ,"strength": "strength" + ,"surgery fail checkbox":"surgery fail checkbox" + ,"surgery rank":"surgery rank" + ,"surgery roll":"surgery roll" + ,"surgery":"surgery" + ,"survival fail checkbox": "survival fail checkbox" + ,"survival rank":"survival rank" + ,"survival roll":"survival roll" + ,"survival":"survival" + ,"swim fail checkbox":"swim fail checkbox" + ,"swim rank":"swim rank" + ,"swim roll":"swim roll" + ,"swim":"swim" + ,"technology use fail checkbox":"technology use fail checkbox" + ,"technology use rank":"technology use rank" + ,"technology use roll":"technology use roll" + ,"technology use":"technology use" + ,"top secret//orcon//special access required delta green agent documenation sheet":"top secret//orcon//special access required delta green agent documenation sheet " + ,"unarmed combat fail checkbox":"unarmed combat fail checkbox" + ,"unarmed combat rank":"unarmed combat rank" + ,"unarmed combat roll":"unarmed combat roll" + ,"unarmed combat":"unarmed combat" + ,"united states form":"united states form" + ,"unnatural fail checkbox":"unnatural fail checkbox" + ,"unnatural rank":"unnatural rank" + ,"unnatural roll":"unnatural roll" + ,"unnatural":"unnatural" + ,"uses per game":"uses per game" + ,"violence 1": "violence 1" + ,"violence 2": "violence 2" + ,"violence 3": "violence 3" + ,"violence": "violence" + ,"weapons input": "weapons input" + ,"weapons":"weapons" + ,"whisper rolls to gm": "whisper rolls to gm" + ,"willpower points":"willpower points" + ,"WP":"WP" + ,"x5": "x5" + ,"yes: only Medicine, Surgery, or long-term rest can help further.":"yes: only Medicine, Surgery, or long-term rest can help further.", + "-": "-" +} diff --git a/Aces and Eights (Shattered Frontier)/README.md b/Aces and Eights (Shattered Frontier)/README.md new file mode 100644 index 0000000000..cbb46d47ca --- /dev/null +++ b/Aces and Eights (Shattered Frontier)/README.md @@ -0,0 +1 @@ +# Aces-and-Eights-Character-Sheet diff --git a/Aces and Eights (Shattered Frontier)/damage_rolltemplate_border.png b/Aces and Eights (Shattered Frontier)/damage_rolltemplate_border.png new file mode 100644 index 0000000000..637650c68a Binary files /dev/null and b/Aces and Eights (Shattered Frontier)/damage_rolltemplate_border.png differ diff --git a/Aces and Eights (Shattered Frontier)/logo.jpg b/Aces and Eights (Shattered Frontier)/logo.jpg new file mode 100644 index 0000000000..a290e5f8ec Binary files /dev/null and b/Aces and Eights (Shattered Frontier)/logo.jpg differ diff --git a/Aces and Eights (Shattered Frontier)/preview.PNG b/Aces and Eights (Shattered Frontier)/preview.PNG new file mode 100644 index 0000000000..ae4191b1c0 Binary files /dev/null and b/Aces and Eights (Shattered Frontier)/preview.PNG differ diff --git a/Aces and Eights (Shattered Frontier)/roll_border.png b/Aces and Eights (Shattered Frontier)/roll_border.png new file mode 100644 index 0000000000..dfa2b56836 Binary files /dev/null and b/Aces and Eights (Shattered Frontier)/roll_border.png differ diff --git a/Aces and Eights (Shattered Frontier)/sheet.html b/Aces and Eights (Shattered Frontier)/sheet.html new file mode 100644 index 0000000000..7d027f9b60 --- /dev/null +++ b/Aces and Eights (Shattered Frontier)/sheet.html @@ -0,0 +1,798 @@ + + + + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ + + + +
+ + + +
+
+
+

ABILITIES

+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ +
+ +
+ + + +
+
+ + +
+ + +
+ + +
+
+ + + + + + +
+ +
+ + + +
+ +
+
+ + + + +
+
+
+ + +
+ + +
+
+ +
+ +
+ + +
+
+
+
+
+
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ + +
+
+
+
+

TALENTS

+
+ + + + + + +
+
+
+

QUIRKS & FLAWS

+
+ + + + + + +
+
+
+

PERSONAL GOALS

+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+

PROFESSION PATHS

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+

PERSONALITY

+ +
+ +
+

BACKSTORY/FAMILY

+ +
+ +
+

WOUNDS

+
+
+ + + + + +
+
+
+ +
+

OTHER NOTES

+ +
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+

STATS

+

NOTES/TACK

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+
+ + + +
+
+ {{roll}} +
+ +
+ {{mastery}} +
+ +
+ Roll +
+ +
+ Mastery +
+ +
+ {{name}} +
+
+
+ + +
+
+ {{roll}} +
+ +
+ {{damage}} +
+ +
+ Roll +
+ +
+ Damage +
+ +
+ {{weapon}} +
+
+
+ + +
+ {{damage}} +
+ +
+ Damage +
+ +
+ {{weapon}} +
+
+ + \ No newline at end of file diff --git a/Aces and Eights (Shattered Frontier)/sheet.json b/Aces and Eights (Shattered Frontier)/sheet.json new file mode 100644 index 0000000000..019a05c373 --- /dev/null +++ b/Aces and Eights (Shattered Frontier)/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "sheet.html", + "css": "style.css", + "authors": "Lela Corson", + "roll20userid": "2784707", + "preview": "preview.PNG", + "instructions": "This is a character sheet for the game Aces and Eights (published 2007). Use the tabs underneath the top bio to navigate to the weapons, horses, and other info sections." +} \ No newline at end of file diff --git a/Aces and Eights (Shattered Frontier)/style.css b/Aces and Eights (Shattered Frontier)/style.css new file mode 100644 index 0000000000..c5f656b85e --- /dev/null +++ b/Aces and Eights (Shattered Frontier)/style.css @@ -0,0 +1,614 @@ +@import url('https://fonts.googleapis.com/css?family=Playfair+Display|Rye&display=swap'); + +input, select, textarea{ + color: #000000; +} + +input, label, textarea{ + font-family: "Playfair Display"; +} + +input{ + border-top: 0px; + border-right: 0px; + border-left: 0px; +} + +/*Tabs*/ +.sheet-character, +.sheet-weapons, +.sheet-bio2, +.sheet-horses{ + display: none; +} + +.sheet-tabstoggle[value="character"] ~ div.sheet-character, +.sheet-tabstoggle[value="weapons"] ~ div.sheet-weapons, +.sheet-tabstoggle[value="bio2"] ~ div.sheet-bio2, +.sheet-tabstoggle[value="horses"] ~ div.sheet-horses{ + display: block; +} + +/*Bio*/ +.sheet-bio label { + display: inline; + font-size: 17px; +} + +.sheet-bio input{ + display: inline; + font-weight: bold; + font-size: 15px; + height: 20px; +} + +.sheet-bio{ + display:flex; + flex-wrap: wrap; +} + +.sheet-bio > div{ + margin-right: 10px; + margin-bottom: 5px; +} + +.sheet-age input, .sheet-height input, .sheet-BPs input{ + width: 40px; +} + +.sheet-name input{ + width: auto; +} + +.sheet-handedness input{ + width: 90px; +} + +.sheet-gender input{ + width: 120px; +} + +.sheet-weight input{ + width: 50px; +} + +.sheet-race input, .sheet-nationality input, .sheet-profession input{ + width: 145px; +} + +/*Logo*/ +img{ + float: right; + width: 40%; + margin-right: 20px; +} + +hr { + display: block; + border-top: 2px solid #000000; + margin-top: 0px; + margin-bottom: 10px; + padding: 0; +} + +.charsheet{ + background: white; +} + +h1{ + font-family: "Rye"; + padding:0px; + margin: 0px; + text-align: center; +} + +.sheet-grid_header{ + font-family: "Rye"; + font-size: 24px; + text-align: center; +} + +.sheet-grid{ + display: grid; + grid-template-columns: 256px 180px 400px; + grid-template-rows: 40px 50px 80px 95px 195px; + column-gap: 0px; +} + +.sheet-abilities_grid{ + grid-row: 2/ span 4; + grid-col: 1; + display: grid; + grid-template-columns: 70px 60px 116px; + grid-template-rows: 40px 40px 40px 40px 40px 40px 40px 40px 40px; + column-gap: 3px; + row-gap: 5px; + justify-items: center; + align-items:center; +} + +.sheet-ability_label_large{ + font-size: 22px; + font-family: "Rye"; + align-self: end; + padding: 2px; + margin-top: 10px; + justify-self: center; +} + +.sheet-abilities_grid label + input{ + height: 20px; + width: 116px; +} + +.sheet-abilities_grid input{ + height: 30px; + width: 50px !important; + align-self: start; + text-align: center; + font-size: 20px; +} + +.sheet-small_label{ + font-size: 13px; + margin-bottom: 1px; + margin-top: 0px; + padding: 0px; + display: block; + justify-self: center; + text-align: center; +} + +.sheet-mod_grid{ + display: grid; + grid-template-columns: 116px; + grid-template-rows: 20px 30px; + justify-items: center; +} + +.sheet-fame_category{ + font-size: 13px; + width: 80px; + height: 36px; + resize: none; + text-align: center; +} + +.sheet-acc_speed{ + display: flex; + flex-wrap: wrap; + align-items: center; +} + +.sheet-acc_speed label{ + margin-top: 10px; + display: inline; +} + +.sheet-acc_speed input{ + font-size: 20px; + width: 50px; + margin-right: 10px; + margin-bottom: 10px; + +} + +.sheet-speed_mods_hidden{ + display:none; +} + +.sheet-HP_header label{ + margin-top: 7px; +} + +.sheet-hp_dash{ + font-size: 40px; + display: inline; +} + +.sheet-HP_grid input{ + width: 60px !important; + height: 33px; + text-align: center; + font-size: 28px; + margin-bottom: 20px; +} + +.sheet-current_hp{ + margin-left: 9px; + margin-right: 7px; +} + +.sheet-HP_grid{ + grid-row: 1 / span 2; + grid-col: 2; +} + +.sheet-money_grid input{ + font-size: 21px; + width: 180px; + text-align: center; +} + +.sheet-money_grid{ + grid-row: 3; + grid-col: 2; +} + +.sheet-skills_grid{ + grid-col: 3; + grid-row: 1 / span 5; + display: grid; + grid-template-columns: 30px auto; + grid-template-rows: 40px 160px; + column-gap: 10px; +} + +.sheet-skills_text_grid{ + display: grid; + grid-template-columns: 182px 50px auto; + grid-template-rows: 30px; + column-gap: 15px; +} + +.sheet-skills_text_grid label{ + font-size: 17px; +} + +.sheet-skills_header{ + grid-col: 1; + grid-row: span 2; + margin-left: 10px; +} + +.sheet-skills_header label{ + font-family: "Rye"; + font-size: 24px; + display: inline; +} + +.sheet-skills_grid input{ + font-size: 15px; +} + +.sheet-skill_name{ + width: 195px; +} + +.sheet-skill_tallies{ + width: 50px !important; +} + +.sheet-skill_mastery{ + width: 70px; +} + +.sheet-items_grid{ + grid-col: 2; + grid-row: 4 / span 2; +} + +.sheet-items_grid textarea{ + resize: none; + height: 255px; + width: 180px; +} + +.sheet-weapons{ + grid-row: 1; + grid-col: 1; + margin-top: 10px; +} + +.sheet-weapons_bio{ + display: flex; + flex-wrap: wrap; +} + +.sheet-weapons_bio input{ + margin-bottom: 5px; +} + +.sheet-big_box{ + margin-top: 10px; + width: 430px; +} + +textarea{ + font-size: 15px; +} + +.sheet-repeating_weapons{ + margin-bottom: 10px; +} + +.sheet-weapons_bio label{ + font-size: 17px; +} + +.sheet-weapons_bio input{ + margin-right: 15px; + font-size: 15px; +} + +.sheet-damage_per_shot{ + width: 60px; +} + +.sheet-weapons_range{ + display: grid; + grid-template-columns: 80px 40px 40px 40px 40px 40px 40px 40px 40px 40px 40px 40px 40px 40px; + grid-template-rows: 55px 55px; + grid-col: 1; + grid-row: 3; + margin-top: 10px; + column-gap: 15px; + margin-bottom: 10px; +} + +.sheet-range_label{ + grid-col: 1; + grid-row: 1; +} + +.sheet-range_label label{ + font-size: 20px; + font-weight: bold; +} + +.sheet-weapons_range input{ + width: 40px; + font-size: 15px; + text-align: center; +} + +.sheet-weapons_range label{ + text-align: center; + font-size: 17px; +} + +.sheet-weapons_button{ + grid-col: 1; + grid-row: 2; + height: 20px; +} + +.sheet-reload_speed{ + width: 150px; +} + +button{ + font-family: "Rye"; + font-size: 15px; + border-radius: 5px; + height: 20px; + margin-bottom: 5px; +} + +button.sheet-weapons_button:before{ + content: "" !important; +} + +.sheet-bio2_grid{ + display: grid; + grid-template-columns: 220px 130px 110px 370px; + grid-template-rows: 200px 200px 300px auto; +} + +.sheet-bio2_grid > div{ + border: 1px solid black; +} + +.sheet-bio2_grid input{ + height: 25px; + font-size: 16px; + margin-left: 5px; +} + +.sheet-bio2_quirks input{ + width: 230px; +} + +.sheet-bio2_quirks{ + grid-column: 2 / span 2; +} + +.sheet-bio2_personal_goals{ + grid-column: 4; + grid-row: 1 / span 2; +} + +.sheet-flex{ + display: flex; + flex-wrap: flex; +} + +.sheet-goal{ + width: 310px; +} + +.sheet-goal_BPs{ + width: 45px; + text-align: center; +} + +.sheet-bio2_profession{ + grid-column: 1 / span 3; +} + +.sheet-prof{ + width: 390px; +} + +.sheet-prof_BPs{ + width: 50px; +} + +.sheet-personality{ + grid-column: 1 / span 2; +} + +.sheet-personality_text{ + width: 320px; + height: 250px; + margin-left: 10px; + resize: none; +} + +.sheet-backstory{ + grid-column: 3 / span 2; +} + +.sheet-backstory_text{ + width: 450px; + height:250px; + margin-left: 10px; + resize: none; +} + +.sheet-wounds_points{ + width: 60px; +} + +.sheet-wounds_days{ + width: 60px; +} + +.sheet-wounds label{ + width: auto; +} + +.sheet-notes_text{ + width: 340px; + height: 200px; + resize: none; + margin-left: 10px; +} + +.sheet-notes{ + height: 250px; +} + +.sheet-wounds{ + grid-column: 1 / span 3; +} + +.sheet-breed input, .sheet-personality input{ + width: 130px; +} + +.sheet-markings input{ + width: 400px; +} + +.sheet-horse_gender input{ + width: 70px; +} + +.sheet-horse_height input{ + width: 80px; +} + +.sheet-horse_HP input{ + width: 30px; + margin-right: 10px; + font-size: 20px; +} + +.sheet-horse_stats h1{ + text-align: left; + margin-left: 130px; + display: inline; + margin-right: 130px; +} + +.sheet-horse_stats_grid{ + display: flex; + flex-wrap: wrap; + grid-col: 1; + grid-row: 1; +} + +.sheet-horse_stats_grid input, .sheet-horse_stats_grid label{ + display: inline; + width: auto; +} + +.sheet-horse_stats_grid label{ + width: 90px; + text-align: center; +} + +.sheet-horse_stats_grid input{ + width: 50px; +} + +.sheet-horse_grid{ + display: grid; + grid-template-columns: 450px 285px; + grid-template-rows: 120px; +} + +.sheet-horse_tack{ + height: 110px; + resize: none; +} + +.sheet-rolltemplate-skills, .sheet-rolltemplate-attack{ + background: url(https://github.com/lelajcorson/Aces-and-Eights-Character-Sheet/blob/skills-rolltemplate/roll_border.png?raw=true) top left; + background-size: 195px 104px; + background-repeat: no-repeat; + font-size: 15px; + height: 104px; + width: 195px; + text-align: center; + font-family: "Playfair Display"; +} + +.sheet-rolltemplate-skills .sheet-roll_grid, .sheet-rolltemplate-attack .sheet-roll_grid, .sheet-rolltemplate-damage .sheet-roll_grid{ + display: grid; + grid-template-columns: 92px 92px; + grid-template-rows: 42px 20px 26px; + margin-left: 5px; + padding-top: 10px; +} + +.sheet-rolltemplate-skills .sheet-roll_numbers span, .sheet-rolltemplate-attack .sheet-roll_numbers span, .sheet-rolltemplate-damage .sheet-roll_numbers span{ + background-color: rgba(255, 255, 255, 0); + border: 2px solid transparent !important; + font-size: 30px; + line-height: 1.3; + text-align: center; + font-weight: bold; +} + +.sheet-rolltemplate-skills .sheet-roll_name, .sheet-rolltemplate-attack .sheet-roll_name{ + grid-column: 1 / span 2; +} + +.sheet-rolltemplate-damage{ + background: url(https://github.com/lelajcorson/Aces-and-Eights-Character-Sheet/blob/skills-rolltemplate/damage_rolltemplate_border.png?raw=true); + background-size: 195px 104px; + background-repeat: no-repeat; + font-size: 15px; + height: 104px; + width: 195px; + text-align: center; + font-family: "Playfair Display"; +} + +.sheet-rolltemplate-damage .sheet-roll_numbers{ + padding-top: 10px; +} + +.sheet-rolltemplate-damage .sheet-roll_name span{ + line-height: 2; +} + +.sheet-rolltemplate-damage .sheet-roll_numbers span .inlinerollresult.fullfail { + color: red; +} + +.sheet-rolltemplate-damage .sheet-roll_numbers span .inlinerollresult.fullcrit { + color: green; +} \ No newline at end of file diff --git a/Arcanas&Ancestrais/arcanas.css b/Arcanas&Ancestrais/arcanas.css new file mode 100644 index 0000000000..c6c784cb13 --- /dev/null +++ b/Arcanas&Ancestrais/arcanas.css @@ -0,0 +1,592 @@ +@import url('https://fonts.googleapis.com/css?family=Oldenburg|New+Rocker&display=swap'); + +.sheet-abafrente, +.sheet-abaverso { + display: none; +} + +/* show the selected tab */ +.sheet-typetoggle[value="abafrente"] ~ div.sheet-abafrente, +.sheet-typetoggle[value="abaverso"] ~ div.sheet-abaverso { + display: block; +} + +.sheet-botao-selecao { + font-family: 'New Rocker', cursive; + text-align:center; + font-size:1.3em; + border-radius: 5px solid black; + background-color: white; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + -webkit-border-radius: 5px; + color: black; + background-color:white; +} + +.sheet-main { + width: 830px; + height: 750px; + font-family: 'Oldenburg', cursive; +} + +.sheet-tab { + margin-bottom: 15px; + margin-top: 2px; +} + +/* GRID setup */ +.sheet-dados-frente { + display: grid !important; + width: 830px; + height: 750px; + font-family: 'Oldenburg', cursive; + grid-gap: 0px; + grid-template-columns: 165px 260px 405px; + grid-template-rows: 70px 52px 90px 207px; + grid-template-areas:"header header backstory " + "stats combat backstory " + "stats combat proficiencies" + "stats combat abilities " + "weapons weapons abilities "; +} + +.sheet-dados-verso { + display: grid !important; + width: 830px; + height: 750px; + font-family: 'Oldenburg', cursive; + grid-gap: 0px; + grid-template-columns: 55% 45%; + grid-template-rows: 80px 670px; + grid-template-areas:"rewards notes" + "equipaments notes "; +} + +/* GRID sections */ +.sheet-rewards { + grid-area: rewards; +} + +.sheet-rewards input { + width: 5.2em !important; +} +.sheet-equipaments { + grid-area: equipaments; +} + +.sheet-notes { + grid-area: notes; + max-width: 90%; + width: 90%; + margin-left: 15px; +} + +.sheet-header { + grid-area: header; +} + +.sheet-main label { + font-family: 'New Rocker', cursive; +} + +.sheet-header input { + max-width: 120px; + margin-top: -5px; +} + +.sheet-header input { + border-bottom: 1px solid black; + border-top: 0px; + border-left: 0px; + border-right: 0px; + background: none; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + -webkit-border-radius: 0px; + border-radius: 0px; + height: 18px; +} + +.sheet-weapons { + grid-area: weapons; + margin-top: 125px; +} + +.sheet-stats { + grid-area: stats; +} + +.sheet-stats label { + font-size: 1.7em; + font-family: 'New Rocker', cursive; +} + +.sheet-stats-atributo { + max-width: 40px; + font-size: 1.3em; +} + +.sheet-stats-mod { + max-width: 25px; +} + +.sheet-stats-content { + display: grid; + grid-gap: 0px; + grid-template-columns: 30% 30% 20% 20%; + grid-template-rows: 32px 32px 32px 32px 32px 32px; + grid-template-areas:"for for-value for-mod for-roll" + "des des-value des-mod des-roll" + "con con-value con-mod con-roll" + "int int-value int-mod int-roll" + "sab sab-value sab-mod sab-roll" + "car car-value car-mod car-roll"; +} + +.sheet-stats-for { + grid-area: for; +} + +.sheet-stats-for-value { + grid-area: for-value; +} + +.sheet-stats-for-mod { + grid-area: for-mod; +} + +.sheet-stats-for-roll { + grid-area: for-roll; +} + +.sheet-stats-des { + grid-area: des; +} + +.sheet-stats-des-value { + grid-area: des-value; +} + +.sheet-stats-des-mod { + grid-area: des-mod; +} + +.sheet-stats-des-roll { + grid-area: des-roll; +} + +.sheet-stats-con { + grid-area: con; +} + +.sheet-stats-con-value { + grid-area: con-value; +} + +.sheet-stats-con-mod { + grid-area: con-mod; +} + +.sheet-stats-con-roll { + grid-area: con-roll; +} + +.sheet-stats-int { + grid-area: int; +} + +.sheet-stats-int-value { + grid-area: int-value; +} + +.sheet-stats-int-mod { + grid-area: int-mod; +} + +.sheet-stats-int-roll { + grid-area: int-roll; +} + +.sheet-stats-sab { + grid-area: sab; +} + +.sheet-stats-sab-value { + grid-area: sab-value; +} + +.sheet-stats-sab-mod { + grid-area: sab-mod; +} + +.sheet-stats-sab-roll { + grid-area: sab-roll; +} + +.sheet-stats-car { + grid-area: car; +} + +.sheet-stats-car-value { + grid-area: car-value; +} + +.sheet-stats-car-mod { + grid-area: car-mod; +} + +.sheet-stats-car-roll { + grid-area: car-roll; +} + +/* Chrome, Safari, Edge, Opera */ +.sheet-abafrente input::-webkit-outer-spin-button, +.sheet-abafrente input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +.sheet-abafrente input[type=number] { + -moz-appearance: textfield; +} + +.sheet-combat { + grid-area: combat; +} + +.sheet-combat label { + font-family: 'New Rocker', cursive; +} + +.sheet-combat textarea { + font-size:0.7em; +} + +.sheet-proficiencies { + grid-area: proficiencies; + margin-top:110px; + margin-left: 10px; +} + +.sheet-proficiencies textarea { + max-width: 100%; + width: 100%; + max-height: 50px !important; + margin-top: 5px; + height:50px !important; + font-size:0.7em; +} + +.sheet-backstory { + grid-area: backstory; + margin-left: 10px; +} + +.sheet-backstory textarea { + max-width: 100%; + width: 100%; + max-height: 50px !important; + margin-top: 5px; + height:50px !important; + font-size:0.7em; +} + +.sheet-backstory label { + font-family: 'New Rocker', cursive; +} + +.sheet-backstory input { + width: 98%; +} + +.sheet-backstory-content { + display: grid; + grid-gap: 0px; + grid-template-columns: 20% 80%; + grid-template-rows: 25% 25% 25% 25%; + grid-template-areas:"familia familia-input " + "obsessao obsessao-input" + "amigo amigo-input " + "inimigo inimigo-input "; +} + +.sheet-backstory-familia { + grid-area: familia; +} + +.sheet-backstory-familia-input { + grid-area: familia-input; +} + +.sheet-backstory-obsessao { + grid-area: obsessao; +} + +.sheet-backstory-obsessao-input { + grid-area: obsessao-input; +} + +.sheet-backstory-amigo { + grid-area: amigo; +} + +.sheet-backstory-amigo-input { + grid-area: amigo-input; +} + +.sheet-backstory-inimigo { + grid-area: inimigo; +} + +.sheet-backstory-inimigo-input { + grid-area: inimigo-input; +} + +.sheet-abilities { + grid-area: abilities; + margin-top:125px; + margin-left: 10px; +} + +.sheet-abilities-content { + display: grid; + grid-gap: 0px; + grid-template-columns: 5% 95%; + grid-template-rows: 10% 10% 10% 10% 10% 10% 10% 10% 10% 10%; + grid-template-areas:"habilidade1-label habilidade1-value " + "habilidade2-label habilidade2-value " + "habilidade3-label habilidade3-value " + "habilidade4-label habilidade4-value " + "habilidade5-label habilidade5-value " + "habilidade6-label habilidade6-value " + "habilidade7-label habilidade7-value " + "habilidade8-label habilidade8-value " + "habilidade9-label habilidade9-value " + "habilidade10-label habilidade10-value "; +} + +.sheet-habilidade1-label { + grid-area: habilidade1-label; +} + +.sheet-habilidade1-value { + grid-area: habilidade1-value; +} + +.sheet-habilidade2-label { + grid-area: habilidade2-label; +} + +.sheet-habilidade3-value { + grid-area: habilidade3-value; +} + +.sheet-habilidade4-label { + grid-area: habilidade4-label; +} + +.sheet-habilidade4-value { + grid-area: habilidade4-value; +} + +.sheet-habilidade5-label { + grid-area: habilidade5-label; +} + +.sheet-habilidade5-value { + grid-area: habilidade5-value; +} + +.sheet-habilidade6-label { + grid-area: habilidade6-label; +} + +.sheet-habilidade6-value { + grid-area: habilidade6-value; +} + +.sheet-habilidade6-value { + grid-area: habilidade6-value; +} + +.sheet-habilidade7-label { + grid-area: habilidade7-label; +} + +.sheet-habilidade7-value { + grid-area: habilidade7-value; +} + +.sheet-habilidade8-label { + grid-area: habilidade8-label; +} + +.sheet-habilidade8-value { + grid-area: habilidade8-value; +} + +.sheet-habilidade9-label { + grid-area: habilidade9-label; +} + +.sheet-habilidade9-value { + grid-area: habilidade9-value; +} + +.sheet-habilidade10-label { + grid-area: habilidade10-label; +} + +.sheet-habilidade10-value { + grid-area: habilidade10-value; +} + +.sheet-abilities-content input { + max-width: 100%; + width: 100%; +} + +.sheet-abilities-content select { + max-width: 87%; + width: 87%; + margin-bottom: 0px; +} + +.sheet-up_atributo { + font-family: 'Oldenburg', cursive !important; + font-size: 1em; + margin-bottom: 0px; +} + +.sheet-rolltemplate-ataque, +.sheet-rolltemplate-atributo, +.sheet-rolltemplate-dado-uso { + box-sizing:border-box; + width:100%; + position:relative; + background-color:white; + overflow:hidden; + border-radius: 5px solid purple; + background-color: white; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + -webkit-border-radius: 5px; +} +.sheet-rolltemplate-ataque .sheet-rollbox-container, +.sheet-rolltemplate-atributo .sheet-rollbox-container, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container { + width:100%; + position:relative; + box-sizing:border-box; + border:2px solid black +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox{ + padding:5px; + position:relative; + width:100%; + min-height:40px; + display:grid; + box-sizing:border-box; + grid-template-columns:1fr 1px 1fr; + column-gap:5px; + row-gap:5px +} +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox{ + padding:5px; + width:100%; + box-sizing:border-box; + text-align:center; +} +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox-desempenho, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox-desempenho { + padding:5px; + font-family: 'Oldenburg', cursive; + width:100%; + box-sizing:border-box; + margin-bottom:3px; +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox .sheet-roll-title, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox .sheet-roll-title, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox .sheet-roll-title, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox-desempenho .sheet-roll-title{ + width:100%; + grid-column:1/4; + min-height:16px; + display:flex; + align-items:center; + justify-content:center; + text-align:center; + text-transform:uppercase +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox .sheet-roll-label, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox .sheet-roll-label, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox .sheet-roll-label, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox-desempenho .sheet-roll-label{ + margin-top:5px; + width:100%; + display:flex; + align-items:center; + justify-content:center; + text-align:center; + font-weight:normal +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox .sheet-roll, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox .sheet-roll, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox .sheet-roll, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox-desempenho .sheet-roll{ + padding-top:5px; + width:100%; + display:flex; + align-items:center; + justify-content:center; + text-align:center +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox .sheet-roll span, +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox .sheet-roll span, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox .sheet-roll span{ + margin:0 auto; + padding:8px; + font-size:18px +} +.sheet-rolltemplate-atributo .sheet-rollbox-container .sheet-rollbox-desempenho .sheet-roll span, +.sheet-rolltemplate-dado-uso .sheet-rollbox-container .sheet-rollbox-desempenho .sheet-roll span{ + margin-top:-9px; + padding:8px; + font-size:18px +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox .sheet-divisor{ + display:flex; + align-items:center; + justify-content:center; + text-align:center +} +.sheet-rolltemplate-ataque .sheet-rollbox-container .sheet-rollbox .sheet-divisor span{ + width:1px; + height:70%; + background-color:green; +} + +.sheet-rolltemplate-ataque .sheet-header, +.sheet-rolltemplate-atributo .sheet-header, +.sheet-rolltemplate-dado-uso .sheet-header{ + width: 100%; + background-color: green; + display: inline-block; + text-align: center; + color: white; + position: relative; + font-size: 1.3em; +} + +.sheet-rolltemplate-ataque .sheet-left, +.sheet-rolltemplate-atributo .sheet-left, +.sheet-rolltemplate-dado-uso .sheet-left{ + margin-left: 5px; +} + diff --git a/Arcanas&Ancestrais/arcanas.html b/Arcanas&Ancestrais/arcanas.html new file mode 100644 index 0000000000..a2b921db9a --- /dev/null +++ b/Arcanas&Ancestrais/arcanas.html @@ -0,0 +1,577 @@ +
+ +
+ + +
+ + +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + + +
+ + + +

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + +
+
+ Teste de {{atributo}} +
+
+
+
+
+ {{nome}} rolou +
+
+
+
+
+
+ {{desempenho}} +
+
+
+
+
+ + +
+
+ {{nome}} +
+
+
+
+
+ {{ataque}} +
+
+ Ataque +
+
+
+
+
+ {{dano}} +
+
+ Dano +
+
+
+
+
+ + +
+
+ {{nome}} +
+
+
+
+
+ {{ataque}} +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/Arcanas&Ancestrais/arcanas.png b/Arcanas&Ancestrais/arcanas.png new file mode 100644 index 0000000000..69de595b98 Binary files /dev/null and b/Arcanas&Ancestrais/arcanas.png differ diff --git a/Arcanas&Ancestrais/sheet.json b/Arcanas&Ancestrais/sheet.json new file mode 100644 index 0000000000..446899a85c --- /dev/null +++ b/Arcanas&Ancestrais/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "arcanas.html", + "css": "arcanas.css", + "authors": "David Dornelles, Cleison Ferreira e Julia Yamamoto", + "roll20userid": "2623485", + "preview": "arcanas.png", + "instructions": "" +} \ No newline at end of file diff --git a/Aria/Aria.css b/Aria/Aria.css new file mode 100644 index 0000000000..043d340085 --- /dev/null +++ b/Aria/Aria.css @@ -0,0 +1,842 @@ +@font-face { + font-family: 'Kalam'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Kalam'), local('Kalam-Regular'), url(https://fonts.gstatic.com/s/kalam/v11/YA9dr0Wd4kDdMthfOCfzsw.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Piazzolla'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/piazzolla/v2/N0b52SlTPu5rIkWIZjVKKtYtfxYqZ4RJBFzFfYUjkSDdlqZgy7I_wUL13gA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +body { +} + +input { + font-family: 'Kalam', cursive; + font-size: 18px; + padding: 0px 5px; + color: #307187; + background-color: rgba(255, 255, 255, .5); + border-color: #a69c73; +} + +textarea { + font-family: 'Kalam', cursive; + font-size: 18px; + color: #307187; + background-color: rgba(255, 255, 255, .5); + border-color: #a69c73; + resize: none; +} + +select { + background-color: rgba(255, 255, 255, .5); + border-color: #a69c73; + width: auto; +} + +button { + position: relative; + background-color: rgba(255, 255, 255, .5) !important; + background-image: none !important; + border: 1px solid #a69c73 !important; + border-radius: 0px !important; + padding: 5px 5px !important; +} + +.sheet-btn-min { + width: 15px; + height: 15px; + top: -2px; +} + +h3 { + margin-top: 10px; + margin-bottom: 5px; +} + +.sheet-hr_opt { + margin-top: 5px; + margin-bottom: 10px; + border-top-color: #a69c73; + width: calc(100% - 20px); +} + +.sheet-tabstoggle[value="1"] ~ div.sheet-options { + display: block; +} + +.sheet-tabstoggle[value="1"] ~ button.sheet-l_options { + background: rgba(0, 0, 0, 0) url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Aria/images/close.png) no-repeat center center !important; + background-size: 100% 100% !important; +} + +.sheet-co-comp1-hi[value="1"] ~ div.sheet-co-comp1-div { + display: block; +} + +.sheet-co-comp2-hi[value="1"] ~ div.sheet-co-comp2-div { + display: block; +} + +.sheet-co-comp3-hi[value="1"] ~ div.sheet-co-comp3-div { + display: block; +} + +.sheet-co-comp1-div { + position: absolute; + top: 0px; + left: 0px; + bottom: 0px; + display: none; + text-align: center; + color: #ffffff; + z-index: 500; + width: calc(100% - 10px); + height: calc(100% - 10px); + padding: 5px; + background: rgba(0, 0, 0, 0.80); +} + +.sheet-co-comp2-div { + position: absolute; + top: 0px; + left: 0px; + bottom: 0px; + display: none; + text-align: center; + color: #ffffff; + z-index: 500; + width: calc(100% - 10px); + height: calc(100% - 10px); + padding: 5px; + background: rgba(0, 0, 0, 0.80); +} + +.sheet-co-comp3-div { + position: absolute; + top: 0px; + left: 0px; + bottom: 0px; + display: none; + text-align: center; + color: #ffffff; + z-index: 500; + width: calc(100% - 10px); + height: calc(100% - 10px); + padding: 5px; + background: rgba(0, 0, 0, 0.80); +} + +.sheet-l_options { + position: absolute; + background: rgba(0, 0, 0, 0) url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Aria/images/options.png) no-repeat center center !important; + background-size: 100% 100% !important; + z-index: 100; + top: 2px; + right: 1px; + height: 10px; + width: 10px; + border: none !important; + filter: brightness(0.8); +} + +.sheet-l_options:hover { + filter: brightness(0.4); +} + +.sheet-options { + position: relative; + display: none; + z-index: 50; + width: calc(100% - 10px); + height: auto; + padding: 5px; + background: rgba(245, 245, 245, 1); + border: 1px solid #201f22; +} + +.sheet-fiche { + height: 1380px; + position: absolute; + display: block; + width: 100%; + background: #fcf8f2 url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Aria/images/background.jpg) no-repeat center center; + background-size: 100% 100%; + border: 1px solid #a69c73; +} + +.sheet-body { + position: relative; + font-family: 'Piazzolla', serif; + max-width: 1250px; + min-width: 675px; + margin: 0; + padding: 0; + bottom: 0px; + left: 0px; + right: 0px; + color: #201f22; +} + +.sheet-titre { + text-transform: uppercase; + font-size: 18px; +} + +.sheet-av-texte { + float: left; + width: 25%; + line-height: 25px; + overflow: hidden; +} + +.sheet-av-input-texte { + float: left; + width: 75%; + overflow: hidden; +} + +.sheet-ca-button { + float: left; + width: 32px; + height: 29px; + line-height: 25px; +} + +.sheet-ca-texte { + float: left; + width: 33%; + line-height: 25px; + overflow: hidden; +} + +.sheet-ca-input-texte { + float: left; + width: 50px; + overflow: hidden; + text-align: center; +} + +.sheet-vi-button { + position: relative; + top: 30px; + width: 30px; + height: 29px; + line-height: 25px; +} + +.sheet-vi-input-texte { + position: relative; + width: calc(100% - 110px); + top: 0px; + left: 32px; + overflow: hidden; +} + +.sheet-vi-input-texte-degats { + position: absolute; + float: right; + width: 75px; + height: 75px !important; + top: 0px; + right: 0px; + border-radius: 37px; + overflow: hidden; + text-align: center; + font-size: 20px; + padding: 0px; +} + +.sheet-vi-texte1 { + position: absolute; + float: left; + overflow: hidden; + top: 58px; + left: 30px; +} + +.sheet-vi-texte2 { + position: absolute; + float: left; + overflow: hidden; + top: 58px; + left: calc(100% - 106px); +} + +.sheet-sa-input-texte { + width: 75px; + height: 75px !important; + border-radius: 37px; + overflow: hidden; + text-align: center; + font-size: 25px; +} + +.sheet-sa-texte { + overflow: hidden; + text-align: center; +} + +.sheet-rp-texte { + line-height: 12px; +} + +.sheet-rp-input-texte { + position: relative; + height: 50px; + font-size: 15px; + top: 5px; +} + +.sheet-comp { + position: relative; + width: 100%; + height: 1px; + margin-top: 28px; +} + +.sheet-co-button { + position: absolute; + top: -4px; + width: 30px; + height: 29px; + line-height: 25px; +} + +.sheet-co-nom { + position: absolute; + top: 0px; + left: 32px; + font-size: 12px; +} + +.sheet-co-lien { + position: absolute; + top: 0px; + right: 70px; + width: 80px; + text-align: center; +} + +.sheet-co-score { + position: absolute; + top: -5px; + right: 0px; + width: 70px; + text-align: center; +} + +.sheet-co-input-texte { + width: 50px; + text-align: center; +} + +.sheet-comp-sp { + position: relative; + width: 100%; + height: 1px; + margin-top: 28px; +} + +.sheet-co-sp-button { + position: absolute; + top: -4px; + width: 30px; + height: 29px; + line-height: 25px; +} + +.sheet-co-sp-nom { + position: absolute; + top: -5px; + left: 32px; + width: calc(100% - 212px); + font-size: 12px; +} + +.sheet-co-sp-lien { + position: absolute; + top: -5px; + right: 70px; + width: 105px; + text-align: center; +} + +.sheet-co-sp-score { + position: absolute; + top: -5px; + right: 0px; + width: 70px; + text-align: center; +} + +.sheet-co-sp-input-nom { + width: 100%; + font-size: 15px; + padding: 2px 2px; +} + +.sheet-co-sp-input-lien { + width: 40px; + text-align: center; + font-size: 15px; + padding: 2px 2px; +} + +.sheet-co-sp-input-score { + width: 50px; + text-align: center; +} + +.sheet-po-texte { + text-transform: uppercase; +} + +.sheet-po-input-texte { + position: relative; + height: 150px; + font-size: 15px; +} + +.sheet-po-input-notes { + background: rgba(255, 255, 255, .5) url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Aria/images/logo_250.png) no-repeat center center; +} + +.sheet-bo-texte { + float: left; + width: 25%; +} + +.sheet-bo-input-texte { + float: left; + width: calc(25% - 5px); + margin-right: 5px; + font-size: 15px; +} + + +/*------------- AVENTURIER -------------*/ + +.sheet-block-av-ca { + position: relative; + top: 20px; + left: 10px; + width: calc(50% - 70px); +} + +.sheet-t-aventurier { + position: absolute; + width: 100%; +} + +.sheet-av-nom { + position: absolute; + top: 35px; + width: 100%; +} + +.sheet-av-profession { + position: absolute; + top: 65px; + width: 100%; +} + +.sheet-av-age { + position: absolute; + top: 95px; + width: 100%; +} + + +/*---------- CARACTERISTIQUES ----------*/ + +.sheet-t-carac { + position: absolute; + top: 125px; + width: 100%; +} + +.sheet-ca-force { + position: absolute; + top: 160px; + width: 100%; +} + +.sheet-ca-dexterite { + position: absolute; + top: 190px; + width: 100%; +} + +.sheet-ca-endurance { + position: absolute; + top: 220px; + width: 100%; +} + +.sheet-ca-intelligence { + position: absolute; + top: 250px; + width: 100%; +} + +.sheet-ca-charisme { + position: absolute; + top: 280px; + width: 100%; +} + + +/*--------- VIVRE OU SURVIVRE ---------*/ + +.sheet-block-vi { + position: relative; + top: 20px; + left: calc(50% - 40px); + width: calc(50% - 70px); +} + +.sheet-t-vivre { + position: absolute; + top: 0px; + width: 100%; +} + +.sheet-vi-arme1 { + position: absolute; + top: 35px; + width: 100%; +} + +.sheet-vi-arme2 { + position: absolute; + top: 135px; + width: 100%; +} + +.sheet-vi-arme3 { + position: absolute; + top: 235px; + width: 100%; +} + + +/*--------------- SANTE ---------------*/ + +.sheet-block-sa { + position: relative; + top: 20px; + left: calc(100% - 100px); + width: 100px; + text-align: center; +} + +.sheet-sa-vie { + position: absolute; + top: 0px; + width: 100%; + text-align: center; +} + +.sheet-sa-blessures { + position: absolute; + top: 110px; + width: 100%; + text-align: center; +} + +.sheet-sa-protection { + position: absolute; + top: 220px; + width: 100%; + text-align: center; +} + +.sheet-sa-hr1 { + position: relative; + top: 350px; +} + + +/*----------------- RP -----------------*/ + +.sheet-block-rp { + position: relative; + top: 360px; + left: 10px; + width: calc(100% - 20px); +} + +.sheet-rp-genial { + float: left; + width: calc(50% - 18px); + padding-right: 10px; +} + +.sheet-rp-problemes { + float: left; + width: calc(50% - 18px); + padding-left: 10px; +} + +.sheet-hr1 { + position: relative; + border-top-color: #a69c73; + top: 380px; + width: calc(100% - 20px); +} + + +/*----------- COMPETENCES -----------*/ + +.sheet-block-co-titre { + position: relative; + top: 380px; + left: 10px; + width: calc(50% - 20px); + text-transform: uppercase; +} + +.sheet-co-titre1 { + position: absolute; + top: 0px; + left: 0px; +} + +.sheet-co-titre2 { + position: absolute; + top: 0px; + right: 70px; + width: 80px; + text-align: center; +} + +.sheet-co-titre3 { + position: absolute; + top: 0px; + right: 0px; + width: 70px; + text-align: center; +} + +.sheet-block-co { + position: relative; + top: 400px; + left: 10px; + width: calc(50% - 20px); +} + +.sheet-block-co-separateur { + position: absolute; + top: -20px; + left: -13px; + width: 1px; + height: 600px; + background: #a69c73; +} + +.sheet-block-co-sp-titre { + position: relative; + top: -180px; + left: calc(50% + 10px); + width: calc(50% - 20px); + text-transform: uppercase; +} + +.sheet-co-sp-titre1 { + position: absolute; + top: 0px; + left: 0px; +} + +.sheet-co-sp-titre2 { + position: absolute; + top: 0px; + right: 70px; + width: 105px; + text-align: center; +} + +.sheet-co-sp-titre3 { + position: absolute; + top: 0px; + right: 0px; + width: 70px; + text-align: center; +} + +.sheet-block-co-sp { + position: relative; + top: -180px; + left: calc(50% + 10px); + width: calc(50% - 20px); +} + +.sheet-hr2 { + position: relative; + border-top-color: #a69c73; + top: -150px; + width: calc(100% - 20px); +} + + +/*---------- POSSESSION/NOTES ----------*/ + +.sheet-block-po { + position: relative; + top: -150px; + left: 10px; + width: calc(100% - 20px); +} + +.sheet-po-possessions { + float: left; + width: calc(50% - 18px); + padding-right: 10px; +} + +.sheet-po-notes { + float: left; + width: calc(50% - 18px); + padding-left: 10px; +} + +.sheet-block-bo { + position: relative; + width: calc(100% + 15px); + height: 50px; + top: -10px; +} + +.sheet-block-bo-texte { +} + +.sheet-block-bo-input-texte { + position: relative; +} + +/*---------- OPTIONS ----------*/ +.sheet-opt-titre { + position: absolute; + width: 100%; + text-transform: uppercase; + font-size: 18px; + left: 30px; +} + +.sheet-opt-content { + position: absolute; + width: calc(100% - 10px); + left: 5px; + top: 30px; +} + +.sheet-opt-ligne { + position: relative; + width: 100%; +} + +.sheet-opt-nom { + float: left; + width: 100%; + line-height: 25px; + overflow: hidden; +} + +/* ===================================================== */ +/* ===================== TEMPLATES ===================== */ +/* ===================================================== */ + +.sheet-rolltemplate-aria1 { + border-color: #a69c73; + border-style: solid; + border-width: 2px; + background: #fcf8f2; + padding: 5px 5px; + padding-bottom: 1px; + font-family: 'Piazzolla', serif; + font-size: 10pt; +} + +.sheet-rolltemplate-aria1 h1, +.sheet-rolltemplate-aria1 h2 { + margin: 0; + padding: 0; + line-height: 1; +} + +.sheet-rolltemplate-aria1 h1 { + font-size: 16pt; + margin-bottom: 2px; +} + +.sheet-rolltemplate-aria1 h2 { + border-bottom: 2px solid rgba(85, 78, 48, 0.20); + margin-bottom: 10px; + color: rgba(85, 78, 48, 1); + font-size: 12pt; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-body { + margin-left: 1px; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-roll { + margin-top: 10px; + text-align: center; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-footer { + width: 100%; + height: 10px; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-buttons { + text-align: center; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-buttons a { + background: rgba(85, 78, 48, 1); + padding: 5px; + color: white; + display: inline-block; + border: 1px solid white; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-buttons .sheet-aria1-buttontext { + font-style: italic; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-body .importantroll, +.sheet-rolltemplate-aria1 .sheet-aria1-body .fullcrit, +.sheet-rolltemplate-aria1 .sheet-aria1-body .fullfail, +.sheet-rolltemplate-aria1 .sheet-aria1-body .inlinerollresult, +.sheet-rolltemplate-aria1 .sheet-aria1-roll .importantroll, +.sheet-rolltemplate-aria1 .sheet-aria1-roll .fullcrit, +.sheet-rolltemplate-aria1 .sheet-aria1-roll .fullfail, +.sheet-rolltemplate-aria1 .sheet-aria1-roll .inlinerollresult { + border: none; + background: transparent; + font-family: inherit; + font-size: 18pt; + font-weight: bold; +} + +.sheet-rolltemplate-aria1 .sheet-aria1-body .fullfail, +.sheet-rolltemplate-aria1 .sheet-aria1-roll .fullfail { + color: rgba(160, 50, 50, 1); +} + +.sheet-rolltemplate-aria1 .sheet-aria1-body .fullcrit, +.sheet-rolltemplate-aria1 .sheet-aria1-roll .fullcrit { + color: rgba(50, 120, 50, 1); +} \ No newline at end of file diff --git a/Aria/Aria.html b/Aria/Aria.html new file mode 100644 index 0000000000..40cad3f1a4 --- /dev/null +++ b/Aria/Aria.html @@ -0,0 +1,996 @@ + + + + + +
+ + + +
+

Options

+
+

Affichage des jets

Chuchoter les jets au MJ : + +
Afficher le nom du personnage lors des jets : + +
+

Calculs des compétences

+
+

/!\ Vos compétences seront réinitialisées pour être recalculées.

+ Méthode 1 : Calculs prêts à jouer : + +
+ +
+

ATTENTION

+

Vos compétences seront réinitialisées pour être recalculées.

+ + +
+ Méthode 2 : Calculs pour personnalisation de personnage : + +
+ +

Il vous restera alors 50 points à répartir

+
+

ATTENTION

+

Vos compétences seront réinitialisées pour être recalculées.

+ + +
+
+
+
+
+ +
Aventurier
+
+
Nom :
+
+
+
 
+
+
+
Âge :
+
+ +
Caractéristiques
+
+
+ +
+
Force :
+
+
+
+ +
+
Dextérité :
+
+
+
+ +
+
Endurance :
+
+
+
+ +
+
Intelligence :
+
+
+
+ +
+
Charisme :
+
+
+ +
+
Vivre ou survivre
+
+
+ +
+ + +
Arme
+
Dégâts
+
+
+
+ +
+ + +
Arme
+
Dégâts
+
+
+
+ +
+ + +
Arme
+
Dégâts
+
+
+ +
+
+ +
Points de vie
+
+
+ +
Blessures
+
+
+ +
Protection
+
+
+ +
+
+
JE SUIS GÉNIAL·E +
parce que...
+ +
+
+
Mais LA SOCIÉTɠA DES PROBLÈMES +
avec moi parce que...
+ +
+
+
+ +
+
Compétences
+
Lien
+
Score
+
+
+
+
+ +
+
Artisanat, construire
+
DEX/INT
+
+ %
+
+
+
+ +
+
Combat rapproché
+
FOR/DEX
+
+ %
+
+
+
+ +
+
Combat à distance
+
DEX/INT
+
+ %
+
+
+
+ +
+
Connaissance de la nature
+
DEX/INT
+
+ %
+
+
+
+ +
+
Connaissance des secrets
+
INT/CHA
+
+ %
+
+
+
+ +
+
Courir, sauter
+
DEX/END
+
+ %
+
+
+
+ +
+
Discrétion
+
DEX/CHA
+
+ %
+
+
+
+ +
+
Droit
+
INT/CHA
+
+ %
+
+
+
+ +
+
Esquiver
+
DEX/INT
+
+ %
+
+
+
+ +
+
Intimider
+
FOR/CHA
+
+ %
+
+
+
+ +
+
Lire, écrire
+
INT/CHA
+
+ %
+
+
+
+ +
+
Mentir, convaincre
+
INT/CHA
+
+ %
+
+
+
+ +
+
Perception
+
INT/CHA
+
+ %
+
+
+
+ +
+
Piloter
+
DEX/END
+
+ %
+
+
+
+ +
+
Psychologie
+
END/INT
+
+ %
+
+
+
+ +
+
Réflexes
+
DEX/INT
+
+ %
+
+
+
+ +
+
Serrures et pièges
+
DEX/END
+
+ %
+
+
+
+ +
+
Soigner
+
INT/CHA
+
+ %
+
+
+
+ +
+
Survie
+
END/INT
+
+ %
+
+
+
+ +
+
Voler
+
INT/CHA
+
+ %
+
+
+ +
+
Compétences spéciales
+
Lien
+
Score
+
+
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+ +
+
+ / +
+
+ %
+
+
+
+ +
+
+
Possessions
+ +
+
+
Couronnes
+
Orbes
+
Sceptres
+
Rois
+
+
+ + + +
+
+
+
+
Notes
+ +
+
+
+
+ + + + +
{{#name}} +

{{name}}

{{/name}} {{#character_name}} +

{{character_name}}

{{/character_name}} +
{{#body}} {{body}} {{/body}}
+
{{#roll}} {{roll}} {{/roll}}
+
{{#buttons}} {{buttons}} {{/buttons}}
+ +
+
+ + + + \ No newline at end of file diff --git a/Aria/images/background.jpg b/Aria/images/background.jpg new file mode 100644 index 0000000000..bbd86444f7 Binary files /dev/null and b/Aria/images/background.jpg differ diff --git a/Aria/images/close.png b/Aria/images/close.png new file mode 100644 index 0000000000..14113ad29b Binary files /dev/null and b/Aria/images/close.png differ diff --git a/Aria/images/logo_250.png b/Aria/images/logo_250.png new file mode 100644 index 0000000000..3c6b27b446 Binary files /dev/null and b/Aria/images/logo_250.png differ diff --git a/Aria/images/options.png b/Aria/images/options.png new file mode 100644 index 0000000000..3d79e675fe Binary files /dev/null and b/Aria/images/options.png differ diff --git a/Aria/preview.png b/Aria/preview.png new file mode 100644 index 0000000000..0c64a2552b Binary files /dev/null and b/Aria/preview.png differ diff --git a/Aria/sheet.json b/Aria/sheet.json new file mode 100644 index 0000000000..c2e1ace9fd --- /dev/null +++ b/Aria/sheet.json @@ -0,0 +1,8 @@ +{ +"html": "Aria.html", +"css": "Aria.css", +"authors": "PixelReveur", +"roll20userID": "982901", +"preview": "preview.png", +"instructions": "Feuille de personnage pour Aria." +} diff --git a/Black Void by Penny for a Tale/.gitignore b/Black Void by Penny for a Tale/.gitignore new file mode 100644 index 0000000000..b8a9e16722 --- /dev/null +++ b/Black Void by Penny for a Tale/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +node_modules +package-lock.jdson +package-lock.json diff --git a/Black Void by Penny for a Tale/BlackVoid.css b/Black Void by Penny for a Tale/BlackVoid.css new file mode 100644 index 0000000000..5e9feb663b --- /dev/null +++ b/Black Void by Penny for a Tale/BlackVoid.css @@ -0,0 +1,1360 @@ +div.sheet-pc div.sheet-traits, div.sheet-movement-section div.sheet-armor-column { + margin: 0px 0.5%; + vertical-align: top; + width: 50%; } + +div.sheet-pc div.sheet-wastah-section div.sheet-wastah, +div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment, div.sheet-movement-section div.sheet-movement-column, +div.sheet-movement-section div.sheet-wealth-column { + display: inline-block; + vertical-align: top; + width: 24.5%; } + +div.sheet-movement-section div.sheet-speed-total label, div.sheet-movement-section div.sheet-defence-value-total label, div.sheet-movement-section div.sheet-armor-column div.sheet-damage-reduction div.sheet-content label { + display: grid; } + div.sheet-movement-section div.sheet-speed-total label > input, div.sheet-movement-section div.sheet-defence-value-total label > input, div.sheet-movement-section div.sheet-armor-column div.sheet-damage-reduction div.sheet-content label > input { + height: 4.5rem; + width: 4.5rem; + border: none; + border-radius: 10rem; + align-self: center; + justify-self: center; + position: relative; + z-index: 2; } + +input[name='attr_page']:not([value='one']) ~ div.sheet-page-one, +input[name='attr_page']:not([value='two']) ~ div.sheet-page-two { + display: none; } + +/* GLOBAL SETTINGS + ============================= */ +/* GLOBAL SETTINGS +============================= */ +* { + box-sizing: border-box; + font-family: sans-serif; + margin: 0; + padding: 0; + font-size: 62.5%; } + +button { + font-family: serif; + transition: all .2s; + box-shadow: -1px -1px 1px 1px rgba(0, 0, 0, 0.5); } + button:before { + display: none; } + button:focus, button:hover, button:active { + background: none; + background-color: #833247 !important; + color: whitesmoke; + transform: scale(1.05); + box-shadow: none; } + button[type="roll"], button[type="action"] { + background-color: whitesmoke; + border-bottom: 1px solid #666; + border-bottom-right-radius: 1px; + border-color: #b3b3b3; + border-radius: 0.25rem; + border-right: 0.02rem solid #333333; + border-style: outset; + padding: 0.2rem 0.5rem !important; } + +div { + background-color: transparent; + width: 100%; } + +fieldset { + background-color: transparent; } + +h2.sheet-label { + border-bottom: 0.15em solid black; + text-align: center; + margin-left: 3%; } + +input:placeholder-shown[type="text"], input:placeholder-shown[type="number"], textarea:placeholder-shown { + border: 0.1em dotted #833247; + background-color: #96939326; } + +input:hover[type="text"], input:hover[type="number"], textarea:hover, input:focus[type="text"], input:focus[type="number"], textarea:focus { + color: whitesmoke; + background-color: #5b1c2a; } + +input[type="text"], input[type="number"] { + background-color: transparent; + border-left: 0rem; + border-radius: 0rem; + border-right: 0rem; + border-top: 0rem; + height: 2.1rem; + width: 100%; } + +input[type='number'] { + text-align: center; + width: 100%; } + +input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; } + +label { + margin-bottom: 0px; + padding-right: 0px; } + +select { + margin-bottom: 0px; + vertical-align: bottom; + border: 2px solid #833247; + font-size: 1.5rem; + font-weight: bold; + text-transform: capitalize; + width: 100%; } + +option { + font-size: 1.5rem; } + +span { + font-size: 1.5rem; + word-break: break-word; } + +textarea { + background-color: transparent; + text-align: left; + border: none; + font-size: 1.5rem; + font-weight: normal; + min-height: 5rem; + line-height: 1.8rem; + overflow: hidden; + overflow-wrap: break-word; + padding: 2px; + resize: vertical; + vertical-align: top; + overflow: scroll; } + +.charsheet { + width: 880px; } + .charsheet div.sheet-row { + display: inline-grid; } + +div.sheet-background { + background-color: rgba(77, 77, 77, 0.0784314); } + +.sheet-border { + border: 0.15rem solid #e4e5e6; } + +.sheet-bottom-border, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-madness input[type='text'], +div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-madness input[type='text'], div.sheet-pc div.sheet-traits div.sheet-trait input[type='number']:hover, div.sheet-pc div.sheet-skills-row input[type='number'], div.sheet-weapons-section div.sheet-repeating-container .repitem, div.sheet-repeating-container div.sheet-descriptor input[type='text'] { + border-bottom: 0.2rem solid black; } + +.sheet-description { + white-space: pre-line; } + +.sheet-ellipsis, button { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + +.sheet-font-weight-bold { + font-weight: bold; } + +.sheet-inline-block { + display: inline-block; } + +.sheet-text-vertical { + transform: rotate(180deg); + writing-mode: vertical-lr; } + +div.sheet-1column { + grid-template-columns: repeat(1, 1fr); } + +div.sheet-2column { + grid-template-columns: repeat(2, 1fr); } + +div.sheet-3column { + grid-template-columns: repeat(3, 1fr); } + +div.sheet-4column { + grid-template-columns: repeat(4, 1fr); } + +div.sheet-5column { + grid-template-columns: repeat(5, 1fr); } + +div.sheet-6column { + grid-template-columns: repeat(6, 1fr); } + +div.sheet-2autocolumn { + grid-template-columns: auto 1fr; } + +div.sheet-2autocolumn-reverse { + grid-template-columns: 1fr auto; } + +div.sheet-4autocolumn { + grid-template-columns: auto 1fr auto 1fr; } + +div.sheet-3columnbutton { + grid-template-columns: auto 1fr 3rem; } + +.sheet-mb-1 { + margin-bottom: 1%; } + +.sheet-mt-1 { + margin-top: 1%; } + +.sheet-pb-1 { + padding-bottom: 1%; } + +.sheet-pt-1 { + padding-top: 1%; } + +.sheet-mb-2 { + margin-bottom: 2%; } + +.sheet-mt-2 { + margin-top: 2%; } + +.sheet-pb-2 { + padding-bottom: 2%; } + +.sheet-pt-2 { + padding-top: 2%; } + +.sheet-mb-3 { + margin-bottom: 3%; } + +.sheet-mt-3 { + margin-top: 3%; } + +.sheet-pb-3 { + padding-bottom: 3%; } + +.sheet-pt-3 { + padding-top: 3%; } + +.sheet-mb-4 { + margin-bottom: 4%; } + +.sheet-mt-4 { + margin-top: 4%; } + +.sheet-pb-4 { + padding-bottom: 4%; } + +.sheet-pt-4 { + padding-top: 4%; } + +.sheet-mb-5 { + margin-bottom: 5%; } + +.sheet-mt-5 { + margin-top: 5%; } + +.sheet-pb-5 { + padding-bottom: 5%; } + +.sheet-pt-5 { + padding-top: 5%; } + +h1 { + color: #833247; + text-transform: capitalize; + font-family: serif; + font-size: 2.5rem; } + +h2 { + font-size: 1.5rem; + line-height: 2rem; + text-transform: capitalize; } + +h3 { + font-size: 1.25rem; + line-height: 2rem; + text-transform: capitalize; } + +label { + font-size: 3rem; } + +.sheet-pictos { + font-family: "pictos"; } + +.sheet-d20 { + font-family: "dicefontd20"; } + +.sheet-font-smallcaps, button { + font-variant: small-caps; } + +.sheet-text-capitalize { + text-transform: capitalize; } + +.sheet-text-uppercase, div.sheet-movement-section h2 { + text-transform: uppercase; } + +.sheet-text-center, div.sheet-movement-section h2 { + text-align: center; } + +.sheet-text-left { + text-align: left !important; } + +.sheet-text-right { + text-align: right; } + +.sheet-text-primary { + color: #833247; } + +/* GRID + ============================= */ +.sheet-grid { + display: inline-grid; + grid-column-gap: 1%; + grid-row-gap: 0.5%; } + +div.sheet-pc div.sheet-traits div.sheet-intellect, div.sheet-pc div.sheet-traits div.sheet-agility, div.sheet-pc div.sheet-traits div.sheet-persuasion, div.sheet-pc div.sheet-traits div.sheet-awareness { + grid-template-rows: 2rem repeat(2, 1fr); } + +div.sheet-pc div.sheet-traits div.sheet-presence, div.sheet-pc div.sheet-traits div.sheet-stamina, div.sheet-pc div.sheet-traits div.sheet-willpower, div.sheet-pc div.sheet-traits div.sheet-strength { + grid-template-rows: repeat(2, 1fr) 2rem; } + +span.sheet-display { + border-bottom: 2px dotted black; + padding-top: 3%; } + +input.sheet-toggles { + position: relative; + opacity: 0; + width: 100%; + z-index: 2; } + input.sheet-toggles:checked + span { + color: #833247; + margin-left: 5%; } + +/* HEADER + ============================= */ +/* PC + ============================= */ +div.sheet-pc { + padding: 2% 1%; + grid-template-columns: 3fr 2fr 0.5fr; + grid-row-gap: 1%; } + div.sheet-pc input[type='number'] { + width: 100%; } + div.sheet-pc .sheet-colon:after { + content: ':'; } + div.sheet-pc div.sheet-box { + background-color: #e4e5e6; + -moz-box-shadow: inset 0 0 10px #00000024; + -webkit-box-shadow: inset 0 0 10px #00000024; + box-shadow: inset 0 0 10px #00000024; + padding: 2% 1%; } + div.sheet-pc div.sheet-logo-row { + grid-column-gap: 5%; + align-items: end; + grid-template-columns: 1fr 20% 250px; } + div.sheet-pc div.sheet-logo-row div.sheet-page-select { + grid-template-columns: auto 1fr 1fr; } + div.sheet-pc div.sheet-logo-row div.sheet-page-select div.sheet-button { + color: black; + border: 2px solid black; + text-align: center; + border-radius: 10px; } + div.sheet-pc div.sheet-logo-row div.sheet-page-select div.sheet-button div.sheet-option, + div.sheet-pc div.sheet-logo-row div.sheet-page-select div.sheet-button input { + grid-area: 1 / 1 / 1 / 1; + min-height: 2rem; } + div.sheet-pc div.sheet-logo-row div.sheet-page-select div.sheet-button input:checked ~ div.sheet-option { + color: white; + background-color: #833247; + border-radius: 0.8rem; } + div.sheet-pc div.sheet-logo-row div.sheet-page-select input[type='radio'] { + opacity: 0; + height: auto; + width: 100%; + z-index: 2; } + div.sheet-pc div.sheet-logo-row div.sheet-logo { + justify-content: end; } + div.sheet-pc div.sheet-logo-row div.sheet-logo img { + max-height: 100px; } + div.sheet-pc div.sheet-character-info { + grid-row-gap: 5%; } + div.sheet-pc div.sheet-character-info h2 { + margin-right: 0.5rem; } + div.sheet-pc div.sheet-character-info div.sheet-name-row { + grid-template-columns: 2fr 1fr 2fr; } + div.sheet-pc div.sheet-personality-row { + align-items: start; + grid-row-gap: 5%; } + div.sheet-pc div.sheet-personality-row h2 { + font-size: 2rem; } + div.sheet-pc div.sheet-personality-row h3 { + font-size: 1.5rem; + margin-right: 0.5rem; } + div.sheet-pc div.sheet-personality-row textarea { + resize: none; + overflow: hidden; } + div.sheet-pc div.sheet-personality-row div.sheet-personality textarea, + div.sheet-pc div.sheet-personality-row div.sheet-origin textarea { + height: 40px; } + div.sheet-pc div.sheet-personality-row div.sheet-mannerism textarea { + height: 86px; } + div.sheet-pc div.sheet-wastah-section { + display: inline-block; + margin-bottom: -2%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row { + grid-row-gap: unset; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row label, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row label, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row label, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row label { + display: grid; + justify-items: center; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row input, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row input, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row input, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row input { + border: none; + height: 100%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row div.sheet-header, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row div.sheet-header, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row div.sheet-header, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row div.sheet-header { + align-items: center; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row div.sheet-input, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row div.sheet-input, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row div.sheet-input, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row div.sheet-input { + position: relative; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row div.sheet-input input[type='number']:hover, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row div.sheet-input input[type='number']:focus, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row div.sheet-input input[type='number']:hover, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row div.sheet-input input[type='number']:focus, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row div.sheet-input input[type='number']:hover, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row div.sheet-input input[type='number']:focus, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row div.sheet-input input[type='number']:hover, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row div.sheet-input input[type='number']:focus { + border-radius: 2rem; + width: 100%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity-row, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity-row { + grid-template-rows: 5rem repeat(3, 3.8rem); + width: 115%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health-row, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health-row { + grid-template-rows: 5rem repeat(4, 3.8rem); } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-total, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-total { + grid-column-gap: 2%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health { + grid-template-columns: 5rem auto; + grid-template-rows: 5rem; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health div.sheet-input input[type='number'] { + width: 3.5rem; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-sanity div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-health div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-sanity div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-health div.sheet-input::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle3.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(180deg); } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-total, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-anxious-hurt, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-disturbed-injured, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-dead, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-total, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-anxious-hurt, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-disturbed-injured, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-dead { + grid-template-columns: 3.8rem auto; + position: relative; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-total div.sheet-input input[type='number'], div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-anxious-hurt div.sheet-input input[type='number'], div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-disturbed-injured div.sheet-input input[type='number'], div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-dead div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-total div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-anxious-hurt div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-disturbed-injured div.sheet-input input[type='number'], + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-dead div.sheet-input input[type='number'] { + width: 3rem; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-total div.sheet-input::before, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-anxious-hurt div.sheet-input::before, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-disturbed-injured div.sheet-input::before, div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-dead div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-total div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-anxious-hurt div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-disturbed-injured div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-dead div.sheet-input::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-total, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-total { + left: 16%; + position: relative; + top: -30%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-total div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-total div.sheet-input::before { + transform: rotate(0deg); } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-anxious-hurt, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-anxious-hurt { + left: 5%; + top: -55%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-anxious-hurt div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-anxious-hurt div.sheet-input::before { + transform: rotate(50deg); } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-disturbed-injured, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-disturbed-injured { + left: 15%; + top: -75%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-disturbed-injured div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-disturbed-injured div.sheet-input::before { + transform: rotate(180deg); } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-dead, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-dead { + left: 5%; + top: -90%; } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-dead div.sheet-input::before, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-dead div.sheet-input::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(95deg); } + div.sheet-pc div.sheet-wastah-section div.sheet-wastah div.sheet-madness, + div.sheet-pc div.sheet-wastah-section div.sheet-enlightenment div.sheet-madness { + margin-top: -10%; } + div.sheet-pc div.sheet-wastah-section div.sheet-box { + min-height: 300px; } + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor { + grid-template-columns: 1.5rem 1fr repeat(2, 1.5rem); + grid-column-gap: 3%; } + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor button[type='roll'] { + width: 95%; } + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor input[name*='collapse'], + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor input[name*='collapse'] + span { + grid-area: 1 / 3 / 1 / 3; } + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor input[name*='settings'], + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor input[name*='settings'] + span { + grid-area: 1 / 4 / 1 / 4; } + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor div.sheet-collapse, + div.sheet-pc div.sheet-wastah-section div.sheet-descriptor div.sheet-settings { + grid-column: 1 / 5; } + div.sheet-pc div.sheet-traits { + grid-gap: unset; } + div.sheet-pc div.sheet-traits h2 { + font-size: 1.2rem; } + div.sheet-pc div.sheet-traits div.sheet-trait { + min-height: 110px; + position: relative; + width: 100%; } + div.sheet-pc div.sheet-traits div.sheet-trait button[type='roll'] { + font-size: 1.3rem; + text-align: left; + text-transform: uppercase; } + div.sheet-pc div.sheet-traits div.sheet-trait label { + height: 100%; + position: relative; + width: 100%; } + div.sheet-pc div.sheet-traits div.sheet-trait input[type='number'] { + border: none; + border-radius: 1rem; } + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-header { + grid-column: 1 / 5; } + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-modifier, + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-score { + display: grid; + position: relative; + align-content: center; } + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-modifier input[type='number'] { + font-size: 2.5rem; + min-height: 3rem; } + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-modifier:before { + min-height: 50px; + min-width: 50px; } + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-score input[type='number'] { + font-size: 3.5rem; + min-height: 4rem; } + div.sheet-pc div.sheet-traits div.sheet-trait div.sheet-score:before { + min-height: 80px; + min-width: 80px; } + div.sheet-pc div.sheet-traits div.sheet-intellect { + grid-area: 1 / 2 / 1 / 3; + top: 28%; + right: 10%; } + div.sheet-pc div.sheet-traits div.sheet-intellect div.sheet-header { + grid-row: 1; + text-align: right; } + div.sheet-pc div.sheet-traits div.sheet-intellect div.sheet-modifier { + grid-area: 1 / 1 / 3 / 3; + right: 15%; + top: 24%; } + div.sheet-pc div.sheet-traits div.sheet-intellect div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(180deg); } + div.sheet-pc div.sheet-traits div.sheet-intellect div.sheet-score { + grid-area: 2 / 2 / 4 / 5; } + div.sheet-pc div.sheet-traits div.sheet-intellect div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle3.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; } + div.sheet-pc div.sheet-traits div.sheet-agility { + grid-area: 1 / 3 / 1 / 4; + top: 28%; } + div.sheet-pc div.sheet-traits div.sheet-agility div.sheet-header { + grid-row: 1; + text-align: left; } + div.sheet-pc div.sheet-traits div.sheet-agility div.sheet-modifier { + grid-area: 1 / 3 / 3 / 5; + left: 15%; + top: 20%; } + div.sheet-pc div.sheet-traits div.sheet-agility div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(10deg); } + div.sheet-pc div.sheet-traits div.sheet-agility div.sheet-score { + grid-area: 2 / 1 / 4 / 4; } + div.sheet-pc div.sheet-traits div.sheet-agility div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(0deg); } + div.sheet-pc div.sheet-traits div.sheet-persuasion { + grid-area: 2 / 1 / 2 / 2; + left: 20%; } + div.sheet-pc div.sheet-traits div.sheet-persuasion div.sheet-header { + grid-row: 1; + text-align: right; } + div.sheet-pc div.sheet-traits div.sheet-persuasion div.sheet-header h2 { + margin-top: 5%; } + div.sheet-pc div.sheet-traits div.sheet-persuasion div.sheet-modifier { + grid-area: 1 / 1 / 4 / 3; + right: 35%; } + div.sheet-pc div.sheet-traits div.sheet-persuasion div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(0deg); } + div.sheet-pc div.sheet-traits div.sheet-persuasion div.sheet-score { + grid-area: 2 / 2 / 4 / 5; } + div.sheet-pc div.sheet-traits div.sheet-persuasion div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle4.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(100deg); } + div.sheet-pc div.sheet-traits div.sheet-experience { + grid-area: 2 / 2 / 4 / 4; + grid-template-rows: 66% 1fr; + height: 100%; + position: relative; + transform: scale(0.88); } + div.sheet-pc div.sheet-traits div.sheet-experience::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(-90deg); + min-height: 180px; } + div.sheet-pc div.sheet-traits div.sheet-experience div.sheet-header { + grid-area: 2 / 2 / 2 / 4; } + div.sheet-pc div.sheet-traits div.sheet-experience div.sheet-input { + grid-area: 1 / 1 / 1 / 5; + padding: 20% 5% 10%; } + div.sheet-pc div.sheet-traits div.sheet-experience div.sheet-input label { + height: 100%; + width: 100%; } + div.sheet-pc div.sheet-traits div.sheet-experience div.sheet-input input[type='number'] { + border: none; + font-size: 4.5rem; + height: 100%; + border-radius: 2rem 2rem 0rem 0rem; } + div.sheet-pc div.sheet-traits div.sheet-awareness { + grid-area: 2 / 4 / 2 / 5; + right: 21%; } + div.sheet-pc div.sheet-traits div.sheet-awareness div.sheet-header { + grid-row: 1; + text-align: left; } + div.sheet-pc div.sheet-traits div.sheet-awareness div.sheet-header h2 { + margin-top: 5%; } + div.sheet-pc div.sheet-traits div.sheet-awareness div.sheet-modifier { + grid-area: 1 / 3 / 4 / 5; + left: 30%; } + div.sheet-pc div.sheet-traits div.sheet-awareness div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(-90deg); } + div.sheet-pc div.sheet-traits div.sheet-awareness div.sheet-score { + grid-area: 2 / 1 / 4 / 4; } + div.sheet-pc div.sheet-traits div.sheet-awareness div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(0deg); } + div.sheet-pc div.sheet-traits div.sheet-presence { + grid-area: 3 / 1 / 3 / 2; + left: 22%; } + div.sheet-pc div.sheet-traits div.sheet-presence div.sheet-header { + grid-row: 3; + text-align: center; } + div.sheet-pc div.sheet-traits div.sheet-presence div.sheet-modifier { + grid-area: 1 / 1 / 3 / 3; + right: 30%; } + div.sheet-pc div.sheet-traits div.sheet-presence div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(0deg); } + div.sheet-pc div.sheet-traits div.sheet-presence div.sheet-score { + grid-area: 1 / 2 / 3 / 5; } + div.sheet-pc div.sheet-traits div.sheet-presence div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(-100deg); } + div.sheet-pc div.sheet-traits div.sheet-stamina { + grid-area: 3 / 4 / 3 / 5; + right: 22%; } + div.sheet-pc div.sheet-traits div.sheet-stamina div.sheet-header { + grid-row: 3; + text-align: center; } + div.sheet-pc div.sheet-traits div.sheet-stamina div.sheet-modifier { + grid-area: 1 / 3 / 3 / 5; + left: 30%; } + div.sheet-pc div.sheet-traits div.sheet-stamina div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(0deg); } + div.sheet-pc div.sheet-traits div.sheet-stamina div.sheet-score { + grid-area: 1 / 1 / 3 / 4; } + div.sheet-pc div.sheet-traits div.sheet-stamina div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle4.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(-10deg); } + div.sheet-pc div.sheet-traits div.sheet-willpower { + grid-area: 4 / 2 / 4 / 3; + bottom: 30%; } + div.sheet-pc div.sheet-traits div.sheet-willpower div.sheet-header { + grid-row: 3; + text-align: center; } + div.sheet-pc div.sheet-traits div.sheet-willpower div.sheet-modifier { + grid-area: 2 / 1 / 3 / 3; + right: 20%; } + div.sheet-pc div.sheet-traits div.sheet-willpower div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(0deg); } + div.sheet-pc div.sheet-traits div.sheet-willpower div.sheet-score { + grid-area: 1 / 2 / 3 / 5; } + div.sheet-pc div.sheet-traits div.sheet-willpower div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle4.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(40deg); } + div.sheet-pc div.sheet-traits div.sheet-strength { + grid-area: 4 / 3 / 4 / 4; + bottom: 30%; + left: 10%; } + div.sheet-pc div.sheet-traits div.sheet-strength div.sheet-header { + grid-row: 3; + text-align: center; } + div.sheet-pc div.sheet-traits div.sheet-strength div.sheet-modifier { + grid-area: 2 / 3 / 3 / 5; + left: 20%; } + div.sheet-pc div.sheet-traits div.sheet-strength div.sheet-modifier::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(180deg); } + div.sheet-pc div.sheet-traits div.sheet-strength div.sheet-score { + grid-area: 1 / 1 / 3 / 4; } + div.sheet-pc div.sheet-traits div.sheet-strength div.sheet-score::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle3.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + transform: rotate(190deg); } + div.sheet-pc div.sheet-skills-row { + display: inline-block; } + div.sheet-pc div.sheet-skills-row select { + color: black; } + div.sheet-pc div.sheet-skills-row div.sheet-benefits, + div.sheet-pc div.sheet-skills-row div.sheet-skills { + display: inline-block; + vertical-align: top; + width: 49.5%; } + div.sheet-pc div.sheet-skills-row div.sheet-benefits:nth-of-type(1), + div.sheet-pc div.sheet-skills-row div.sheet-skills:nth-of-type(1) { + margin-right: 1%; } + div.sheet-pc div.sheet-skills-row input[name='attr_cost'], + div.sheet-pc div.sheet-skills-row input[name='attr_rank'] { + text-align: center; } + div.sheet-pc div.sheet-skills-row div.sheet-collapse div.sheet-header { + grid-template-columns: 3fr 2fr 1fr; } + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-header, + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor { + grid-template-columns: 1fr 25% repeat(2, 1.5rem); } + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-collapse div.sheet-grid { + grid-template-columns: 1fr auto 5rem; } + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor input[name='attr_collapse'], + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor input[name='attr_collapse'] + span { + grid-column: 3; } + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor input[name='attr_settings'], + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor input[name='attr_settings'] + span { + grid-column: 4; } + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor div.sheet-collapse, + div.sheet-pc div.sheet-skills-row div.sheet-powers div.sheet-descriptor div.sheet-settings { + grid-column: 1 / 5; } + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-header, + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor { + grid-template-columns: 1.5fr 1fr 0.5fr repeat(2, 1.5rem); } + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-collapse div.sheet-grid { + grid-template-columns: 1fr auto 5rem; } + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-settings div.sheet-grid { + grid-template-columns: auto 1fr auto 5rem; } + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor input[name='attr_collapse'], + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor input[name='attr_collapse'] + span { + grid-column: 4; } + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor input[name='attr_settings'], + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor input[name='attr_settings'] + span { + grid-column: 5; } + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor div.sheet-collapse, + div.sheet-pc div.sheet-skills-row div.sheet-skills div.sheet-descriptor div.sheet-settings { + grid-column: 1 / 6; } + div.sheet-pc div.sheet-skills-row div.sheet-skills span[name='attr_specialization'] { + display: inline-block; + width: 100%; } + div.sheet-pc div.sheet-character-history div.sheet-rowx { + grid-template-columns: 1fr repeat(2, 1.5rem); } + div.sheet-pc div.sheet-character-history input[name*='collapse'], + div.sheet-pc div.sheet-character-history input[name*='collapse'] + span { + grid-area: 1 / 2 / 1 / 2; } + div.sheet-pc div.sheet-character-history input[name*='settings'], + div.sheet-pc div.sheet-character-history input[name*='settings'] + span { + grid-area: 1 / 3 / 1 / 3; } + div.sheet-pc div.sheet-character-history div.sheet-collapse, + div.sheet-pc div.sheet-character-history div.sheet-settings { + grid-column: 1 / 4; + margin: 1% 2%; } + div.sheet-pc div.sheet-character-history textarea { + min-height: 50px; + height: 75px; + border: 1px dotted #833247; } + div.sheet-pc div.sheet-character-history div.sheet-box { + min-height: 20rem; } + +div.sheet-movement-section { + display: inline-block; } + div.sheet-movement-section input[type='number'], + div.sheet-movement-section input[type='text'] { + text-align: center; } + div.sheet-movement-section span.sheet-subheader { + font-size: 1.3rem; } + div.sheet-movement-section div.sheet-speed-total, + div.sheet-movement-section div.sheet-defence-value-total { + position: relative; + height: 5rem; } + div.sheet-movement-section div.sheet-speed-total::before, + div.sheet-movement-section div.sheet-defence-value-total::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; + z-index: 0; + height: 5rem; } + div.sheet-movement-section div.sheet-speed-total label, + div.sheet-movement-section div.sheet-defence-value-total label { + height: 100%; + width: 100%; } + div.sheet-movement-section div.sheet-speed-total::before { + transform: rotate(-125deg); } + div.sheet-movement-section div.sheet-box { + min-height: 200px; + padding: 1% 5%; } + div.sheet-movement-section div.sheet-box:nth-of-type(1n+2) { + margin-top: 10%; } + div.sheet-movement-section div.sheet-armor-column { + display: inline-block; + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Silhouette.png"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; } + div.sheet-movement-section div.sheet-armor-column h2 { + position: relative; } + div.sheet-movement-section div.sheet-armor-column textarea { + height: 50%; + resize: none; + overflow-x: hidden; + border: 2px solid #e4e5e6; } + div.sheet-movement-section div.sheet-armor-column div.sheet-armor { + position: relative; + min-height: 8rem; + width: 100%; } + div.sheet-movement-section div.sheet-armor-column div.sheet-armor div.sheet-armour-input { + position: relative; + justify-content: center; + align-items: center; } + div.sheet-movement-section div.sheet-armor-column div.sheet-armor div.sheet-armour-input label, div.sheet-movement-section div.sheet-armor-column div.sheet-armor div.sheet-armour-input input { + min-height: 3.5rem; } + div.sheet-movement-section div.sheet-armor-column div.sheet-armor div.sheet-armour-input input { + border-radius: 2rem; + width: 100%; + border: none; } + div.sheet-movement-section div.sheet-armor-column div.sheet-armor div.sheet-content { + align-content: center; } + div.sheet-movement-section div.sheet-armor-column div.sheet-armor div.sheet-body { + align-self: center; } + div.sheet-movement-section div.sheet-armor-column div.sheet-head, + div.sheet-movement-section div.sheet-armor-column div.sheet-arms { + grid-template-columns: 7.5rem 40%; + justify-content: end; } + div.sheet-movement-section div.sheet-armor-column div.sheet-head div.sheet-armour-input::before, + div.sheet-movement-section div.sheet-armor-column div.sheet-arms div.sheet-armour-input::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; } + div.sheet-movement-section div.sheet-armor-column div.sheet-torso, + div.sheet-movement-section div.sheet-armor-column div.sheet-legs { + grid-template-columns: 40% 7.5rem; } + div.sheet-movement-section div.sheet-armor-column div.sheet-torso div.sheet-armour-input, + div.sheet-movement-section div.sheet-armor-column div.sheet-legs div.sheet-armour-input { + grid-area: 1/ 2 / 1 / 3; } + div.sheet-movement-section div.sheet-armor-column div.sheet-torso div.sheet-armour-input::before, + div.sheet-movement-section div.sheet-armor-column div.sheet-legs div.sheet-armour-input::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; } + div.sheet-movement-section div.sheet-armor-column div.sheet-torso div.sheet-body, + div.sheet-movement-section div.sheet-armor-column div.sheet-legs div.sheet-body { + grid-area: 1 / 1 / 1 / 2; } + div.sheet-movement-section div.sheet-armor-column div.sheet-head::before, + div.sheet-movement-section div.sheet-armor-column div.sheet-arms::before { + transform: rotate(-90deg); } + div.sheet-movement-section div.sheet-armor-column div.sheet-torso::before, + div.sheet-movement-section div.sheet-armor-column div.sheet-legs::before { + transform: rotate(180deg); } + div.sheet-movement-section div.sheet-armor-column div.sheet-damage-reduction div.sheet-header { + align-self: center; } + div.sheet-movement-section div.sheet-armor-column div.sheet-damage-reduction div.sheet-content { + position: relative; } + div.sheet-movement-section div.sheet-armor-column div.sheet-damage-reduction div.sheet-content::before { + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; } + +div.sheet-weapons-section div.sheet-headers { + grid-template-columns: 2fr repeat(6, 5rem) 1fr 1fr repeat(2, 1.5rem); } + +div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor { + grid-template-columns: 2fr repeat(6, 5rem) 1fr 1fr repeat(2, 1.5rem); + grid-gap: 0.5%; } + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor button { + margin-bottom: 0px; } + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor input[name='attr_collapse'], + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor input[name='attr_collapse'] + span { + grid-column: 11 / 12; } + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor input[name='attr_settings'], + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor input[name='attr_settings'] + span { + grid-column: 12 / 13; } + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor div.sheet-collapse, + div.sheet-weapons-section div.sheet-repeating-container div.sheet-descriptor div.sheet-settings { + grid-column: 1 / 13; } + +div.sheet-weapons-section div.sheet-repeating-container div.sheet-column { + border-left: 1px solid black; } + div.sheet-weapons-section div.sheet-repeating-container div.sheet-column span { + padding: 0px 2px; } + +div.sheet-weapons-section div.sheet-weapon { + grid-template-columns: 30% repeat(3, 1fr); } + div.sheet-weapons-section div.sheet-weapon div.sheet-name { + grid-area: 1 / 1 / 1 / 5; } + div.sheet-weapons-section div.sheet-weapon div.sheet-properties { + grid-area: 2 / 1 / 2 / 2; } + div.sheet-weapons-section div.sheet-weapon div.sheet-special { + grid-area: 3 / 1 / 3 / 2; } + +/* REPEATING SECTIONS + ============================= */ +div.sheet-repeating-container button { + font-variant: none; + width: fit-content; + font-size: 1.5rem; + padding: 1% 2%; } + div.sheet-repeating-container button[type='roll'] { + width: 100%; } + +div.sheet-repeating-container textarea { + margin-top: 2%; } + +div.sheet-repeating-container .repcontrol { + margin-top: 5%; } + +div.sheet-repeating-container .repcontrol_del { + font-family: "pictos"; + position: relative; } + +div.sheet-repeating-container .repitem { + margin-bottom: 2%; } + +div.sheet-repeating-container div.sheet-descriptor { + grid-template-columns: 1fr repeat(2, 1.5rem); + align-items: center; + justify-items: center; } + div.sheet-repeating-container div.sheet-descriptor button[type='roll'] { + min-height: 2rem; } + div.sheet-repeating-container div.sheet-descriptor div.sheet-collapse { + padding-left: 5%; } + div.sheet-repeating-container div.sheet-descriptor input[name='attr_collapse'] + span, + div.sheet-repeating-container div.sheet-descriptor input[name='attr_settings'] + span { + font-size: 1.5rem; } + div.sheet-repeating-container div.sheet-descriptor input[name*='collapse'], + div.sheet-repeating-container div.sheet-descriptor input[name*='collapse'] + span { + grid-area: 1 / 2 / 1 / 2; } + div.sheet-repeating-container div.sheet-descriptor input[name*='settings'], + div.sheet-repeating-container div.sheet-descriptor input[name*='settings'] + span { + grid-area: 1 / 3 / 1 / 3; } + div.sheet-repeating-container div.sheet-descriptor div.sheet-collapse, + div.sheet-repeating-container div.sheet-descriptor div.sheet-settings { + grid-column: 1 / 4; } + div.sheet-repeating-container div.sheet-descriptor div.sheet-settings { + grid-template-columns: 1fr; + background-color: rgba(228, 229, 230, 0.2); + padding: 2%; + position: relative; } + div.sheet-repeating-container div.sheet-descriptor div.sheet-settings::before { + position: absolute; + top: -1rem; + left: 50%; + content: ''; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid rgba(228, 229, 230, 0.2); } + +/* SHOW & HIDE SECTIONS + ============================= */ +/***** SETTINGS *****/ +div.sheet-collapse, +.sheet-settings { + opacity: 0; + height: 0; + transition: all .5s; } + +input[name*='collapse']:hover + span, +input[name*='settings']:hover + span { + color: #833247; + transform: scale(1.2); } + +input[name*='collapse']:checked ~ div.sheet-collapse, +input[name*='settings']:checked ~ div.sheet-settings { + opacity: 1; + height: 100%; + transition: all .5s; } + +input[name*='settings']:not(:checked) ~ div.sheet-settings { + display: none; } + +/* SWITCH + ============================= */ +/* SWITCH + ============================= */ +.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: .4s; + background-color: #ccc; + border-radius: 34px; + bottom: 0; + cursor: pointer; + left: 0; + position: absolute; + right: 0; + top: 0; + transition: .4s; } + .sheet-slider:before { + -webkit-transition: .4s; + background-color: white; + border-radius: 50%; + bottom: 4px; + content: ""; + height: 16px; + left: 4px; + position: absolute; + transition: .4s; + width: 16px; } + input:checked + .sheet-slider { + background-color: black; } + input:checked + .sheet-slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); } + input:focus + .sheet-slider { + box-shadow: 0 0 1px black; } + +/* STYLED CHECKBOXES + ============================= */ +label.sheet-styled-checkbox input, label.sheet-styled-checkbox span { + grid-area: 1 / 1 / 1 / 1; + height: 15px; + width: 15px; + position: relative; + left: 20%; } + +label.sheet-styled-checkbox span { + border: 2px solid #833247; + display: inline-block; + color: transparent; + text-align: center; + font-size: 1rem; + border-radius: 2rem; + line-height: 90%; } + +label.sheet-styled-checkbox input { + opacity: 0; + z-index: 2; } + label.sheet-styled-checkbox input[type="checkbox"]:checked + span, + label.sheet-styled-checkbox input[type="radio"]:checked + span { + background-color: #833247; } + +/* FOOTER + ============================= */ +.sheet-footer { + display: block; + text-align: center; } + .sheet-footer span[name="attr_version"]::after { + content: '.'; + margin-right: 0.2rem; } + .sheet-footer span { + font-size: 1rem; } + .sheet-footer img { + margin-left: 2%; + height: 2.5rem; + width: 2.5rem; } + +/* ROLL TEMPLATE STYLE + ============================= */ +.sheet-rolltemplate-rolls div.sheet-template-container { + border: 2px solid black; + border-radius: 0.3rem; + box-shadow: inset 0px 0px 3px 1px #833247; + text-align: center; + font-family: 'fantasy'; + /* 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 { + border: none; } + .sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.fullcrit { + color: #833247; } + .sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult { + background-color: transparent; + border: none; + font-size: 2rem; + padding: unset; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-header { + background-color: whitesmoke; + border-bottom: 2px solid black; + border-top: 2px solid black; + color: #000; + font-size: 2rem; + font-variant: small-caps; + font-weight: bold; + margin-top: -2px; + padding: 3% 2%; + text-transform: capitalize; + -moz-box-shadow: inset 0 0 10px #000000; + -webkit-box-shadow: inset 0 0 10px #000000; + box-shadow: inset 0 0 10px #000000; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body { + background-color: #e4e5e6; + font-size: 1.75rem; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row { + color: #000; + padding: 3% 2%; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0) { + background-color: whitesmoke; + border-top: 2px solid black; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult { + color: whitesmoke; + font-size: 2rem; + font-weight: bold; + cursor: help; + padding: 0 3px 0 3px; + font-weight: bold; } + .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 { + font-size: 1.6rem; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-damage { + background-color: #fff; + padding: 3% 2%; + text-transform: capitalize; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-roll { + display: inline-grid; + grid-template-columns: 1fr 1fr; + width: 100%; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-roll div.sheet-template-col { + padding: 5%; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-roll div.sheet-template-col:nth-of-type(2) { + border-left: 2px solid black; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-roll div.sheet-template-col span { + display: block; } + .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-roll div.sheet-template-col span:last-child { + margin-top: 5%; } diff --git a/Black Void by Penny for a Tale/BlackVoid.html b/Black Void by Penny for a Tale/BlackVoid.html new file mode 100644 index 0000000000..da8ceb9867 --- /dev/null +++ b/Black Void by Penny for a Tale/BlackVoid.html @@ -0,0 +1,55 @@ +

1
2

ip

ip

ip

ip

ip

ip

ip

ip

ip

ip

ip

ip

{{#header}}{{header}}{{/header}}
{{#dice}}
{{dice}}
{{/dice}} +{{#damage}}
{{damage}}
{{/damage}}{{#desc}}
{{desc}}
{{/desc}}
\ No newline at end of file diff --git a/Black Void by Penny for a Tale/README.md b/Black Void by Penny for a Tale/README.md new file mode 100644 index 0000000000..78db29b851 --- /dev/null +++ b/Black Void by Penny for a Tale/README.md @@ -0,0 +1,21 @@ +Roll20 Character Sheet Template +======================= + +## Necessary files + +For Roll20 the files you need are .css, .html, preview.png, and sheet.json. All the others are optional. They are intended to be used by front-end developers with NPM and compiled languages. + +## NPM + +This is a template uses [NPM](https://www.npmjs.com/get-npm) to develop character sheets. + +Dependencies are outlined in the package.json. Just use `npm install` to download them. + +Start the compiles for SCSS & PUG with `npm start`. + +## Compile Files + +If you wish to rename pug.pug and scss.scss be sure to update the package.json names. + +## Unit Tests +QUnit is setup to do unit tests. Tests folder can be removed if you're not wriing tests. diff --git a/Black Void by Penny for a Tale/package.json b/Black Void by Penny for a Tale/package.json new file mode 100644 index 0000000000..d4c660432e --- /dev/null +++ b/Black Void by Penny for a Tale/package.json @@ -0,0 +1,22 @@ +{ + "name": "sheettemplate", + "version": "1.0.0", + "description": "Character sheet development in VS Code", + "main": "index.js", + "dependencies": { + "node-sass": "^4.14.1", + "npm-run-all": "^4.1.5", + "pug": "^2.0.4", + "pug-cli": "^1.0.0-alpha6" + }, + "scripts": { + "start": "npm-run-all --parallel compile:sass compile:pug", + "compile:sass": "node-sass ./src/BlackVoid.scss ./BlackVoid.css -w", + "compile:pug": "pug src/BlackVoid.pug -o ./ -w" + }, + "keywords": [ + "Roll20" + ], + "author": "Cassie Levett", + "license": "ISC" +} diff --git a/Black Void by Penny for a Tale/preview.png b/Black Void by Penny for a Tale/preview.png new file mode 100644 index 0000000000..a204e27cf2 Binary files /dev/null and b/Black Void by Penny for a Tale/preview.png differ diff --git a/Black Void by Penny for a Tale/sheet.json b/Black Void by Penny for a Tale/sheet.json new file mode 100644 index 0000000000..5493ef372e --- /dev/null +++ b/Black Void by Penny for a Tale/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "BlackVoid.html", + "css": "BlackVoid.css", + "authors": "Cassie Levett", + "roll20userid": "557736", + "preview": "preview.png", + "instructions": "Black Void character sheet created for Penny For A Tale" +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/BlackVoid.pug b/Black Void by Penny for a Tale/src/BlackVoid.pug new file mode 100644 index 0000000000..97425cfc46 --- /dev/null +++ b/Black Void by Penny for a Tale/src/BlackVoid.pug @@ -0,0 +1,30 @@ +input(name='attr_version' type='hidden' value='1') + +//- VARIABLES + ============================= +include pug/abstracts/variables.pug + +//- INCLUDES + ============================= +include pug/abstracts/mixins.pug + +//- TABS + ============================= +input.type(name='attr_sheet_type' type='hidden' value='character') +input.display_string(name='attr_character_settings' type='hidden' value='') + +//-PC SHEET + ============================= +include pug/pages/pc.pug + +//-FOOTER + ============================= +include pug/layout/footer.pug + +//-ROLL TEMPLATE + ============================= +include pug/components/rolltemplates.pug + +//- SCRIPTS +script(type="text/worker") + include js/scripts.js diff --git a/Black Void by Penny for a Tale/src/BlackVoid.scss b/Black Void by Penny for a Tale/src/BlackVoid.scss new file mode 100644 index 0000000000..1b73318909 --- /dev/null +++ b/Black Void by Penny for a Tale/src/BlackVoid.scss @@ -0,0 +1,64 @@ +// COLORS & OTHER VARIABLES +// ============================= * + @import 'scss/abstracts/mixins'; + @import 'scss/abstracts/placeholders'; + @import 'scss/abstracts/variables'; + +/* GLOBAL SETTINGS + ============================= */ + @import 'scss/base/base'; + @import 'scss/base/utilities'; + @import 'scss/base/typography'; + +/* GRID + ============================= */ + @import 'scss/layout/grid'; + +span.sheet-display { + border-bottom: 2px dotted $dark; + padding-top: 3%; +} + +input.sheet-toggles { + position: relative; + opacity: 0; + width: 100%; + z-index: 2; + + &:checked + span { + color: $primary; + margin-left: 5%; + } +} + +/* HEADER + ============================= */ + @import 'scss/layout/header'; + +/* PC + ============================= */ + @import 'scss/pages/pc'; + +/* REPEATING SECTIONS + ============================= */ + @import 'scss/components/repeating_container'; + +/* SHOW & HIDE SECTIONS + ============================= */ + @import 'scss/layout/hide'; + +/* SWITCH + ============================= */ + @import 'scss/components/switch'; + +/* STYLED CHECKBOXES + ============================= */ + @import 'scss/components/checkbox'; + +/* FOOTER + ============================= */ + @import 'scss/layout/footer'; + +/* ROLL TEMPLATE STYLE + ============================= */ + @import 'scss/components/rolltemplate'; \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/EProd_Emerald_Gloss.png b/Black Void by Penny for a Tale/src/imgs/EProd_Emerald_Gloss.png new file mode 100644 index 0000000000..5f1fa90a44 Binary files /dev/null and b/Black Void by Penny for a Tale/src/imgs/EProd_Emerald_Gloss.png differ diff --git a/Black Void by Penny for a Tale/src/imgs/EProd_Title_Gloss.png b/Black Void by Penny for a Tale/src/imgs/EProd_Title_Gloss.png new file mode 100644 index 0000000000..1336db3ea6 Binary files /dev/null and b/Black Void by Penny for a Tale/src/imgs/EProd_Title_Gloss.png differ diff --git a/Black Void by Penny for a Tale/src/imgs/Silhouette.png b/Black Void by Penny for a Tale/src/imgs/Silhouette.png new file mode 100644 index 0000000000..8ed525cf13 Binary files /dev/null and b/Black Void by Penny for a Tale/src/imgs/Silhouette.png differ diff --git a/Black Void by Penny for a Tale/src/imgs/SkillCircle.png b/Black Void by Penny for a Tale/src/imgs/SkillCircle.png new file mode 100644 index 0000000000..f15286532f Binary files /dev/null and b/Black Void by Penny for a Tale/src/imgs/SkillCircle.png differ diff --git a/Black Void by Penny for a Tale/src/imgs/SkillCircle.svg b/Black Void by Penny for a Tale/src/imgs/SkillCircle.svg new file mode 100644 index 0000000000..776235aea5 --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/SkillCircle.svg @@ -0,0 +1,7 @@ + + + Skill Circle + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/TraitInnerCircle1.svg b/Black Void by Penny for a Tale/src/imgs/TraitInnerCircle1.svg new file mode 100644 index 0000000000..6e33380baf --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/TraitInnerCircle1.svg @@ -0,0 +1,7 @@ + + + Trait Inner Circle 1 + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/TraitInnerCircle2.svg b/Black Void by Penny for a Tale/src/imgs/TraitInnerCircle2.svg new file mode 100644 index 0000000000..14804c69d3 --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/TraitInnerCircle2.svg @@ -0,0 +1,7 @@ + + + Trait Inner Circle 2 + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/Traitcircle1.svg b/Black Void by Penny for a Tale/src/imgs/Traitcircle1.svg new file mode 100644 index 0000000000..fc251d2274 --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/Traitcircle1.svg @@ -0,0 +1,7 @@ + + + Trait circle 1 + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/Traitcircle2.svg b/Black Void by Penny for a Tale/src/imgs/Traitcircle2.svg new file mode 100644 index 0000000000..6d9407e9c7 --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/Traitcircle2.svg @@ -0,0 +1,7 @@ + + + Trait circle 2 + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/Traitcircle3.svg b/Black Void by Penny for a Tale/src/imgs/Traitcircle3.svg new file mode 100644 index 0000000000..93c39bd242 --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/Traitcircle3.svg @@ -0,0 +1,7 @@ + + + Trait circle 3 + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/Traitcircle4.svg b/Black Void by Penny for a Tale/src/imgs/Traitcircle4.svg new file mode 100644 index 0000000000..cbdcb59138 --- /dev/null +++ b/Black Void by Penny for a Tale/src/imgs/Traitcircle4.svg @@ -0,0 +1,7 @@ + + + Trait circle 4 + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/imgs/background.png b/Black Void by Penny for a Tale/src/imgs/background.png new file mode 100644 index 0000000000..031b039214 Binary files /dev/null and b/Black Void by Penny for a Tale/src/imgs/background.png differ diff --git a/Black Void by Penny for a Tale/src/imgs/logo.png b/Black Void by Penny for a Tale/src/imgs/logo.png new file mode 100644 index 0000000000..9c192b2225 Binary files /dev/null and b/Black Void by Penny for a Tale/src/imgs/logo.png differ diff --git a/Black Void by Penny for a Tale/src/js/scripts.js b/Black Void by Penny for a Tale/src/js/scripts.js new file mode 100644 index 0000000000..9f5cede88e --- /dev/null +++ b/Black Void by Penny for a Tale/src/js/scripts.js @@ -0,0 +1,53 @@ +//Convert Integers to be Negative +const convertIntegerNegative = number => number > 0 ? -Math.abs(number) : number + +//Convert an object with negative numbers +const convertIntegersNegatives = numbers => { + numbers => { + for (let [key, value] of Object.entries(numbers)) { + numbers[key] = convertIntegerNegative(value); + } + return numbers + } +} + +//Pass in eventinfo.triggerName +const findRepeatingField = trigger => trigger.split('_')[1] + +//Pass in eventinfo.triggerName +const getReprowid = trigger => { + const split = trigger.split('_'); + return `${split[0]}_${split[1]}_${split[2]}` +} + +//Pass in an object keep that has the repeating section +//Example repeating_weapon_-m1czg68yzicwhfdpyys_name +const getReprowAttribute = key => { + const getReprowid = processingFunctions.getReprowid(key) + return key.split(`${getReprowid}_`)[1] +} + +//Provide the function with an array of keys to find transations for +//Example ['strenght', 'agility', 'willpower'] +const getTranslations = translationKeys => { + let translations = {} + translationKeys.forEach(key => translations[`${key}`] = getTranslationByKey(key)) + return translations +} + +const parseInteger = string => parseInt(string) || 0 + +//Use for convernting the result of getAttrs from strings into integers +const parseIntegers = numbers => { + for (let [key, value] of Object.entries(numbers)) { + numbers[key] = parseInt(value) || 0 + } + return numbers +} + +const setAttributes = (update, silent) => silent && typeof update === 'object' ? setAttrs(update, {silent:true}) : typeof update === 'object' ? setAttrs(update) : console.error(`${update} is not an object`) + +//returns strength from @{strenght} +const sliceAttr = attribute => attribute.slice(2, -1) + +const sumIntegers = numbers => numbers.reduce((a,b) => a + b, 0) diff --git a/Black Void by Penny for a Tale/src/js/tests/Mocks/Mocks.js b/Black Void by Penny for a Tale/src/js/tests/Mocks/Mocks.js new file mode 100644 index 0000000000..b3770938d6 --- /dev/null +++ b/Black Void by Penny for a Tale/src/js/tests/Mocks/Mocks.js @@ -0,0 +1,35 @@ +let attributes = {}; +let sectionIDS = {}; +const maxAsyncDelay = 2000; +const getRandomInt = function(max) { + return Math.floor(Math.random() * Math.floor(max)); +}; +const getAttrs = function(attrs, callback) { + let values = {}; + setTimeout(() => { + attrs.forEach(i => { + if(i in attributes) values[i] = attributes[i]; + }); + callback(values); + }, getRandomInt(maxAsyncDelay)); +}; +const setAttrs = function(attrs, callback) { + let values = {}; + setTimeout(() => { + Object.keys(attrs).forEach(key => { + attributes[key] = attrs[key]; + //Notify all components + let components = document.querySelectorAll(`[name|="attr_${key}"]`); + components.forEach(c => { + c.value = attrs[key]; + }); + }); + callback(attributes); + }, getRandomInt(maxAsyncDelay)); +}; +const getSectionIDs = function(section, callback) { + setTimeout(() => { + let ids = sectionIDS[section] || []; + callback(ids); + }, getRandomInt(maxAsyncDelay)); +}; \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/js/tests/tests.html b/Black Void by Penny for a Tale/src/js/tests/tests.html new file mode 100644 index 0000000000..6c13cd38e4 --- /dev/null +++ b/Black Void by Penny for a Tale/src/js/tests/tests.html @@ -0,0 +1,18 @@ + + + + + + dropFunctions + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/js/tests/tests.js b/Black Void by Penny for a Tale/src/js/tests/tests.js new file mode 100644 index 0000000000..b87bbdb94a --- /dev/null +++ b/Black Void by Penny for a Tale/src/js/tests/tests.js @@ -0,0 +1,8 @@ +QUnit.module('Unit tests', { + before: () => maxAsyncDelay = 100, //Sets the mock delay for getAttrs and setAttrs to a maximum of 1000ms. + beforeEach: () => { + //Resets attributes before each test + attributes = {} + sectionIDS = {} + } +}) \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/mixins.pug b/Black Void by Penny for a Tale/src/pug/abstracts/mixins.pug new file mode 100644 index 0000000000..f18e78473f --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/mixins.pug @@ -0,0 +1,69 @@ +- const buttonName = name => name.replace(/ /g, '-'); +- const attrName = name => name.replace(/ /g, '_'); +- const removeSpace = name => name.replace(/ /g, ''); +- const toLowerCase = name => name.toLowerCase(); + +mixin textInput(name) + label(data-i18n-title=`enter ${name}` title=`enter ${name}`) + input(data-i18n-placeholder=name name=`attr_${attrName(name)}` title=`@{${attrName(name)}}` type='text' value='') + +mixin numberInput(name) + label(data-i18n-title=`enter ${name}` title=`enter ${name}`) + input(name=`attr_${attrName(name)}` placeholder='0' title=`@{${attrName(name)}}` type='number' value='0') + +mixin checkboxInput(name) + label.styled-checkbox.grid(data-i18n-title=`toggle ${name}` title=`enter ${name}`) + input(name=`attr_${attrName(name)}` title=`@{${attrName(name)}}` type='checkbox' value=name) + span.pictos 3 + +mixin radioInput(name, value) + label.styled-checkbox.grid(data-i18n-title=`${name}` title=`select ${name}`) + input(name=`attr_${attrName(name)}` title=`@{${attrName(name)}}` type='radio' value=value) + span.pictos 3 + +mixin checkboxSymbol(name, symbol) + input.toggles.text-center(name=`attr_${attrName(name)}` title=`@{${attrName(name)}}` type='checkbox' value=name) + span.toggles.text-center.pictos #{symbol} + +mixin textarea(name) + textarea(name=`attr_${attrName(name)}` data-i18n-placeholder=name) + +- const rollTemplate = modifier => `1d12+(${modifier})+(?{Modifiers +/-|0})` +mixin traitButton(name) + button(data-i18n=name name=`roll_${buttonName(name)}` type='roll' value!=`&{template:rolls} {{header=^{${name}}}} {{dice=[[${rollTemplate(`@{${name}_modifier}`)}]]}}`) + +mixin skillButton(name) + button.text-left.font-weight-bold(name=`roll_${buttonName(name)}` type='roll' value!=`&{template:rolls} {{header=@{name}}} {{dice=[[${rollTemplate('@{trait_modifier}+@{rank}+@{modifier}')}]]}}`) + span(name='attr_name') + +mixin repeatingRollButton(name) + button.text-left.font-weight-bold(name=`roll_${buttonName(name)}` type='roll' value!=`&{template:rolls} {{header=@{name}}} {{desc=@{description}}}`) + span(name='attr_name') + +mixin repeatingWeaponButton(name) + button.text-left.font-weight-bold(name=`roll_${buttonName(name)}` type='roll' value!=`&{template:rolls} {{header=@{name}}} {{dice=[[${rollTemplate('@{attack_modifier}')}]]}} {{damage=^{damage} @{damage}}}`) + span(name='attr_name') + +mixin repeatingText(name) + fieldset(class=`repeating_${buttonName(name)}`) + .rowx.grid.descriptor + button.text-left.font-weight-bold(name='roll_button' type='roll') + span(name='attr_name') + +checkboxSymbol('collapse', 'i') + +checkboxSymbol('settings', 'p') + .rowx.collapse + span.collapse.description(name='attr_description') + .rowx.settings + +textInput(`name`) + +textarea('description') + +include mixins/repeatingBenefits.pug + +include mixins/repeatingPowers.pug + +include mixins/repeatingWithChecks.pug + +include mixins/repeatingSkills.pug + +include mixins/repeatingWeapons.pug + diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingBenefits.pug b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingBenefits.pug new file mode 100644 index 0000000000..17a492e959 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingBenefits.pug @@ -0,0 +1,35 @@ +mixin repeatingBenefits(name) + fieldset(class=`repeating_${buttonName(name)}`) + .rowx.grid.descriptor + +repeatingRollButton(name) + +checkboxSymbol('collapse', 'i') + +checkboxSymbol('settings', 'p') + .rowx.collapse + .grid.header + .row + h3.font-smallcaps(data-i18n='benefit') + .grid.text-center.2autocolumn + h3.font-smallcaps(data-i18n='type') + span.text-capitalize(name='attr_type') + .grid.text-center.2autocolumn + h3.font-smallcaps(data-i18n='cost') + span(name='attr_cost') + .row + span.collapse.description(name='attr_description') + .rowx.settings + .grid.mb-1 + .grid.2autocolumn.mb-2 + h3.font-smallcaps(data-i18n='name') + +textInput(`name`) + .grid.2column + .grid.column.2autocolumn + h3.font-smallcaps(data-i18n='type') + select(name='attr_type') + each val in ['attribute', 'background', 'talent', 'other'] + option(data-i18n=val value=val) + .grid.column.2autocolumn + h3.font-smallcaps(data-i18n='cost') + +textInput(`cost`) + .row + h3.font-smallcaps(data-i18n='benefit') + +textarea('description') \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingPowers.pug b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingPowers.pug new file mode 100644 index 0000000000..6bb9421104 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingPowers.pug @@ -0,0 +1,29 @@ +mixin repeatingPowers(name) + fieldset(class=`repeating_${buttonName(name)}`) + .rowx.grid.descriptor + +repeatingRollButton(name) + .row.text-center + span(name='attr_rank') + +checkboxSymbol('collapse', 'i') + +checkboxSymbol('settings', 'p') + .rowx.collapse + .grid + h3.font-smallcaps(data-i18n='description') + h3.font-smallcaps(data-i18n='cost') + span.text-center(name='attr_cost') + .row + span.collapse.description(name='attr_description') + .rowx.settings + .grid.2autocolumn.mb-1 + h3.font-smallcaps(data-i18n='name') + +textInput(`name`) + .grid.2column.mb-1 + .grid.2autocolumn + h3.font-smallcaps(data-i18n='cost') + +textInput(`cost`) + .grid.2autocolumn + h3.font-smallcaps(data-i18n='rank') + +numberInput(`rank`) + .row + h3.font-smallcaps(data-i18n='description') + +textarea('description') \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingSkills.pug b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingSkills.pug new file mode 100644 index 0000000000..6000fbe807 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingSkills.pug @@ -0,0 +1,38 @@ +mixin repeatingSkills(name) + fieldset(class=`repeating_${buttonName(name)}`) + .rowx.grid.descriptor + +skillButton(name) + .row.ellipsis.text-center + span(name='attr_specialization') + .row.text-center + span(name='attr_rank') + +checkboxSymbol('collapse', 'i') + +checkboxSymbol('settings', 'p') + .rowx.collapse + .grid.benefit-cost-row + h3.font-smallcaps(data-i18n='description') + h3.font-smallcaps(data-i18n='cost') + span.text-center(name='attr_cost') + .row + span.collapse.description(name='attr_description') + .rowx.settings + .grid.mb-1 + h3.font-smallcaps(data-i18n='name') + +textInput(`name`) + h3.font-smallcaps(data-i18n='rank') + +numberInput(`rank`) + .grid.mb-1 + h3.font-smallcaps(data-i18n='specialization') + +textInput(`specialization`) + h3.font-smallcaps(data-i18n='cost') + +textInput(`cost`) + .grid.mb-1 + h3.font-smallcaps(data-i18n='trait') + select(name='attr_trait_modifier' value='@{agility_modifier}') + each val in trait + option(data-i18n=val value=`@{${val}_modifier}`) + h3.font-smallcaps(data-i18n='modifier') + +numberInput(`modifier`) + .row + h3.font-smallcaps(data-i18n='description') + +textarea('description') \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingWeapons.pug b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingWeapons.pug new file mode 100644 index 0000000000..ccc28ecfeb --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingWeapons.pug @@ -0,0 +1,23 @@ +mixin repeatingWeapons(name) + fieldset(class=`repeating_${buttonName(name)}`) + .rowx.grid.descriptor + +repeatingWeaponButton(name) + each val in weaponFields + .grid.column.text-center.mb-2.ellipsis(class=val) + span(name=`attr_${attrName(val)}`) + +checkboxSymbol('collapse', 'i') + +checkboxSymbol('settings', 'p') + .rowx.collapse + each val in ['properties', 'special', 'description'] + .row.mb-1 + h3(data-i18n=val) + span.collapse.description(name=`attr_${val}`) + .rowx.settings + .grid.weapon.mb-1 + each val in ['name', ...weaponFields] + .grid.mb-2(class=val) + h3.font-smallcaps(data-i18n=val) + +textInput(val) + .row + h3.font-smallcaps(data-i18n='description') + +textarea('description') diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingWithChecks.pug b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingWithChecks.pug new file mode 100644 index 0000000000..7672993012 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/mixins/repeatingWithChecks.pug @@ -0,0 +1,12 @@ +mixin repeatingWithChecks(name) + fieldset(class=`repeating_${buttonName(name)}`) + .rowx.grid.descriptor + +checkboxInput('check') + +repeatingRollButton(name) + +checkboxSymbol('collapse', 'i') + +checkboxSymbol('settings', 'p') + .rowx.collapse + span.collapse.description(name='attr_description') + .rowx.settings + +textInput(`name`) + +textarea('description') \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/abstracts/variables.pug b/Black Void by Penny for a Tale/src/pug/abstracts/variables.pug new file mode 100644 index 0000000000..fe618eaa86 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/abstracts/variables.pug @@ -0,0 +1,6 @@ +- const imgsrc = 'https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/' + +- const trait = ['intellect', 'agility', 'persuasion', 'awareness', 'presence', 'stamina', 'willpower', 'strength']; +- const movementSpeeds = ['walking speed', 'running speed (x2)', 'sprinting speed (x4)'] +- const defenceValues = ['agility modifier', 'skill modifier', 'shield modifier', 'other modifiers'] +- const weaponFields = ['type', 'size', 'range', 'attack modifier', 'speed', 'damage', 'properties', 'special'] \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/components/rolltemplates.pug b/Black Void by Penny for a Tale/src/pug/components/rolltemplates.pug new file mode 100644 index 0000000000..18ecfe80ce --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/components/rolltemplates.pug @@ -0,0 +1,20 @@ +.rolltemplates + rolltemplate.sheet-rolltemplate-rolls + .sheet-template-container + // - Display a header on the template - + .sheet-template-header + | {{#header}}{{header}}{{/header}} + // - Display the dice roll in the template - + .sheet-template-body + | {{#dice}} + .sheet-template-row {{dice}} + | {{/dice}} + | {{#damage}} + .sheet-template-row.sheet-template-damage + span.sheet-template-desc {{damage}} + | {{/damage}} + // - Display a description. This is great for text included with a roll - + | {{#desc}} + .sheet-template-row + span.sheet-template-desc {{desc}} + | {{/desc}} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/layout/footer.pug b/Black Void by Penny for a Tale/src/pug/layout/footer.pug new file mode 100644 index 0000000000..4a7f7519d1 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/layout/footer.pug @@ -0,0 +1,5 @@ +.footer + span Version + span(name='attr_version') + span Original template created by Emerald Productions, LLC + img(src="https://raw.githubusercontent.com/clevett/roll20-SheetTemplate/master/src/imgs/EProd_Emerald_Gloss.png", alt="Emerald Productions logo of an E") \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/pages/pc.pug b/Black Void by Penny for a Tale/src/pug/pages/pc.pug new file mode 100644 index 0000000000..28a300616d --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/pages/pc.pug @@ -0,0 +1,174 @@ +.pc.character.container + input(name='attr_page' type='hidden' value='one') + + include pc/header.pug + + .page-one + .grid.box + include pc/page-one/character-info.pug + + .grid.3column.personality-row + .grid.column.personality + .row + h2.text-center.text-uppercase(data-i18n='personality') + each val in ['desire and motivation', 'dislikes secrets regrets', 'philosophy principles'] + .row + h3.colon.font-smallcaps(data-i18n=val) + +textarea(val) + + .grid.column.mannerism + .row + h2.text-center.text-uppercase(data-i18n='mannerism') + each val in ['quirk and habits', 'sayings'] + .row + h3.colon.font-smallcaps(data-i18n=val) + +textarea(val) + + .grid.column.origin + .row + h2.text-center.text-uppercase(data-i18n='origin') + .row + h3.colon.font-smallcaps(data-i18n='ancestry and relations') + +textarea('ancestry and relations') + .grid.2autocolumn.bottom-border + h3.colon.font-smallcaps(data-i18n='caste') + +textInput('caste') + .row + h3.colon.font-smallcaps(data-i18n='faction and allegiance') + +textarea('faction and allegiance') + each val in ['occupation', 'patron'] + .grid.2autocolumn.bottom-border + h3.colon.font-smallcaps(data-i18n=val) + +textInput(val) + + .mt-1.wastah-section + .column.wastah + .row.mt-1.mb-1.box + .row + h2.text-center.text-uppercase(data-i18n='wastah') + .repeating-container + +repeatingWithChecks('wastah') + include pc/page-one/sanity.pug + + .grid.column.traits + .grid.experience.4column + .row.header + h2.text-center.text-uppercase(data-i18n=val) + .row.input + +numberInput('experience points') + each val in trait + .grid.trait.4column(class=val) + .row.header + +traitButton(val) + .row.modifier + +numberInput(`${val} modifier`) + .row.score + +numberInput(`${val} score`) + + .column.enlightenment + .row.mt-1.mb-1.box + .row + h2.text-center.text-uppercase(data-i18n='enlightenment') + .repeating-container + +repeatingWithChecks('enlightenment') + include pc/page-one/health.pug + + include pc/page-one/skills.pug + + .page-two + .character-history + .grid.box.mb-2 + each val in ['character history', 'friend allies', 'known enemies', 'notable people', 'notable experiences'] + .rowx.grid + .header + h2.font-smallcaps(data-i18n=val) + +checkboxSymbol(`${val} collapse`, 'i') + +checkboxSymbol(`${val} settings`, 'p') + .collapse + span(name=`attr_${attrName(val)}`) + .settings + +textarea(val) + + .mt-1.movement-section + .column.movement-column + .grid.box.movement + .text-center + h2(data-i18n='movement') + span.subheader(data-i18n='(km/hour)') + each val in movementSpeeds + - const attrName = val.includes(' (') ? val.split(' (')[0] : val + .grid.2autocolumn + h3.font-smallcaps.colon(data-i18n=val) + +textInput(attrName) + .grid.2autocolumn + h3.font-smallcaps.colon(data-i18n='other modifiers') + +textInput('speed modifier') + .grid.2autocolumn.speed + .header + h3.font-smallcaps.colon(data-i18n='combat speed') + span.subheader(data-i18n='(meters/round)') + .speed-total + +numberInput('combat speed') + + .grid.box.defence-value + .grid + h2(data-i18n="defence value") + each val in defenceValues + .grid.2autocolumn + h3.font-smallcaps.colon(data-i18n=val) + +textInput(val) + .grid.2autocolumn + .header + h3.text-uppercase(data-i18n='defence value') + .defence-value-total + +numberInput('defence value') + + .column.armor-column + .grid.header + h2(data-i18n="armour, tattoo's & graftings") + .grid.content + each val in ['head', 'torso', 'arms', 'legs'] + .grid.armor(class=val) + .grid.column.armour-input + .header + h3.text-center(data-i18n=val) + +numberInput(val) + .grid.column.body + +textarea(`${val} description`) + .grid.2column + .grid.column + .grid.header + h3.colon.text-center(data-i18n='bulk, properties, & other') + .grid + +textarea('bulk') + .grid.column.damage-reduction.2autocolumn + .header + h2(data-i18n='damage reduction') + span.subheader(data-i18n='(accumulated total)') + .grid.content + +numberInput('damage reduction') + + .column.wealth-column + .grid.box.wealth + h2(data-i18n='wealth') + +textarea('wealth') + + .grid.box.property + h2(data-i18n='property / assets') + +textarea('property assets') + + .mt-1.box.equipment-section + .row + h2.text-uppercase.text-center(data-i18n='equipment') + .grid.equipment + +textarea('equipment') + + .mt-1.box.weapons-section + .grid.headers + h2.text-uppercase.text-left(data-i18n='weapons') + each val in weaponFields + h3.text-center.font-smallcaps(data-i18n=val) + .grid.weapons + .repeating-container + +repeatingWeapons('weapons') + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/pages/pc/header.pug b/Black Void by Penny for a Tale/src/pug/pages/pc/header.pug new file mode 100644 index 0000000000..ab5b29a6d0 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/pages/pc/header.pug @@ -0,0 +1,17 @@ +.grid.logo-row.mb-2 + .column.grid.2autocolumn.bottom-border + h2.colon.font-smallcaps(data-i18n='player name') + +textInput('player name') + .column.grid.page-select + .header + h2.colon.font-smallcaps(data-i18n='page') + .grid.button + input(name='attr_page' type='radio' value='one' checked) + .option + span 1 + .grid.button + input(name='attr_page' type='radio' value='two') + .option + span 2 + .column.grid.logo + img(src=`${imgsrc}/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/logo.png` alt='Black Void') diff --git a/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/character-info.pug b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/character-info.pug new file mode 100644 index 0000000000..9fc4d89131 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/character-info.pug @@ -0,0 +1,19 @@ +.grid.mb-2.character-info + .grid.bottom-border.name-row + each val in ['name', 'species', 'homeworld'] + .column.grid.2autocolumn + h2.colon.font-smallcaps(data-i18n=val) + +textInput(val) + .grid.bottom-border.5column.gender-row + each val in ['gender', 'age', 'skin', 'eyes', 'hair'] + .column.grid.2autocolumn + h2.colon.font-smallcaps(data-i18n=val) + +textInput(val) + .grid.bottom-border.2column.build-row + each val in ['build', 'appearence'] + .column.grid.2autocolumn + h2.colon.font-smallcaps(data-i18n=val) + +textInput(val) + .grid.bottom-border + +textInput('notes') + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/health.pug b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/health.pug new file mode 100644 index 0000000000..75353b05d2 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/health.pug @@ -0,0 +1,26 @@ +.grid.health-row + .grid.health + .grid.column.input + +numberInput('health') + .grid.column.header + h2.text-uppercase(data-i18n='health') + .grid.total + .grid.column.input + +numberInput('total health') + .grid.column.header + h2.font-smallcaps(data-i18n='total health') + .grid.anxious-hurt + .grid.column.input + +numberInput('hurt') + .grid.column.header + h2.font-smallcaps(data-i18n='hurt (-1 penality)') + .grid.disturbed-injured + .grid.column.input + +numberInput('injured') + .grid.column.header + h2.font-smallcaps(data-i18n='injured (-3 penality)') + .grid.dead + .grid.column.input + +numberInput('dead') + .grid.column.header + h2.text-uppercase(data-i18n='dead') \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/sanity.pug b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/sanity.pug new file mode 100644 index 0000000000..8c6e24d7c4 --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/sanity.pug @@ -0,0 +1,24 @@ +.grid.sanity-row + .grid.sanity + .grid.column.input + +numberInput('sanity') + .grid.column.header + h2.text-uppercase(data-i18n='sanity') + .grid.total + .grid.column.input + +numberInput('total sanity') + .grid.column.header + h2.font-smallcaps(data-i18n='total sanity') + .grid.anxious-hurt + .grid.column.input + +numberInput('anxious') + .grid.column.header + h2.font-smallcaps(data-i18n='anxious (+1 to madness)') + .grid.disturbed-injured + .grid.column.input + +numberInput('disturbed') + .grid.column.header + h2.font-smallcaps(data-i18n='disturbed (+3 to madness)') + .grid.2autocolumn.madness + h2.text-uppercase(data-i18n='madness') + +textInput('madness') \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/skills.pug b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/skills.pug new file mode 100644 index 0000000000..60145f515f --- /dev/null +++ b/Black Void by Penny for a Tale/src/pug/pages/pc/page-one/skills.pug @@ -0,0 +1,31 @@ +.skills-row + .column.benefits + .grid.box.mb-2.benefit + .grid + h2.text-uppercase(data-i18n='Background / Attributes / Talents') + .repeating-container + +repeatingBenefits('benefit') + .grid.powers.box + .grid.box + .grid.header + h2.text-uppercase(data-i18n='powers') + h3.font-smallcaps.text-center(data-i18n='rank') + .repeating-container + +repeatingPowers('powers') + + .column.skills + .grid.box.mb-2 + .grid.header + h2.text-uppercase(data-i18n='skills') + h3.font-smallcaps.text-center(data-i18n='specialization') + h3.font-smallcaps.text-center(data-i18n='rank') + .repeating-container + +repeatingSkills('skills') + .grid.box + .grid.header + h2.text-uppercase(data-i18n='combat skills') + h3.font-smallcaps.text-center(data-i18n='specialization') + h3.font-smallcaps.text-center(data-i18n='rank') + .repeating-container + +repeatingSkills('combat skills') + \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/abstracts/_mixins.scss b/Black Void by Penny for a Tale/src/scss/abstracts/_mixins.scss new file mode 100644 index 0000000000..f8c5523adc --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/abstracts/_mixins.scss @@ -0,0 +1,23 @@ +@mixin traitImage($image) { + background-image: $image; + background-position: center; + background-repeat: no-repeat; + background-size: contain; + content: ''; + height: 100%; + position: absolute; + width: 100%; + z-index: -1; +} + +@mixin collapseSettingsInputs($endColumn) { + input[name*='collapse'], + input[name*='collapse'] + span { + grid-area: #{1} / #{$endColumn - 1} / #{1} / #{$endColumn - 1}; + } + + input[name*='settings'], + input[name*='settings'] + span { + grid-area: #{1} / $endColumn / #{1} / $endColumn; + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/abstracts/_placeholders.scss b/Black Void by Penny for a Tale/src/scss/abstracts/_placeholders.scss new file mode 100644 index 0000000000..e615b8efab --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/abstracts/_placeholders.scss @@ -0,0 +1,36 @@ +%middle-column { + margin: 0px 0.5%; + vertical-align: top; + width: 50%; +} + +%partial-column { + display: inline-block; + vertical-align: top; + width: 24.5%; +} + +%circle-input { + label { + display: grid; + + & > input { + height: 4.5rem; + width: 4.5rem; + border: none; + border-radius: 10rem; + align-self: center; + justify-self: center; + position: relative; + z-index: 2; + } + } +} + +%display-block { + display: block; +} + +%display-none { +display: none; +} diff --git a/Black Void by Penny for a Tale/src/scss/abstracts/_variables.scss b/Black Void by Penny for a Tale/src/scss/abstracts/_variables.scss new file mode 100644 index 0000000000..d661ecd425 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/abstracts/_variables.scss @@ -0,0 +1,24 @@ +$primary: rgb(131, 50, 71); +$secondary:rgb(91, 28, 42); +$light: #b9dadf; +$dark: hsl(0, 6%, 0%); +$dark-font: #000; +$gray:#e4e5e6; +$transparentGray: hsla(0, 0%, 30%, 0.0784313725490196); +$white: hsl(0, 0%, 96%); + +//Box Shadows +$box-shadow: inset 0px 0px 3px 1px rgba($dark, .3); +$box-shadow-outset: -1px -1px 1px 1px rgba($dark, .5); + +//Transition buttons +$button-scale-small: scale(1.05); +$button-scale-medium: scale(1.3); + +$trait-circle1: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle1.svg'); +$trait-circle2: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle2.svg'); +$trait-circle3: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle3.svg'); +$trait-circle4: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Traitcircle4.svg'); +$trait-inner-circle1: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle1.svg'); +$trait-inner-circle2: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/TraitInnerCircle2.svg'); +$silhouette: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/blackvoidv1/Black%20Void%20by%20Penny%20for%20a%20Tale/src/imgs/Silhouette.png'); \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/base/_animations.scss b/Black Void by Penny for a Tale/src/scss/base/_animations.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Black Void by Penny for a Tale/src/scss/base/_base.scss b/Black Void by Penny for a Tale/src/scss/base/_base.scss new file mode 100644 index 0000000000..4c75e759c2 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/base/_base.scss @@ -0,0 +1,153 @@ +/* GLOBAL SETTINGS +============================= */ +* { + box-sizing: border-box; + font-family: sans-serif; + margin: 0; + padding: 0; + font-size: 62.5%; //1rem = 10px +} + +button { + font-family: serif; + transition: all .2s; + box-shadow: $box-shadow-outset; + + @extend .sheet-ellipsis; + @extend .sheet-font-smallcaps; + + &:before { + display: none; + } + + &:focus, + &:hover, + &:active { + background: none; + background-color: $primary !important; + color: $white; + transform: $button-scale-small; + box-shadow: none; + } + + &[type="roll"], + &[type="action"] { + background-color: $white; + border: { + bottom : 1px solid #666; + bottom-right-radius: 1px; + color : hsl(0, 0%, 70%); + radius : 0.25rem; + right : 0.02rem solid hsl(0, 0%, 20%); + style : outset; + } + padding: 0.2rem 0.5rem !important; + } +} + +div { + background-color: transparent; + width: 100%; +} + +fieldset { + background-color: transparent; +} + +h2 { + &.sheet-label { + border-bottom: 0.15em solid $dark; + text-align: center; + margin-left: 3%; + } +} + +%placeholder { + &:placeholder-shown { + border: 0.1em dotted $primary; + background-color: #96939326; + } + + &:hover, &:focus { + color: $white; + background-color: $secondary; + } +} + +input { + &[type="text"], + &[type="number"] { + background-color: transparent; + + border: { + left : 0rem; + radius: 0rem; + right : 0rem; + top : 0rem; + }; + height: 2.1rem; + width: 100%; + + @extend %placeholder; + } + &[type='number'] { + text-align: center; + width: 100%; + } + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } +} + +label { + margin-bottom: 0px; + padding-right: 0px; +} + +select { + margin-bottom: 0px; + vertical-align: bottom; + border: 2px solid $primary; + font-size: 1.5rem; + font-weight: bold; + text-transform: capitalize; + width: 100%; +} + +option { + font-size: 1.5rem; +} + +span { + font-size: 1.5rem; + word-break: break-word; +} + +textarea { + background-color: transparent; + text-align: left; + border: none; + font-size : 1.5rem; + font-weight : normal; + min-height : 5rem; + line-height : 1.8rem; + overflow : hidden; + overflow-wrap : break-word; + padding : 2px; + resize : vertical; + vertical-align: top; + overflow: scroll; + + @extend %placeholder; +} + +.charsheet { + width: 880px; + + div.sheet-row { + display: inline-grid; + } +} diff --git a/Black Void by Penny for a Tale/src/scss/base/_typography.scss b/Black Void by Penny for a Tale/src/scss/base/_typography.scss new file mode 100644 index 0000000000..cf8e96f039 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/base/_typography.scss @@ -0,0 +1,58 @@ +h1 { + color: $primary; + text-transform: capitalize; + font-family: serif; + font-size: 2.5rem; +} + +h2 { + font-size: 1.5rem; + line-height: 2rem; + text-transform: capitalize; +} + +h3 { + font-size: 1.25rem; + line-height: 2rem; + text-transform: capitalize; +} + +label { + font-size: 3rem; +} + +.sheet-pictos { + font-family: "pictos"; +} + +.sheet-d20 { + font-family: "dicefontd20"; +} + +.sheet-font-smallcaps { + font-variant: small-caps; +} + +.sheet-text-capitalize { + text-transform: capitalize; +} + +.sheet-text-uppercase { + text-transform: uppercase; +} + +.sheet-text-center { + text-align: center; +} + +.sheet-text-left { + text-align: left !important; +} + +.sheet-text-right { + text-align: right; +} + +.sheet-text-primary { + color: $primary; +} diff --git a/Black Void by Penny for a Tale/src/scss/base/_utilities.scss b/Black Void by Penny for a Tale/src/scss/base/_utilities.scss new file mode 100644 index 0000000000..59f54a0027 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/base/_utilities.scss @@ -0,0 +1,75 @@ + +div.sheet-background { + background-color: $transparentGray; +} + +.sheet-border { + border: 0.15rem solid $gray; +} + +.sheet-bottom-border { + border-bottom: 0.2rem solid $dark; +} + +.sheet-description { + white-space: pre-line; +} + +.sheet-ellipsis { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.sheet-font-weight-bold { + font-weight: bold; +} + +.sheet-inline-block { + display: inline-block; +} + +.sheet-text-vertical { + transform: rotate(180deg); + writing-mode: vertical-lr; +} + +@for $i from 1 through 6 { + div.sheet-#{$i}column { + grid-template-columns: repeat($i, 1fr); + } +} + +div.sheet-2autocolumn { + grid-template-columns: auto 1fr; +} + +div.sheet-2autocolumn-reverse { + grid-template-columns: 1fr auto; +} + +div.sheet-4autocolumn { + grid-template-columns: auto 1fr auto 1fr; +} + +div.sheet-3columnbutton { + grid-template-columns: auto 1fr 3rem; +} + +@for $i from 1 through 5 { + .sheet-mb-#{$i} { + margin-bottom: (1% * $i); + } + + .sheet-mt-#{$i} { + margin-top: (1% * $i); + } + + .sheet-pb-#{$i} { + padding-bottom: (1% * $i); + } + + .sheet-pt-#{$i} { + padding-top: (1% * $i); + } +} diff --git a/Black Void by Penny for a Tale/src/scss/components/_checkbox.scss b/Black Void by Penny for a Tale/src/scss/components/_checkbox.scss new file mode 100644 index 0000000000..9cadcac47c --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/components/_checkbox.scss @@ -0,0 +1,29 @@ +label.sheet-styled-checkbox { + input, span { + grid-area: 1 / 1 / 1 / 1; + height: 15px; + width: 15px; + position: relative; + left: 20%; + } + + span { + border: 2px solid $primary; + display: inline-block; + color: transparent; + text-align: center; + font-size: 1rem; + border-radius: 2rem; + line-height: 90%; + } + + input { + opacity: 0; + z-index: 2; + + &[type="checkbox"]:checked + span, + &[type="radio"]:checked + span { + background-color: $primary; + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/components/_repeating_container.scss b/Black Void by Penny for a Tale/src/scss/components/_repeating_container.scss new file mode 100644 index 0000000000..2ea6afc3d0 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/components/_repeating_container.scss @@ -0,0 +1,79 @@ +div.sheet-repeating-container { + button { + font-variant: none; + width: fit-content; + font-size: 1.5rem; + padding: 1% 2%; + + &[type='roll'] { + width: 100%; + } + } + + textarea { + margin-top: 2%; + } + + .repcontrol { + margin-top: 5%; + } + + .repcontrol_del { + font-family: "pictos"; + position: relative; + } + + .repitem { + margin-bottom: 2%; + } + + div.sheet-descriptor { + grid-template-columns: 1fr repeat(2, 1.5rem); + align-items: center; + justify-items: center; + + button[type='roll'] { + min-height: 2rem; + } + + input[type='text'] { + @extend .sheet-bottom-border + } + + div.sheet-collapse { + padding-left: 5%; + } + + input[name='attr_collapse'] + span, + input[name='attr_settings'] + span { + font-size: 1.5rem; + } + + @include collapseSettingsInputs(3) + + div.sheet-collapse, + div.sheet-settings { + grid-column: 1 / 4; + } + + div.sheet-settings { + grid-template-columns: 1fr; + background-color: rgba($gray, .2); + padding: 2%; + position: relative; + + &::before { + position: absolute; + top: -1rem; + left: 50%; + content: ''; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + + border-bottom: 10px solid rgba($gray, .2); + } + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/components/_rolltemplate.scss b/Black Void by Penny for a Tale/src/scss/components/_rolltemplate.scss new file mode 100644 index 0000000000..53a55a02ce --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/components/_rolltemplate.scss @@ -0,0 +1,104 @@ +.sheet-rolltemplate-rolls { + div.sheet-template-container { + border: 2px solid $dark; + border-radius: 0.3rem; + box-shadow: inset 0px 0px 3px 1px $primary; + text-align: center; + font-family: 'fantasy'; + + /* DICE ROLL STYLES + ----------------------------- */ + .inlinerollresult.fullfail, + .inlinerollresult.fullcrit, + .inlinerollresult.importantroll { + border: none; + } + + .inlinerollresult.fullfail, .inlinerollresult.fullcrit { + color: $primary; + } + + .inlinerollresult { + background-color: transparent; + border: none; + font-size: 2rem; + padding: unset; + } + + + div.sheet-template-header { + background-color: $white; + border-bottom: 2px solid $dark; + border-top: 2px solid $dark; + color: $dark-font; + font-size: 2rem; + font-variant: small-caps; + font-weight: bold; + margin-top: -2px; + padding: 3% 2%; + text-transform: capitalize; + -moz-box-shadow: inset 0 0 10px #000000; + -webkit-box-shadow: inset 0 0 10px #000000; + box-shadow: inset 0 0 10px #000000; + } + + div.sheet-template-body { + background-color: $gray; + font-size: 1.75rem; + + div.sheet-template-row { + color: $dark-font; + padding: 3% 2%; + + &:nth-child(2n+0) { + background-color: $white; + border-top: 2px solid $dark; + } + + span { + &.sheet-inlinerollresult { + color: $white; + font-size: 2rem; + font-weight: bold; + cursor: help; + padding: 0 3px 0 3px; + font-weight: bold; + } + + &.sheet-percent, + &.sheet-template-desc { + font-size: 1.6rem; + } + } + } + + div.sheet-template-damage { + background-color: #fff; + padding: 3% 2%; + text-transform: capitalize; + } + + div.sheet-template-roll { + display: inline-grid; + grid-template-columns: 1fr 1fr; + width: 100%; + + div.sheet-template-col { + padding: 5%; + + &:nth-of-type(2) { + border-left: 2px solid $dark; + } + + span { + display: block; + + &:last-child { + margin-top: 5%; + } + } + } + } + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/components/_switch.scss b/Black Void by Penny for a Tale/src/scss/components/_switch.scss new file mode 100644 index 0000000000..7d1cb907e5 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/components/_switch.scss @@ -0,0 +1,57 @@ +/* SWITCH + ============================= */ +.sheet-switch { + position: relative; + display: inline-block; + width: 50px; + height: 24px; + + /* Hide default HTML checkbox */ + input { + opacity: 0; + width: 0; + height: 0; + } + +} + +/* The slider */ +.sheet-slider { + -webkit-transition: .4s; + background-color: #ccc; + border-radius: 34px; + bottom: 0; + cursor: pointer; + left: 0; + position: absolute; + right: 0; + top: 0; + transition: .4s; + + &:before { + -webkit-transition: .4s; + background-color: white; + border-radius: 50%; + bottom: 4px; + content: ""; + height: 16px; + left: 4px; + position: absolute; + transition: .4s; + width: 16px; + } + + input:checked + & { + background-color: black; + + &:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); + } + } + + input:focus + & { + box-shadow: 0 0 1px black; + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/layout/_footer.scss b/Black Void by Penny for a Tale/src/scss/layout/_footer.scss new file mode 100644 index 0000000000..cc5fc61226 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/layout/_footer.scss @@ -0,0 +1,21 @@ +.sheet-footer { + display: block; + text-align: center; + + span[name="attr_version"] { + &::after { + content: '.'; + margin-right: 0.2rem; + } + } + + span { + font-size: 1rem; + } + + img { + margin-left: 2%; + height: 2.5rem; + width: 2.5rem; + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/layout/_grid.scss b/Black Void by Penny for a Tale/src/scss/layout/_grid.scss new file mode 100644 index 0000000000..7a4ad3888c --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/layout/_grid.scss @@ -0,0 +1,20 @@ +.sheet-grid { + display: inline-grid; + grid-column-gap: 1%; + grid-row-gap: 0.5%; +} + +%gridRowCol { + display: inline-grid; + overflow: hidden; + grid-auto-rows: min-content; + grid-column-gap: 1%; +} + +%traitRowTop { + grid-template-rows: 2rem repeat(2, 1fr); +} + +%headerRowBottom { + grid-template-rows: repeat(2, 1fr) 2rem; +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/layout/_header.scss b/Black Void by Penny for a Tale/src/scss/layout/_header.scss new file mode 100644 index 0000000000..78b3aa8abb --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/layout/_header.scss @@ -0,0 +1,11 @@ +// div.sheet- { +// margin-top: 2%; +// border-top: 2px solid $primary; +// border-bottom: 2px solid $primary; +// text-align: center; +// background: $light; /* Old browsers */ +// background: -moz-linear-gradient(top, $light 0%, $secondary 50%, $light 100%); /* FF3.6-15 */ +// background: -webkit-linear-gradient(top, $light 0%,$secondary 50%,$light 100%); /* Chrome10-25,Safari5.1-6 */ +// background: linear-gradient(to bottom, $light 0%,$secondary 50%,$light 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ +// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='$light', endColorstr='$light',GradientType=0 ); /* IE6-9 */ +// } \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/layout/_hide.scss b/Black Void by Penny for a Tale/src/scss/layout/_hide.scss new file mode 100644 index 0000000000..7907c0d4bd --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/layout/_hide.scss @@ -0,0 +1,29 @@ +/***** SETTINGS *****/ +input[name='attr_page']:not([value='one']) ~ div.sheet-page-one, +input[name='attr_page']:not([value='two']) ~ div.sheet-page-two { + @extend %display-none; +} + +div.sheet-collapse, +.sheet-settings { + opacity: 0; + height: 0; + transition: all .5s; +} + +input[name*='collapse']:hover + span, +input[name*='settings']:hover + span { + color: $primary; + transform: scale(1.2); +} + +input[name*='collapse']:checked ~ div.sheet-collapse, +input[name*='settings']:checked ~ div.sheet-settings { + opacity: 1; + height: 100%; + transition: all .5s; +} + +input[name*='settings']:not(:checked) ~ div.sheet-settings { + display: none; +} diff --git a/Black Void by Penny for a Tale/src/scss/layout/_navigation.scss b/Black Void by Penny for a Tale/src/scss/layout/_navigation.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Black Void by Penny for a Tale/src/scss/pages/pc.scss b/Black Void by Penny for a Tale/src/scss/pages/pc.scss new file mode 100644 index 0000000000..4d99f51f83 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/pc.scss @@ -0,0 +1,165 @@ +div.sheet-pc { + padding: 2% 1%; + grid-template-columns: 3fr 2fr 0.5fr; + grid-row-gap: 1%; + + input[type='number'] { + width: 100%; + } + + .sheet-colon:after { + content: ':' + } + + div.sheet-box { + background-color: $gray; + -moz-box-shadow: inset 0 0 10px #00000024; + -webkit-box-shadow: inset 0 0 10px #00000024; + box-shadow: inset 0 0 10px #00000024; + padding: 2% 1%; + } + + div.sheet-logo-row { + grid-column-gap: 5%; + align-items: end; + grid-template-columns: 1fr 20% 250px; + + div.sheet-page-select { + grid-template-columns: auto 1fr 1fr; + + div.sheet-button { + color: black; + border: 2px solid black; + text-align: center; + border-radius: 10px; + + div.sheet-option, + input { + grid-area: 1 / 1 / 1 / 1; + min-height: 2rem; + } + + input:checked ~ div.sheet-option { + color: white; + background-color: $primary; + border-radius: 0.8rem; + } + } + + input[type='radio'] { + opacity: 0; + height: auto; + width: 100%; + z-index: 2; + } + } + + div.sheet-logo { + justify-content: end; + + img { + max-height: 100px; + } + } + } + + div.sheet-character-info { + grid-row-gap: 5%; + + h2 { + margin-right: 0.5rem; + } + + div.sheet-name-row { + grid-template-columns: 2fr 1fr 2fr; + } + } + + div.sheet-personality-row { + align-items: start; + grid-row-gap: 5%; + + h2 { + font-size: 2rem; + } + + h3 { + font-size: 1.5rem; + margin-right: 0.5rem; + } + + textarea { + resize: none; + overflow: hidden; + } + + div.sheet-personality, + div.sheet-origin { + textarea { + height: 40px; + } + } + + div.sheet-mannerism { + textarea { + height: 86px; + } + } + } + + @import 'sections/wastah-section'; + + div.sheet-traits { + grid-gap: unset; + @extend %middle-column; + + h2 { + font-size: 1.2rem; + } + + @import 'traits/trait'; + + @import 'traits/intellect'; + @import 'traits/agility'; + @import 'traits/persuasion'; + + @import 'traits/experience'; + + @import 'traits/awareness'; + @import 'traits/presence'; + @import 'traits/stamina'; + @import 'traits/willpower'; + @import 'traits/strength'; + + } + + @import 'skills-row/skills-row'; + + div.sheet-character-history { + div.sheet-rowx { + grid-template-columns: 1fr repeat(2, 1.5rem); + } + + @include collapseSettingsInputs(3) + + div.sheet-collapse, + div.sheet-settings { + grid-column: 1 / 4; + margin: 1% 2% + } + + textarea { + min-height: 50px; + height: 75px; + border: 1px dotted $primary; + } + + div.sheet-box { + min-height: 20rem; + } + } +} + +@import 'sections/movement-section'; + +@import 'sections/weapons-section'; diff --git a/Black Void by Penny for a Tale/src/scss/pages/sections/movement-section.scss b/Black Void by Penny for a Tale/src/scss/pages/sections/movement-section.scss new file mode 100644 index 0000000000..39a1c72940 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/sections/movement-section.scss @@ -0,0 +1,165 @@ +div.sheet-movement-section { + display: inline-block; + + h2 { + @extend .sheet-text-center; + @extend .sheet-text-uppercase; + } + + input[type='number'], + input[type='text'] { + text-align: center; + } + + span.sheet-subheader { + font-size: 1.3rem; + } + + div.sheet-movement-column, + div.sheet-wealth-column { + @extend %partial-column; + } + + div.sheet-speed-total, + div.sheet-defence-value-total { + position: relative; + height: 5rem; + + &::before { + @include traitImage($trait-inner-circle2); + z-index: 0; + height: 5rem + } + + label { + height: 100%; + width: 100%; + } + + @extend %circle-input; + } + + div.sheet-speed-total { + &::before { + transform: rotate(-125deg); + } + } + + div.sheet-box { + min-height: 200px; + padding: 1% 5%; + + &:nth-of-type(1n+2) { + margin-top: 10%; + } + } + + div.sheet-armor-column { + display: inline-block; + background-image: $silhouette; + background-position: center; + background-repeat: no-repeat; + background-size: contain; + @extend %middle-column; + + h2 { + position: relative; + } + + textarea { + height: 50%; + resize: none; + overflow-x: hidden; + border: 2px solid #e4e5e6; + } + + div.sheet-armor { + position: relative; + min-height: 8rem; + width: 100%; + + div.sheet-armour-input { + position: relative; + justify-content: center; + align-items: center; + + label, input { + min-height: 3.5rem; + } + + input { + border-radius: 2rem; + width: 100%; + border: none; + } + } + + div.sheet-content { + align-content: center; + } + + div.sheet-body { + align-self: center; + } + } + + div.sheet-head, + div.sheet-arms { + grid-template-columns: 7.5rem 40%; + justify-content: end; + + div.sheet-armour-input { + &::before { + @include traitImage($trait-inner-circle2); + } + } + } + + div.sheet-torso, + div.sheet-legs { + grid-template-columns: 40% 7.5rem; + + div.sheet-armour-input { + grid-area: 1/ 2 / 1 / 3; + + &::before { + @include traitImage($trait-inner-circle1); + } + } + + div.sheet-body { + grid-area: 1 / 1 / 1 / 2; + } + } + + div.sheet-head, + div.sheet-arms { + &::before { + transform: rotate(-90deg); + } + } + + div.sheet-torso, + div.sheet-legs { + &::before { + transform: rotate(180deg); + } + } + + div.sheet-damage-reduction { + div.sheet-header { + align-self: center; + } + + div.sheet-content { + position: relative; + + &::before { + @include traitImage($trait-inner-circle1); + } + + @extend %circle-input; + } + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/pages/sections/wastah-section.scss b/Black Void by Penny for a Tale/src/scss/pages/sections/wastah-section.scss new file mode 100644 index 0000000000..872ee0594f --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/sections/wastah-section.scss @@ -0,0 +1,167 @@ +div.sheet-wastah-section { + display: inline-block; + margin-bottom: -2%; + + div.sheet-wastah, + div.sheet-enlightenment { + @extend %partial-column; + } + + div.sheet-wastah, + div.sheet-enlightenment { + div.sheet-sanity-row, + div.sheet-health-row { + grid-row-gap: unset; + + label { + display: grid; + justify-items: center; + } + + input { + border: none; + height: 100%; + } + + div.sheet-header { + align-items: center; + } + + div.sheet-input { + position: relative; + + input[type='number']:hover, + input[type='number']:focus { + border-radius: 2rem; + width: 100%; + } + } + } + + div.sheet-sanity-row { + grid-template-rows: 5rem repeat(3, 3.8rem); + width: 115%; + } + + div.sheet-health-row { + grid-template-rows: 5rem repeat(4, 3.8rem); + } + + div.sheet-sanity, + div.sheet-health, + div.sheet-total { + grid-column-gap: 2%; + } + + div.sheet-sanity, + div.sheet-health { + grid-template-columns: 5rem auto; + grid-template-rows: 5rem; + + div.sheet-input { + input[type='number'] { + width: 3.5rem; + } + + &::before { + @include traitImage($trait-circle3); + transform: rotate(180deg); + } + } + } + + %smallinput { + grid-template-columns: 3.8rem auto; + position: relative; + + div.sheet-input { + input[type='number'] { + width: 3rem; + } + + &::before { + @include traitImage($trait-inner-circle2); + } + } + } + + div.sheet-total { + left: 16%; + position: relative; + top: -30%; + + @extend %smallinput; + + div.sheet-input { + &::before { + transform: rotate(0deg); + } + } + } + + div.sheet-anxious-hurt { + @extend %smallinput; + left: 5%; + top: -55%; + + div.sheet-input { + &::before { + transform: rotate(50deg); + } + } + } + + div.sheet-disturbed-injured { + @extend %smallinput; + left: 15%; + top: -75%; + + div.sheet-input { + &::before { + transform: rotate(180deg); + } + } + } + + div.sheet-dead { + @extend %smallinput; + left: 5%; + top: -90%; + + div.sheet-input { + &::before { + @include traitImage($trait-inner-circle1); + transform: rotate(95deg); + } + } + } + + div.sheet-madness { + margin-top: -10%; + + input[type='text'] { + @extend .sheet-bottom-border; + } + } + } + + div.sheet-box { + min-height: 300px; + } + + div.sheet-descriptor { + grid-template-columns: 1.5rem 1fr repeat(2, 1.5rem); + grid-column-gap: 3%; + + button[type='roll'] { + width: 95%; + } + + @include collapseSettingsInputs(4) + + div.sheet-collapse, + div.sheet-settings { + grid-column: 1 / 5; + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/sections/weapons-section.scss b/Black Void by Penny for a Tale/src/scss/pages/sections/weapons-section.scss new file mode 100644 index 0000000000..347d040b38 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/sections/weapons-section.scss @@ -0,0 +1,61 @@ +div.sheet-weapons-section { + $weaponGrid: 2fr repeat(6, 5rem) 1fr 1fr repeat(2, 1.5rem); + + div.sheet-headers { + grid-template-columns: $weaponGrid; + } + + div.sheet-repeating-container { + div.sheet-descriptor { + grid-template-columns: $weaponGrid; + grid-gap: 0.5%; + + button { + margin-bottom: 0px; + } + + input[name='attr_collapse'], + input[name='attr_collapse'] + span { + grid-column: 11 / 12; + } + + input[name='attr_settings'], + input[name='attr_settings'] + span { + grid-column: 12 / 13; + } + + div.sheet-collapse, + div.sheet-settings { + grid-column: 1 / 13; + } + } + + .repitem { + @extend .sheet-bottom-border; + } + + div.sheet-column { + border-left: 1px solid black; + + span { + padding: 0px 2px; + } + } + } + + div.sheet-weapon { + grid-template-columns: 30% repeat(3, 1fr); + + div.sheet-name { + grid-area: 1 / 1 / 1 / 5; + } + + div.sheet-properties { + grid-area: 2 / 1 / 2 / 2; + } + + div.sheet-special { + grid-area: 3 / 1 / 3 / 2; + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/pages/skills-row/skills-row.scss b/Black Void by Penny for a Tale/src/scss/pages/skills-row/skills-row.scss new file mode 100644 index 0000000000..f1baae0452 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/skills-row/skills-row.scss @@ -0,0 +1,104 @@ +div.sheet-skills-row { + display: inline-block; + + input[type='number'] { + @extend .sheet-bottom-border; + } + + select { + color: black; + } + + div.sheet-benefits, + div.sheet-skills { + display: inline-block; + vertical-align: top; + width: 49.5%; + + &:nth-of-type(1) { + margin-right: 1%; + } + } + + input[name='attr_cost'], + input[name='attr_rank'] { + text-align: center; + } + + div.sheet-collapse { + div.sheet-header { + grid-template-columns: 3fr 2fr 1fr; + } + } + + div.sheet-powers { + div.sheet-header, + div.sheet-descriptor { + grid-template-columns: 1fr 25% repeat(2, 1.5rem); + } + + div.sheet-collapse { + div.sheet-grid { + grid-template-columns: 1fr auto 5rem; + } + } + + div.sheet-descriptor { + input[name='attr_collapse'], + input[name='attr_collapse'] + span { + grid-column: 3; + } + + input[name='attr_settings'], + input[name='attr_settings'] + span { + grid-column: 4; + } + + div.sheet-collapse, + div.sheet-settings { + grid-column: 1 / 5; + } + } + } + + div.sheet-skills { + div.sheet-header, + div.sheet-descriptor { + grid-template-columns: 1.5fr 1fr 0.5fr repeat(2, 1.5rem); + } + + div.sheet-collapse { + div.sheet-grid { + grid-template-columns: 1fr auto 5rem; + } + } + + div.sheet-settings { + div.sheet-grid { + grid-template-columns: auto 1fr auto 5rem; + } + } + + div.sheet-descriptor { + input[name='attr_collapse'], + input[name='attr_collapse'] + span { + grid-column: 4; + } + + input[name='attr_settings'], + input[name='attr_settings'] + span { + grid-column: 5; + } + + div.sheet-collapse, + div.sheet-settings { + grid-column: 1 / 6; + } + } + + span[name='attr_specialization'] { + display: inline-block; + width: 100%; + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/agility.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/agility.scss new file mode 100644 index 0000000000..56023eec63 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/agility.scss @@ -0,0 +1,30 @@ +div.sheet-agility { + grid-area: 1 / 3 / 1 / 4; + @extend %traitRowTop; + top: 28%; + + div.sheet-header { + grid-row: 1; + text-align: left; + } + + div.sheet-modifier { + grid-area: 1 / 3 / 3 / 5; + left: 15%; + top: 20%; + + &::before { + @include traitImage($trait-inner-circle2); + transform: rotate(10deg); + } + } + + div.sheet-score { + grid-area: 2 / 1 / 4 / 4; + + &::before { + @include traitImage($trait-circle2); + transform: rotate(0deg); + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/awareness.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/awareness.scss new file mode 100644 index 0000000000..4f8c774b65 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/awareness.scss @@ -0,0 +1,33 @@ +div.sheet-awareness { + grid-area: 2 / 4 / 2 / 5; + @extend %traitRowTop; + right: 21%; + + div.sheet-header { + grid-row: 1; + text-align: left; + + h2 { + margin-top: 5%; + } + } + + div.sheet-modifier { + grid-area: 1 / 3 / 4 / 5; + left: 30%; + + &::before { + @include traitImage($trait-inner-circle1); + transform: rotate(-90deg); + } + } + + div.sheet-score { + grid-area: 2 / 1 / 4 / 4; + + &::before { + @include traitImage($trait-circle1); + transform: rotate(0deg); + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/experience.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/experience.scss new file mode 100644 index 0000000000..cdf3b69760 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/experience.scss @@ -0,0 +1,34 @@ +div.sheet-experience { + grid-area: 2 / 2 / 4 / 4; + grid-template-rows: 66% 1fr; + height: 100%; + position: relative; + transform: scale(0.88); + + &::before { + @include traitImage($trait-circle1); + transform: rotate(-90deg); + min-height: 180px; + } + + div.sheet-header { + grid-area: 2 / 2 / 2 / 4; + } + + div.sheet-input { + grid-area: 1 / 1 / 1 / 5; + padding: 20% 5% 10%; + + label { + height: 100%; + width: 100%; + } + + input[type='number'] { + border: none; + font-size: 4.5rem; + height: 100%; + border-radius: 2rem 2rem 0rem 0rem; + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/intellect.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/intellect.scss new file mode 100644 index 0000000000..c550d86708 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/intellect.scss @@ -0,0 +1,30 @@ +div.sheet-intellect { + grid-area: 1 / 2 / 1 / 3; + @extend %traitRowTop; + top: 28%; + right: 10%; + + div.sheet-header { + grid-row: 1; + text-align: right; + } + + div.sheet-modifier { + grid-area: 1 / 1 / 3 / 3; + right: 15%; + top: 24%; + + &::before { + @include traitImage($trait-inner-circle1); + transform: rotate(180deg); + } + } + + div.sheet-score { + grid-area: 2 / 2 / 4 / 5; + + &::before { + @include traitImage($trait-circle3); + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/persuasion.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/persuasion.scss new file mode 100644 index 0000000000..1357cf8d57 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/persuasion.scss @@ -0,0 +1,33 @@ +div.sheet-persuasion { + grid-area: 2 / 1 / 2 / 2; + @extend %traitRowTop; + left: 20%; + + div.sheet-header { + grid-row: 1; + text-align: right; + + h2 { + margin-top: 5%; + } + } + + div.sheet-modifier { + grid-area: 1 / 1 / 4 / 3; + right: 35%; + + &::before { + @include traitImage($trait-inner-circle2); + transform: rotate(0deg); + } + } + + div.sheet-score { + grid-area: 2 / 2 / 4 / 5; + + &::before { + @include traitImage($trait-circle4); + transform: rotate(100deg); + } + } +} diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/presence.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/presence.scss new file mode 100644 index 0000000000..061114843a --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/presence.scss @@ -0,0 +1,29 @@ +div.sheet-presence { + grid-area: 3 / 1 / 3 / 2; + @extend %headerRowBottom; + left: 22%; + + div.sheet-header { + grid-row: 3; + text-align: center; + } + + div.sheet-modifier { + grid-area: 1 / 1 / 3 / 3; + right: 30%; + + &::before { + @include traitImage($trait-inner-circle1); + transform: rotate(0deg); + } + } + + div.sheet-score { + grid-area: 1 / 2 / 3 / 5; + + &::before { + @include traitImage($trait-circle1); + transform: rotate(-100deg); + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/stamina.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/stamina.scss new file mode 100644 index 0000000000..c75e24d895 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/stamina.scss @@ -0,0 +1,29 @@ +div.sheet-stamina { + grid-area: 3 / 4 / 3 / 5; + @extend %headerRowBottom; + right: 22%; + + div.sheet-header { + grid-row: 3; + text-align: center; + } + + div.sheet-modifier { + grid-area: 1 / 3 / 3 / 5; + left: 30%; + + &::before { + @include traitImage($trait-inner-circle2); + transform: rotate(0deg); + } + } + + div.sheet-score { + grid-area: 1 / 1 / 3 / 4; + + &::before { + @include traitImage($trait-circle4); + transform: rotate(-10deg); + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/strength.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/strength.scss new file mode 100644 index 0000000000..7017ecd316 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/strength.scss @@ -0,0 +1,30 @@ +div.sheet-strength { + grid-area: 4 / 3 / 4 / 4; + @extend %headerRowBottom; + bottom: 30%; + left: 10%; + + div.sheet-header { + grid-row: 3; + text-align: center; + } + + div.sheet-modifier { + grid-area: 2 / 3 / 3 / 5; + left: 20%; + + &::before { + @include traitImage($trait-inner-circle1); + transform: rotate(180deg); + } + } + + div.sheet-score { + grid-area: 1 / 1 / 3 / 4; + + &::before { + @include traitImage($trait-circle3); + transform: rotate(190deg); + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/trait.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/trait.scss new file mode 100644 index 0000000000..3b6c82c24d --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/trait.scss @@ -0,0 +1,61 @@ +div.sheet-trait { + min-height: 110px; + position: relative; + width: 100%; + + button[type='roll'] { + font-size: 1.3rem; + text-align: left; + text-transform: uppercase; + } + + label { + height: 100%; + position: relative; + width: 100%; + } + + input[type='number'] { + border: none; + border-radius: 1rem; + + &:hover { + @extend .sheet-bottom-border; + } + } + + div.sheet-header { + grid-column: 1 / 5; + } + + div.sheet-modifier, + div.sheet-score { + display: grid; + position: relative; + align-content: center; + } + + div.sheet-modifier { + input[type='number'] { + font-size: 2.5rem; + min-height: 3rem; + } + + &:before { + min-height: 50px; + min-width: 50px; + } + } + + div.sheet-score { + input[type='number'] { + font-size: 3.5rem; + min-height: 4rem; + } + + &:before { + min-height: 80px; + min-width: 80px; + } + } +} \ No newline at end of file diff --git a/Black Void by Penny for a Tale/src/scss/pages/traits/willpower.scss b/Black Void by Penny for a Tale/src/scss/pages/traits/willpower.scss new file mode 100644 index 0000000000..3802bc6f04 --- /dev/null +++ b/Black Void by Penny for a Tale/src/scss/pages/traits/willpower.scss @@ -0,0 +1,29 @@ +div.sheet-willpower { + grid-area: 4 / 2 / 4 / 3; + @extend %headerRowBottom; + bottom: 30%; + + div.sheet-header { + grid-row: 3; + text-align: center; + } + + div.sheet-modifier { + grid-area: 2 / 1 / 3 / 3; + right: 20%; + + &::before { + @include traitImage($trait-inner-circle2); + transform: rotate(0deg); + } + } + + div.sheet-score { + grid-area: 1 / 2 / 3 / 5; + + &::before { + @include traitImage($trait-circle4); + transform: rotate(40deg); + } + } +} diff --git a/Black Void by Penny for a Tale/translations.json b/Black Void by Penny for a Tale/translations.json new file mode 100644 index 0000000000..70de723ffc --- /dev/null +++ b/Black Void by Penny for a Tale/translations.json @@ -0,0 +1,112 @@ +{ + "black void" :"black void" + ,"name" :"name" + ,"player name" :"player name" + ,"notes":"notes" + ,"personality":"personality" + ,"desire and motivation":"desire and motivation" + ,"dislikes secrets regrets": "dislikes, secrets and regrets" + ,"philosophy principles":"philosophy & principles" + ,"quirk and habits":"quirk and habits" + ,"sayings":"sayings" + ,"species":"species" + ,"homeworld":"homeworld" + ,"gender":"gender" + ,"age":"age" + ,"skin":"skin" + ,"eyes":"eyes" + ,"hair":"hair" + ,"build":"build" + ,"appearence":"appearence" + ,"origin":"origin" + ,"mannerism":"mannerism" + ,"ancestry and relations":"ancestry and relations" + ,"caste":"caste" + ,"faction and allegiance":"faction and allegiance" + ,"occupation":"occupation" + ,"patron":"patron" + ,"wastah":"wastah" + ,"enlightenment":"enlightenment" + ,"intellect":"intellect" + ,"persuasion":"persuasion" + ,"agility":"agility" + ,"experience points":"experience points" + ,"awareness":"awareness" + ,"presence":"presence" + ,"stamina":"stamina" + ,"willpower":"willpower" + ,"strength":"strength" + ,"sanity":"sanity" + ,"total sanity":"total sanity" + ,"anxious (+1 to madness)":"anxious (+1 to madness)" + ,"disturbed (+3 to madness)":"disturbed (+3 to madness)" + ,"madness":"madness" + ,"health":"health" + ,"total health":"total health" + ,"hurt":"hurt" + ,"hurt (-1 penality)":"hurt (-1 penality)" + ,"injured":"injured" + ,"injured (-3 penality)":"injured (-3 penality)" + ,"dead":"dead" + ,"benefit":"benefit" + ,"cost":"cost" + ,"background":"background" + ,"talent":"talent" + ,"attribute":"attribute" + ,"powers":"powers" + ,"rank":"rank" + ,"description":"description" + ,"specialization":"specialization" + ,"combat skills":"combat skills" + ,"skills":"skills" + ,"other":"other" + ,"type":"type" + ,"Background / Attributes / Talents":"Background / Attributes / Talents" + ,"trait":"trait" + ,"modifier":"modifier" + ,"friend allies": "friend & allies" + ,"known enemies": "known enemies" + ,"notable people": "notable people" + ,"notable experiences":"notable experiences" + ,"character history":"character history" + ,"movement":"movement" + ,"(km/hour)":"(km/hour)" + ,"walking speed":"walking speed" + ,"running speed (x2)":"running speed (x2)" + ,"sprinting speed (x4)":"sprinting speed (x4)" + ,"combat speed": "combat speed" + ,"(meters/round)": "(meters/round)" + ,"defence value":"defence value" + ,"agility modifier":"agility modifier" + ,"skill modifier": "skill modifier" + ,"shield modifier":"shield modifier" + ,"other modifiers":"other modifiers" + ,"armour, tattoo's & graftings":"armour, tattoo's & graftings" + ,"wealth":"wealth" + ,"property / assets":"property / assets" + ,"size":"size" + ,"range":"range" + ,"attack modifier":"attack modifier" + ,"speed":"speed" + ,"damage":"damage" + ,"properties":"properties" + ,"special":"special" + ,"equipment":"equipment" + ,"weapons":"Weapons" + ,"bulk, properties, & other":"bulk, properties, & other" + ,"damage reduction":"damage reduction" + ,"(accumulated total)":"(accumulated total)" + ,"head":"head" + ,"torso":"torso" + ,"arms":"arms" + ,"legs":"legs" + ,"page":"page" + ,"bulk":"bulk" + ,"legs description":"legs description" + ,"torso description":"torso description" + ,"arms description":"arms description" + ,"head description":"head description" + ,"running speed":"running speed" + ,"sprinting speed":"sprint speed" + ,"property assets":"property assets" +} \ No newline at end of file diff --git a/Kamigakari/README.md b/Kamigakari/README.md new file mode 100644 index 0000000000..7a6fcd7625 --- /dev/null +++ b/Kamigakari/README.md @@ -0,0 +1,15 @@ +# Roll20-Kamigakari + + + +This is a character sheet for Kamigakari: God Hunters. + +Use the check boxes to keep track of spent spirit dice, then hit the spirit pool button to roll those dice. +The track button next 'Initiative' to adds that character to the initiative tracker. You must have the token selected. + +The Mononoke tab is for both contractors and Mononoke. For macro use all stats start with mononoke_ but are otherwise as they appear on the ship for example: + +mononoke_acc +mononoke_Initiative + +Thanks to Jakob for the Text Expanding Area CSS and plexsoup for the working tabs \ No newline at end of file diff --git a/Kamigakari/kamigakari.css b/Kamigakari/kamigakari.css new file mode 100644 index 0000000000..a05dbc7542 --- /dev/null +++ b/Kamigakari/kamigakari.css @@ -0,0 +1,623 @@ +/*Collapsing + Hiding Sections */ + +/* +Kamigakuri Green: 048B84 +Kamigakuri Yellow: FEFF59 +Kamigakuri Brown: DEB16A +*/ + +/*Main Stats Bubble */ + +.sheet-input-statsMain input[type="number"] { + min-width: 50px; + max-width: 75%; + width: 100%; + border: 3px black; + border-radius: 25px; + margin-top: 5px; + margin-bottom: 1px; + margin-right: 15%; + margin-left: 15%; + font-size: 30px; + text-align: center; +} + + +/*TABS*/ +div.sheet-tabs-content { + display: none; +} + +input.sheet-tabs[value="1"]:checked ~ div.sheet-tabs1, +input.sheet-tabs[value="2"]:checked ~ div.sheet-tabs2, +input.sheet-tabs[value="3"]:checked ~ div.sheet-tabs3, +input.sheet-tabs[value="4"]:checked ~ div.sheet-tabs4, +input.sheet-tabs-pictos[value="5"]:checked ~ div.sheet-tabs5, +input.sheet-tabs-small[value="6"]:checked ~ div.sheet-tabs6 +{ + display: block; + width:100%; +} + +/* TABS STYLE */ +.sheet-tabs{ + opacity:0; + width: 150px; +} + +.sheet-tab-label{ + margin-left: -150px; + width: 150px; + text-align: center; + font-size: 120%; + color: #FEFF59; + background-color: #048B84; + display:inline-block; + border-radius: 15px 15px 0px 0px; + padding-bottom: 1px; +} + +.sheet-tabs-pictos{ + opacity:0; + width: 50px; +} + +.sheet-tab-label-pictos{ + font-family: "Pictos"; + margin-left: -50px; + width: 50px; + text-align: center; + font-size: 120%; + color: #FEFF59; + background-color: #048B84; + display:inline-block; + border-radius: 15px 15px 0px 0px; + padding-bottom: 1px; +} + + +.sheet-tabs-small{ + opacity:0; + width: 90px; +} + +.sheet-tab-label-small{ + margin-left: -90px; + width: 90px; + text-align: center; + font-size: 120%; + color: #FEFF59; + background-color: #048B84; + display:inline-block; + border-radius: 15px 15px 0px 0px; + padding-bottom: 1px; +} + +.sheet-tabs-pictos:checked + div.sheet-tab-label-pictos, +.sheet-tabs-small:checked + div.sheet-tab-label-small, +.sheet-tabs:checked + div.sheet-tab-label { + font-weight:700; + background-color: #DEB16A; + color: black; +} + +/*Roll Template*/ +.sheet-rolltemplate-mononoke table, +.sheet-rolltemplate-talent table, +.sheet-rolltemplate-spirit table { + width: 100%; + +} + +.sheet-rolltemplate-mononoke td, +.sheet-rolltemplate-talent td, +.sheet-rolltemplate-spirit td { + width: auto; + text-align: center; + min-width: 20px; + padding-left: 5px; + padding-right: 5px; +} + +.sheet-rolltemplate-background { + background-color: #048B84; + font-weight: bold; + color: #FEFF59; +} + +.sheet-rolltemplate-mononoke td, +.sheet-rolltemplate-talent td { + border-bottom: solid 1px black; +} + +.sheet-rolltemplate-mononoke div.sheet-template-container, +.sheet-rolltemplate-talent div.sheet-template-container, +.sheet-rolltemplate-spirit div.sheet-template-container { + border: 2px solid #048B84; + border-radius: 5px 5px 5px 5px; + background-color: #DCCCB9; + max-width: 400px; +} + +.sheet-rolltemplate-mononoke .sheet-template-header, +.sheet-rolltemplate-talent .sheet-template-header, +.sheet-rolltemplate-spirit .sheet-template-header { + background-color: #048B84; + color: #FEFF59; + padding: 2px; + border-bottom: 1px solid black; + text-align: center; + font-variant: small-caps; + font-family: Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif; + line-height: 1.4em; + font-size: 1.3em; +} + + +.sheet-rolltemplate-mononoke .sheet-template-header2, +.sheet-rolltemplate-talent .sheet-template-header2 { + line-height: 0.7em; + font-size: 0.8em; + background-color: #048B84; + color: #FEFF59; + padding: 2px; + text-align: center; + font-variant: small-caps; + font-family: Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif; +} + +} + +.sheet-rolltemplate-mononoke div, +.sheet-rolltemplate-talent div, +.sheet-rolltemplate-spirit div { + padding: 5px; + border-bottom: 1px solid black; + font-family: Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif; +} + +.sheet-rolltemplate-spirit div { + font-variant: small-caps; +} + +.sheet-rolltemplate-spirit .inlinerollresult { + display: inline-block; + min-width: 1.5em; + text-align: center; + border: 2px solid transparent; + background-color: #DCCCB9; + color: #DCCCB9; + font-variant: small-caps; + font-family: Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif; +} + +.sheet-rolltemplate-spirit .inlinerollresult.fullcrit { + border: 2px solid #048B84; + color: #FEFF59; + background-color: #048B84; +} + +.sheet-rolltemplate-spirit .inlinerollresult.fullfail { + border: 2px solid transparent; +} + +.sheet-rolltemplate-spirit .inlinerollresult.importantroll { + border: 2px solid transparent; +} + + +/* CHECK BOXES */ + +input.sheet-arrow +{ + float: left; +} + +input.sheet-arrow:not(:checked) ~ div.sheet-body +{ + display: none; +} + +input.sheet-arrow-two +{ + float: right; +} + +input.sheet-arrow-two:not(:checked) ~ div.sheet-body +{ + display: none; +} + + + +/* NUMBER BOX */ + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; + appearance: textfield; + margin: 0; +} + + +.sheet-body +{ + +} + +/* CHECK BOXES */ + +input.sheet-hideopt[type="checkbox"] +{ + opacity: 0; + width: 16px; + height: 16px; + position: relative; + top: 5px; + left: 9px; + margin: -10px; + cursor: pointer; + z-index: 1; +} + +/* Fake checkbox */ +input.sheet-hideopt[type="checkbox"] + span::before +{ + margin-right: 4px; + line-height: 1px; + text-align: center; + display: inline-block; + vertical-align: middle; + + content: "j"; + width: 14px; + height: 3px; + font-size: 20px; + font-family: "dicefontd6"; +} +input.sheet-hideopt[type="checkbox"]:checked + span::before +{ + content: "J"; + font-family: "dicefontd6"; + color: red; +} + + + +input.sheet-collapse[type="checkbox"] +{ + opacity: 0; + width: 16px; + height: 16px; + position: relative; + top: 5px; + left: 9px; + margin: -10px; + cursor: pointer; + z-index: 1; +} + +/* Fake checkbox */ +input.sheet-collapse[type="checkbox"] + span::before +{ + margin-right: 4px; + line-height: 1px; + text-align: center; + display: inline-block; + vertical-align: middle; + + content: "+"; + width: 14px; + height: 3px; + font-size: 15px; + font-family: "Pictos"; +} +input.sheet-collapse[type="checkbox"]:checked + span::before +{ + content: "-"; + font-family: "Pictos"; +} + +input.sheet-equipment[type="checkbox"] +{ + opacity: 0; + width: 26px; + height: 36px; + position: relative; + top: 1px; + left: 5px; + margin: -10px; + cursor: pointer; + z-index: 1; +} + +input.sheet-equipment[type="checkbox"] + span::before +{ + margin-right: 4px; + line-height: 1px; + text-align: center; + display: inline-block; + vertical-align: top; + color: darkred; + content: "d"; + width: 14px; + height: 5px; + font-size: 15px; + font-family: "Pictos"; +} +input.sheet-equipment[type="checkbox"]:checked + span::before +{ + content: "3"; + font-family: "Pictos"; + color: green; +} + +/* RADIO BUTTONS*/ +input.sheet-normal[type="radio"] +{ + opacity: 0; + width: 30px; + height: 36px; + position: relative; + top: 5px; + left: 6px; + margin: -15px; + cursor: pointer; + z-index: 1; +} + +input.sheet-normal[type="radio"] + span::before +{ + margin-right: 2px; + border: solid 1px #a8a8a8; + line-height: 12px; + text-align: center; + display: inline-block; + vertical-align: middle; + + box-shadow: 0 0 2px #ccc; + + color:red; + background:#FEFF59; + + content: ""; + width: 21px; + height: 21px; + font-size: 3em; + text-shadow:none; + + + border-radius: 50%; +} + +/* Clear spirit Overflow */ +input.sheet-zero[type="radio"]:checked + span::before +{ + opacity: 0; +} + +input.sheet-zero[type="radio"]:hover + span::before +{ + opacity: 1; +} + +input.sheet-zero[type="radio"] + span::before +{ + + font-size: 25px; + content: "x"; + opacity: 0.65; + background:black; + +} + +/* -----Remove dot from all radios _after_ selected one----- */ +input.sheet-normal[type="radio"]:checked ~ input.sheet-normal[type="radio"] + span::before +{ + content: ""; + background:white; +} + +.charsheet { + min-width: 850px; +} + +.sheet-header { + +} + +.sheet-section { + float: left; + width: 100%; + padding-top: 15px; + background: #DCCCB9; + color: black; + font-weight: bold; + border: 15px #0f0;\ + min-width: 848px; +} + +.sheet-equipment-header { + width: 99%; + text-: center; + margin: 5px 2; + padding-left: 10px; + background: #048B84; + color: #FEFF59; + font-weight: bold; +} + +.sheet-section2 { + float: left; + width: 99%; + margin: 5px 2; + margin-bottom: 4px; + background: #048B84; + color: #FEFF59; + font-weight: bold; + border: 3px solid black; + min-width: 848px; +} + + +label, +select { + margin: 0; +} + +/* TEXT AUTO EXPANDING AREA */ + +.sheet-expand { + position: relative; + cursor: text; + word-wrap: break-word; + min-height: 42px; +} +.sheet-expand span { + visibility: hidden; + white-space: pre-wrap; + display: block; +} +.sheet-expand textarea { + position: absolute; + z-index: 1; + top: 0; + left: 0; + margin: 0; + overflow: hidden; + resize: none; + height: 100%; + width: 100%; + display: block; + box-sizing: border-box; + border: solid 1px black; + border-radius: 0; + box-shadow: none; + padding: inherit; +} + + +/* Table Stuff */ +.sheet-table { + display: table; + width: 100%; + border-collapse:collapse; + border-spacing: 5px; + table-layout: fixed; +} + +.sheet-table-row { + display: table-row; + width: 100%; +} + +.sheet-table-cell { + display: table-cell; + vertical-align: middle; + margin-right: 3px; + margin-left: 3px; + padding-right: 0px; + padding-left: 1px; +} + +/* Sizes */ +.sheet-section-font125{font-size: 145%;} +.sheet-section-font100{font-size: 100%;} +.sheet-section-font85{font-size: 85%;} +.sheet-section-font80{font-size: 80%;} +.sheet-section-font95{font-size: 95%;} +.sheet-section-font75{font-size: 75%;} +.sheet-tracker-font{font-size: 75%;} +.sheet-section-font45{font-size: 45%;} + +.sheet-cell-a { width: auto; } +.sheet-cell-3 { width: 3%; } +.sheet-cell-5 { width: 5%; } +.sheet-cell-8 { width: 8%; } +.sheet-cell-10 { width: 10%; } +.sheet-cell-12 { width: 12%; } +.sheet-cell-15 { width: 15%; } +.sheet-cell-20 { width: 20%; } +.sheet-cell-25 { width: 25%; } +.sheet-cell-30 { width: 30%; } +.sheet-cell-35 { width: 35%; } +.sheet-cell-40 { width: 40%; } +.sheet-cell-41 { width: 41%; } +.sheet-cell-47 { width: 47%; } +.sheet-cell-50 { width: 50%; } +.sheet-cell-60 { width: 70%; } +.sheet-cell-69 { width: 69%; } +.sheet-cell-75 { width: 75%; } +.sheet-cell-95 { width: 100%; } +.sheet-cell-100 { width: 100%; } +.sheet-cell-button {width: 23px; } +.sheet-cell-check { + padding-right: 15px; + padding-left: 15px; +} +.sheet-cell-center{text-align: center;} +.sheet-cell-right{text-align: right;} +.sheet-cell-left{text-align: left;} +.sheet-cell-boarder{border: solid 1px;} + + +.sheet-buffer{ + height: 5px; + background-color: #048B84; +} + +/* Spirit Dice Pool */ + +select.sheet-cell-drop { + vertical-align: top; + width: 100%; +} + +button[type=roll]{ + background-color:#048B84 !important; + border-color: black !important; + background-image:none; + color:#FEFF59 !important; + text-shadow: #016560; + text-shadow:none; +} + + +input[type="number"], +input[type="text"], textarea { + + background-color : #FDFDFD; + +} + +.sheet-input-border input[type="text"], +.sheet-input-border input[type="number"] { + min-width: 15px; + max-width: 100%; + width: 100%; + border-radius: 1px; + border: 1px solid; +} + +.sheet-input-AutoCalc input[type="number"] { + min-width: 35px; + max-width: 100%; + width: 100%; + border: 2px solid #FEFF59; + border-radius: 15px; + background: #048B84; + color: #FEFF59; +} + +.sheet-input-border input[type="number"] { + min-width: 15px; + max-width: 100%; + width: 100%; + text-align: center; + border: 1px solid black; +} diff --git a/Kamigakari/kamigakari.html b/Kamigakari/kamigakari.html new file mode 100644 index 0000000000..313fbd898e --- /dev/null +++ b/Kamigakari/kamigakari.html @@ -0,0 +1,1983 @@ + +
Main Info
+
Stats & Spirit
+
Talents
+
Equipment
+
y
+
Mononoke
+ +
+ +
+ + MAIN INFO +
+
+
+
NAME
+
DIVINE NAME
+
+
+
+
+
FACADE
+
FACADE TRAIT
+
+
+
+
+
ANCESTRY
+
ANCESTRAL TRAIT
+
+
+
+
+
AGE
+
HEIGHT
+
WEIGHT
+
GENDER
+
EARS/TAIL(S)
+
+
+
+
+
EYES
+
HAIR
+
SKIN
+
+
+
+
+
FACTION
+
ORIGINS
+
+
+
+
+
GOAL
+
+
+
+
+
CREST LOCATION
+
CREST FORM
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ + FACET +
+
+
+
Level:
+
+
XP:
+
+
Next level:
+
+
Group:
+
+ +
+
+
+
+
+
+
Main:
+
+
+ +
+
+
+
Second:
+
+
+ +
+
+
+
+
+ +
+
Additional:
+
+
+ +
+
+
+
+
+
+
+ +
+ +
+ + MAIN AND SUB STATS +
+
+
MAIN STATS
+
+
STAT TYPE:
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
STRENGTH
+
AGILITY
+
INTELLECT
+
WILL
+
LUCK
+
+
+
+
+
+
+
Total
+
Facade
+
Talents
+
Items
+
Misc
+
+
+
Total
+
Facade
+
Talents
+
Items
+
Misc
+
+
+
+
Strength
+
+
+
+
+
+
+
Intellect
+
+
+
+
+
+
+
+
+
Agility
+
+
+
+
+
+
+
Will
+
+
+
+
+
+
+
+
+
Luck
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SUB STATS +
+
+
+
+
+
+
Total:
+
Main Stat:
+
Facet Stat:
+
Weapon:
+
Protector:
+
Accessory:
+
Accessory:
+
Talent:
+
Misc:
+
+ +
+
+ +
+
+ ACCURACY: +
+
+ +
+
Strength
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ EVASION: +
+
+ +
+
Agility
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ INVOCATION: +
+
+ +
+
Intellect
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ RESISTANCE: +
+
+ +
+
Will
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ INSTINCT: +
+
+ +
+
Luck
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
Total:
+
+
Facet Stat:
+
Weapon:
+
Protector:
+
Accessory:
+
Accessory:
+
Talent:
+
Misc:
+
+
+
+
+ PD: +
+
+ +
+
Strength ÷ 2
+
+
+
+
+
+
+
+ +
+
+
+
+ MD: +
+
+ +
+
Intellect ÷ 2
+
+
+
+
+
+
+
+ +
+
+
+
+ INITIATIVE: +
+
+ +
+
Agility + 5
+
+
+
+
+
+
+
+
+
+
+
+
+ HP: +
+
+ +
+
Strength + Will + (Level x 3)
+
+
+
+
+
+
+
+
+
+
+
+ GUARD: +
+
+ +
+
-
+
+
+
+
+
+
+
+
+
+
+
+ WARD: +
+
+ +
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
Simple Move:
+
+
+
Combat Move:
+
+
(Initiative + 5) / 3
+
+
Full Move:
+
+
Initiative + 5
+
+
+
+
+
+
+
+ +
+ + SPIRIT POOL +
+
+
+
DICE:
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
OVERFLOW:
+
+ + + + + + + + +
+
+
+
Used:
+
+
+
+
+
+
+
+ +
+
+
+
HP:
+
+
/
+
+
Spirit Crest:
+
+
/
+
22
+
+
+
+ BONDS +
+
+
①
+
+
+
+
+
②
+
+
+
+
+
③
+
+
+
+
+
④
+
+
+
+
+
⑤
+
+
+
+
+
⑥
+
+
+
+
+
⑦
+
+
+
+
+
+
+
+ +
+
+ + SPIRIT POOL +
+
+
+
DICE:
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
OVERFLOW:
+
+ +
+
+
+
+
Used:
+
+
+
+
+
+
+
+ +
+ + +
+
+
+ + TALENTS +
+ +
+
+
Name:
+
Numinal Barrier
+
Source:
+
Innate Power
+
Type:
+
+
Innate Power
+
+
+
+
+
Timing:
+
Start
+
Range:
+
Combat Zone
+
Target:
+
Combat Zone
+
Cost:
+
None
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
Name:
+
Soul Burn
+
Source:
+
Innate Power
+
Type:
+
+
Innate Power
+
+
+
+
+
Timing:
+
Free
+
Range:
+
User
+
Target:
+
User
+
Cost:
+
None
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
Name:
+
+
Source:
+
Ancestral
+
Type:
+
+
Ancestral
+
+
+
+
+
Timing:
+
+
Range:
+
+
Target:
+
+
Cost:
+
+
+
+
+
+
Uses Per:
+
+ +
+
Used:
+
+
+
+
+
+
+
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
Name:
+
+
Source:
+
Ancestral
+
Type:
+
+
Ancestral
+
+
+
+
+
Timing:
+
+
Range:
+
+
Target:
+
+
Cost:
+
+
+
+
+
+
Uses Per:
+
+ +
+
Used:
+
+
+
+
+
+
+
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
Name:
+
+
Source:
+
+
+
+ +
+
+
Key
+
+
+
+
+
Timing:
+
+
Range:
+
+
Target:
+
+
Cost:
+
+
+
+
+
+
Uses Per:
+
+ +
+
Used:
+
+
+
+
+
+
+
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
Name:
+
+
Source:
+
+
+
+ +
+
+
Key
+
+
+
+
+
Timing:
+
+
Range:
+
+
Target:
+
+
Cost:
+
+
+
+
+
+
Uses Per:
+
+ +
+
Used:
+
+
+
+
+
+
+
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
Name:
+
+
Source:
+
+
+
+ +
+
+
LV:
+
+
+
+ +
+
+
+
+
+
+
Timing:
+
+
Range:
+
+
Target:
+
+
Cost:
+
+
+
+
+
+
Uses Per:
+
+ +
+
Used:
+
+
+
+
+
+
+
+
Share:
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
WEAPONS:
+
+
+
+
+
Divine Name:
+
ACC:
+
IVC:
+
INIT:
+
PD:
+
MD:
+
+
+
+
+
+
+
+
+ +
+
+
+
+
Form:
+
DMG Type:
+
Range:
+
T#:
+
Rank:
+
Element:
+
Resist:
+
Restriction:
+
Grip:
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
Equipped:
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
ARMOR:
+
+
+
+
+
+
Name:
+
Restriction:
+
EVA:
+
INIT:
+
GUARD:
+
WARD:
+
+
+
+
+
+
+
+
+
+
Equipped:
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
ACCESSORIES:
+
+
+
+
+
+
Name:
+
Slot:
+
Description:
+
Equipped:
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
INVENTORY:
+
+
+
+
+
+
G
+
+
+
+
+
+
+
+
Name:
+
Description:
+
Count:
+
Equip:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
Dice Pool Sizes
+
Set the number of dice for each pool here for the sheet roll buttons
+
+
+
+
Accuracy
+
+
+
+
Evasion
+
+
+
+
Invocation
+
+
+
+
Resistance
+
+
+
+
Instinct
+
+
+
+
+
+
+
+ You can change the built in sheet macro that puts Mononoke or Aramitama information in chat here: +
+
+ +
+
Mononoke Info:
+
+
+
+
Boss/Aramitama Info
+
+
+ +
+
+
+
+
+
+ +
+
+ MONONOKE: +
+
+
+
+
LV:
+
+
+
+
+
+
Size
+
+
Cunning
+
+
Perception
+
+
+
+
Speech
+
+
Reaction
+
+
ID
+
+
+
+
+
+
Weakness
+
+
Movement
+
+
+
+
+
+
+
+
+
+
ACC
+
EVA
+
IVC
+
RES
+
CHK
+
+
Initiative
+
HP
+
Guard
+
Ward
+
+
+
Combat Stats
+
+
+
+
+
+
+
+
+
+
+
+
+
Fixed Values
+
+
+
+
+
+
+
+
+
+
Identify:
+
+
+
+
+
+
Attack Options
+
+
+
+
+ + +
+
+
+
+
Materials
+
+
+
+ + +
+
+
+
Description
+
+
+
+
+ + +
+
+
+
+
+
+ + + + +
+
{{name}}'s spirit Roll
+ + + + + + + + + + + + + + + + + +
1st:{{die1}}2nd:{{die2}}3rd:{{die3}}
4th:{{die4}}5th:{{die5}}6th:{{die6}}
+
+
+ + +
+
{{name}}
+
{{talent}}
+ + + + + + + + + + + + + + + + + +
Timing:{{time}}
Range:{{range}}
Target:{{target}}
Cost:{{cost}}
+
{{desc}}
+
+
+ + +
+
{{name}}
+ + {{#class}} + + + + + {{/class}} + {{#level}} + + + + + {{/level}} + {{#initiative}} + + + + + {{/initiative}} + {{#perception}} + + + + + {{/perception}} + {{#acc}} + + + + + + + + + + + + + {{/acc}} + {{#guard}} + + + + + + + {{/guard}} + {{#HP}} + + + + + {{/HP}} + {{#reaction}} + + + + + {{/reaction}} + {{#speech}} + + + + + {{/speech}} + {{#weaknesses}} + + + + + + + {{/weaknesses}} + {{#movement}} + + + + + {{/movement}} + {{#size}} + + + + + {{/size}} +
Class:{{class}}
Level:{{level}}
Initiative:{{initiative}}
Senses:{{perception}}
ACCEVAIVCRES
{{acc}}{{eva}}{{ivc}}{{res}}
Guard:{{guard}}Ward:{{ward}}
HP:{{HP}}
Reaction:{{reaction}}
Speech:{{speech}}
Weaknesses:
{{weaknesses}}
Movement:{{movement}}
Size:{{size}}
+
+
+ + + + + diff --git a/Kamigakari/kamigakari.png b/Kamigakari/kamigakari.png new file mode 100644 index 0000000000..b88a9791ee Binary files /dev/null and b/Kamigakari/kamigakari.png differ diff --git a/Kamigakari/sheet.json b/Kamigakari/sheet.json new file mode 100644 index 0000000000..b6c9af1899 --- /dev/null +++ b/Kamigakari/sheet.json @@ -0,0 +1,9 @@ +{ + "html": "kamigakari.html", + "css": "kamigakari.css", + "authors": "Selanye", + "roll20userid": "1375235", + "preview": "kamigakari.png", + "instructions": "This is a character sheet for Kamigakari: God Hunters. /r Use the check boxes to keep track of spent spirit dice, then hit the spirit pool button to roll those dice. /r The track button next 'Initiative' to adds that character to the initiative tracker. You must have the token selected. /r The Mononoke tab is for both contractors and Mononoke. For macro use all stats start with mononoke_ but are otherwise as they appear on the ship for example: /r mononoke_acc /r mononoke_Initiative /r /r /r Thanks to Jakob for the Text Expanding Area CSS and plexsoup for the working tabs" +} + diff --git a/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.css b/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.css new file mode 100644 index 0000000000..f0dc0a68ab --- /dev/null +++ b/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.css @@ -0,0 +1,4765 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap"); +.charsheet { + padding: 0 !important; +} + +.charsheet button[type=roll] { + text-shadow: none; + font-size: inherit !important; + padding: 0 !important; + margin: 0 !important; +} + +.charsheet button[type=roll]::before { + display: none; +} + +.charsheet button[type=roll]:hover, .charsheet button[type=roll]:focus, .charsheet button[type=roll]:active { + background-color: transparent; + box-shadow: none; +} + +.repcontrol { + position: absolute; + bottom: -1px; + right: 0; + z-index: 2; + display: flex; +} + +.repcontrol button.btn { + position: relative; + color: transparent; + font-size: 0; + height: 16px; + width: 16px; + transition: color .3s ease-in-out, opacity .3s ease-in-out; +} + +.repcontrol button.btn::after, .repcontrol button.btn::before { + transition: color .3s ease-in-out, opacity .3s ease-in-out; +} + +.repcontrol button.btn:hover, .repcontrol button.btn:focus, .repcontrol button.btn:active { + background-color: transparent; + box-shadow: none; +} + +.repcontrol button.btn::after { + position: absolute; + top: 0; + left: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + color: #d6d6d6; + font-family: Pictos; + font-size: 12px; + line-height: 1; + height: 100%; + width: 100%; +} + +.repcontrol button.btn:hover::after { + color: #606060; +} + +.repcontrol button.btn:active::after { + color: black; +} + +.repcontrol button.btn.repcontrol_add { + order: 1; +} + +.repcontrol button.btn.repcontrol_add::after { + content: '&'; +} + +.repcontrol button.btn.repcontrol_edit { + order: 2; + float: none; +} + +.repcontrol button.btn.repcontrol_edit::after { + content: '_'; +} + +.repcontainer.editmode + .repcontrol button.repcontrol_edit::after { + content: '3'; +} + +.repcontainer.editmode .sheet-repitem__note-box, +.repcontainer.editmode .sheet-repitem__settings { + display: none; +} + +.repcontainer.editmode .itemcontrol { + z-index: 10; + display: flex !important; + justify-content: space-between; + background-color: rgba(255, 255, 255, 0.5) !important; + border-radius: 2px; + margin: 0 2px; + width: calc(100% - 4px) !important; +} + +.repcontainer.editmode .itemcontrol a.repcontrol_move { + order: 1; + font-size: 18px; + border-radius: 2px 0 0 2px; + padding: 0 2px 0 0; +} + +.repcontainer.editmode .itemcontrol button.repcontrol_del { + order: 2; + float: none !important; + font-family: Pictos; + font-size: 12px; + border-radius: 0 2px 2px 0; + padding: 0 0 0 4px; +} + +.repcontainer.editmode .itemcontrol a.repcontrol_move, +.repcontainer.editmode .itemcontrol button.repcontrol_del { + display: flex; + align-items: center; + justify-content: center; + background: #fff; + text-shadow: none; + color: #404040; + line-height: 1; + border: 0; + height: 100%; + width: 20px; + max-height: 20px; + box-shadow: none; +} + +.repcontainer.editmode .itemcontrol a.repcontrol_move:hover, +.repcontainer.editmode .itemcontrol button.repcontrol_del:hover { + color: black !important; +} + +.repcontainer.editmode .itemcontrol a.repcontrol_move:active, +.repcontainer.editmode .itemcontrol button.repcontrol_del:active { + color: black !important; + box-shadow: none; + background: #fff; +} + +.repcontainer.editmode div.repitem:hover .itemcontrol { + background-color: rgba(255, 255, 255, 0.7) !important; +} + +*, +::before, +::after { + box-sizing: border-box; +} + +p { + font-family: inherit; + font-size: inherit; + line-height: inherit; + margin: 0 0 8px 0; +} + +ul { + list-style: none; + padding: 0; + margin: 0; +} + +ul li b:first-child { + display: inline-block; + padding-right: 8px; + min-width: 96px; +} + +textarea, +select, +button, +fieldset, +input, +option, +label { + display: flex; + background-color: transparent; + background-image: none; + font-family: inherit; + font-weight: 400; + text-decoration: none; + padding: 0; + margin: 0; + border: 0; + border-radius: 0; + outline: 0 !important; + min-width: 0; + box-shadow: none; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; +} + +textarea::placeholder, +select::placeholder, +button::placeholder, +fieldset::placeholder, +input::placeholder, +option::placeholder, +label::placeholder { + color: #d6d6d6; +} + +button, +label, +input[type=checkbox], +input[type=radio] { + cursor: pointer; +} + +button:hover, button:hover > span, +button > span:hover, +button > span:hover > span { + color: #303030 !important; +} + +button[type=action] { + color: #606060; + font-size: 10px; + font-weight: 500; + line-height: 1; +} + +input[type=text]:not(.sheet-hex) { + background-color: transparent; + color: #404040; + font-size: 10px; + line-height: 20px; + text-overflow: ellipsis; +} + +input[type=text]:not(.sheet-hex)::placeholder { + font-size: 8px; + line-height: 20px; +} + +input[type=text]:not(.sheet-hex):not(.sheet-align-left) { + text-align: center; +} + +input[type=hidden] { + display: none; +} + +textarea { + color: #606060; + font-size: 9px; + line-height: 1.6; + width: 100%; + resize: none; +} + +input.sheet-checkbox[type=checkbox] { + background-color: #fff; + border: 1px solid #808080; + border-radius: 2px; + height: 10px; + width: 10px; +} + +input.sheet-checkbox[type=checkbox]::before { + content: ''; + display: block; + border-radius: 1px; + margin: 1px 0 0 1px; + height: 6px; + width: 6px; +} + +input.sheet-checkbox[type=checkbox]:checked::before { + background-color: #808080; +} + +.sheet-wrapper { + text-align: center; +} + +.sheet-body { + color: #404040; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 10px; + line-height: 1; + text-align: left; + background-image: linear-gradient(to right, #fbfbfb 1px, transparent 1px), linear-gradient(to bottom, #fbfbfb 1px, transparent 1px); + background-size: 8px 8px; + background-position: -1px -1px; + padding-top: 8px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +.sheet-body > div { + margin: 0 auto; +} + +.sheet-body ~ rolltemplate { + display: none; +} + +.sheet-variant-radio { + display: inline-block; +} + +.sheet-variant-radio::after { + content: ''; + display: inline-block; + padding: 3px; + border: 1px solid #e0e0e0; + border-radius: 50%; +} + +.sheet-variant-radio:checked::after { + background-color: #e0e0e0; +} + +.sheet-variant-radio--wildcard:checked ~ .sheet-body { + width: 800px; +} + +.sheet-variant-radio--wildcard:checked ~ .sheet-body .sheet-extra { + display: none; +} + +.sheet-variant-radio--extra:checked ~ .sheet-body { + width: 474px; +} + +.sheet-variant-radio--extra:checked ~ .sheet-body .sheet-wildcard { + display: none; +} + +.sheet-wildcard .sheet-section { + display: flex; + justify-content: space-between; +} + +.sheet-wildcard .sheet-section > .sheet-left { + display: flex; + flex-direction: column; + flex-shrink: 0; + width: 470px; +} + +.sheet-wildcard .sheet-section > .sheet-right { + flex-grow: 1; +} + +.sheet-hidden { + display: none; +} + +.sheet-block { + position: relative; + margin-top: 40px; +} + +.sheet-header { + display: flex; + justify-content: space-between; + padding-bottom: 4px; + border-bottom: 1px dotted #e0e0e0; + height: 16px; +} + +.sheet-header__title { + display: block; + flex-grow: 1; + color: #606060; + font-size: 12px; + font-weight: 700; + text-transform: uppercase; +} + +.sheet-header__labels { + display: flex; + align-items: flex-end; + line-height: .5; + text-align: center; + text-transform: uppercase; + padding-right: 16px; +} + +.sheet-header__labels > span { + display: block; +} + +.sheet-label, +.sheet-header__labels * { + color: #b0b0b0; + font-size: 8px; +} + +.sheet-large-label { + color: #606060; + font-size: 12px; + font-weight: 700; + text-transform: uppercase; +} + +.sheet-footer { + color: #606060; + line-height: 16px; + height: 16px; +} + +.sheet-toggle:not(:checked):not(.sheet-toggle--special) + *, .sheet-toggle:not(:checked):not(.sheet-toggle--special) ~ .repcontainer, .sheet-toggle:not(:checked):not(.sheet-toggle--special) ~ .repcontrol { + display: none; +} + +.sheet-toggle::after { + display: flex; + align-items: center; + justify-content: center; + color: #808080; + line-height: 1; + width: 16px; +} + +.sheet-toggle:checked::after { + color: #606060; +} + +.sheet-toggle--block { + display: none; +} + +.sheet-toggle--visibility { + position: absolute; + top: 4px; + right: 0; +} + +.sheet-toggle--visibility::after { + content: '`'; + color: #d6d6d6; + font-size: 10px; + font-family: Pictos; + height: 10px; +} + +.sheet-toggle--visibility:checked::after { + color: #d6d6d6; +} + +.sheet-toggle--visibility:checked::after { + content: 'J'; +} + +.sheet-toggle--arrow { + position: absolute; + right: 0; + top: 0; +} + +.sheet-toggle--arrow::after { + content: '►'; + font-size: 8px; + line-height: 20px; + height: 20px; + width: 20px; + transform-origin: 9px 10px; + transition: transform .3s ease-in-out; +} + +.sheet-toggle--arrow:checked::after { + transform: rotate(90deg); +} + +.sheet-toggle--settings::after, .sheet-toggle--note-box::after, .sheet-toggle--loss::after { + color: #b0b0b0; + font-family: Pictos; + font-size: 10px; + padding-top: 1px; + width: 10px; +} + +.sheet-toggle--settings::after { + content: 'y'; +} + +.sheet-toggle--note-box::after { + content: 'n'; +} + +.sheet-toggle--loss::after { + content: 'Q'; +} + +.sheet-toggle--weight::after { + content: 'V'; + color: #b0b0b0; + font-family: Pictos; + font-size: 12px; + padding-top: 1px; + width: 10px; + transform: rotateZ(-90deg) scaleX(0.75); +} + +.sheet-toggle--spoiler::after { + content: '&'; + color: #606060; + font-family: Pictos; + font-size: 10px; + height: 100%; +} + +.sheet-toggle--spoiler:checked::after { + content: '_'; +} + +.sheet-toggle--list-roll:not(:checked) ~ .sheet-repitem__skill-roll { + display: none; +} + +.sheet-radio-track { + position: relative; + flex-shrink: 0; + background-color: #fff; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); +} + +.sheet-radio-track::before { + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 9px; + height: 100%; + width: 100%; +} + +.sheet-radio-track::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + display: block; + border-radius: inherit; + height: 0; + width: 0; + transform: translate(-50%, -50%); + transition: height .3s ease-in-out, width .3s ease-in-out, background-color .1s ease-in-out; +} + +.sheet-radio-track:hover::after, .sheet-radio-track:hover ~ .sheet-radio-track:not(:checked)::after { + background-color: #f2f2f2; + height: 60%; + width: 60%; +} + +.sheet-radio-track:checked::after, +.sheet-radio-track:checked ~ .sheet-radio-track:not(:checked)::after { + background-color: #898989; + height: 100%; + width: 100%; + transition-duration: .1s; +} + +.sheet-tooltip { + pointer-events: none; + position: absolute; + display: flex; + align-items: center; + background-color: #606060; + color: #fff; + font-size: 10px; + line-height: 1; + padding: 2px 6px; + border-radius: 2px; + opacity: 0; + transition: opacity .3s ease-in-out; +} + +.sheet-tooltip span:not(:last-child) { + margin-right: 2px; +} + +.sheet-tooltip::after { + content: ''; + position: absolute; + height: 10px; + width: 10px; +} + +.sheet-tooltip--left { + top: 50%; + left: -6px; + transform: translate(-100%, -50%); +} + +.sheet-tooltip--left::after { + top: 50%; + right: -8px; + border: 5px solid transparent; + border-left-color: #606060; + transform: translateY(-50%); +} + +.sheet-tooltip--top { + top: -6px; + left: 50%; + transform: translate(-50%, -100%); +} + +.sheet-tooltip--top::after { + bottom: -8px; + left: 50%; + border: 5px solid transparent; + border-top-color: #606060; + transform: translateX(-50%); +} + +.sheet-damage-roll-toggle-label { + display: block; + line-height: 4px; + text-align: center; + padding-right: 10px; +} + +.sheet-damage-roll-toggle-label input[type=checkbox]:checked ~ span { + color: #606060; + font-weight: 500; +} + +.sheet-damage-roll-toggle-label .sheet-icon { + display: inline-block; + font-family: Pictos; + font-size: 10px; + margin-right: 4px; +} + +.sheet-damage-roll-toggle ~ .repcontainer .sheet-damage-button-overlay { + position: relative; +} + +.sheet-damage-roll-toggle ~ .repcontainer .sheet-damage-button-overlay button[type=roll] { + position: absolute; + top: 0; + left: 0; + z-index: -1; + display: block; + height: 100%; + width: 100%; +} + +.sheet-damage-roll-toggle:checked ~ .repcontainer .sheet-damage-button-overlay button[type=roll] { + z-index: 1; +} + +.sheet-damage-roll-toggle:checked ~ .repcontainer .sheet-damage-button-overlay input[type=text] { + position: relative; + z-index: 0; + font-weight: 500; +} + +.sheet-damage-roll-toggle:checked ~ .repcontainer .sheet-damage-button-overlay input[type=text]:placeholder-shown { + z-index: 2; +} + +.sheet-label-toggle { + user-select: none; + flex-shrink: 0; + width: auto; +} + +.sheet-label-toggle input.sheet-label-toggle__input[type=text] { + background-color: #fff; + color: #606060; + line-height: 14px; + border: 1px solid #898989; + border-width: 1px; + border-radius: 0 2px 2px 0; + padding: 0 4px; + margin-left: -2px; + height: 14px; + width: 96px; +} + +.sheet-label-toggle input.sheet-label-toggle__input[type=text]:first-child { + border-left-width: 2px; +} + +.sheet-label-toggle input.sheet-label-toggle__input--tiny[type=text] { + width: 32px; +} + +.sheet-label-toggle input.sheet-label-toggle__input[type=text]::placeholder { + line-height: 12px; +} + +.sheet-label-toggle span { + display: block; + flex-shrink: 0; + background-color: #898989; + color: #fff; + font-size: 8px; + font-weight: 500; + line-height: 15px; + border-radius: 2px; + padding: 0 4px; + height: 14px; +} + +.sheet-label-toggle--full-row { + flex-basis: 100%; +} + +.sheet-label-toggle--full-row input.sheet-label-toggle__input[type=text] { + text-align: left; + width: 100%; +} + +.sheet-label-toggle input[type=checkbox] { + display: none; +} + +.sheet-label-toggle input[type=checkbox]:not(:checked) + span { + background-color: #d6d6d6; +} + +.sheet-label-toggle input[type=checkbox]:not(:checked) ~ input.sheet-label-toggle__input[type=text] { + color: #b0b0b0; + border-color: #d6d6d6; +} + +.sheet-toggle-roboto:checked ~ .sheet-body { + font-family: Roboto, Arial, Helvetica, sans-serif; +} + +.sheet-toggle-dark-labels:checked ~ .sheet-body .sheet-header__labels *, +.sheet-toggle-dark-labels:checked ~ .sheet-body .sheet-label, +.sheet-toggle-dark-labels:checked ~ .sheet-body .sheet-hexfield__label { + color: #606060 !important; +} + +.sheet-toggle-skill-die-numbers:not(:checked) ~ .sheet-body .sheet-radio-track::before { + display: none; +} + +.sheet-toggle-corners:not(:checked) ~ .sheet-body :not(.sheet-icon):not(.sheet-color-cycle__radio) { + border-radius: 0 !important; +} + +.sheet-toggle-corners:not(:checked) ~ .sheet-body :not(.sheet-icon):not(.sheet-color-cycle__radio)::before, .sheet-toggle-corners:not(:checked) ~ .sheet-body :not(.sheet-icon):not(.sheet-color-cycle__radio)::after { + border-radius: 0 !important; +} + +.sheet-toggle-transitions:not(:checked) ~ .sheet-body *, +.sheet-toggle-transitions:not(:checked) ~ .sheet-body ::before, +.sheet-toggle-transitions:not(:checked) ~ .sheet-body ::after { + transition-duration: 0s !important; +} + +.sheet-toggle-delays:not(:checked) ~ .sheet-body *, +.sheet-toggle-delays:not(:checked) ~ .sheet-body ::before, +.sheet-toggle-delays:not(:checked) ~ .sheet-body ::after { + transition-delay: 0s !important; +} + +.sheet-toggle-grid:not(:checked) ~ .sheet-body { + background: none; +} + +.sheet-toggle-description-input:not(:checked) ~ .repcontainer .sheet-roll-description { + display: none; +} + +.sheet-toggle-injection-input:not(:checked) ~ .repcontainer .sheet-roll-injection { + display: none; +} + +.sheet-hex { + position: relative; + display: block; + background-repeat: no-repeat; + background-position: center; + color: #606060; + font-weight: 700; + text-align: center; + padding: 0 6px; + filter: drop-shadow(rgba(0, 0, 0, 0.5) 0px 0px 0.7px); +} + +.sheet-hex::placeholder { + color: #d6d6d6; + font-size: inherit; + font-weight: inherit; + line-height: inherit; +} + +.sheet-hex--36 { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/hexagon_36.svg"); + font-size: 12px; + line-height: 36px; + height: 36px !important; + width: 36px; +} + +.sheet-hex--48 { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/hexagon_48.svg"); + font-size: 16px !important; + line-height: 48px; + height: 48px !important; + width: 48px; +} + +.sheet-hex--64 { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/hexagon_64.svg"); + font-size: 18px !important; + line-height: 64px; + height: 64px !important; + width: 64px; +} + +.sheet-color-cycle { + position: relative; + height: 16px; + width: 16px; +} + +.sheet-color-cycle__radio { + position: absolute; + top: 50%; + left: 50%; + z-index: 1; + background-color: transparent; + padding: 4px; + border-radius: 50%; + opacity: 0; + transform: translate(-50%, -50%); +} + +.sheet-color-cycle__radio:checked { + opacity: 1; +} + +.sheet-color-cycle__radio:checked + input { + z-index: 3; +} + +.sheet-color-cycle__radio--none, .sheet-color-cycle__radio--novice { + z-index: 2; +} + +.sheet-color-cycle__radio--none:checked, .sheet-color-cycle__radio--novice:checked { + background-color: transparent; + border-color: transparent; +} + +.sheet-color-cycle__radio--red:checked { + background-color: #d9534f; + border-color: #d9534f; +} + +.sheet-color-cycle__radio--yellow:checked { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.sheet-color-cycle__radio--blue:checked { + background-color: #0275d8; + border-color: #0275d8; +} + +.sheet-color-cycle__radio--green:checked { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.sheet-color-cycle__radio--purple:checked { + background-color: #b25afd; + border-color: #b25afd; +} + +.sheet-color-cycle__radio--gray:checked { + background-color: #545454; + border-color: #545454; +} + +.sheet-color-cycle__radio:last-child:checked { + z-index: 1; +} + +.sheet-wildcard button.sheet-repitem__skill-roll--extra { + display: none; +} + +.sheet-extra button.sheet-repitem__skill-roll--wildcard { + display: none; +} + +fieldset, +.repcontainer { + padding: 6px 0; + min-height: 32px; +} + +.repcontainer:empty ~ .repcontrol .repcontrol_add::before { + content: '+ + +'; + position: absolute; + top: -27px; + right: -16px; + background-color: #f2f2f2; + color: #808080; + font-size: 10px; + line-height: 21px; + border-radius: 2px; + height: 20px; + width: 470px; +} + +.repitem:not(:first-child) { + margin-top: 4px; +} + +.repitem input[type=text]::placeholder { + line-height: 20px; +} + +.sheet-repitem { + position: relative; + background-color: #fdfdfd; + border-radius: 2px; + width: 100%; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); +} + +.sheet-repitem:not(:last-child) { + margin-bottom: 4px; +} + +.sheet-repitem button.sheet-repitem__skill-roll { + font-family: Pictos; + color: #606060; + font-size: 10px; + height: 16px; + line-height: 15px; + margin-right: 4px !important; +} + +.sheet-repitem--full-field textarea { + font-size: 10px; + line-height: 16px; + padding: 2px 16px 2px 6px; + height: 20px; +} + +.sheet-repitem__size-radio { + position: absolute; + right: 0; + top: 2px; + z-index: 1; +} + +.sheet-repitem__size-radio--1:not(:checked) { + z-index: 2; +} + +.sheet-repitem__size-radio:checked { + z-index: 0; + opacity: 0; +} + +.sheet-repitem__size-radio:checked + input[type=radio] { + z-index: 3; +} + +.sheet-repitem__size-radio::after { + content: attr(label); + display: block; + color: #d6d6d6; + font-family: Pictos; + font-size: 10px; + line-height: 15px; + text-align: center; + height: 16px; + width: 16px; +} + +.sheet-repitem__size-radio:hover::after { + color: #606060; +} + +.sheet-repitem__primary, .sheet-repitem__secondary { + display: flex; + align-items: center; +} + +.sheet-repitem__primary > input.sheet-stretch, .sheet-repitem__secondary > input.sheet-stretch { + flex-grow: 1; + width: auto; +} + +.sheet-repitem__primary { + position: relative; + padding: 0 16px 0 6px; + height: 20px; +} + +.sheet-repitem__primary .sheet-toggle--note-box { + padding-right: 4px; +} + +.sheet-repitem__primary .sheet-toggle--note-box::after { + padding-top: 0; +} + +.sheet-repitem__secondary { + padding-top: 1px; + height: 16px; +} + +.sheet-repitem__secondary .sheet-toggle:not(:last-of-type) { + margin-right: 4px; +} + +.sheet-repitem__secondary input[type=text]::placeholder { + line-height: 16px; +} + +.sheet-repitem__secondary, .sheet-repitem__frame { + color: #606060; + font-size: 9px; + margin: 0 6px; + border-top: 1px dotted #e0e0e0; +} + +.sheet-repitem__secondary input[type=text], .sheet-repitem__frame input[type=text] { + color: #606060; + font-size: 9px; + line-height: 16px; +} + +.sheet-repitem__secondary input[type=text]::placeholder, .sheet-repitem__frame input[type=text]::placeholder { + font-size: 9px !important; +} + +.sheet-repitem__frame { + display: flex; + height: 64px; +} + +.sheet-repitem__frame-silhouette { + background-repeat: no-repeat; + background-size: 80%; + background-position: center; + height: 100%; + width: 64px; + opacity: .25; +} + +.sheet-repitem__frame-silhouette-button { + height: 100% !important; + width: 100%; +} + +.sheet-repitem__frame-build { + flex-grow: 1; + margin-left: 8px; + height: 100%; +} + +.sheet-repitem__frame-build textarea { + padding-top: 6px; + height: 100%; +} + +.sheet-repitem__settings { + position: absolute; + bottom: 2px; + right: -1px; + z-index: 3; + background-color: #fdfdfd; + padding: 4px 6px 0; + border: 1px solid #dbdbdb; + border-radius: 0 0 2px 2px; + border-width: 0 1px 1px; + width: calc(100% + 2px); + transform: translateY(100%); +} + +.sheet-repitem__settings-content { + display: flex; + flex-wrap: wrap; + align-items: center; + border-top: 1px dotted #e0e0e0; + padding-top: 4px; + margin-top: -2px; +} + +.sheet-repitem__settings-content > label { + margin-bottom: 4px; +} + +.sheet-repitem__settings-content > :not(:last-child) { + margin-right: 4px; +} + +.sheet-repitem__label { + font-weight: 500; + margin: 0 4px 0 6px; + line-height: 16px; +} + +.sheet-repitem__label::after { + content: ':'; +} + +.sheet-repitem__note-box { + position: absolute; + top: 4px; + right: -1px; + z-index: 3; + background-color: #fdfdfd; + padding: 4px 6px; + border: 1px solid #dbdbdb; + border-radius: 2px 2px 0 0; + border-width: 1px 1px 0 1px; + width: calc(100% + 2px); + transform: translateY(-100%); +} + +.sheet-repitem__note-box textarea { + border-bottom: 1px dotted #e0e0e0; + height: 60px; +} + +.sheet-repitem .sheet-toggle--arrow:not(:checked) ~ .sheet-repitem__weapons { + display: none; +} + +.sheet-repitem__subitem { + position: relative; +} + +.sheet-repitem__subitem .sheet-repitem__primary, +.sheet-repitem__subitem input[type=text] { + font-size: 9px !important; + line-height: 16px; + height: 16px; +} + +.sheet-repitem__subitem .sheet-repitem__note-box { + top: 2px; + padding: 4px 6px 2px; +} + +.sheet-repitem .sheet-repitem__weapons .sheet-repitem__note-box { + right: -7px; + width: calc(100% + 14px); +} + +.sheet-repitem .sheet-repitem__weapons .sheet-toggle--arrow::after { + line-height: 16px; + margin: 1px 2px 0 0; + height: 16px; + width: 16px; + transform-origin: 7px 8px; +} + +.sheet-repitem .sheet-repitem__weapons .sheet-toggle--note-box::after { + padding-top: 1px; +} + +.sheet-repitem__weapons-control[value='0'] + .sheet-repitem__weapons { + display: none; +} + +.sheet-repitem__weapons-control[value='1'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 2), .sheet-repitem__weapons-control[value='2'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 3), .sheet-repitem__weapons-control[value='3'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 4), .sheet-repitem__weapons-control[value='4'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 5), .sheet-repitem__weapons-control[value='5'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 6), .sheet-repitem__weapons-control[value='6'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 7), .sheet-repitem__weapons-control[value='7'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 8), .sheet-repitem__weapons-control[value='8'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 9), .sheet-repitem__weapons-control[value='9'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 10), .sheet-repitem__weapons-control[value='10'] + .sheet-repitem__weapons .sheet-repitem__subitem:nth-child(-n + 11) { + display: block; +} + +.sheet-repitem__weapons .sheet-header { + border-bottom: 1px solid #e0e0e0; +} + +.sheet-repitem__weapons .sheet-header__labels { + padding-right: 30px; + width: 100%; +} + +.sheet-repitem__weapons .sheet-repitem__subitem { + display: none; +} + +.sheet-repitem__weapons .sheet-repitem__subitem:not(.sheet-repitem__subitem--1) .sheet-repitem__primary { + border-top: 1px solid #e0e0e0; +} + +.sheet-repitem__weapons .sheet-repitem__primary { + margin-right: 6px; + padding-right: 10px; +} + +.sheet-repitem__weapons-name { + flex-grow: 1; + text-align: left; + padding-left: 6px; +} + +.sheet-repitem__weapons input.sheet-repitem__weapons-name[type=text] { + padding-left: 0; +} + +.sheet-repitem__weapons-damage, .sheet-repitem__weapons-range { + width: 85px; +} + +.sheet-repitem__weapons-rof { + width: 30px; +} + +div:not(:hover) > .sheet-hide-until-needed > div, +div:not(:hover) > .sheet-hide-until-needed > input, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield > div, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield > input { + opacity: 0; +} + +div:not(:hover) > .sheet-hide-until-needed input:hover, +div:not(:hover) > .sheet-hide-until-needed input:focus, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield input:hover, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield input:focus { + opacity: 1; +} + +div:not(:hover) > .sheet-hide-until-needed input:hover ~ div, +div:not(:hover) > .sheet-hide-until-needed input:hover ~ input, +div:not(:hover) > .sheet-hide-until-needed input:focus ~ div, +div:not(:hover) > .sheet-hide-until-needed input:focus ~ input, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield input:hover ~ div, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield input:hover ~ input, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield input:focus ~ div, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield input:focus ~ input { + opacity: 1; +} + +.sheet-hexfield { + position: relative; + white-space: nowrap; + color: #606060; + height: 36px; + width: 36px; + transition: color .3s ease-in-out, opacity .3s ease-in-out; +} + +.sheet-hexfield div, +.sheet-hexfield input { + transition: color .3s ease-in-out, opacity .3s ease-in-out; + transition-delay: .4s; +} + +.sheet-hexfield-gray, .sheet-hexfield-gray input { + color: #b0b0b0; +} + +.sheet-hexfield .sheet-hexfield .sheet-hexfield__label { + color: #b0b0b0; +} + +.sheet-hexfield.sheet-stay-on-input input:not(:placeholder-shown) { + opacity: 1 !important; +} + +.sheet-hexfield.sheet-stay-on-input input:not(:placeholder-shown) ~ :not(.sheet-exception) { + color: #606060; + opacity: 1 !important; +} + +.sheet-hexfield__label { + position: absolute; + top: 10px; + display: flex; + align-items: center; + justify-content: flex-end; + font-size: 9px !important; + font-weight: 500; + line-height: 10px !important; + text-transform: uppercase; + height: 16px; + transform: translateX(-100%); +} + +.sheet-hexfield__label--right { + left: 36px; + justify-content: flex-start; + transform: translateX(0); +} + +.sheet-hexfield__label--bottom { + top: 38px; + left: 18px; + align-items: flex-start; + justify-content: center; + transform: translateX(-50%); +} + +.sheet-hexfield__label--up { + top: -18px; + left: 18px; + align-items: flex-end; + justify-content: center; + transform: translateX(-50%); +} + +.sheet-san-tabs { + position: absolute; + top: 0; + right: 0; + border-bottom: 1px dotted #e0e0e0; + height: 16px; + width: 266px; +} + +.sheet-san-tabs ~ div { + flex-basis: 100%; +} + +.sheet-tab ~ div { + min-height: 100%; +} + +.sheet-tab::after { + content: attr(label); + position: relative; + z-index: 1; + display: block; + align-items: center; + justify-content: center; + color: #b0b0b0; + font-size: 10px; + font-weight: 500; + line-height: 1; + padding: 3px 6px 0; + border: 1px dotted transparent; + border-width: 1px 1px 0 1px; + border-radius: 2px; + height: 16px; + transition: none; +} + +.sheet-tab:hover::after { + color: #808080; +} + +.sheet-tab:checked::after { + background-color: #fff; + color: #606060; + border-color: #e0e0e0; +} + +.sheet-tab--skills { + margin-left: 72px; +} + +.sheet-tab--notebook ~ .sheet-notebook { + height: calc(100% - 64px); +} + +.sheet-tab--skills:not(:checked) ~ .sheet-skills, .sheet-tab--advancements:not(:checked) ~ .sheet-advancements, .sheet-tab--notebook:not(:checked) ~ .sheet-notebook, .sheet-tab--settings:not(:checked) ~ .sheet-settings { + display: none; +} + +.sheet-meta { + width: 472px; + margin-bottom: 44px; +} + +.sheet-meta .sheet-container { + display: flex; +} + +.sheet-meta .sheet-container:first-child { + margin-bottom: 4px; +} + +.sheet-meta .sheet-label { + text-transform: uppercase; + margin-top: 4px; +} + +.sheet-meta .sheet-meta-field:not(:last-child) { + margin-right: 8px; +} + +.sheet-meta .sheet-meta-field input.sheet-meta-field__input { + color: #808080; + font-weight: 500; + line-height: 15px; + text-align: left; + border-bottom: 1px dotted #e0e0e0; + padding: 0 2px; + height: 16px; +} + +.sheet-meta .sheet-meta-field input.sheet-meta-field__input--name { + width: 136px; +} + +.sheet-meta .sheet-meta-field input.sheet-meta-field__input--size, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--exp, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--level, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--age, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--bennies { + width: 40px; +} + +.sheet-meta .sheet-meta-field input.sheet-meta-field__input--height, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--weight { + width: 64px; +} + +.sheet-meta .sheet-meta-field input.sheet-meta-field__input--eyes, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--hair, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--rank, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--origin, .sheet-meta .sheet-meta-field input.sheet-meta-field__input--gender { + width: 64px; +} + +.sheet-meta .sheet-meta-field input.sheet-meta-field__input--bits { + width: 64px; +} + +.sheet-buttons { + display: flex; + flex-wrap: wrap; + margin-right: -4px; + width: 274px; +} + +.sheet-buttons::after { + content: ''; + display: block; + flex-grow: 1000000; +} + +.sheet-buttons > div, +.sheet-buttons > label { + margin: 0 4px; +} + +.sheet-buttons > div { + position: relative; + z-index: 1; + display: flex; + flex-grow: 1; + white-space: nowrap; + border-radius: 2px; + margin-bottom: 8px; + height: 16px; + overflow: hidden; +} + +.sheet-buttons > div::before { + content: ''; + position: absolute; + top: 0; + left: 0; + z-index: -1; + display: block; + background-color: #fdfdfd; + border: 1px dotted #e0e0e0; + border-radius: 2px; + width: 100%; + height: 100%; +} + +.sheet-buttons button { + flex-shrink: 0; + flex-grow: 1; + justify-content: center; + color: #b0b0b0; + font-size: 10px; + font-weight: 500; + line-height: 16px; + padding: 0 4px !important; + height: 16px; +} + +.sheet-buttons button:hover { + background-color: #898989; +} + +.sheet-buttons button:hover > span { + color: #fff !important; +} + +.sheet-buttons .sheet-dice-roller input.sheet-dice-roller__input[type=text] { + flex-grow: 100; + width: auto; +} + +.sheet-buttons .sheet-dice-roller input.sheet-dice-roller__input[type=text]::placeholder { + font-size: 10px; +} + +.sheet-buttons .sheet-label-toggle { + margin-bottom: 8px; +} + +.sheet-buttons .sheet-label-toggle span { + font-size: 10px; + line-height: 16px; + height: 16px; +} + +.sheet-attribute { + position: relative; + font-size: 14px; + height: 48px; + width: 48px; +} + +.sheet-attribute__button { + position: absolute; + top: 50%; + left: 0; + color: #606060; + font-size: 14px; + font-weight: 700; + transform: translate(-100%, -50%); +} + +.sheet-attribute:not(:hover) .sheet-hexfield--mod input:not(:focus) + .sheet-hexfield__label { + opacity: 0; +} + +.sheet-attribute .sheet-hexfield { + position: absolute; + top: 37px; +} + +.sheet-attribute .sheet-hexfield--nat { + left: 27px; +} + +.sheet-attribute .sheet-hexfield--mod { + top: 9px; + left: 43px; +} + +.sheet-attribute .sheet-hexfield--mod .sheet-hexfield__label { + color: #b0b0b0; +} + +.sheet-attribute .sheet-hexfield--mod .sheet-hexfield__input:not(:placeholder-shown) ~ .sheet-hexfield__label { + color: #606060; +} + +.sheet-attribute .sheet-hexfield--wd { + left: 59px; +} + +.sheet-toggle-silhouette-markers:not(:checked) + .sheet-silhouette .sheet-color-cycle { + display: none; +} + +.sheet-silhouette { + position: relative; + z-index: 1; + height: 300px; + width: 200px; +} + +.sheet-silhouette__image { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/female_silhouette.png"); + background-repeat: no-repeat; + background-size: contain; + height: 100%; + width: 100%; +} + +.sheet-silhouette__image:hover ~ .sheet-color-cycle :checked { + opacity: 1; + transition-delay: 0.4s; +} + +.sheet-silhouette .sheet-color-cycle { + position: absolute; + transform: translateX(-50%); +} + +.sheet-silhouette .sheet-color-cycle:hover :checked { + opacity: 1; +} + +.sheet-silhouette .sheet-color-cycle__radio { + border: 2px solid #fff; + opacity: 0; + transition: opacity .3s ease-in-out; +} + +.sheet-silhouette .sheet-color-cycle__radio:not(.sheet-color-cycle__radio--none):checked { + opacity: 1; +} + +.sheet-silhouette .sheet-color-cycle__radio--none { + background-color: #d9d9d9 !important; +} + +.sheet-silhouette__head { + top: 26px; + left: 99px; +} + +.sheet-silhouette__torso-upper { + top: 64px; + left: 99px; +} + +.sheet-silhouette__torso-lower { + top: 100px; + left: 99px; +} + +.sheet-silhouette__left-arm-upper { + top: 70px; + left: 128px; +} + +.sheet-silhouette__left-arm-lower { + top: 109px; + left: 138px; +} + +.sheet-silhouette__left-hand { + top: 134px; + left: 142px; +} + +.sheet-silhouette__right-arm-upper { + top: 70px; + left: 69px; +} + +.sheet-silhouette__right-arm-lower { + top: 109px; + left: 59px; +} + +.sheet-silhouette__right-hand { + top: 134px; + left: 55px; +} + +.sheet-silhouette__left-leg-upper { + top: 160px; + left: 125px; +} + +.sheet-silhouette__left-leg-lower { + top: 230px; + left: 129px; +} + +.sheet-silhouette__right-leg-upper { + top: 160px; + left: 72px; +} + +.sheet-silhouette__right-leg-lower { + top: 230px; + left: 68px; +} + +.sheet-silhouette__switch { + position: absolute; + bottom: 12px; + left: 50%; + z-index: 3; +} + +.sheet-silhouette__switch::after { + content: '[ ]'; + display: block; + color: #d6d6d6; + font-family: Pictos; + font-size: 8px; + transform: translateX(-50%); +} + +.sheet-silhouette__switch:checked + .sheet-silhouette__image { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/male_silhouette.png"); +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__left-arm-upper { + top: 70px; + left: 141px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__left-arm-lower { + top: 105px; + left: 150px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__left-hand { + top: 143px; + left: 147px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__right-arm-upper { + top: 70px; + left: 56px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__right-arm-lower { + top: 105px; + left: 47px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__right-hand { + top: 143px; + left: 50px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__left-leg-upper { + top: 172px; + left: 126px; +} + +.sheet-silhouette__switch:checked ~ .sheet-silhouette__right-leg-upper { + top: 172px; + left: 71px; +} + +.sheet-secondary { + display: flex; + padding-right: 80px; +} + +.sheet-secondary > :not(:last-child) { + margin-right: 24px; +} + +.sheet-secondary .sheet-hexfield--run { + top: -100px; + left: -16px; +} + +.sheet-secondary .sheet-hexfield--flight { + top: -64px; + left: 16px; +} + +.sheet-secondary .sheet-hexfield--soak-mod { + top: -36px; + left: 32px; +} + +.sheet-secondary .sheet-hexfield--soak-wd { + top: -72px; + left: 64px; +} + +.sheet-secondary .sheet-hexfield--soak > button[type=roll] { + color: #606060; + font-weight: 700; +} + +.sheet-armor { + z-index: 1; + display: flex; + flex-direction: column; + align-items: flex-end; + padding-right: 48px; +} + +.sheet-armor > .sheet-hexfield:not(:last-child) { + margin-bottom: 36px; +} + +.sheet-armor > .sheet-hexfield--armor-head, .sheet-armor > .sheet-hexfield--armor-legs { + margin-right: 16px; +} + +.sheet-armor > .sheet-hexfield .sheet-hexfield__label--left { + background-color: #fff; + padding-left: 4px; +} + +.sheet-armor > .sheet-hexfield textarea { + position: absolute; + top: 8px; + left: 36px; + color: #808080; + font-size: 9px !important; + line-height: 1.6; + padding-top: 4px; + height: 60px; + width: 80px; +} + +.sheet-armor > .sheet-hexfield textarea::placeholder { + color: #f0f0f0; + font-size: 22px; + font-weight: 700; + line-height: 0.6; +} + +.sheet-armor__decoration, .sheet-armor__pointer { + position: absolute; + background-repeat: no-repeat; + background-size: contain; + opacity: .12; +} + +.sheet-armor__decoration { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/decoration_line.png"); + top: 15px; + left: -60px; + height: 322px; + width: 95px; +} + +.sheet-armor__pointer { + transform: translateX(-100%); +} + +.sheet-armor__pointer--head { + top: 17px; + left: -28px; + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/head_line.png"); + height: 2px; + width: 122px; +} + +.sheet-armor__pointer--torso { + top: -11px; + left: -33px; + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/torso_line.png"); + height: 30px; + width: 131px; +} + +.sheet-armor__pointer--arms { + top: -44px; + left: -30px; + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/arms_line.png"); + height: 63px; + width: 97px; +} + +.sheet-armor__pointer--legs { + top: -23px; + left: -27px; + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/legs_line.png"); + height: 42px; + width: 98px; +} + +.sheet-toggle-skill-markers:not(:checked) + .sheet-skills .sheet-color-cycle { + display: none; +} + +.sheet-skills { + position: relative; + padding-top: 8px; +} + +.sheet-skills__lock::after { + position: absolute; + top: 10px; + right: 0; + display: flex; + align-items: center; + justify-content: center; + color: #b0b0b0; + font-family: Pictos; + font-size: 8px; + height: 16px; + width: 16px; +} + +.sheet-skills__lock:not(:checked)::after { + content: ')'; +} + +.sheet-skills__lock:not(:checked) + .sheet-skills__wrapper .sheet-skills__step-button { + display: none; +} + +.sheet-skills__lock:checked::after { + content: '('; +} + +.sheet-skills__lock:checked ~ .sheet-skills__wrapper .sheet-skills__track input { + cursor: default; + pointer-events: none; +} + +.sheet-skills .sheet-header { + justify-content: flex-end; + border: none; +} + +.sheet-skills__die { + width: 18px; +} + +.sheet-skills__die:not(.sheet-a) { + margin-right: 3px; +} + +.sheet-skills__mod, .sheet-skills__wd { + width: 24px; +} + +.sheet-skills__mod { + margin-right: 3px; +} + +.sheet-skills__plus { + color: #d6d6d6; + font-size: 12px; + line-height: 1; + text-align: center; + width: 18px; +} + +.sheet-skills__color-marker { + width: 16px; +} + +.sheet-skills__color-marker .sheet-color-cycle__radio { + padding: 3px; + border: 1px solid transparent; +} + +.sheet-skills__color-marker .sheet-color-cycle__radio--none { + border-color: #e0e0e0; +} + +.sheet-skills__skill { + display: flex; + flex-direction: row-reverse; + align-items: center; + justify-content: flex-start; + height: 16px; +} + +.sheet-skills__skill:not(:last-child) { + margin-bottom: 8px; +} + +.sheet-skills__skill input.sheet-skills__mod[type=text], +.sheet-skills__skill input.sheet-skills__wd[type=text] { + background-color: #fff; + font-size: 9px !important; + height: 14px; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); +} + +.sheet-skills__skill input.sheet-skills__mod[type=text]::placeholder, +.sheet-skills__skill input.sheet-skills__wd[type=text]::placeholder { + line-height: 14px; +} + +.sheet-skills__skill input.sheet-skills__mod[type=text]:not(:placeholder-shown), +.sheet-skills__skill input.sheet-skills__wd[type=text]:not(:placeholder-shown) { + background-color: #898989; + color: #fff; +} + +.sheet-skills__skill .sheet-skills__mod { + border-radius: 2px 0 0 2px; +} + +.sheet-skills__skill .sheet-skills__wd { + border-radius: 0 2px 2px 0; +} + +.sheet-skills__track { + display: flex; + flex-direction: row-reverse; +} + +.sheet-skills input.sheet-radio-track[type=radio] { + height: 14px; + width: 18px; +} + +.sheet-skills input.sheet-radio-track[type=radio]:not(:first-of-type) { + margin-right: 3px; +} + +.sheet-skills input.sheet-radio-track[type=radio]:not(.sheet-d4-2):checked::before { + content: attr(label); +} + +.sheet-skills input.sheet-radio-track.sheet-d12[type=radio] { + border-radius: 0 2px 2px 0; +} + +.sheet-skills input.sheet-radio-track.sheet-d4-2[type=radio] { + border-radius: 2px 0 0 2px; +} + +.sheet-skills input.sheet-radio-track.sheet-d4-2[type=radio]:checked { + background: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/unskilled_bg.png") repeat; +} + +.sheet-skills input.sheet-radio-track.sheet-d4-2[type=radio]:checked::after { + background-color: transparent; +} + +.sheet-skills input.sheet-radio-track.sheet-d4-2[type=radio]:checked ~ button > span { + color: #b0b0b0; +} + +.sheet-skills button[type=roll] .sheet-tooltip { + z-index: 10; + white-space: nowrap; +} + +.sheet-skills button[type=roll] .sheet-tooltip--left { + text-transform: uppercase; +} + +.sheet-skills button[type=roll]:hover .sheet-tooltip { + opacity: 1; + transition-delay: .4s; +} + +.sheet-skills button.sheet-skills__step-button[type=roll] { + position: relative; + margin-right: -18px !important; + height: 14px; + width: 18px; +} + +.sheet-skills__button { + position: relative; + align-items: center; + color: #606060; + font-size: 10px; + font-weight: 500; + line-height: 1; +} + +.sheet-skills__button > span { + display: block; + padding: 1px 8px 1px 0; + max-width: 88px; + overflow: hidden; + text-overflow: ellipsis; +} + +.sheet-advancements { + color: #606060; + font-size: 10px; + line-height: 16px; + padding: 8px 0 0 64px; +} + +.sheet-advancements__item { + display: flex; + background-color: #fff; + border-bottom: 1px dotted #e0e0e0; + height: 16px; + width: 100%; +} + +.sheet-advancements__item:not(:last-child) { + margin-bottom: 8px; +} + +.sheet-advancements__rank { + font-weight: 700; + text-align: center; + margin-right: 8px; + width: 8px; +} + +.sheet-advancements input[type=text] { + flex-grow: 1; + color: #606060; + font-size: 10px; + line-height: 16px; +} + +.sheet-advancements input[type=text]::placeholder { + font-size: 10px; +} + +.sheet-notebook { + padding: 8px 0 0 64px; +} + +.sheet-notebook textarea { + background-image: linear-gradient(to right, #f6f6f6 1px, transparent 1px), linear-gradient(to bottom, #f6f6f6 1px, transparent 1px); + background-size: 16px 16px; + background-position: 4px -1px; + background-color: #fff; + color: #606060; + font-size: 10px; + line-height: 16px; + padding: 0 8px; + resize: none; + height: 100%; +} + +.sheet-settings { + text-align: center; + padding: 8px 0 0 64px; +} + +.sheet-settings__page { + display: flex; + flex-direction: column; + align-items: flex-end; + text-align: left; +} + +.sheet-settings__page-tab { + display: inline-block; + color: #b0b0b0; + margin-bottom: 7px; +} + +.sheet-settings__page-tab::before, .sheet-settings__page-tab::after { + display: inline-block; + font-size: 10px; + font-weight: 500; + line-height: 15px; + height: 16px; +} + +.sheet-settings__page-tab::before { + content: attr(label); +} + +.sheet-settings__page-tab:not(:last-of-type)::after { + content: '|'; + margin: 0 2px 0 4px; +} + +.sheet-settings__page-tab:checked::before { + color: #808080; +} + +.sheet-settings .sheet-settings__page-tab--styles:not(:checked) ~ .sheet-settings__page--styles, .sheet-settings .sheet-settings__page-tab--setup:not(:checked) ~ .sheet-settings__page--setup, .sheet-settings .sheet-settings__page-tab--blocks:not(:checked) ~ .sheet-settings__page--blocks, .sheet-settings .sheet-settings__page-tab--skills:not(:checked) ~ .sheet-settings__page--skills, .sheet-settings .sheet-settings__page-tab--help:not(:checked) ~ .sheet-settings__page--help { + display: none; +} + +.sheet-settings__textarea-toggle:not(:checked) + textarea { + display: none; +} + +.sheet-settings__item { + user-select: none; + display: flex; + align-items: center; + width: 100%; + min-height: 16px; +} + +.sheet-settings__item:not(:last-child) { + margin-bottom: 8px; +} + +.sheet-settings__item > span:first-of-type { + display: block; + flex-grow: 1; + color: #606060; + font-size: 10px; + font-weight: 500; + line-height: 15px; + border-bottom: 1px dotted #e0e0e0; + margin-right: 12px; + height: 100%; +} + +.sheet-settings__item .sheet-checkbox { + margin-right: 4px; +} + +.sheet-settings__item--text-input > span:first-of-type { + flex-grow: 0; + flex-shrink: 0; + margin-right: 0; +} + +.sheet-settings__item--text-input > span:first-of-type ~ input[type=text] { + padding-left: 5px; +} + +.sheet-settings__item--text-input input[type=text] { + flex-grow: 1; + color: #606060; + line-height: 15px; + border-bottom: 1px dotted #e0e0e0; + margin-right: 12px; + height: 16px; + width: auto; +} + +.sheet-settings__item--text-input input[type=text]::placeholder { + font-size: 10px; +} + +.sheet-settings__item--text-input input[type=text]:last-child { + margin-right: 26px; +} + +.sheet-settings__item--text-input input[type=text] + span:last-of-type { + display: block; + flex-shrink: 0; + color: #808080; + font-family: Pictos; + font-size: 11px; + margin: 0 4px 0 1px; + height: 16px; + width: 9px; +} + +.sheet-settings__item--textarea { + flex-wrap: wrap; +} + +.sheet-settings__item--textarea textarea { + flex-basis: 100%; + background-color: #fff; + font-size: 10px; + line-height: 16px; + padding: 4px; + border: 1px solid #e0e0e0; + border-radius: 2px; + height: 64px; + margin: 8px 4px 0 0; + transition: border-color .3s ease-in-out, height .3s ease-in-out; +} + +.sheet-settings__item--textarea textarea:hover { + border-color: #898989; +} + +.sheet-settings__item--textarea textarea:focus { + border-color: #898989; + height: 192px; +} + +.sheet-settings__item--help { + flex-wrap: wrap; + height: auto; +} + +.sheet-settings__item--help > span:first-of-type { + margin-right: 8px; +} + +.sheet-settings__item--help .sheet-bottom { + user-select: text; + flex-basis: 100%; + text-align: justify; + line-height: 1.6; + padding: 4px 0; +} + +.sheet-features { + position: relative; + flex-grow: 1; +} + +.sheet-features fieldset, +.sheet-features .repcontainer { + display: flex; + flex-wrap: wrap; + padding: 4px 0; + margin: 0 -4px; +} + +.sheet-features fieldset::after, +.sheet-features .repcontainer::after { + content: ''; + display: block; + flex-grow: 1000000; +} + +.sheet-features fieldset > *, +.sheet-features .repcontainer > * { + opacity: .6; + transition-delay: .4s; + transition: opacity .3s ease-in-out; +} + +.sheet-features fieldset:hover > *, +.sheet-features .repcontainer:hover > * { + opacity: 1; +} + +.sheet-features .repitem { + flex-grow: 1; + margin-top: 0; +} + +.sheet-features .sheet-repitem { + position: relative; + display: flex; + padding-right: 6px; + margin: 4px; + width: auto; +} + +.sheet-features .sheet-color-cycle__radio { + top: 1px; + left: 1px; + align-items: center; + padding: 0; + height: 14px; + width: 14px; + opacity: 1; + transform: none; +} + +.sheet-features .sheet-color-cycle__radio::after { + display: flex; + align-items: center; + justify-content: center; + font-size: 10px; + font-weight: 700; + line-height: 1; + height: 100%; + width: 100%; + border-radius: 2px 0 0 2px; +} + +.sheet-features .sheet-color-cycle__radio--novice:checked::after { + content: 'N'; + background-color: rgba(0, 0, 0, 0.05); + color: #606060; +} + +.sheet-features .sheet-color-cycle__radio--seasoned:checked::after { + content: 'S'; + background-color: #5cb85c; + color: #fff; +} + +.sheet-features .sheet-color-cycle__radio--veteran:checked::after { + content: 'V'; + background-color: #0275d8; + color: #fff; +} + +.sheet-features .sheet-color-cycle__radio--heroic:checked::after { + content: 'H'; + background-color: #b25afd; + color: #fff; +} + +.sheet-features .sheet-color-cycle__radio--legendary:checked::after { + content: 'L'; + background-color: #f0ad4e; + color: #fff; +} + +.sheet-features .sheet-color-cycle__radio--augmentation:checked::after { + content: 'A'; + background-color: #898989; + color: #fff; +} + +.sheet-features .sheet-color-cycle__radio--dot:checked::after { + content: ''; + background-color: #606060; + border: 4px solid #fdfdfd; + border-radius: 50%; + height: 14px; + width: 14px; +} + +.sheet-features .sheet-color-cycle__radio--hindrance:checked::after { + content: '*'; + background-color: #923836; + color: #fff; + font-family: Pictos; +} + +.sheet-features .sheet-color-cycle__radio--disabled:checked::after { + content: 'e'; + font-size: 12px; + font-family: Pictos; +} + +.sheet-features .sheet-color-cycle__radio--disabled:checked ~ *, .sheet-features .sheet-color-cycle__radio--disabled:checked::after { + color: #b0b0b0; + text-shadow: 0 0 3px #fff, 0 0 3px #fff, 0 0 3px #fff, 0 0 3px #fff; +} + +.sheet-features .sheet-color-cycle__radio--disabled:checked ~ .sheet-features__inner-background { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 0; + background: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/unskilled_bg.png") repeat; +} + +.sheet-features input.sheet-features__name[type=text] { + z-index: 1; + line-height: 16px; + margin-left: 20px; +} + +.sheet-features input[value="32"] + input { + width: 32px; +} + +.sheet-features input[value="36"] + input { + width: 36px; +} + +.sheet-features input[value="40"] + input { + width: 40px; +} + +.sheet-features input[value="44"] + input { + width: 44px; +} + +.sheet-features input[value="48"] + input { + width: 48px; +} + +.sheet-features input[value="52"] + input { + width: 52px; +} + +.sheet-features input[value="56"] + input { + width: 56px; +} + +.sheet-features input[value="60"] + input { + width: 60px; +} + +.sheet-features input[value="64"] + input { + width: 64px; +} + +.sheet-features input[value="68"] + input { + width: 68px; +} + +.sheet-features input[value="72"] + input { + width: 72px; +} + +.sheet-features input[value="76"] + input { + width: 76px; +} + +.sheet-features input[value="80"] + input { + width: 80px; +} + +.sheet-features input[value="84"] + input { + width: 84px; +} + +.sheet-features input[value="88"] + input { + width: 88px; +} + +.sheet-features input[value="92"] + input { + width: 92px; +} + +.sheet-features input[value="96"] + input { + width: 96px; +} + +.sheet-features input[value="100"] + input { + width: 100px; +} + +.sheet-features input[value="104"] + input { + width: 104px; +} + +.sheet-features input[value="108"] + input { + width: 108px; +} + +.sheet-features input[value="112"] + input { + width: 112px; +} + +.sheet-features input[value="116"] + input { + width: 116px; +} + +.sheet-features input[value="120"] + input { + width: 120px; +} + +.sheet-features input[value="124"] + input { + width: 124px; +} + +.sheet-features input[value="128"] + input { + width: 128px; +} + +.sheet-features input[value="132"] + input { + width: 132px; +} + +.sheet-features input[value="136"] + input { + width: 136px; +} + +.sheet-features input[value="140"] + input { + width: 140px; +} + +.sheet-features input[value="144"] + input { + width: 144px; +} + +.sheet-features input[value="148"] + input { + width: 148px; +} + +.sheet-features input[value="152"] + input { + width: 152px; +} + +.sheet-features input[value="156"] + input { + width: 156px; +} + +.sheet-features input[value="160"] + input { + width: 160px; +} + +.sheet-features input[value="164"] + input { + width: 164px; +} + +.sheet-features input[value="168"] + input { + width: 168px; +} + +.sheet-features input[value="172"] + input { + width: 172px; +} + +.sheet-features input[value="176"] + input { + width: 176px; +} + +.sheet-features input[value="180"] + input { + width: 180px; +} + +.sheet-features .repcontainer.editmode .itemcontrol { + margin: 4px; + width: calc(100% - 8px) !important; + max-height: 16px; +} + +.sheet-health { + position: relative; + display: flex; + align-items: flex-end; +} + +.sheet-health > .sheet-hex { + order: 2; +} + +.sheet-health .sheet-header__title { + margin-top: 8px; +} + +.sheet-health:hover .sheet-health__icons * { + opacity: 1; +} + +.sheet-health__icons { + display: flex; +} + +.sheet-health__icons .sheet-icon { + color: #b0b0b0; + font-size: 10px; + line-height: 1; + opacity: 0; + transition: opacity .3s ease-in-out; + transition-delay: .4s; +} + +.sheet-health__icons .sheet-icon:checked { + color: #fff; + opacity: 1; +} + +.sheet-health__icons .sheet-icon:checked::after { + background-color: #898989; + border: 1px solid #898989; +} + +.sheet-health__icons .sheet-icon:not(:last-child) { + margin-right: 8px; +} + +.sheet-health__icons .sheet-icon::after { + display: flex; + align-items: center; + justify-content: center; + background-color: #fff; + font-family: Pictos; + border: 1px dotted #e0e0e0; + border-radius: 50%; + margin: 2px 2px 6px; + height: 20px; + width: 20px; +} + +.sheet-health__icons .sheet-icon--shield::after { + content: 'b'; +} + +.sheet-health__icons .sheet-icon--bug::after { + content: 'i'; +} + +.sheet-health__icons .sheet-icon--fire::after { + content: 'r'; + font-family: 'Pictos Custom'; +} + +.sheet-health__icons .sheet-icon--hit::after { + content: 't'; + font-family: 'Pictos Custom'; +} + +.sheet-health__icons .sheet-icon--lightning::after { + content: 'e'; +} + +.sheet-health__icons .sheet-icon--cancel::after { + content: 'd'; +} + +.sheet-health__icons .sheet-icon--rad::after { + content: 'l'; +} + +.sheet-health__icons .sheet-icon--tools::after { + content: 'x'; +} + +.sheet-health__icons .sheet-icon--ecg::after { + content: 'Y'; +} + +.sheet-health__track { + position: relative; + display: flex; +} + +.sheet-health__track .sheet-radio-track, +.sheet-health__track .sheet-reset-button { + border-radius: 2px; + margin-right: 8px; + height: 24px; + width: 24px; +} + +.sheet-health__track:hover .sheet-reset-button:not(:checked), .sheet-health__track:hover .sheet-radio-track-toggle { + opacity: 1; + transition-delay: .4s; +} + +.sheet-health__track .sheet-reset-button { + position: absolute; + z-index: 2; + opacity: 0; + transition: opacity .3s ease-in-out; +} + +.sheet-health__track .sheet-reset-button::after { + content: '*'; + display: flex; + align-items: center; + justify-content: center; + background-color: #898989; + color: #fff; + font-family: Pictos; + line-height: 1; + border-radius: 2px; + height: 100%; + width: 100%; +} + +.sheet-health__track .sheet-reset-button:checked { + display: none; +} + +.sheet-health__track .sheet-radio-track-toggle { + position: absolute; + top: 24px; + z-index: 2; + height: 16px; + width: 24px; + opacity: 0; + transition: opacity .3s ease-in-out; +} + +.sheet-health__track .sheet-radio-track-toggle::before, .sheet-health__track .sheet-radio-track-toggle::after { + content: ''; + background-color: rgba(0, 0, 0, 0.1); + height: 4px; + width: 50%; +} + +.sheet-health__track .sheet-radio-track-toggle::after { + background-color: rgba(0, 0, 0, 0.05); +} + +.sheet-health__track .sheet-radio-track-toggle:checked { + flex-direction: row-reverse; +} + +.sheet-health__track .sheet-radio-track-toggle:checked + input { + background: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/unskilled_bg.png") repeat; +} + +.sheet-health__track .sheet-radio-track-toggle:checked + input::before, .sheet-health__track .sheet-radio-track-toggle:checked + input::after { + display: none; +} + +.sheet-health__wounds { + order: 1; +} + +.sheet-health__wounds .sheet-health__track { + flex-direction: row-reverse; + justify-content: flex-end; +} + +.sheet-health__wounds .sheet-radio-track--6 { + margin-right: 0; +} + +.sheet-health__wounds .sheet-radio-track-toggle--6 { + left: 160px; +} + +.sheet-health__wounds .sheet-radio-track-toggle--5 { + left: 128px; +} + +.sheet-health__wounds .sheet-radio-track-toggle--4 { + left: 96px; +} + +.sheet-health__wounds .sheet-radio-track-toggle--3 { + left: 64px; +} + +.sheet-health__wounds .sheet-radio-track-toggle--2 { + left: 32px; +} + +.sheet-health__center { + order: 3; + position: absolute; + left: 185px; +} + +.sheet-health__center .sheet-hexfield { + position: absolute; + bottom: 8px; + transform: translateY(100%); +} + +.sheet-health__center .sheet-hexfield--wound-mitigation { + left: 1px; +} + +.sheet-health__center .sheet-hexfield--rads { + left: 33px; +} + +.sheet-health .sheet-hex--64 { + margin: 0 4px; +} + +.sheet-health .sheet-hex--64::after { + content: ''; + display: flex; + align-items: center; + justify-content: center; + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/skull.png"); + background-repeat: no-repeat; + background-size: 32px; + background-position: center; + height: 100%; + width: 100%; + opacity: .15; +} + +.sheet-health .sheet-hex--64:checked::after { + opacity: .5; +} + +.sheet-health__fatigue { + order: 4; + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.sheet-health__fatigue .sheet-reset-button { + right: 0; + margin: 0; +} + +.sheet-health__fatigue .sheet-radio-track--1 { + margin-right: 0; +} + +.sheet-health__fatigue .sheet-radio-track-toggle--3 { + right: 64px; +} + +.sheet-health__fatigue .sheet-radio-track-toggle--2 { + right: 32px; +} + +.sheet-power { + position: relative; + margin-right: -8px; +} + +.sheet-power .sheet-header__title { + position: absolute; + top: 50%; + left: 0; + transform: translate(-100%, -50%); +} + +.sheet-power .sheet-hexfield { + position: absolute; + bottom: -28px; +} + +.sheet-power .sheet-hexfield--power-consumed { + left: -2px; +} + +.sheet-power .sheet-hexfield--power-maximum { + left: 30px; +} + +.sheet-weapons { + margin-top: 32px; +} + +.sheet-weapons__damage, .sheet-weapons__range { + width: 80px; +} + +.sheet-weapons__ap, .sheet-weapons__rof, .sheet-weapons__weight { + width: 30px; +} + +.sheet-weapons__shots { + width: 40px; +} + +.sheet-weapons__trapping { + width: 64px; +} + +.sheet-weapons__damage-button { + position: absolute; + top: 0; + left: 164px; + display: none; + height: 20px; + width: 80px; +} + +.sheet-weapons input.sheet-toggle:not(:checked) ~ .sheet-weapons__trapping { + display: none; +} + +.sheet-apparel__armor { + width: 40px; + margin-right: 8px; +} + +.sheet-apparel__tags { + text-align: left; + width: 210px; +} + +.sheet-apparel__weight { + width: 30px; +} + +.sheet-integrity { + display: flex; + align-items: center; + justify-content: space-between; +} + +.sheet-integrity__status { + width: 320px; +} + +.sheet-integrity__progress { + position: relative; + display: flex; + justify-content: flex-end; + background-color: #e0e0e0; + border-radius: 2px; + height: 8px; + width: 100%; + overflow: hidden; +} + +.sheet-integrity__progress-fill { + background-color: #898989; + height: 100%; + width: 100%; + transition: width .3s ease-in-out; +} + +.sheet-integrity__bar-width[value="0"] ~ .sheet-integrity__progress-fill { + width: 0px; +} + +.sheet-integrity__bar-width[value="1"] ~ .sheet-integrity__progress-fill { + width: 4px; +} + +.sheet-integrity__bar-width[value="2"] ~ .sheet-integrity__progress-fill { + width: 8px; +} + +.sheet-integrity__bar-width[value="3"] ~ .sheet-integrity__progress-fill { + width: 12px; +} + +.sheet-integrity__bar-width[value="4"] ~ .sheet-integrity__progress-fill { + width: 16px; +} + +.sheet-integrity__bar-width[value="5"] ~ .sheet-integrity__progress-fill { + width: 20px; +} + +.sheet-integrity__bar-width[value="6"] ~ .sheet-integrity__progress-fill { + width: 24px; +} + +.sheet-integrity__bar-width[value="7"] ~ .sheet-integrity__progress-fill { + width: 28px; +} + +.sheet-integrity__bar-width[value="8"] ~ .sheet-integrity__progress-fill { + width: 32px; +} + +.sheet-integrity__bar-width[value="9"] ~ .sheet-integrity__progress-fill { + width: 36px; +} + +.sheet-integrity__bar-width[value="10"] ~ .sheet-integrity__progress-fill { + width: 40px; +} + +.sheet-integrity__bar-width[value="11"] ~ .sheet-integrity__progress-fill { + width: 44px; +} + +.sheet-integrity__bar-width[value="12"] ~ .sheet-integrity__progress-fill { + width: 48px; +} + +.sheet-integrity__bar-width[value="13"] ~ .sheet-integrity__progress-fill { + width: 52px; +} + +.sheet-integrity__bar-width[value="14"] ~ .sheet-integrity__progress-fill { + width: 56px; +} + +.sheet-integrity__bar-width[value="15"] ~ .sheet-integrity__progress-fill { + width: 60px; +} + +.sheet-integrity__bar-width[value="16"] ~ .sheet-integrity__progress-fill { + width: 64px; +} + +.sheet-integrity__bar-width[value="17"] ~ .sheet-integrity__progress-fill { + width: 68px; +} + +.sheet-integrity__bar-width[value="18"] ~ .sheet-integrity__progress-fill { + width: 72px; +} + +.sheet-integrity__bar-width[value="19"] ~ .sheet-integrity__progress-fill { + width: 76px; +} + +.sheet-integrity__bar-width[value="20"] ~ .sheet-integrity__progress-fill { + width: 80px; +} + +.sheet-integrity__bar-width[value="21"] ~ .sheet-integrity__progress-fill { + width: 84px; +} + +.sheet-integrity__bar-width[value="22"] ~ .sheet-integrity__progress-fill { + width: 88px; +} + +.sheet-integrity__bar-width[value="23"] ~ .sheet-integrity__progress-fill { + width: 92px; +} + +.sheet-integrity__bar-width[value="24"] ~ .sheet-integrity__progress-fill { + width: 96px; +} + +.sheet-integrity__bar-width[value="25"] ~ .sheet-integrity__progress-fill { + width: 100px; +} + +.sheet-integrity__bar-width[value="26"] ~ .sheet-integrity__progress-fill { + width: 104px; +} + +.sheet-integrity__bar-width[value="27"] ~ .sheet-integrity__progress-fill { + width: 108px; +} + +.sheet-integrity__bar-width[value="28"] ~ .sheet-integrity__progress-fill { + width: 112px; +} + +.sheet-integrity__bar-width[value="29"] ~ .sheet-integrity__progress-fill { + width: 116px; +} + +.sheet-integrity__bar-width[value="30"] ~ .sheet-integrity__progress-fill { + width: 120px; +} + +.sheet-integrity__bar-width[value="31"] ~ .sheet-integrity__progress-fill { + width: 124px; +} + +.sheet-integrity__bar-width[value="32"] ~ .sheet-integrity__progress-fill { + width: 128px; +} + +.sheet-integrity__bar-width[value="33"] ~ .sheet-integrity__progress-fill { + width: 132px; +} + +.sheet-integrity__bar-width[value="34"] ~ .sheet-integrity__progress-fill { + width: 136px; +} + +.sheet-integrity__bar-width[value="35"] ~ .sheet-integrity__progress-fill { + width: 140px; +} + +.sheet-integrity__bar-width[value="36"] ~ .sheet-integrity__progress-fill { + width: 144px; +} + +.sheet-integrity__bar-width[value="37"] ~ .sheet-integrity__progress-fill { + width: 148px; +} + +.sheet-integrity__bar-width[value="38"] ~ .sheet-integrity__progress-fill { + width: 152px; +} + +.sheet-integrity__bar-width[value="39"] ~ .sheet-integrity__progress-fill { + width: 156px; +} + +.sheet-integrity__bar-width[value="40"] ~ .sheet-integrity__progress-fill { + width: 160px; +} + +.sheet-integrity__bar-width[value="41"] ~ .sheet-integrity__progress-fill { + width: 164px; +} + +.sheet-integrity__bar-width[value="42"] ~ .sheet-integrity__progress-fill { + width: 168px; +} + +.sheet-integrity__bar-width[value="43"] ~ .sheet-integrity__progress-fill { + width: 172px; +} + +.sheet-integrity__bar-width[value="44"] ~ .sheet-integrity__progress-fill { + width: 176px; +} + +.sheet-integrity__bar-width[value="45"] ~ .sheet-integrity__progress-fill { + width: 180px; +} + +.sheet-integrity__bar-width[value="46"] ~ .sheet-integrity__progress-fill { + width: 184px; +} + +.sheet-integrity__bar-width[value="47"] ~ .sheet-integrity__progress-fill { + width: 188px; +} + +.sheet-integrity__bar-width[value="48"] ~ .sheet-integrity__progress-fill { + width: 192px; +} + +.sheet-integrity__bar-width[value="49"] ~ .sheet-integrity__progress-fill { + width: 196px; +} + +.sheet-integrity__bar-width[value="50"] ~ .sheet-integrity__progress-fill { + width: 200px; +} + +.sheet-integrity__bar-width[value="51"] ~ .sheet-integrity__progress-fill { + width: 204px; +} + +.sheet-integrity__bar-width[value="52"] ~ .sheet-integrity__progress-fill { + width: 208px; +} + +.sheet-integrity__bar-width[value="53"] ~ .sheet-integrity__progress-fill { + width: 212px; +} + +.sheet-integrity__bar-width[value="54"] ~ .sheet-integrity__progress-fill { + width: 216px; +} + +.sheet-integrity__bar-width[value="55"] ~ .sheet-integrity__progress-fill { + width: 220px; +} + +.sheet-integrity__bar-width[value="56"] ~ .sheet-integrity__progress-fill { + width: 224px; +} + +.sheet-integrity__bar-width[value="57"] ~ .sheet-integrity__progress-fill { + width: 228px; +} + +.sheet-integrity__bar-width[value="58"] ~ .sheet-integrity__progress-fill { + width: 232px; +} + +.sheet-integrity__bar-width[value="59"] ~ .sheet-integrity__progress-fill { + width: 236px; +} + +.sheet-integrity__bar-width[value="60"] ~ .sheet-integrity__progress-fill { + width: 240px; +} + +.sheet-integrity__bar-width[value="61"] ~ .sheet-integrity__progress-fill { + width: 244px; +} + +.sheet-integrity__bar-width[value="62"] ~ .sheet-integrity__progress-fill { + width: 248px; +} + +.sheet-integrity__bar-width[value="63"] ~ .sheet-integrity__progress-fill { + width: 252px; +} + +.sheet-integrity__bar-width[value="64"] ~ .sheet-integrity__progress-fill { + width: 256px; +} + +.sheet-integrity__bar-width[value="65"] ~ .sheet-integrity__progress-fill { + width: 260px; +} + +.sheet-integrity__bar-width[value="66"] ~ .sheet-integrity__progress-fill { + width: 264px; +} + +.sheet-integrity__bar-width[value="67"] ~ .sheet-integrity__progress-fill { + width: 268px; +} + +.sheet-integrity__bar-width[value="68"] ~ .sheet-integrity__progress-fill { + width: 272px; +} + +.sheet-integrity__bar-width[value="69"] ~ .sheet-integrity__progress-fill { + width: 276px; +} + +.sheet-integrity__bar-width[value="70"] ~ .sheet-integrity__progress-fill { + width: 280px; +} + +.sheet-integrity__bar-width[value="71"] ~ .sheet-integrity__progress-fill { + width: 284px; +} + +.sheet-integrity__bar-width[value="72"] ~ .sheet-integrity__progress-fill { + width: 288px; +} + +.sheet-integrity__bar-width[value="73"] ~ .sheet-integrity__progress-fill { + width: 292px; +} + +.sheet-integrity__bar-width[value="74"] ~ .sheet-integrity__progress-fill { + width: 296px; +} + +.sheet-integrity__bar-width[value="75"] ~ .sheet-integrity__progress-fill { + width: 300px; +} + +.sheet-integrity__bar-width[value="76"] ~ .sheet-integrity__progress-fill { + width: 304px; +} + +.sheet-integrity__bar-width[value="77"] ~ .sheet-integrity__progress-fill { + width: 308px; +} + +.sheet-integrity__bar-width[value="78"] ~ .sheet-integrity__progress-fill { + width: 312px; +} + +.sheet-integrity__bar-width[value="79"] ~ .sheet-integrity__progress-fill { + width: 316px; +} + +.sheet-integrity__bar-width[value="80"] ~ .sheet-integrity__progress-fill { + width: 320px; +} + +.sheet-integrity__marker { + position: absolute; + top: 0; + background-color: #fff; + width: 2px; + height: 10px; + transform: translateX(-50%); +} + +.sheet-integrity__marker--70 { + left: 40px; +} + +.sheet-integrity__marker--60 { + left: 80px; +} + +.sheet-integrity__marker--50 { + left: 120px; +} + +.sheet-integrity__marker--40 { + left: 160px; +} + +.sheet-integrity__marker--30 { + left: 200px; +} + +.sheet-integrity__marker--20 { + left: 240px; +} + +.sheet-integrity__marker--10 { + left: 280px; +} + +.sheet-integrity__loss-effects { + display: flex; + align-items: center; + justify-content: space-between; + font-size: 10px; + margin: 8px 0; + height: 16px; + width: 100%; +} + +.sheet-integrity__loss-effects > span { + display: block; + color: #d6d6d6; + font-weight: 500; + white-space: nowrap; + transition: color .3s ease-in-out; +} + +.sheet-integrity__loss-effects input[type=checkbox]:checked + span { + color: #606060; +} + +.sheet-integrity__hexfields { + display: flex; + align-items: center; +} + +.sheet-integrity__hexfields .sheet-container { + position: relative; +} + +.sheet-integrity__hexfields .sheet-hexfield { + position: absolute; + bottom: -28px; +} + +.sheet-integrity__hexfields .sheet-hexfield--integrity-maximum { + right: -6px; + transform: translateX(-100%); +} + +.sheet-integrity__hexfields .sheet-hexfield--integrity-mod { + left: -5px; + transform: translateX(100%); +} + +.sheet-abilities .sheet-repitem__size-radio[value="6"]:checked ~ textarea { + height: 20px; +} + +.sheet-abilities .sheet-repitem__size-radio[value="1"]:checked ~ textarea { + height: 36px; +} + +.sheet-abilities .sheet-repitem__size-radio[value="2"]:checked ~ textarea { + height: 52px; +} + +.sheet-abilities .sheet-repitem__size-radio[value="3"]:checked ~ textarea { + height: 68px; +} + +.sheet-abilities .sheet-repitem__size-radio[value="4"]:checked ~ textarea { + height: 84px; +} + +.sheet-abilities .sheet-repitem__size-radio[value="5"]:checked ~ textarea { + height: 100px; +} + +.sheet-toggle--strain:checked ~ .sheet-augmentations .sheet-augmentations__power, .sheet-toggle--strain:checked ~ .sheet-augmentations .sheet-augmentations__slots { + display: none; +} + +.sheet-toggle--strain:checked ~ .sheet-augmentations .sheet-a { + display: none; +} + +.sheet-toggle--strain:checked ~ .sheet-augmentations .sheet-b { + display: inline; +} + +.sheet-toggle-augmentation-markers:not(:checked) ~ .sheet-augmentations .sheet-color-cycle { + display: none; +} + +.sheet-augmentations .sheet-header__labels span { + text-transform: uppercase; +} + +.sheet-augmentations__grade { + width: 60px; +} + +.sheet-augmentations__power, .sheet-augmentations__slots, .sheet-augmentations__loss { + width: 40px; +} + +.sheet-augmentations .sheet-b { + display: none; +} + +.sheet-augmentations .sheet-color-cycle__radio { + padding: 3px; + border: 1px solid transparent; +} + +.sheet-augmentations .sheet-color-cycle__radio--none { + border-color: #e0e0e0; +} + +.sheet-augmentations__multiplier { + text-align: left; + width: 18px; +} + +.sheet-augmentations input.sheet-toggle:not(:checked) ~ .sheet-augmentations__multiplier { + display: none; +} + +.sheet-engrams__penalty { + width: 40px; + padding-right: 8px; +} + +.sheet-engrams__description { + flex-shrink: 0; + text-align: left; + width: 280px; +} + +input.sheet-toggle--pp:checked ~ .sheet-powers .sheet-a { + display: none; +} + +input.sheet-toggle--pp:checked ~ .sheet-powers .sheet-b { + display: inline; +} + +.sheet-powers__ap, .sheet-powers__pp, .sheet-powers__penalty { + width: 40px; +} + +.sheet-powers__duration { + width: 60px; +} + +.sheet-powers__damage, .sheet-powers__range { + width: 80px; +} + +.sheet-powers__trapping { + width: 64px; +} + +.sheet-powers .sheet-b { + display: none; +} + +.sheet-powers input.sheet-toggle:not(:checked) ~ .sheet-powers__trapping { + display: none; +} + +.sheet-vehicles__size, .sheet-vehicles__handling, .sheet-vehicles__speed, .sheet-vehicles__toughness, .sheet-vehicles__crew, .sheet-vehicles__weapons { + width: 45px; +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='0'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_01.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='1'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_02.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='2'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_03.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='3'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_04.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='4'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/sports-bike.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='5'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/quad-bike.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='6'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/tank.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='7'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/aircraft_01.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='8'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/aircraft_02.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='9'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/aircraft_03.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='10'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/watercraft_01.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='11'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/watercraft_02.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='12'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/watercraft_03.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='13'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_01.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='14'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_02.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='15'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_03.png"); +} + +.sheet-vehicles .sheet-repitem__frame-silhouette-control[value='16'] ~ .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_04.png"); +} + +.sheet-powerarmors__size, .sheet-powerarmors__armor, .sheet-powerarmors__pace, .sheet-powerarmors__mods, .sheet-powerarmors__weight, .sheet-powerarmors__weapons { + width: 45px; +} + +.sheet-powerarmors .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/powerarmor_01.png"); + background-size: contain; + margin-top: 4px; + height: 56px; +} + +.sheet-walkers__size, .sheet-walkers__pace, .sheet-walkers__crew { + width: 35px; +} + +.sheet-walkers__strength { + width: 60px; +} + +.sheet-walkers__toughness, .sheet-walkers__mods, .sheet-walkers__weapons { + width: 45px; +} + +.sheet-walkers .sheet-repitem__frame-silhouette { + background-image: url("https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/walker.png"); + background-size: contain; + margin-top: 4px; + height: 56px; +} + +.sheet-allies__pace, .sheet-allies__parry, .sheet-allies__toughness, .sheet-allies__size, .sheet-allies__exp, .sheet-allies__level { + width: 45px; +} + +.sheet-allies .sheet-header__labels { + padding-right: 30px; +} + +.sheet-allies .sheet-repitem__secondary { + align-items: flex-start; + justify-content: space-between; + height: auto; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + flex-shrink: 0; + padding: 5px 0 6px; + width: 44px; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left button[type=roll], +.sheet-allies .sheet-repitem__secondary .sheet-left .sheet-allies__health-field input[type=text] { + font-weight: 700; + border-radius: 2px; + height: 20px; + width: 20px; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left button[type=roll] { + display: flex; + align-items: center; + justify-content: center; + color: #b0b0b0; + font-size: 10px; + line-height: 1; + border: 1px dotted #e0e0e0; + margin-bottom: 4px !important; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left button[type=roll]:hover { + background-color: #898989; + border-color: #898989; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left button[type=roll]:hover span { + color: #fff !important; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left .sheet-allies__health-field { + position: relative; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left .sheet-allies__health-field::before { + position: absolute; + top: 0; + left: 0; + display: block; + background-color: #f2f2f2; + color: #fff; + font-family: Pictos; + font-size: 14px; + font-weight: 900; + line-height: 22px; + text-align: center; + border-radius: 2px; + height: 100%; + width: 100%; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left .sheet-allies__health-field--wounds::before { + content: 'k'; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left .sheet-allies__health-field--fatigue::before { + content: 'Y'; +} + +.sheet-allies .sheet-repitem__secondary .sheet-left .sheet-allies__health-field input[type=text] { + position: relative; + z-index: 1; + color: #606060; + font-size: 14px; + line-height: 20px; + text-align: center; +} + +.sheet-allies .sheet-repitem__secondary .sheet-right { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + padding: 5px 0 0 8px; +} + +.sheet-allies .sheet-repitem__secondary .sheet-right input.sheet-allies__note-field[type=text] { + text-align: left; + padding: 0 2px; + margin-bottom: 4px; + border-bottom: 1px dotted #e0e0e0; + height: 20px; + width: 76px !important; +} + +.sheet-quick-notes { + position: relative; + width: 266px; +} + +.sheet-quick-notes__content { + padding: 8px 0; +} + +.sheet-quick-notes__content textarea { + background-image: linear-gradient(to right, #f6f6f6 1px, transparent 1px), linear-gradient(to bottom, #f6f6f6 1px, transparent 1px); + background-size: 16px 16px; + background-position: 4px -1px; + background-color: #fff; + color: #606060; + font-size: 10px; + line-height: 16px; + padding: 0 8px; + resize: none; + height: 64px; +} + +.sheet-quick-notes__content input[type=checkbox]:checked + textarea { + height: 128px; +} + +.sheet-encumbrance { + display: flex; + text-align: center; + margin: 16px 0 24px; + width: 266px; +} + +.sheet-encumbrance .sheet-label { + display: flex; + align-items: center; + justify-content: center; + text-transform: uppercase; + height: 16px; +} + +.sheet-encumbrance__container:not(:last-child) { + margin-right: 8px; +} + +.sheet-encumbrance__container:not(:last-child) .sheet-encumbrance__content { + width: 48px; +} + +.sheet-encumbrance__container--summary { + flex-grow: 1; +} + +.sheet-encumbrance__content { + display: flex; + justify-content: center; + align-items: center; + background-color: #fff; + font-size: 12px; + border-radius: 2px; + height: 32px; + overflow: hidden; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); +} + +.sheet-encumbrance__content span { + user-select: none; +} + +.sheet-encumbrance__content input[type=text] { + border-radius: 2px; +} + +.sheet-encumbrance__content input[type=text]:hover { + background-color: #f2f2f2; +} + +.sheet-encumbrance__content input[type=text]:focus { + background-color: #fdfdfd; + font-size: 16px !important; + font-weight: 700; + height: 100%; + width: 100%; +} + +.sheet-encumbrance__content input[type=text]:focus ~ * { + display: none; +} + +.sheet-encumbrance__content--summary { + flex-direction: row-reverse; +} + +.sheet-encumbrance__content--summary > div { + padding: 0 4px; +} + +.sheet-encumbrance__content--summary input[type=text], +.sheet-encumbrance__content--summary span { + font-size: 12px; + width: 32px; +} + +.sheet-inventory { + position: relative; + width: 266px; +} + +.sheet-inventory__amount, .sheet-inventory__weight { + width: 30px; +} + +.sheet-inventory__multi { + color: #b0b0b0; + line-height: 11px; + text-align: center; + width: 8px; +} + +.sheet-inventory .sheet-repitem__note-box { + width: 268px; +} + +.sheet-inventory .repcontainer:empty ~ .repcontrol .repcontrol_add::before { + width: 266px; +} + +.sheet-ammunition { + position: relative; + margin-bottom: 16px; + width: 266px; +} + +.sheet-ammunition__content { + display: flex; + padding: 6px 0 14px; +} + +.sheet-ammunition__container { + position: relative; + display: flex; + align-items: center; + justify-content: center; + background-color: #fdfdfd; + border-radius: 2px; + height: 34px; + width: 40px; +} + +.sheet-ammunition__container--1, .sheet-ammunition__container--2 { + margin-right: 6px; +} + +.sheet-ammunition__container span { + position: absolute; + left: 0; + z-index: 0; + display: block; + background-color: #d6d6d6; + color: #fff; + font-size: 8px; + font-weight: 500; + line-height: 13px; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + height: 12px; + width: 100%; +} + +.sheet-ammunition__container span:first-of-type { + top: 0; + border-radius: 2px 2px 0 0; +} + +.sheet-ammunition__container span:last-of-type { + bottom: -10px; + letter-spacing: -0.4px; + text-transform: uppercase; + padding: 0 2px; + border-radius: 0 0 2px 2px; +} + +.sheet-ammunition__container input[type=radio] { + position: absolute; + top: 0; + left: 0; + z-index: 1; + height: 100%; + width: 100%; +} + +.sheet-ammunition__container input[type=radio]::after { + content: ''; + position: absolute; + bottom: -10px; + left: 0; + z-index: 1; + height: 10px; + width: 100%; +} + +.sheet-ammunition__container input[type=radio]:checked ~ span { + background-color: #898989; +} + +.sheet-ammunition__container input[type=radio]::before { + content: ''; + border: 2px solid #d6d6d6; + border-width: 2px 2px 0; + border-radius: 2px; + height: 100%; + width: 100%; +} + +.sheet-ammunition__container input[type=radio]:checked::before { + border-color: #898989; +} + +.sheet-ammunition__container input[type=radio]:checked ~ input[type=text] { + color: #808080; +} + +.sheet-ammunition__container input[type=text] { + position: relative; + z-index: 2; + color: #d6d6d6; + font-size: 14px; + font-weight: 700; + line-height: 1; + margin-top: 9px; + height: 14px; + width: 36px; +} + +.sheet-ammunition__buttons { + flex-grow: 1; +} + +.sheet-ammunition__buttons > div { + display: flex; + justify-content: space-between; +} + +.sheet-ammunition__buttons > div:first-child { + margin-bottom: 4px; +} + +.sheet-ammunition__buttons button[type=action] { + flex-shrink: 0; + align-items: center; + justify-content: center; + background-color: #fdfdfd; + color: #b0b0b0; + border: 1px dotted #e0e0e0; + border-radius: 2px; + padding: 0 4px; + height: 20px; +} + +.sheet-ammunition__buttons button[type=action]:hover { + background-color: #898989; + color: #fff !important; + border: 1px solid #898989; +} + +.sheet-ammunition__buttons button[type=action]:not(:last-child) { + margin-right: 4px; +} + +.sheet-ammunition__buttons button[type=action]:last-child { + flex-grow: 1; + max-width: 21px; +} + +.sheet-simple-trait { + position: relative; + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + font-size: 11px; + line-height: 24px; + padding-right: 6px; + border-radius: 2px; + height: 24px; + min-width: 66px; +} + +.sheet-simple-trait span { + color: #404040; +} + +.sheet-simple-trait .sheet-background { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; +} + +.sheet-simple-trait__expand { + position: absolute; + top: 0; + left: 0; + z-index: 2; + border: 1px solid transparent; + border-radius: 2px; + height: 100% !important; + width: 100%; + transition: border .3s ease-in-out; +} + +.sheet-simple-trait__expand:hover, .sheet-simple-trait__expand:checked { + border-color: #e0e0e0; +} + +.sheet-simple-trait__expand:checked ~ .sheet-simple-trait__inputs { + display: flex; + background-color: #fff; +} + +.sheet-simple-trait__expand:checked ~ .sheet-background { + background-color: #fff; +} + +.sheet-simple-trait button.sheet-simple-trait__roll[type=roll] { + padding-left: 6px !important; +} + +.sheet-simple-trait__roll { + position: relative; + z-index: 3; + font-size: 11px; + font-weight: 500; + line-height: 24px; +} + +.sheet-simple-trait__roll:hover + .sheet-simple-trait__buttons { + pointer-events: all; + opacity: 1; + transition-delay: .7s; +} + +.sheet-simple-trait__custom-roll { + color: #606060; + font-size: 10px; + font-weight: 500; + line-height: 16px; +} + +.sheet-simple-trait__custom-roll:not(:last-child) { + margin-right: 4px !important; +} + +.sheet-simple-trait__buttons { + pointer-events: none; + position: absolute; + left: 0; + top: 0; + z-index: 4; + display: flex; + background-color: #fff; + padding: 0 4px; + border-radius: 2px; + height: 16px; + transform: translateY(-100%); + opacity: 0; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); + transition: opacity .3s ease-in-out; +} + +.sheet-simple-trait__buttons:hover { + pointer-events: all; + opacity: 1; + transition-delay: .7s; +} + +.sheet-simple-trait__label { + position: relative; + z-index: 1; + font-weight: 500; + margin-left: 8px; +} + +.sheet-simple-trait__inputs { + position: absolute; + bottom: 1px; + left: 0; + z-index: 4; + display: none; + background-color: #fff; + border: 1px solid #e0e0e0; + border-width: 0 1px 1px 1px; + border-radius: 0 0 2px 2px; + padding: 0 6px; + width: 100%; + transform: translateY(100%); +} + +.sheet-simple-trait__inputs > input[type=text] { + text-align: center; + border-top: 1px dotted #e0e0e0; + width: 33.3%; +} + +.sheet-extra { + width: 100%; +} + +.sheet-extra .sheet-buttons { + padding-bottom: 1px; + width: 100%; +} + +.sheet-extra .sheet-buttons > div { + margin-right: 8px; +} + +.sheet-extra .sheet-block { + margin-top: 16px; +} + +.sheet-extra .sheet-simple-trait:not(:last-child) { + margin-right: 8px; +} + +.sheet-extra-meta { + display: flex; + margin-bottom: 19px; +} + +.sheet-extra-meta .sheet-meta-field:first-child { + flex-grow: 1; +} + +.sheet-extra-meta .sheet-meta-field input.sheet-meta-field__input--name[type=text] { + width: 100%; +} + +.sheet-extra .sheet-features { + margin-top: 16px; +} + +.sheet-extra .repcontainer:empty ~ .repcontrol .repcontrol_add::before { + width: 474px; +} + +.sheet-extra .sheet-footer { + opacity: 0; +} + +.sheet-extra .sheet-quick-notes { + width: 100%; +} + +.sheet-extra .sheet-quick-notes__content { + padding-bottom: 0; +} + +.sheet-extra-attributes { + position: relative; +} + +.sheet-extra-attributes .sheet-container { + display: flex; + padding-top: 8px; +} + +.sheet-extra-skills { + position: relative; +} + +.sheet-extra-skills .sheet-container { + display: flex; + flex-wrap: wrap; + padding-top: 8px; +} + +.sheet-extra-skills .sheet-container::after { + content: ''; + display: block; + flex-grow: 1000000; +} + +.sheet-extra-skills__selection-toggle::after { + position: absolute; + top: 2px; + right: 20px; + display: block; + font-family: Pictos; + font-size: 10px; + line-height: 14px; +} + +.sheet-extra-skills__selection-toggle:hover::after { + color: #606060 !important; +} + +.sheet-extra-skills__selection-toggle:checked ~ .sheet-container .sheet-simple-trait { + display: none; +} + +.sheet-extra-skills__selection-toggle:checked ~ .sheet-container { + justify-content: space-between; +} + +.sheet-extra-skills__selection-toggle:checked::after { + content: '3'; + color: #606060; +} + +.sheet-extra-skills__selection-toggle:not(:checked) ~ .sheet-container .sheet-extra-skills__toggle-label { + display: none; +} + +.sheet-extra-skills__selection-toggle:not(:checked)::after { + content: 'W'; + color: #b0b0b0; +} + +.sheet-extra-skills__toggle-label { + flex-shrink: 0; + width: auto; +} + +.sheet-extra-skills__toggle:not(:checked) + .sheet-simple-trait { + display: none; +} + +.sheet-extra-skills__toggle + span { + user-select: none; + display: block; + color: #b0b0b0; + font-size: 11px; + font-weight: 500; + line-height: 24px; + text-transform: capitalize; + white-space: nowrap; + padding: 0 4px; +} + +.sheet-extra-skills__toggle:hover + span { + color: #808080; +} + +.sheet-extra-skills__toggle:checked + span { + color: #404040; +} + +.sheet-extra-secondary .sheet-container { + display: flex; + align-items: flex-start; + justify-content: center; + padding-top: 8px; +} + +.sheet-extra-secondary__field { + flex-grow: 1; + width: auto; +} + +.sheet-extra-secondary__field:not(:last-child) { + margin-right: 8px; +} + +.sheet-extra-secondary__field .sheet-label { + color: #b0b0b0; + font-weight: 500; + line-height: 16px; + text-align: center; + text-transform: uppercase; + letter-spacing: -0.1px; + height: 16px; +} + +.sheet-extra-secondary input[type=text] { + line-height: 24px; +} + +.sheet-extra-secondary input[type=text]::placeholder { + font-size: 10px; + line-height: 24px; +} + +.sheet-extra-secondary input.sheet-extra-secondary__input[type=text], .sheet-extra-secondary__field > span { + display: block; + background-color: #fff; + font-weight: 500; + text-align: center; + border: 1px solid #e0e0e0; + border-radius: 2px; + height: 24px; + width: 100%; +} + +.sheet-extra-secondary .sheet-simple-trait__expand { + border-color: #e0e0e0; +} + +.sheet-extra-secondary .sheet-divider { + border-right: 1px dotted #e0e0e0; + margin: 0 10px 0 2px; + height: 24px; +} + +.sheet-extra-settings { + display: flex; + padding: 8px 0; + margin-top: 15px !important; + border-top: 1px dotted #e0e0e0; +} + +.sheet-extra-settings__item { + user-select: none; + line-height: 16px; + width: auto; +} + +.sheet-extra-settings__item:not(:last-child) { + margin-right: 8px; +} + +.sheet-extra-settings__item span { + color: #d6d6d6; + font-size: 10px; + font-weight: 500; +} + +.sheet-extra-settings input[type=checkbox]:checked ~ span { + color: #808080; +} + +.sheet-rolltemplate-TraitRoll .inlinerollresult.showtip::before, +.sheet-rolltemplate-DiceRoller .inlinerollresult.showtip::before { + content: ''; + position: absolute; + top: 0; + left: 0; + z-index: -1; + display: block; + background-color: #fafafa; + height: 100%; + width: 100%; +} + +.sheet-rolltemplate-TraitRoll, +.sheet-rolltemplate-DiceRoller, +.sheet-rolltemplate-RunRoll, +.sheet-rolltemplate-DamageRoll, +.sheet-rolltemplate-InfoBox { + color: #404040; + padding-top: 8px; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +.sheet-rolltemplate-TraitRoll .inlinerollresult.showtip, +.sheet-rolltemplate-DiceRoller .inlinerollresult.showtip, +.sheet-rolltemplate-RunRoll .inlinerollresult.showtip, +.sheet-rolltemplate-DamageRoll .inlinerollresult.showtip, +.sheet-rolltemplate-InfoBox .inlinerollresult.showtip { + position: relative; + z-index: 1; + background-color: transparent; + padding: 0; + border: 0; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate { + position: relative; + background-color: #fff; + background-image: linear-gradient(to right, #fbfbfb 1px, transparent 1px), linear-gradient(to bottom, #fbfbfb 1px, transparent 1px); + background-size: 8px 8px; + background-position: -1px -1px; + padding: 8px; + border-radius: 2px; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__header, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__header, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__header, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__header, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__header { + font-size: 12px; + font-weight: bold; + line-height: 16px; + text-align: center; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__header:not(:last-child), +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__header:not(:last-child), +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__header:not(:last-child), +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__header:not(:last-child), +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__header:not(:last-child) { + border-bottom: 1px dotted #e0e0e0; + padding-bottom: 7px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content { + position: relative; + font-size: 11px; + text-align: center; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content:not(:first-child), +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content:not(:first-child), +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content:not(:first-child), +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content:not(:first-child), +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content:not(:first-child) { + padding-top: 8px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content:not(:last-child), +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content:not(:last-child), +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content:not(:last-child), +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content:not(:last-child), +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content:not(:last-child) { + border-bottom: 1px dotted #e0e0e0; + padding-bottom: 7px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content span, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content span, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content span, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content span, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content span { + font-size: 11px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content span.inlinerollresult, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content span.inlinerollresult, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content span.inlinerollresult, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content span.inlinerollresult, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content span.inlinerollresult { + font-weight: 400; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content-row, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content-row, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content-row, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content-row, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content-row { + display: flex; + align-items: center; + line-height: 16px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content-row > div, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content-row > div, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content-row > div, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content-row > div, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content-row > div { + text-overflow: ellipsis; + overflow: hidden; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content-row > .sheet-left, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content-row > .sheet-left, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content-row > .sheet-left, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content-row > .sheet-left, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content-row > .sheet-left { + font-weight: 500; + text-align: right; + padding-right: 8px; + width: 96px; + min-width: 96px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__content-row > .sheet-right, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__content-row > .sheet-right, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__content-row > .sheet-right, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__content-row > .sheet-right, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__content-row > .sheet-right { + text-align: left; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 0 24px 0 8px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__dice, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__dice, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__dice, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__dice, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__dice { + display: flex; + align-items: center; + justify-content: center; + font-size: 11px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__dice span, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__dice span, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__dice span, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__dice span, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__dice span { + display: block; + font-size: 11px; + line-height: 20px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__dice .sheet-left, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__dice .sheet-left, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__dice .sheet-left, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__dice .sheet-left, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__dice .sheet-left { + display: flex; + flex-wrap: wrap; + padding-right: 8px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__dice .sheet-right, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__dice .sheet-right, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__dice .sheet-right, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__dice .sheet-right, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__dice .sheet-right { + display: flex; + flex-shrink: 0; + padding: 0 4px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__dice--damage, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__dice--damage, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__dice--damage, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__dice--damage, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__dice--damage { + flex-wrap: wrap; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll { + flex-shrink: 0; + text-align: center; + border-radius: 2px; + min-width: 20px; + margin-top: 8px; + overflow: hidden; + box-shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll:not(:last-child), +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll:not(:last-child), +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll:not(:last-child), +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll:not(:last-child), +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll:not(:last-child) { + margin-right: 8px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll span.fullcrit:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll span.fullcrit:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll span.fullcrit:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll span.fullcrit:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll span.fullcrit:not([original-title*='"basicdiceroll"'])::before { + background-color: #e0e0e0; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"']), +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"']), +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"']), +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"']), +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"']) { + color: #fff; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"'])::before, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll span.fullfail:not([original-title*='"basicdiceroll"'])::before { + background-color: #d9534f; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll--wd, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll--wd, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll--wd, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll--wd, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll--wd { + height: 20px; + transform: rotateZ(45deg); +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll--wd:not(:last-child), +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll--wd:not(:last-child), +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll--wd:not(:last-child), +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll--wd:not(:last-child), +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll--wd:not(:last-child) { + margin-right: 16px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll--wd span, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll--wd span, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll--wd span, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll--wd span, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll--wd span { + transform: rotateZ(-45deg); +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll--wd span::before, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll--wd span::before, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll--wd span::before, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll--wd span::before, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll--wd span::before { + transform: rotateZ(45deg); +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__reroll, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__reroll, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__reroll, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__reroll, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__reroll { + position: absolute; + top: 2px; + right: -4px; + font-family: Pictos; + border: 4px solid #fff; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__roll-damage, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__roll-damage, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__roll-damage, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__roll-damage, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__roll-damage { + position: absolute; + top: 26px; + right: -4px; + font-family: 'Pictos Custom'; + border: 4px solid #fff; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__button a, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__button a, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__button a, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__button a, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__button a { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: center; + background-color: #fdfdfd; + color: #b0b0b0; + font-size: 10px; + font-weight: 500; + line-height: 9px; + border: 1px dotted #e0e0e0; + border-radius: 2px; + padding: 0 4px; + height: 20px; + min-width: 20px; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__button a:hover, +.sheet-rolltemplate-DiceRoller .sheet-rolltemplate__button a:hover, +.sheet-rolltemplate-RunRoll .sheet-rolltemplate__button a:hover, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__button a:hover, +.sheet-rolltemplate-InfoBox .sheet-rolltemplate__button a:hover { + background-color: #898989; + color: #fff !important; + border: 1px solid #898989; +} + +.sheet-rolltemplate-TraitRoll .sheet-rolltemplate__description, +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__description { + color: #606060; + font-size: 9px; + font-style: italic; + line-height: 16px; + text-align: center; + padding: 8px 0 7px; + border-bottom: 1px dotted #e0e0e0; +} + +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__damage-roll { + padding-right: 8px; + margin: 8px 0 0 8px; +} + +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__damage-roll:not(:last-child) { + border-right: 1px dotted #e0e0e0; +} + +.sheet-rolltemplate-DamageRoll .sheet-rolltemplate__damage-roll span { + font-size: 16px; + line-height: 24px; +} + +.sheet-sans { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: flex-start; +} + +.sheet-section > .sheet-right:not(.sheet-sans) { + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.sheet-section--footer > .sheet-right { + padding-top: 32px; +} + +.sheet-section--traits { + position: relative; + display: flex; + align-items: center; + justify-content: center; + margin-left: 24px; + height: 400px; +} + +.sheet-attributes { + position: absolute; + top: 0; + left: 0; + z-index: 2; +} + +.sheet-attributes .sheet-attribute { + position: absolute; +} + +.sheet-attributes .sheet-attribute--agility { + top: 0; + left: 32px; +} + +.sheet-attributes .sheet-attribute--smarts { + top: 80px; + left: 16px; +} + +.sheet-attributes .sheet-attribute--spirit { + top: 160px; + left: 0; +} + +.sheet-attributes .sheet-attribute--strength { + top: 240px; + left: 16px; +} + +.sheet-attributes .sheet-attribute--vigor { + top: 320px; + left: 32px; +} + +.sheet-armor { + position: absolute; + right: 0; + top: 22px; +} + +.sheet-silhouette { + position: absolute; + top: 0; + left: 100px; +} + +.sheet-secondary { + position: absolute; + bottom: 23px; + right: 0; + z-index: 2; +} + +.sheet-section--features { + display: flex; + align-items: flex-start; + flex-grow: 1; + min-height: 176px; + padding: 24px 0 8px; +} + +.sheet-section--resources { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-bottom: 32px; +} diff --git a/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.html b/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.html new file mode 100644 index 0000000000..23ad530bd6 --- /dev/null +++ b/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.html @@ -0,0 +1,7407 @@ + + + + + + + + + + +
+ + + + + + + + + +
+
+
+
+
+
+
+ +
Name
+
+
+ +
Origin
+
+
+ +
Rank
+
+
+ +
Size
+
+
+ +
Level
+
+
+ +
EXP
+
+
+ +
Bennies
+
+
+
+
+ +
Gender
+
+
+ +
Age
+
+
+ +
Hair
+
+
+ +
Eyes
+
+
+ +
Height
+
+
+ +
Weight
+
+
+ +
#Bits
+
+
+
+
+
+
+
+ + + + + + +
+
+ + + + +
+
+ +
+ + + + + +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+
+
+ +
+ +
Flight
+
+
+ +
Run
+
+ +
Pace
+
+
+ +
Parry
+
+
+ +
Tough.
+
+
+ +
+ +
Bonus
+
+
+ +
WD
+
+ + + + + + + +
+
+
+
+
+ + +
+
Head
+
+
+ + +
+
Torso
+
+
+ + +
+
Arms
+
+
+ + +
+
Legs
+
+
+ +
+ +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+
+
+
+
+
Edges & Hindrances
+
+
+
+ + + + + + + + + +
+ + +
+
+ +
+
+
+
+ + + +
+
+ + + + + + +
+
+ + + + + + + + + + + + +
+
Wounds
+
+
+
+ +
Wound Mitigation
+
+
+ +
Rads
+
+
+
+
+ + + +
+
+ + + + + + +
+
Fatigue
+
+
+ +
+ Power +
+ +
Consumed
+
+
+ +
Max
+
+
+
+
+
+
+ + + + + +
+ +
+
+
+
2
+
4
+
6
+
8
+
10
+
12
+
+
MOD
+
WD
+
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
N +
+ +
+
+
N +
+ +
+
+
N +
+ +
+
+
S +
+ +
+
+
S +
+ +
+
+
S +
+ +
+
+
S +
+ +
+
+
V +
+ +
+
+
V +
+ +
+
+
V +
+ +
+
+
V +
+ +
+
+
H +
+ +
+
+
H +
+ +
+
+
H +
+ +
+
+
H +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
+ + + + + +
+ + + + + + + +
+
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Ammunition + +
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].
+
+
Armor & Notes + +
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.
+
+
Attribute Reference + +
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 attributes are appended with hyphens as well. So "Agility" becomes @{agility}, @{agility_mod}, @{agility_wd}, @{agility_extra_wd} (for extras only), and @{agility_natural}. "Tough." becomes @{toughness} and Armor is referenced with @{armor_head|_torso|_arms|_legs}. English only!
+
+
Damage Rolls + +
You can enable damage rolls for list items by clicking the damage label. This will disable editing. Note that the dice codes must be valid, but you can use "Str" or "Agi" (etc.) as shorthands to reference attributes. The parser is not smart, however, so please also refer to the Roll20 Dice Reference.
+
+
Edges & Hindrances + +
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.
+
+
Extra Sheet + +
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.
+
+
Helper Buttons + +
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.
+
+
Hexagon Fields + +
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.
+
+
List Item Options + +
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!
+
+
Raise Damage + +
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.
+
+
Rate of Fire (Multiple Dice) + +
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.
+
+
Roll Injections + +

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.

  • {{header}}Header content like "X rolls Y"
  • {{description}}Italic text shown below the header
  • {{reroll}}Link of the reroll button
  • {{damageroll}}Link of the damage button
  • {{source_label}}Label for the source, e.g. "Weapon"
  • {{source}}Content of the source, e.g. "Pistol"
  • {{trait}}Name of the Trait rolled
  • {{traitdie}}Die of the Trait rolled
  • {{flat}}Modifier of the Trait rolled
  • {{wd}}Wild Die of the Trait rolled
  • {{commander}}Commander of an ally
  • {{modifier}}Queried modifier for the roll
  • {{rof}}Rate of Fire as inline roll, e.g. [[ 1 ]]
  • {{wounds}}Wound penalty applied to the roll
  • {{fatigue}}Fatigue penalty applied to the roll
  • {{custom#_label}}[1-3] Label for freeform content
  • {{custom#}}[1-3] Freeform content
  • {{wdroll}}Inline roll of the Wild Die (> -1001)
  • {{traitroll#}}[1-8] Inline roll(s) of the Trait(s)
+
+
Silhouette + +
Choose your silhouette; it looks fancy! You can set color markers all over the silhouette for any purpose, indicating augmentations or injuries or whatever you like.
+
+
Skill Tracks + +
Enter your skill die by clicking on the corresponding bubble (d4-2 to d12). The skill name will darken once you become trained and acts as roll button. You can enter a modifier and custom Wild Die or leave these fields empty to use defaults; the Wild Die can be disabled with "n/a". Positive modifiers are automatically prefixed. On the far right, you can set a color marker for any purpose.
+
+
Track Rolls + +
When you lock the skill tracks with the icon in the top-right corner above the color marker column, you can click on the bubbles to roll the corresponding die independently. This is useful for effects that dynamically alter your skill die, such as boost/lower trait.
+
+
Vehicles & More + +
You can enable blocks for vehicles and other vessels in the Blocks tab under Settings. The silhouette of vehicles can be cycled through by clicking; the switch can take a moment. Both blocks can display weapons by adding a number to the corresponding attribute (0-10).
+
+
+
+
+
+ +
+
+
+
+ +
Name
+
+
+ +
Size
+
+
+ +
Height
+
+
+ +
Weight
+
+
+ +
Bennies
+
+
+
+
+ + + + + + +
+
+ + + + +
+
+ +
+ + + + + +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
Attributes
+
+ +
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+
+
+
+
Skills
+
+ + +
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ d4-2 +
+ + + +
+
+
+
+
+
Armor & Statistics
+ +
+
+ +
Pace
+
+
+ +
Run
+
+
+ +
Parry
+
+
+ +
Tough.
+
+
+
+ +
Head
+
+
+ +
Torso
+
+
+ +
Arms
+
+
+ +
Legs
+
+
+
+ +
WDS
+
+
+ +
FTG
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+
+
+
Quick Notes
+ +
+ + +
+
+
+
+
Edges & Hindrances
+
+
+
+ + + + + + + + + +
+ + +
+
+ +
+ +
+
Abilities
+ +
+
+ + + + + + + +
+
+ +
+
+
Weapons +
+
+ +
+
Range
+
AP
+
ROF
+
Shots
+
WGT
+
+
+ + + + +
+
+
+ + + + +
+ + + +
+ + + + + +
+ +
+ +
Trapping
+ +
Notes
+ + +
+
+ + + + + + + +
+
+ + +
+ +
+
+
+
+ +
+
+
Apparel +
+
Armor
+
Properties
+
WGT
+
+
+ +
+
+
+ + + + +
+ +
+
Notes
+ + + +
+ +
+
+
+
+ +
+ + + +
+
Augmentations +
+
Grade
+
Power
+
Slots
+
LossStrain
+
+
+ +
+
+
+ +
+ + + + + + + +
+ + + + +
+ +
+ +
Multiplier
+ +
Notes
+ + +
+
+ +
+
+ + +
+ +
+
+
+
+ +
+ +
+
Engrams +
+
Penalty
+
Description
+
+
+ + + +
+
+
+ + + + + + +
+ +
+
Notes
+ + +
+
+ + + + + +
+
+ +
+ +
+
+
+
+ +
+ + +
+
Powers +
+
+ +
+
Range
+
AP
+
PP
+
Penalty
+
Duration
+
+
+ + + + +
+
+
+ + + + + +
+ + + +
+ + + + + +
+ +
+ +
Trapping
+ +
Notes
+ + +
+
+ + + + + + + + +
+
+ +
+ +
+
+
+
+ +
+ +
+
Vehicles +
+
Size
+
Handling
+
Speed
+
Tough.
+
Crew
+
Weap.
+
+
+ +
+
+
+ + + + + + + +
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+
Weapon
+
AP Damage
+
HE Damage
+
Range
+
ROF
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+
+ +
+ +
+
Walkers +
+
Size
+
Pace
+
Strength
+
Tough.
+
Mods
+
Crew
+
Weap.
+
+
+ +
+
+
+ + + + + + + + +
+ +
+
+
+ +
+
+ +
+
+
+
Weapon
+
AP Damage
+
HE Damage
+
Range
+
ROF
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+
+ +
+ +
+
Power Armors +
+
Size
+
Armor
+
Pace
+
Mods
+
Weight
+
Weap.
+
+
+ +
+
+
+ + + + + + + +
+ +
+
+
+ +
+
+ +
+
+
+
Weapon
+
AP Damage
+
HE Damage
+
Range
+
ROF
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+
+ +
+ +
+
Allies +
+
Pace
+
Parry
+
Tough.
+
Size
+
EXP
+
Level
+
+
+ +
+
+
+ + + + + + + + +
+ +
+
+ +
+
+ + + + + + +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ + + + + + + + +
+
+
+ +
+
{{header}}
{{#description}} +
{{description}}
{{/description}} +
{{#reroll}} +
+
{{reroll}}
+
{{/reroll}}{{#damageroll}} +
+
{{damageroll}}
+
{{/damageroll}}{{#source_label}} +
+
{{source_label}}
+
{{source}}
+
{{/source_label}}{{#traitdie}} +
+
{{trait}}
+
{{traitdie}} {{#flat}}({{flat}}){{/flat}} +
+
{{/traitdie}}{{#rollLess() global_wdroll 0}}{{#wd}}{{#rollGreater() wdroll -1000}} +
+
Wild Die
+
{{wd}}
+
{{/rollGreater() wdroll -1000}}{{/wd}}{{/rollLess() global_wdroll 0}}{{#rollGreater() global_wdroll -1000}} +
+
Wild Die
+
{{global_wd}}
+
{{/rollGreater() global_wdroll -1000}}{{#rollGreater() bonus_wdroll -1000}} +
+
Bonus Wild Die
+
{{bonus_wd}}
+
{{/rollGreater() bonus_wdroll -1000}}{{#commander}} +
+
Commander
+
{{commander}}
+
{{/commander}} +
+
Modifier
+
{{modifier}}{{#bonus}} ({{bonus}}){{/bonus}}
+
{{#rollGreater() rof 1}} +
+
Dice/RoF
+
{{rof}}
+
{{/rollGreater() rof 1}}{{#rollGreater() wounds 0}} +
+
Wound Penalty
+
{{wounds}}
+
{{/rollGreater() wounds 0}}{{#rollGreater() fatigue 0}} +
+
Fatigue
+
{{fatigue}}
+
{{/rollGreater() fatigue 0}}{{#custom1_label}} +
+
{{custom1_label}}
+
{{custom1}}
+
{{/custom1_label}}{{#custom2_label}} +
+
{{custom2_label}}
+
{{custom2}}
+
{{/custom2_label}}{{#custom3_label}} +
+
{{custom3_label}}
+
{{custom3}}
+
{{/custom3_label}} +
+
+
+
{{traitroll1}} +
{{#rollGreater() rof 1}} +
{{traitroll2}} +
{{/rollGreater() rof 1}}{{#rollGreater() rof 2}} +
{{traitroll3}} +
{{/rollGreater() rof 2}}{{#rollGreater() rof 3}} +
{{traitroll4}} +
{{/rollGreater() rof 3}}{{#rollGreater() rof 4}} +
{{traitroll5}} +
{{/rollGreater() rof 4}}{{#rollGreater() rof 5}} +
{{traitroll6}} +
{{/rollGreater() rof 5}}{{#rollGreater() rof 6}} +
{{traitroll7}} +
{{/rollGreater() rof 6}}{{#rollGreater() rof 7}} +
{{traitroll8}} +
{{/rollGreater() rof 7}} +
+
{{#rollLess() global_wdroll -100}}{{#rollGreater() wdroll -1000}} +
{{wdroll}} +
{{/rollGreater() wdroll -1000}}{{/rollLess() global_wdroll -100}}{{#rollGreater() global_wdroll -1000}} +
{{global_wdroll}} +
{{/rollGreater() global_wdroll -1000}}{{#rollGreater() bonus_wdroll -1000}} +
{{bonus_wdroll}} +
{{/rollGreater() bonus_wdroll -1000}} +
+
+
+
+ +
+
{{header}}
+
+
+
{{reroll}}
+
+
+
Dice/RoF
+
{{rof}}
+
+
+
+
{{roll1}} +
{{#rollGreater() rof 1}} +
{{roll2}} +
{{/rollGreater() rof 1}}{{#rollGreater() rof 2}} +
{{roll3}} +
{{/rollGreater() rof 2}}{{#rollGreater() rof 3}} +
{{roll4}} +
{{/rollGreater() rof 3}}{{#rollGreater() rof 4}} +
{{roll5}} +
{{/rollGreater() rof 4}}{{#rollGreater() rof 5}} +
{{roll6}} +
{{/rollGreater() rof 5}}{{#rollGreater() rof 6}} +
{{roll7}} +
{{/rollGreater() rof 6}}{{#rollGreater() rof 7}} +
{{roll8}} +
{{/rollGreater() rof 7}} +
+
+
+ +
+
{{header}}
+
{{content}}
+
+
+ +
+
{{content}}
+
+
+ +
+
{{header}}
{{#description}} +
{{description}}
{{/description}} +
{{#reroll}} +
+
{{reroll}}
+
{{/reroll}}{{#source_label}} +
+
{{source_label}}
+
{{source}}
+
{{/source_label}} +
+
Damage
+
{{code}}
+
{{#modifier}} +
+
Damage Modifier
+
{{modifier}}
+
{{/modifier}}{{#ap}} +
+
Armor Piercing
+
{{ap}}
+
{{/ap}}{{#rollGreater() rof 1}} +
+
Hits/RoF
+
{{rof}}
+
{{/rollGreater() rof 1}}{{#range}} +
+
Range
+
{{range}}
+
{{/range}}{{#trapping}} +
+
Trapping
+
{{trapping}}
+
{{/trapping}}{{#custom1_label}} +
+
{{custom1_label}}
+
{{custom1}}
+
{{/custom1_label}}{{#custom2_label}} +
+
{{custom2_label}}
+
{{custom2}}
+
{{/custom2_label}}{{#custom3_label}} +
+
{{custom3_label}}
+
{{custom3}}
+
{{/custom3_label}} +
+
+
{{roll1}} +
{{#rollGreater() rof 1}} +
{{roll2}} +
{{/rollGreater() rof 1}}{{#rollGreater() rof 2}} +
{{roll3}} +
{{/rollGreater() rof 2}}{{#rollGreater() rof 3}} +
{{roll4}} +
{{/rollGreater() rof 3}}{{#rollGreater() rof 4}} +
{{roll5}} +
{{/rollGreater() rof 4}}{{#rollGreater() rof 5}} +
{{roll6}} +
{{/rollGreater() rof 5}}{{#rollGreater() rof 6}} +
{{roll7}} +
{{/rollGreater() rof 6}}{{#rollGreater() rof 7}} +
{{roll8}} +
{{/rollGreater() rof 7}} +
+
+
+
diff --git a/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.jpg b/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.jpg new file mode 100644 index 0000000000..d8a663c8c2 Binary files /dev/null and b/Savage Worlds - Graph Paper/SavageWorldsGraphPaper.jpg differ diff --git a/Savage Worlds - Graph Paper/browser_preview.html b/Savage Worlds - Graph Paper/browser_preview.html new file mode 100644 index 0000000000..ddfc225524 --- /dev/null +++ b/Savage Worlds - Graph Paper/browser_preview.html @@ -0,0 +1,11357 @@ + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+
+
+
+
+
+
+ +
Name
+
+
+ +
Origin
+
+
+ +
Rank
+
+
+ +
Size
+
+
+ +
Level
+
+
+ +
EXP
+
+
+ +
Bennies
+
+
+
+
+ +
Gender
+
+
+ +
Age
+
+
+ +
Hair
+
+
+ +
Eyes
+
+
+ +
Height
+
+
+ +
Weight
+
+
+ +
#Bits
+
+
+
+
+
+
+
+ + + + + + +
+
+ + + + +
+
+ +
+ + + + + +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+ + + + + + + + + +
+ +
Natural
+
+
+ +
Bonus
+
+
+ +
WD
+
+
+
+
+
+ +
+ +
Flight
+
+
+ +
Run
+
+ +
Pace
+
+
+ +
Parry
+
+
+ +
Tough.
+
+
+ +
+ +
Bonus
+
+
+ +
WD
+
+ + + + + + + +
+
+
+
+
+ + +
+
Head
+
+
+ + +
+
Torso
+
+
+ + +
+
Arms
+
+
+ + +
+
Legs
+
+
+ +
+ +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + +
+
+
+
+
+
+
Edges & Hindrances
+
+
+
+ + + + + + + + + +
+ + +
+
+ +
+
+
+
+ + + +
+
+ + + + + + +
+
+ + + + + + + + + + + + +
+
Wounds
+
+
+
+ +
Wound Mitigation
+
+
+ +
Rads
+
+
+
+
+ + + +
+
+ + + + + + +
+
Fatigue
+
+
+ +
+ Power +
+ +
Consumed
+
+
+ +
Max
+
+
+
+
+
+
+ + + + + +
+ +
+
+
+
2
+
4
+
6
+
8
+
10
+
12
+
+
MOD
+
WD
+
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + + + + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
N +
+ +
+
+
N +
+ +
+
+
N +
+ +
+
+
S +
+ +
+
+
S +
+ +
+
+
S +
+ +
+
+
S +
+ +
+
+
V +
+ +
+
+
V +
+ +
+
+
V +
+ +
+
+
V +
+ +
+
+
H +
+ +
+
+
H +
+ +
+
+
H +
+ +
+
+
H +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
L +
+ +
+
+
+ + + + + +
+ + + + + + + +
+
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Ammunition + +
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].
+
+
Armor & Notes + +
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.
+
+
Attribute Reference + +
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 attributes are appended with hyphens as well. So "Agility" becomes @{agility}, @{agility_mod}, @{agility_wd}, @{agility_extra_wd} (for extras only), and @{agility_natural}. "Tough." becomes @{toughness} and Armor is referenced with @{armor_head|_torso|_arms|_legs}. English only!
+
+
Damage Rolls + +
You can enable damage rolls for list items by clicking the damage label. This will disable editing. Note that the dice codes must be valid, but you can use "Str" or "Agi" (etc.) as shorthands to reference attributes. The parser is not smart, however, so please also refer to the Roll20 Dice Reference.
+
+
Edges & Hindrances + +
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.
+
+
Extra Sheet + +
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.
+
+
Helper Buttons + +
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.
+
+
Hexagon Fields + +
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.
+
+
List Item Options + +
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!
+
+
Raise Damage + +
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.
+
+
Rate of Fire (Multiple Dice) + +
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.
+
+
Roll Injections + +

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.

  • {{header}}Header content like "X rolls Y"
  • {{description}}Italic text shown below the header
  • {{reroll}}Link of the reroll button
  • {{damageroll}}Link of the damage button
  • {{source_label}}Label for the source, e.g. "Weapon"
  • {{source}}Content of the source, e.g. "Pistol"
  • {{trait}}Name of the Trait rolled
  • {{traitdie}}Die of the Trait rolled
  • {{flat}}Modifier of the Trait rolled
  • {{wd}}Wild Die of the Trait rolled
  • {{commander}}Commander of an ally
  • {{modifier}}Queried modifier for the roll
  • {{rof}}Rate of Fire as inline roll, e.g. [[ 1 ]]
  • {{wounds}}Wound penalty applied to the roll
  • {{fatigue}}Fatigue penalty applied to the roll
  • {{custom#_label}}[1-3] Label for freeform content
  • {{custom#}}[1-3] Freeform content
  • {{wdroll}}Inline roll of the Wild Die (> -1001)
  • {{traitroll#}}[1-8] Inline roll(s) of the Trait(s)
+
+
Silhouette + +
Choose your silhouette; it looks fancy! You can set color markers all over the silhouette for any purpose, indicating augmentations or injuries or whatever you like.
+
+
Skill Tracks + +
Enter your skill die by clicking on the corresponding bubble (d4-2 to d12). The skill name will darken once you become trained and acts as roll button. You can enter a modifier and custom Wild Die or leave these fields empty to use defaults; the Wild Die can be disabled with "n/a". Positive modifiers are automatically prefixed. On the far right, you can set a color marker for any purpose.
+
+
Track Rolls + +
When you lock the skill tracks with the icon in the top-right corner above the color marker column, you can click on the bubbles to roll the corresponding die independently. This is useful for effects that dynamically alter your skill die, such as boost/lower trait.
+
+
Vehicles & More + +
You can enable blocks for vehicles and other vessels in the Blocks tab under Settings. The silhouette of vehicles can be cycled through by clicking; the switch can take a moment. Both blocks can display weapons by adding a number to the corresponding attribute (0-10).
+
+
+
+
+
+ +
+
+
+
+ +
Name
+
+
+ +
Size
+
+
+ +
Height
+
+
+ +
Weight
+
+
+ +
Bennies
+
+
+
+
+ + + + + + +
+
+ + + + +
+
+ +
+ + + + + +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
Attributes
+
+ +
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+
+
+
+
Skills
+
+ + +
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ +
+ + + + + +
d4-2 +
+ + + +
+
+ + +
+ +
+ d4-2 +
+ + + +
+
+
+
+
+
Armor & Statistics
+ +
+
+ +
Pace
+
+
+ +
Run
+
+
+ +
Parry
+
+
+ +
Tough.
+
+
+
+ +
Head
+
+
+ +
Torso
+
+
+ +
Arms
+
+
+ +
Legs
+
+
+
+ +
WDS
+
+
+ +
FTG
+
+
+ +
+ +
+ + + + + +
d4 +
+ + + +
+
+
+
+
+
Quick Notes
+ +
+ + +
+
+
+
+
Edges & Hindrances
+
+
+
+ + + + + + + + + +
+ + +
+
+ +
+ +
+
Abilities
+ +
+
+ + + + + + + +
+
+ +
+
+
Weapons +
+
+ +
+
Range
+
AP
+
ROF
+
Shots
+
WGT
+
+
+ + + + +
+
+
+ + + + +
+ + + +
+ + + + + +
+ +
+ +
Trapping
+ +
Notes
+ + +
+
+ + + + + + + +
+
+ + +
+ +
+
+
+
+ +
+
+
Apparel +
+
Armor
+
Properties
+
WGT
+
+
+ +
+
+
+ + + + +
+ +
+
Notes
+ + + +
+ +
+
+
+
+ +
+ + + +
+
Augmentations +
+
Grade
+
Power
+
Slots
+
LossStrain
+
+
+ +
+
+
+ +
+ + + + + + + +
+ + + + +
+ +
+ +
Multiplier
+ +
Notes
+ + +
+
+ +
+
+ + +
+ +
+
+
+
+ +
+ +
+
Engrams +
+
Penalty
+
Description
+
+
+ + + +
+
+
+ + + + + + +
+ +
+
Notes
+ + +
+
+ + + + + +
+
+ +
+ +
+
+
+
+ +
+ + +
+
Powers +
+
+ +
+
Range
+
AP
+
PP
+
Penalty
+
Duration
+
+
+ + + + +
+
+
+ + + + + +
+ + + +
+ + + + + +
+ +
+ +
Trapping
+ +
Notes
+ + +
+
+ + + + + + + + +
+
+ +
+ +
+
+
+
+ +
+ +
+
Vehicles +
+
Size
+
Handling
+
Speed
+
Tough.
+
Crew
+
Weap.
+
+
+ +
+
+
+ + + + + + + +
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+
Weapon
+
AP Damage
+
HE Damage
+
Range
+
ROF
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+
+ +
+ +
+
Walkers +
+
Size
+
Pace
+
Strength
+
Tough.
+
Mods
+
Crew
+
Weap.
+
+
+ +
+
+
+ + + + + + + + +
+ +
+
+
+ +
+
+ +
+
+
+
Weapon
+
AP Damage
+
HE Damage
+
Range
+
ROF
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+
+ +
+ +
+
Power Armors +
+
Size
+
Armor
+
Pace
+
Mods
+
Weight
+
Weap.
+
+
+ +
+
+
+ + + + + + + +
+ +
+
+
+ +
+
+ +
+
+
+
Weapon
+
AP Damage
+
HE Damage
+
Range
+
ROF
+
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+ + + + + + +
+ +
+
+ +
+
Notes:
+ +
+
+
+
+
+ +
+ +
+
Allies +
+
Pace
+
Parry
+
Tough.
+
Size
+
EXP
+
Level
+
+
+ +
+
+
+ + + + + + + + +
+ +
+
+ +
+
+ + + + + + +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ + + + + + + + +
+
+
+ +
+
{{header}}
{{#description}} +
{{description}}
{{/description}} +
{{#reroll}} +
+
{{reroll}}
+
{{/reroll}}{{#damageroll}} +
+
{{damageroll}}
+
{{/damageroll}}{{#source_label}} +
+
{{source_label}}
+
{{source}}
+
{{/source_label}}{{#traitdie}} +
+
{{trait}}
+
{{traitdie}} {{#flat}}({{flat}}){{/flat}} +
+
{{/traitdie}}{{#rollLess() global_wdroll 0}}{{#wd}}{{#rollGreater() wdroll -1000}} +
+
Wild Die
+
{{wd}}
+
{{/rollGreater() wdroll -1000}}{{/wd}}{{/rollLess() global_wdroll 0}}{{#rollGreater() global_wdroll -1000}} +
+
Wild Die
+
{{global_wd}}
+
{{/rollGreater() global_wdroll -1000}}{{#rollGreater() bonus_wdroll -1000}} +
+
Bonus Wild Die
+
{{bonus_wd}}
+
{{/rollGreater() bonus_wdroll -1000}}{{#commander}} +
+
Commander
+
{{commander}}
+
{{/commander}} +
+
Modifier
+
{{modifier}}{{#bonus}} ({{bonus}}){{/bonus}}
+
{{#rollGreater() rof 1}} +
+
Dice/RoF
+
{{rof}}
+
{{/rollGreater() rof 1}}{{#rollGreater() wounds 0}} +
+
Wound Penalty
+
{{wounds}}
+
{{/rollGreater() wounds 0}}{{#rollGreater() fatigue 0}} +
+
Fatigue
+
{{fatigue}}
+
{{/rollGreater() fatigue 0}}{{#custom1_label}} +
+
{{custom1_label}}
+
{{custom1}}
+
{{/custom1_label}}{{#custom2_label}} +
+
{{custom2_label}}
+
{{custom2}}
+
{{/custom2_label}}{{#custom3_label}} +
+
{{custom3_label}}
+
{{custom3}}
+
{{/custom3_label}} +
+
+
+
{{traitroll1}} +
{{#rollGreater() rof 1}} +
{{traitroll2}} +
{{/rollGreater() rof 1}}{{#rollGreater() rof 2}} +
{{traitroll3}} +
{{/rollGreater() rof 2}}{{#rollGreater() rof 3}} +
{{traitroll4}} +
{{/rollGreater() rof 3}}{{#rollGreater() rof 4}} +
{{traitroll5}} +
{{/rollGreater() rof 4}}{{#rollGreater() rof 5}} +
{{traitroll6}} +
{{/rollGreater() rof 5}}{{#rollGreater() rof 6}} +
{{traitroll7}} +
{{/rollGreater() rof 6}}{{#rollGreater() rof 7}} +
{{traitroll8}} +
{{/rollGreater() rof 7}} +
+
{{#rollLess() global_wdroll -100}}{{#rollGreater() wdroll -1000}} +
{{wdroll}} +
{{/rollGreater() wdroll -1000}}{{/rollLess() global_wdroll -100}}{{#rollGreater() global_wdroll -1000}} +
{{global_wdroll}} +
{{/rollGreater() global_wdroll -1000}}{{#rollGreater() bonus_wdroll -1000}} +
{{bonus_wdroll}} +
{{/rollGreater() bonus_wdroll -1000}} +
+
+
+
+ +
+
{{header}}
+
+
+
{{reroll}}
+
+
+
Dice/RoF
+
{{rof}}
+
+
+
+
{{roll1}} +
{{#rollGreater() rof 1}} +
{{roll2}} +
{{/rollGreater() rof 1}}{{#rollGreater() rof 2}} +
{{roll3}} +
{{/rollGreater() rof 2}}{{#rollGreater() rof 3}} +
{{roll4}} +
{{/rollGreater() rof 3}}{{#rollGreater() rof 4}} +
{{roll5}} +
{{/rollGreater() rof 4}}{{#rollGreater() rof 5}} +
{{roll6}} +
{{/rollGreater() rof 5}}{{#rollGreater() rof 6}} +
{{roll7}} +
{{/rollGreater() rof 6}}{{#rollGreater() rof 7}} +
{{roll8}} +
{{/rollGreater() rof 7}} +
+
+
+ +
+
{{header}}
+
{{content}}
+
+
+ +
+
{{content}}
+
+
+ +
+
{{header}}
{{#description}} +
{{description}}
{{/description}} +
{{#reroll}} +
+
{{reroll}}
+
{{/reroll}}{{#source_label}} +
+
{{source_label}}
+
{{source}}
+
{{/source_label}} +
+
Damage
+
{{code}}
+
{{#modifier}} +
+
Damage Modifier
+
{{modifier}}
+
{{/modifier}}{{#ap}} +
+
Armor Piercing
+
{{ap}}
+
{{/ap}}{{#rollGreater() rof 1}} +
+
Hits/RoF
+
{{rof}}
+
{{/rollGreater() rof 1}}{{#range}} +
+
Range
+
{{range}}
+
{{/range}}{{#trapping}} +
+
Trapping
+
{{trapping}}
+
{{/trapping}}{{#custom1_label}} +
+
{{custom1_label}}
+
{{custom1}}
+
{{/custom1_label}}{{#custom2_label}} +
+
{{custom2_label}}
+
{{custom2}}
+
{{/custom2_label}}{{#custom3_label}} +
+
{{custom3_label}}
+
{{custom3}}
+
{{/custom3_label}} +
+
+
{{roll1}} +
{{#rollGreater() rof 1}} +
{{roll2}} +
{{/rollGreater() rof 1}}{{#rollGreater() rof 2}} +
{{roll3}} +
{{/rollGreater() rof 2}}{{#rollGreater() rof 3}} +
{{roll4}} +
{{/rollGreater() rof 3}}{{#rollGreater() rof 4}} +
{{roll5}} +
{{/rollGreater() rof 4}}{{#rollGreater() rof 5}} +
{{roll6}} +
{{/rollGreater() rof 5}}{{#rollGreater() rof 6}} +
{{roll7}} +
{{/rollGreater() rof 6}}{{#rollGreater() rof 7}} +
{{roll8}} +
{{/rollGreater() rof 7}} +
+
+
+
+ + \ No newline at end of file diff --git a/Savage Worlds - Graph Paper/img/aircraft_01.png b/Savage Worlds - Graph Paper/img/aircraft_01.png new file mode 100644 index 0000000000..e9d25cf93f Binary files /dev/null and b/Savage Worlds - Graph Paper/img/aircraft_01.png differ diff --git a/Savage Worlds - Graph Paper/img/aircraft_02.png b/Savage Worlds - Graph Paper/img/aircraft_02.png new file mode 100644 index 0000000000..5337e17d57 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/aircraft_02.png differ diff --git a/Savage Worlds - Graph Paper/img/aircraft_03.png b/Savage Worlds - Graph Paper/img/aircraft_03.png new file mode 100644 index 0000000000..92ea425ff8 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/aircraft_03.png differ diff --git a/Savage Worlds - Graph Paper/img/armor_line.png b/Savage Worlds - Graph Paper/img/armor_line.png new file mode 100644 index 0000000000..0cabdc3717 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/armor_line.png differ diff --git a/Savage Worlds - Graph Paper/img/arms_line.png b/Savage Worlds - Graph Paper/img/arms_line.png new file mode 100644 index 0000000000..a0695a1609 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/arms_line.png differ diff --git a/Savage Worlds - Graph Paper/img/car_01.png b/Savage Worlds - Graph Paper/img/car_01.png new file mode 100644 index 0000000000..f525511670 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/car_01.png differ diff --git a/Savage Worlds - Graph Paper/img/car_02.png b/Savage Worlds - Graph Paper/img/car_02.png new file mode 100644 index 0000000000..30f60635bb Binary files /dev/null and b/Savage Worlds - Graph Paper/img/car_02.png differ diff --git a/Savage Worlds - Graph Paper/img/car_03.png b/Savage Worlds - Graph Paper/img/car_03.png new file mode 100644 index 0000000000..ad19a1ed1c Binary files /dev/null and b/Savage Worlds - Graph Paper/img/car_03.png differ diff --git a/Savage Worlds - Graph Paper/img/car_04.png b/Savage Worlds - Graph Paper/img/car_04.png new file mode 100644 index 0000000000..73baabe927 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/car_04.png differ diff --git a/Savage Worlds - Graph Paper/img/decoration_line.png b/Savage Worlds - Graph Paper/img/decoration_line.png new file mode 100644 index 0000000000..4f4a06039e Binary files /dev/null and b/Savage Worlds - Graph Paper/img/decoration_line.png differ diff --git a/Savage Worlds - Graph Paper/img/female_silhouette.png b/Savage Worlds - Graph Paper/img/female_silhouette.png new file mode 100644 index 0000000000..9c5e030d1b Binary files /dev/null and b/Savage Worlds - Graph Paper/img/female_silhouette.png differ diff --git a/Savage Worlds - Graph Paper/img/head_line.png b/Savage Worlds - Graph Paper/img/head_line.png new file mode 100644 index 0000000000..2b17f0cefc Binary files /dev/null and b/Savage Worlds - Graph Paper/img/head_line.png differ diff --git a/Savage Worlds - Graph Paper/img/hexagon_36.svg b/Savage Worlds - Graph Paper/img/hexagon_36.svg new file mode 100644 index 0000000000..79c1a02f8f --- /dev/null +++ b/Savage Worlds - Graph Paper/img/hexagon_36.svg @@ -0,0 +1 @@ + diff --git a/Savage Worlds - Graph Paper/img/hexagon_48.svg b/Savage Worlds - Graph Paper/img/hexagon_48.svg new file mode 100644 index 0000000000..37d5131d87 --- /dev/null +++ b/Savage Worlds - Graph Paper/img/hexagon_48.svg @@ -0,0 +1 @@ + diff --git a/Savage Worlds - Graph Paper/img/hexagon_64.svg b/Savage Worlds - Graph Paper/img/hexagon_64.svg new file mode 100644 index 0000000000..af913958ea --- /dev/null +++ b/Savage Worlds - Graph Paper/img/hexagon_64.svg @@ -0,0 +1 @@ + diff --git a/Savage Worlds - Graph Paper/img/legs_line.png b/Savage Worlds - Graph Paper/img/legs_line.png new file mode 100644 index 0000000000..4d2af470d6 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/legs_line.png differ diff --git a/Savage Worlds - Graph Paper/img/male_silhouette.png b/Savage Worlds - Graph Paper/img/male_silhouette.png new file mode 100644 index 0000000000..dbc6115f30 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/male_silhouette.png differ diff --git a/Savage Worlds - Graph Paper/img/powerarmor_01.png b/Savage Worlds - Graph Paper/img/powerarmor_01.png new file mode 100644 index 0000000000..de0a7a7aa4 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/powerarmor_01.png differ diff --git a/Savage Worlds - Graph Paper/img/quad-bike.png b/Savage Worlds - Graph Paper/img/quad-bike.png new file mode 100644 index 0000000000..e78e32c23a Binary files /dev/null and b/Savage Worlds - Graph Paper/img/quad-bike.png differ diff --git a/Savage Worlds - Graph Paper/img/skull.png b/Savage Worlds - Graph Paper/img/skull.png new file mode 100644 index 0000000000..db4d9f8a48 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/skull.png differ diff --git a/Savage Worlds - Graph Paper/img/spacecraft_01.png b/Savage Worlds - Graph Paper/img/spacecraft_01.png new file mode 100644 index 0000000000..de7c2c4240 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/spacecraft_01.png differ diff --git a/Savage Worlds - Graph Paper/img/spacecraft_02.png b/Savage Worlds - Graph Paper/img/spacecraft_02.png new file mode 100644 index 0000000000..adf92df860 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/spacecraft_02.png differ diff --git a/Savage Worlds - Graph Paper/img/spacecraft_03.png b/Savage Worlds - Graph Paper/img/spacecraft_03.png new file mode 100644 index 0000000000..f805433484 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/spacecraft_03.png differ diff --git a/Savage Worlds - Graph Paper/img/spacecraft_04.png b/Savage Worlds - Graph Paper/img/spacecraft_04.png new file mode 100644 index 0000000000..7a810b9014 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/spacecraft_04.png differ diff --git a/Savage Worlds - Graph Paper/img/sports-bike.png b/Savage Worlds - Graph Paper/img/sports-bike.png new file mode 100644 index 0000000000..4097c8be2c Binary files /dev/null and b/Savage Worlds - Graph Paper/img/sports-bike.png differ diff --git a/Savage Worlds - Graph Paper/img/tank.png b/Savage Worlds - Graph Paper/img/tank.png new file mode 100644 index 0000000000..06a8ca0c49 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/tank.png differ diff --git a/Savage Worlds - Graph Paper/img/torso_line.png b/Savage Worlds - Graph Paper/img/torso_line.png new file mode 100644 index 0000000000..68079e135c Binary files /dev/null and b/Savage Worlds - Graph Paper/img/torso_line.png differ diff --git a/Savage Worlds - Graph Paper/img/unskilled_bg.png b/Savage Worlds - Graph Paper/img/unskilled_bg.png new file mode 100644 index 0000000000..fad1785b1b Binary files /dev/null and b/Savage Worlds - Graph Paper/img/unskilled_bg.png differ diff --git a/Savage Worlds - Graph Paper/img/walker.png b/Savage Worlds - Graph Paper/img/walker.png new file mode 100644 index 0000000000..fc446239cc Binary files /dev/null and b/Savage Worlds - Graph Paper/img/walker.png differ diff --git a/Savage Worlds - Graph Paper/img/watercraft_01.png b/Savage Worlds - Graph Paper/img/watercraft_01.png new file mode 100644 index 0000000000..4747617178 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/watercraft_01.png differ diff --git a/Savage Worlds - Graph Paper/img/watercraft_02.png b/Savage Worlds - Graph Paper/img/watercraft_02.png new file mode 100644 index 0000000000..a90d90cc26 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/watercraft_02.png differ diff --git a/Savage Worlds - Graph Paper/img/watercraft_03.png b/Savage Worlds - Graph Paper/img/watercraft_03.png new file mode 100644 index 0000000000..d239ea1df6 Binary files /dev/null and b/Savage Worlds - Graph Paper/img/watercraft_03.png differ diff --git a/Savage Worlds - Graph Paper/previews/ammunition.gif b/Savage Worlds - Graph Paper/previews/ammunition.gif new file mode 100644 index 0000000000..3ed18d32e5 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/ammunition.gif differ diff --git a/Savage Worlds - Graph Paper/previews/attributes.gif b/Savage Worlds - Graph Paper/previews/attributes.gif new file mode 100644 index 0000000000..a196861797 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/attributes.gif differ diff --git a/Savage Worlds - Graph Paper/previews/augmentations.gif b/Savage Worlds - Graph Paper/previews/augmentations.gif new file mode 100644 index 0000000000..47cd243338 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/augmentations.gif differ diff --git a/Savage Worlds - Graph Paper/previews/extra_sheet.png b/Savage Worlds - Graph Paper/previews/extra_sheet.png new file mode 100644 index 0000000000..27dfa7ae7a Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/extra_sheet.png differ diff --git a/Savage Worlds - Graph Paper/previews/features.gif b/Savage Worlds - Graph Paper/previews/features.gif new file mode 100644 index 0000000000..9ffd1a001c Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/features.gif differ diff --git a/Savage Worlds - Graph Paper/previews/health.gif b/Savage Worlds - Graph Paper/previews/health.gif new file mode 100644 index 0000000000..d84df7517b Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/health.gif differ diff --git a/Savage Worlds - Graph Paper/previews/power_options.gif b/Savage Worlds - Graph Paper/previews/power_options.gif new file mode 100644 index 0000000000..968c7d0350 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/power_options.gif differ diff --git a/Savage Worlds - Graph Paper/previews/roll_template.png b/Savage Worlds - Graph Paper/previews/roll_template.png new file mode 100644 index 0000000000..7a36918414 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/roll_template.png differ diff --git a/Savage Worlds - Graph Paper/previews/settings.gif b/Savage Worlds - Graph Paper/previews/settings.gif new file mode 100644 index 0000000000..70c586352d Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/settings.gif differ diff --git a/Savage Worlds - Graph Paper/previews/skills.gif b/Savage Worlds - Graph Paper/previews/skills.gif new file mode 100644 index 0000000000..a6c026c7a2 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/skills.gif differ diff --git a/Savage Worlds - Graph Paper/previews/vehicles.gif b/Savage Worlds - Graph Paper/previews/vehicles.gif new file mode 100644 index 0000000000..b6d0ec82d6 Binary files /dev/null and b/Savage Worlds - Graph Paper/previews/vehicles.gif differ diff --git a/Savage Worlds - Graph Paper/readme.md b/Savage Worlds - Graph Paper/readme.md new file mode 100644 index 0000000000..ec71e8e362 --- /dev/null +++ b/Savage Worlds - Graph Paper/readme.md @@ -0,0 +1,421 @@ +# Savage Worlds - Graph Paper (SWADE) +This character sheet was originally made for **Maschinenleben** (released later this year), a fan product for the **Savage Worlds Adventure Edition** (SWADE) about cyborgs struggling with their loss of self. Due to its extensive build and customization options, it can be used for many other settings as well. Join the [support game](https://app.roll20.net/join/8488284/oQJGfg) for bug reports and requests. + +## Notable Features +* **Blocks:** Allies, Augmentations, Integrity/Sanity, Powers, Vehicles, and more +* **Fields On Demand:** Show only what you really need to keep the view tidy +* **Extra Sheet:** Alternative sheet with a simplified layout for non-player characters +* **Customization:** Optional rules and functions, custom skills, and renaming +* **Setting Rules:** Enable/Disable optional rules and functions, such as *No Power Points* or *Explode Run Die* +* **Template Rolls:** Multiple dice for multiple targets (RoF 1-8) with a custom Wild Die +* **Failures/Botches:** Dice that show a [1] or [2] are colored red or gray respectively +* **Health/Conditions:** Manage Wounds, Fatigue, and more with a simple click +* **Silhouettes:** They look fancy! You can also add color markers as indicators + +## Previews & Gifs +
+ Full Preview + + ![Full Preview](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/SavageWorldsGraphPaper.jpg) +
+ +
+ Extra Sheet + + ![Extra Sheet](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/extra_sheet.png) +
+ +
+ Roll Template + + ![Roll Template](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/roll_template.png) +
+ +
+ Attributes + + ![Attributes](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/attributes.gif) +
+ +
+ Edges & Hindrances + + ![Edges & Hindrances](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/features.gif) +
+ +
+ Skills + + ![Skills](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/skills.gif) +
+ +
+ Health + + ![Health](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/health.gif) +
+ +
+ Augmentations & Integrity + + ![Augmentations & Integrity](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/augmentations.gif) +
+ +
+ Repeating Lists & Options + + ![Repeating Lists & Options](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/power_options.gif) +
+ +
+ Vehicles + + ![Vehicles](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/vehicles.gif) +
+ +
+ Ammunition + + ![Ammunition](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/ammunition.gif) +
+ +
+ Settings + + ![Settings](https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/previews/settings.gif) +
+ +## Latest Changes +#### Version 1.2.5 +* Refactored all skill rolls +* Extended [Button] option in lists with a modifier field +* Added [Ace Damage] toggle to Engrams, Powers, and Weapons +* Added helper button to toggle global GM rolls +* Added Abilities block +#### Version 1.2.4 +* Added three configurable custom buttons to Settings > Setup +* Fixed some minor CSS issues +#### Version 1.2.3 +* Added helper button to toggle global Wild Die query +* Added helper button to toggle global Rate of Fire query +* Added helper button to toggle global Bonus Wild Die query +* Fixed critical bug that broke nearly all rolls +#### Version 1.2.2 +* Added damage (re-)roll buttons to Roll Templates +* Roll Templates now have hooks for descriptions and three custom fields +* Added injection hook to list rolls to allow custom code +* Added setting toggles for list roll descriptions and injections +* Added [Multiplier] option to Augmentations +* Added [Wild Die Override] option to Engrams, Powers, and Weapons +* Added [Roll Description] option to Engrams, Powers, and Weapons +* Added [Roll Injection] option to Engrams, Powers, and Weapons +* Added help entries for extra sheet, list item options, and raise damage +* Updated older help entries and translations +* Reduced HTML and CSS + +
+ Previous Versions + + #### Version 1.2.1 + * Improved handling for Rate of Fire + * Fixed critical bug in Rate of Fire handling + * Dice roller codes are now parsed + * Added [Query RoF] option to Engrams, Powers, and Weapons + * Improved performance + * Fixed sheet default settings not being applied + * Added setting option to apply Fatigue to run rolls + #### Version 1.2.0 + * Various improvements, refactoring, and bug/style fixes + * Enhanced usability of damage roll toggles for repeating lists + * Damage codes of powers are now processed by the dice parser + * Added setting menu with options to some interactive list items + * Powers: Show Damage, Show Trapping, Roll Button (Input) + * Engrams: Roll Button (Input) + * Weapons: Show Trapping, Roll Button (Input) + * Added the saved maximum capacity to ammunition magazines + * Updated the sheet’s help section + + #### Version 1.1.1 + * Added reroll button to Roll Templates + * Added additional toggles for skills + #### Version 1.1.0 + * Added Ammunition block + * Added options to rename ammunition magazines + * Added new help section, *Ammunition: 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].* + #### Version 1.0.2 + * Increased Rate of Fire range from 6 to 8 + #### Version 1.0.1 + * Made lightest text color a bit darker + * Moved `transition` property to class scopes + * Dice parser now captures leading attribute shortcodes + #### Version 1.0 + * Initial release +
+ +## Development +The character sheet is compiled from [Pug](https://pugjs.org/api/getting-started.html) templates with [SCSS/SASS](https://sass-lang.com/guide) (LibSass). You need both in order to contribute; do not directly modify the compiled HTML and CSS files because these changes will be overwritten! Use the `browser_preview.html` to get a local preview without the need to open Roll20 (non-functional, of course). + +### Contribution Guidelines +* Make sure to always delete `@charset "UTF-8";` from the compiled CSS; Roll20 will not load it otherwise +* Make sure the compiled HTML has an Unix line ending +* The default `font-size` is `10px` optimized for 1440p or better resolutions, but keep 1080p in mind +* Follow the 8×8 pixel grid (starting top-left); the height of each block must be a multiple of 8 +* The devil is in the detail; align and size all elements as precisely as possible (Chrome leads) +* Use [Block Element Modifiers](http://getbem.com/naming/) to name CSS classes; avoid redundancies as much as reasonable +* Use sheetworkers instead of auto-calculating fields +* Always go the "extra mile" + +### Translations +Most of the sheet's strings can be changed via the translation.json. However, some strings need to be manually changed by the GM due to the renaming feature for Traits. Note that certain sheetworker scripts depend on English strings, such as the die codes (e.g. d4, d6, ...) for parsers. If you use [Roll20's translation generation](https://roll20.zendesk.com/hc/en-us/articles/360037773493-Character-Sheet-Translation#CharacterSheetTranslation-StepTwo,GeneratingtheTranslationFile) feature `i18nOutput`, make sure to add the following pairs afterward since they will not be automatically included. Order alphabetically and use ` ` for trailing whitespaces. Put CSS adjustments due to differing word lengths in `_translation_overrides.scss`. + +
+ Pseudo-Element Labels + +``` +"settings-tab-styles": "Styles", +"settings-tab-setup": "Setup", +"settings-tab-blocks": "Blocks", +"settings-tab-skills": "Skills", +"settings-tab-help": "Help", +"tab-skills": "Skills", +"tab-advancements": "Advancements", +"tab-notebook": "Notebook", +"tab-settings": "Settings", +"skill-track-die-label-d4-2": "2", +"skill-track-die-label-d4": "4", +"skill-track-die-label-d6": "6", +"skill-track-die-label-d8": "8", +"skill-track-die-label-d10": "10", +"skill-track-die-label-d12": "12", +"{": "{", +"}": "}" +``` +
+ +
+ Sheet Defaults Translations + +``` +"defaults-block-show-abilities": "[Block] Show Abilities", +"defaults-block-show-abilities-description": "List special abilities or monstrous powers.", +"defaults-block-show-allies": "[Block] Show Allies", +"defaults-block-show-allies-description": "Keep track of allied characters with a barebone mini sheet.", +"defaults-block-show-ammunition": "[Block] Show Ammunition", +"defaults-block-show-ammunition-description": "Keep track of your \"magazines\" for three weapons.", +"defaults-block-show-augmentations": "[Block] Show Augmentations", +"defaults-block-show-augmentations-description": "Install augmentations/cyberware and keep track of the Loss/Strain.", +"defaults-block-show-engrams": "[Block] Show Engrams", +"defaults-block-show-engrams-description": "Special programs or hardware to execute Hacking actions.", +"defaults-block-show-integrity": "[Block] Show Integrity", +"defaults-block-show-integrity-description": "Quantifies mental health/sanity and keeps track of mental afflictions. Maschinenleben.", +"defaults-block-show-power": "[Block] Show Power/Energy", +"defaults-block-show-power-description": "The energy/mana/etc. reserves of a character.", +"defaults-block-show-powerarmors": "[Block] Show Power Armors", +"defaults-block-show-powerarmors-description": "Vehicles and their modifications/weapons.", +"defaults-block-show-powers": "[Block] Show Powers/Spells", +"defaults-block-show-powers-description": "The known powers/spells of a character.", +"defaults-block-show-vehicles": "[Block] Show Vehicles", +"defaults-block-show-vehicles-description": "Vehicles and their modifications/weapons.", +"defaults-block-show-walkers": "[Block] Show Walkers", +"defaults-block-show-walkers-description": "Walkers/Mechs and their modifications/weapons.

Show/Hide Skills

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.

Show/Hide Blocks

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.

Rename Skills

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.

Rename Integrity Hindrances (Maschinenleben)

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).

Rename Blocks

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.

Rename Labels

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.

Rename Attributes

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." +``` +
+ +### Legal +The silhouette images were made from purchased assets and are only licensed for this sheet. Do not take them for any other purposes! This does not go for the human silhouettes which were made with the [HeroMachine 3](http://www.heromachine.com/heromachine-3-lab/) and are therefore free. diff --git a/Savage Worlds - Graph Paper/sheet.json b/Savage Worlds - Graph Paper/sheet.json new file mode 100644 index 0000000000..30e318c673 --- /dev/null +++ b/Savage Worlds - Graph Paper/sheet.json @@ -0,0 +1,924 @@ +{ + "html": "SavageWorldsGraphPaper.html", + "css": "SavageWorldsGraphPaper.css", + "authors": " Tetrakern", + "roll20userid": "1940185", + "preview": "SavageWorldsGraphPaper.jpg", + "instructions": "**Version:** 1.2.5\r\rThis character sheet was originally made for **Maschinenleben** (released later this year), a fan product for the **Savage Worlds Adventure Edition** (SWADE) about cyborgs struggling with their loss of self. Due to its extensive build and customization options, it may be used for many other settings as well.\r\r**Make sure to read the Help section in the Settings tab!**\r\r#### Notable Features\r\r* **Blocks:** Allies, Augmentations, Integrity/Sanity, Powers, Vehicles, and more\r* **Fields On Demand:** Show only what you really need to keep the view tidy\r* **Customization:** Optional rules and functions, custom skills, and renaming\r* **Rolls:** Multiple dice for multiple targets (RoF 1-8) with a custom Wild Die\r* **Failures/Botches:** Dice that show a [1] or [2] are colored red or gray\r* **Health/Conditions:** Manage Wounds, Fatigue, and more with a simple click\r* **Silhouettes:** They look fancy! You can also add color markers as indicators\r* **Extra Sheet:** Alternative sheet with a simplified layout for NPCs\r\r#### Notes\r\r* Boost performance by disabling style features\r* Requires a mouse to fully operate (hover); poor touch support\r* Some attributes have to be translated (renamed) manually\r* Join the [support game](https://app.roll20.net/join/8488284/oQJGfg) for bug reports and requests\r\r---\r\rYou can support development of this sheet by contributing to the [Ko-fi](https://ko-fi.com/tetrakern) of the author. This [Ko-fi](https://ko-fi.com/tetrakern) is not affiliated with Roll20; as such, contributions are voluntary and Roll20 cannot provide support or refunds for contributions.\r\r---\r\r#### Latest Changes\r\r##### Version 1.2.5\r\r* Refactored all skill rolls\r* Extended [Button] option in lists with a modifier field\r* Added [Ace Damage] toggle to Engrams, Powers, and Weapons\r* Added helper button to toggle global GM rolls\r* Added Abilities block\r\r##### Version 1.2.4\r\r* Added three configurable custom buttons to Settings > Setup\r\r##### Version 1.2.3\r\r* Added helper button to toggle global Wild Die query\r* Added helper button to toggle global Rate of Fire query\r* Added helper button to toggle global Bonus Wild Die query\r\r##### Version 1.2.2\r\r* Added damage (re-)roll buttons to Roll Templates\r* Roll Templates now have hooks for descriptions and three custom fields\r* Added injection hook to list rolls to allow custom code\r* Added setting toggles for list roll descriptions and injections\r* Added [Multiplier] option to Augmentations\r* Added [Wild Die Override] option to Engrams, Powers, and Weapons\r* Added [Roll Description] option to Engrams, Powers, and Weapons\r* Added [Roll Injection] option to Engrams, Powers, and Weapons\r* Added help entries for extra sheet, list item options, and raise damage\r* Updated older help entries and translations\r\r---", + "useroptions": [ + { + "attribute": "toggle_pp", + "displayname": "[Rule] No Power Points", + "displaytranslationkey": "defaults-rule-no-power-points", + "type": "checkbox", + "value": "on", + "description": "Use the No Power Points Setting Rule (SWADE 140).", + "descriptiontranslationkey": "defaults-rule-no-power-points-description" + }, + { + "attribute": "toggle_strain", + "displayname": "[Rule] Augmentation Strain", + "displaytranslationkey": "defaults-rule-augmentation-strain", + "type": "checkbox", + "value": "on", + "description": "Use the Strain rules from the Science Fiction Companion (SFC 29).", + "descriptiontranslationkey": "defaults-rule-augmentation-strain-description" + }, + { + "attribute": "toggle_run_explode", + "displayname": "[Function] Explode Run Die", + "displaytranslationkey": "defaults-function-explode-run-die", + "type": "checkbox", + "value": "on", + "description": "Makes the run die Ace.", + "descriptiontranslationkey": "defaults-function-explode-run-die-description" + }, + { + "attribute": "toggle_run_wounds", + "displayname": "[Function] Running Ignores Wounds", + "displaytranslationkey": "defaults-function-running-ignores-wounds", + "type": "checkbox", + "value": "on", + "description": "Wound penalties are not subtracted from the run roll.", + "descriptiontranslationkey": "defaults-function-running-ignores-wounds-description" + }, + { + "attribute": "toggle_run_fatigue", + "displayname": "[Function] Running Applies Fatigue", + "displaytranslationkey": "defaults-function-running-applies-fatigue", + "type": "checkbox", + "value": "on", + "description": "Fatigue penalties are subtracted from the run roll.

Show/Hide Blocks

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.

Show/Hide Skills

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.

Rename Attributes

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.

Rename Skills

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.

Rename Labels

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).

Rename Blocks

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.

Rename Integrity Hindrances (Maschinenleben)

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_ attributes + + getAttrs(array, (values) => { + // Find corresponding attribute + let renameAttribute = Object.keys(values).find(key => values[key] === e.newValue), + update = {}; + + if (_.isUndefined(renameAttribute)) { + update[e.sourceAttribute] = e.previousValue; // Reset if input is invalid + } else { + update[`${id}skill_wd`] = `@{${renameAttribute.replace('rename_', '')}_wd}`; + update[`${id}skill_mod`] = `@{${renameAttribute.replace('rename_', '')}_mod}`; + update[`${id}skill_untrained_mod`] = `@{${renameAttribute.replace('rename_', '')}_untrained_mod}`; + update[`${id}skill_roll`] = `@{${renameAttribute.replace('rename_', '')}_roll}`; + update[`${id}skill_wd_roll`] = `@{${renameAttribute.replace('rename_', '')}_wd_roll}`; + update[`${id}skill_extra_wd_roll`] = `@{${renameAttribute.replace('rename_', '')}_extra_wd_roll}`; + } + + setAttrs(update, { silent: true }); + }); +}); + +on(listItems.map(s => `change:repeating_${s}s:skill_bonus`).join(' '), (e) => { + let update = TETRA.toInt(e.newValue); + + update = update == 0 ? '' : update > 0 ? `+${update}` : update; + + setAttrs({ [e.sourceAttribute]: update }, { silent: true }); +}); + +on(listItems.map(s => `change:repeating_${s}s:rof_override_toggle`).join(' '), (e) => { + let d = e.sourceAttribute.includes('weapon') ? '@{weapon_rof}' : '1', + update = e.newValue == 'on' ? `?{@{query_rate_of_fire}|${d}}` : '1', + target = e.sourceAttribute.replace('_toggle', ''); + + setAttrs({ [target]: update }, { silent: true }); +}); + +on(listItems.map(s => `change:repeating_${s}s:wd_override_toggle`).join(' '), (e) => { + let update = e.newValue == 'on' ? `{{wd=@{wd_override_die}}} {{wdroll=[[ @{wd_override_die}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}` : '', + target = e.sourceAttribute.replace('_toggle', ''); + + setAttrs({ [target]: update }, { silent: true }); +}); + +on(listItems.map(s => `change:repeating_${s}s:roll_description_toggle`).join(' '), (e) => { + let update = e.newValue == 'on' ? `@{roll_description_input}` : '', + target = e.sourceAttribute.replace('_toggle', ''); + + setAttrs({ [target]: update }, { silent: true }); +}); + +on(listItems.map(s => `change:repeating_${s}s:roll_injection_toggle`).join(' '), (e) => { + let update = e.newValue == 'on' ? `@{roll_injection_input}` : '', + target = e.sourceAttribute.replace('_toggle', ''); + + setAttrs({ [target]: update }, { silent: true }); +}); + +on(listItems.map(s => `change:repeating_${s}s:explode_damage_toggle`).join(' '), (e) => { + let update = e.newValue == 'on' ? '!' : ' ', + target = e.sourceAttribute.replace('_toggle', ''); + + setAttrs({ [target]: update }, { silent: true }); +}); + +/* ############################################################################# +HELPER BUTTONS +############################################################################# */ + +on('change:dice_roller_input', (e) => { + let code = TETRA.parseDiceCode(e.newValue); + + setAttrs({ ['dice_roller_code']: code }, { silent: true }); +}); + +/* ############################################################################# +SETTINGS +############################################################################# */ + +on('change:toggle_global_rof', (e) => { + let update = e.newValue == 'on' ? '?{@{query_rate_of_fire}|1}' : '1'; + + setAttrs({ ['query_global_rof']: update }, { silent: true }); +}); + +on('change:toggle_global_wd', (e) => { + let update = e.newValue == 'on' ? '?{@{query_wild_die}|d8|d4|d6|d10|d12|@{none},-10000-d20}' : '-10000-d20'; + + setAttrs({ ['query_global_wd']: update }, { silent: true }); +}); + +on('change:toggle_global_bonus_wd', (e) => { + let update = e.newValue == 'on' ? '?{@{query_bonus_wild_die}|d4|d6|d8|d10|d12|@{none},-10000-d20}' : '-10000-d20'; + + setAttrs({ ['query_global_bonus_wd']: update }, { silent: true }); +}); + +on('change:toggle_run_wounds', (e) => { + let update = e.newValue == 'on' ? '0' : '@{wound_mod}'; + + setAttrs({ ['run_wounds']: update }, { silent: true }); +}); + +on('change:toggle_run_fatigue', (e) => { + let update = e.newValue == 'on' ? '@{fatigue_mod}' : '0'; + + setAttrs({ ['run_fatigue']: update }, { silent: true }); +}); + +on('change:toggle_run_explode', (e) => { + let update = e.newValue == 'on' ? '@{run_roll}!' : '@{run_roll}'; + + setAttrs({ ['run_code']: update }, { silent: true }); +}); diff --git a/Savage Worlds - Graph Paper/source/styles/SavageWorldsGraphPaper.scss b/Savage Worlds - Graph Paper/source/styles/SavageWorldsGraphPaper.scss new file mode 100644 index 0000000000..5893ccefe9 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/SavageWorldsGraphPaper.scss @@ -0,0 +1,50 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap'); + +// Base +@import 'variables'; +@import 'reset'; +@import 'general'; +@import 'hexagons'; +@import 'color_cycle'; +@import 'repeating'; +@import 'hexfields'; +@import 'tabs'; + +// Blocks +@import 'meta'; +@import 'buttons'; +@import 'attributes'; +@import 'silhouette'; +@import 'secondary'; +@import 'armor'; +@import 'skills'; +@import 'advancements'; +@import 'notebook'; +@import 'settings'; +@import 'features'; +@import 'health'; +@import 'power'; +@import 'weapons'; +@import 'apparel'; +@import 'integrity'; +@import 'abilities'; +@import 'augmentations'; +@import 'engrams'; +@import 'powers'; +@import 'vehicles'; +@import 'powerarmor'; +@import 'walkers'; +@import 'allies'; +@import 'quick_notes'; +@import 'encumbrance'; +@import 'inventory'; +@import 'ammunition'; +@import 'simple_trait'; +@import 'extra_sheet'; +@import 'rolltemplates'; + +// Arrangements +@import 'sections'; + +// Overrides +@import 'translation_overrides'; diff --git a/Savage Worlds - Graph Paper/source/styles/_abilities.scss b/Savage Worlds - Graph Paper/source/styles/_abilities.scss new file mode 100644 index 0000000000..bd10d60f5c --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_abilities.scss @@ -0,0 +1,27 @@ +.sheet-abilities { + .sheet-repitem__size-radio { + &[value="6"]:checked ~ textarea { + height: 20px; + } + + &[value="1"]:checked ~ textarea { + height: 36px; + } + + &[value="2"]:checked ~ textarea { + height: 52px; + } + + &[value="3"]:checked ~ textarea { + height: 68px; + } + + &[value="4"]:checked ~ textarea { + height: 84px; + } + + &[value="5"]:checked ~ textarea { + height: 100px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_advancements.scss b/Savage Worlds - Graph Paper/source/styles/_advancements.scss new file mode 100644 index 0000000000..ea303fa169 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_advancements.scss @@ -0,0 +1,36 @@ +.sheet-advancements { + color: $c-text-light; + font-size: $fs-s; + line-height: 16px; + padding: 8px 0 0 64px; + + &__item { + display: flex; + background-color: $c-white; + border-bottom: 1px dotted $c-outline; + height: 16px; + width: 100%; + + &:not(:last-child) { + margin-bottom: 8px; + } + } + + &__rank { + font-weight: 700; + text-align: center; + margin-right: 8px; + width: 8px; + } + + input[type=text] { + flex-grow: 1; + color: $c-text-light; + font-size: $fs-s; + line-height: 16px; + + &::placeholder { + font-size: $fs-s; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_allies.scss b/Savage Worlds - Graph Paper/source/styles/_allies.scss new file mode 100644 index 0000000000..7802a68695 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_allies.scss @@ -0,0 +1,111 @@ +.sheet-allies { + &__pace, + &__parry, + &__toughness, + &__size, + &__exp, + &__level { + width: 45px; + } + + .sheet-header__labels { + padding-right: 30px; + } + + .sheet-repitem__secondary { + align-items: flex-start; + justify-content: space-between; + height: auto; + + .sheet-left { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + flex-shrink: 0; + padding: 5px 0 6px; + width: 44px; + + button[type=roll], + .sheet-allies__health-field input[type=text] { + font-weight: 700; + border-radius: 2px; + height: 20px; + width: 20px; + } + + button[type=roll] { + display: flex; + align-items: center; + justify-content: center; + color: $c-text-lightest; + font-size: $fs-s; + line-height: 1; + border: 1px dotted $c-outline; + margin-bottom: 4px !important; + + &:hover { + background-color: $c-background-dark; + border-color: $c-background-dark; + + span { + color: $c-white !important; + } + } + } + + .sheet-allies__health-field { + position: relative; + + &::before { + position: absolute; + top: 0; + left: 0; + display: block; + background-color: $c-background-hover; + color: $c-white; + font-family: Pictos; + font-size: 14px; + font-weight: 900; + line-height: 22px; + text-align: center; + border-radius: 2px; + height: 100%; + width: 100%; + } + + &--wounds::before { + content: 'k'; + } + + &--fatigue::before { + content: 'Y'; + } + + input[type=text] { + position: relative; + z-index: 1; + color: $c-text-light; + font-size: 14px; + line-height: 20px; + text-align: center; + } + } + } + + .sheet-right { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + padding: 5px 0 0 8px; + + input[type=text].sheet-allies__note-field { + text-align: left; + padding: 0 2px; + margin-bottom: 4px; + border-bottom: 1px dotted $c-outline; + height: 20px; + width: 76px !important; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_ammunition.scss b/Savage Worlds - Graph Paper/source/styles/_ammunition.scss new file mode 100644 index 0000000000..35b2aa4e82 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_ammunition.scss @@ -0,0 +1,149 @@ +.sheet-ammunition { + position: relative; + margin-bottom: 16px; + width: 266px; + + &__content { + display: flex; + padding: 6px 0 14px; + } + + &__container { + position: relative; + display: flex; + align-items: center; + justify-content: center; + background-color: $c-item; + border-radius: 2px; + height: 34px; + width: 40px; + + &--1, + &--2 { + margin-right: 6px; + } + + span { + position: absolute; + left: 0; + z-index: 0; + display: block; + background-color: $c-text-gray; + color: $c-white; + font-size: $fs-xs; + font-weight: 500; + line-height: 13px; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + height: 12px; + width: 100%; + } + + span:first-of-type { + top: 0; + border-radius: 2px 2px 0 0; + } + + span:last-of-type { + bottom: -10px; + letter-spacing: -0.4px; + text-transform: uppercase; + padding: 0 2px; + border-radius: 0 0 2px 2px; + } + + input[type=radio] { + position: absolute; + top: 0; + left: 0; + z-index: 1; + height: 100%; + width: 100%; + + &::after { + content: ''; + position: absolute; + bottom: -10px; + left: 0; + z-index: 1; + height: 10px; + width: 100%; + } + + &:checked ~ span { + background-color: $c-background-dark; + } + + &::before { + content: ''; + border: 2px solid $c-text-gray; + border-width: 2px 2px 0; + border-radius: 2px; + height: 100%; + width: 100%; + } + + &:checked::before { + border-color: $c-background-dark; + } + + &:checked ~ input[type=text] { + color: $c-text-lighter; + } + } + + input[type=text] { + position: relative; + z-index: 2; + color: $c-text-gray; + font-size: 14px; + font-weight: 700; + line-height: 1; + margin-top: 9px; + height: 14px; + width: 36px; + } + } + + &__buttons { + flex-grow: 1; + + > div { + display: flex; + justify-content: space-between; + + &:first-child { + margin-bottom: 4px; + } + } + + button[type=action] { + flex-shrink: 0; + align-items: center; + justify-content: center; + background-color: $c-item; + color: $c-text-lightest; + border: 1px dotted $c-outline; + border-radius: 2px; + padding: 0 4px; + height: 20px; + + &:hover { + background-color: $c-background-dark; + color: $c-white !important; + border: 1px solid $c-background-dark; + } + + &:not(:last-child) { + margin-right: 4px; + } + + &:last-child { + flex-grow: 1; + max-width: 21px; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_apparel.scss b/Savage Worlds - Graph Paper/source/styles/_apparel.scss new file mode 100644 index 0000000000..1c7db1d657 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_apparel.scss @@ -0,0 +1,15 @@ +.sheet-apparel { + &__armor { + width: 40px; + margin-right: 8px; + } + + &__tags { + text-align: left; + width: 210px; + } + + &__weight { + width: 30px; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_armor.scss b/Savage Worlds - Graph Paper/source/styles/_armor.scss new file mode 100644 index 0000000000..238ec041db --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_armor.scss @@ -0,0 +1,98 @@ +.sheet-armor { + z-index: 1; + display: flex; + flex-direction: column; + align-items: flex-end; + padding-right: 48px; + + > .sheet-hexfield { + &:not(:last-child) { + margin-bottom: 36px; + } + + &--armor-head, + &--armor-legs { + margin-right: 16px; + } + + .sheet-hexfield__label--left { + background-color: $c-white; + padding-left: 4px; + } + + textarea { + position: absolute; + top: 8px; + left: 36px; + color: $c-text-lighter; + font-size: 9px !important; + line-height: 1.6; + padding-top: 4px; + height: 60px; + width: 80px; + + &::placeholder { + color: #f0f0f0; + font-size: 22px; + font-weight: 700; + line-height: 0.6; + } + } + } + + &__decoration, + &__pointer { + position: absolute; + background: { + repeat: no-repeat; + size: contain; + } + opacity: .12; + } + + &__decoration { + background: { + image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/decoration_line.png'); + } + top: 15px; + left: -60px; + height: 322px; + width: 95px; + } + + &__pointer { + transform: translateX(-100%); + + &--head { + top: 17px; + left: -28px; + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/head_line.png'); + height: 2px; + width: 122px; + } + + &--torso { + top: -11px; + left: -33px; + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/torso_line.png'); + height: 30px; + width: 131px; + } + + &--arms { + top: -44px; + left: -30px; + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/arms_line.png'); + height: 63px; + width: 97px; + } + + &--legs { + top: -23px; + left: -27px; + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/legs_line.png'); + height: 42px; + width: 98px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_attributes.scss b/Savage Worlds - Graph Paper/source/styles/_attributes.scss new file mode 100644 index 0000000000..51f1928b8a --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_attributes.scss @@ -0,0 +1,50 @@ +.sheet-attribute { + position: relative; + font-size: 14px; + height: 48px; + width: 48px; + + &__button { + position: absolute; + top: 50%; + left: 0; + color: $c-text-light; + font-size: 14px; + font-weight: 700; + transform: translate(-100%, -50%); + } + + &:not(:hover) .sheet-hexfield--mod { + input:not(:focus) + .sheet-hexfield__label { + opacity: 0; + } + } + + .sheet-hexfield { + position: absolute; + top: 37px; + + &--nat { + left: 27px; + } + + &--mod { + top: 9px; + left: 43px; + + .sheet-hexfield__label { + color: $c-text-lightest; + } + + .sheet-hexfield__input:not(:placeholder-shown) { + ~ .sheet-hexfield__label { + color: $c-text-light; + } + } + } + + &--wd { + left: 59px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_augmentations.scss b/Savage Worlds - Graph Paper/source/styles/_augmentations.scss new file mode 100644 index 0000000000..3512ac830d --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_augmentations.scss @@ -0,0 +1,66 @@ +.sheet-toggle--strain { + &:checked ~ .sheet-augmentations { + .sheet-augmentations { + &__power, + &__slots { + display: none; + } + } + + .sheet-a { + display: none; + } + + .sheet-b { + display: inline; + } + } +} + +.sheet-toggle-augmentation-markers:not(:checked) { + ~ .sheet-augmentations .sheet-color-cycle { + display: none; + } +} + +.sheet-augmentations { + .sheet-header__labels span { + text-transform: uppercase; + } + + &__grade { + width: 60px; + } + + &__power, + &__slots, + &__loss { + width: 40px; + } + + .sheet-b { + display: none; + } + + .sheet-color-cycle { + &__radio { + padding: 3px; + border: 1px solid transparent; + + &--none { + border-color: $c-outline; + } + } + } + + &__multiplier { + text-align: left; + width: 18px; + } + + input.sheet-toggle:not(:checked) { + ~ .sheet-augmentations__multiplier { + display: none; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_buttons.scss b/Savage Worlds - Graph Paper/source/styles/_buttons.scss new file mode 100644 index 0000000000..d7d19e06dc --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_buttons.scss @@ -0,0 +1,84 @@ +.sheet-buttons { + display: flex; + flex-wrap: wrap; + margin-right: -4px; + width: 274px; + + &::after { + content: ''; + display: block; + flex-grow: 1000000; + } + + > div, + > label { + margin: 0 4px; + } + + > div { + position: relative; + z-index: 1; + display: flex; + flex-grow: 1; + white-space: nowrap; + border-radius: 2px; + margin-bottom: 8px; + height: 16px; + overflow: hidden; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + z-index: -1; + display: block; + background-color: $c-item; + border: 1px dotted $c-outline; + border-radius: 2px; + width: 100%; + height: 100%; + } + } + + button { + flex-shrink: 0; + flex-grow: 1; + justify-content: center; + color: $c-text-lightest; + font-size: $fs-s; + font-weight: 500; + line-height: 16px; + padding: 0 4px !important; + height: 16px; + + &:hover { + background-color: $c-background-dark; + + > span { + color: $c-white !important; + } + } + } + + .sheet-dice-roller { + input[type=text].sheet-dice-roller__input { + flex-grow: 100; + width: auto; + + &::placeholder { + font-size: $fs-s; + } + } + } + + .sheet-label-toggle { + margin-bottom: 8px; + + span { + font-size: $fs-s; + line-height: 16px; + height: 16px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_color_cycle.scss b/Savage Worlds - Graph Paper/source/styles/_color_cycle.scss new file mode 100644 index 0000000000..36304a184f --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_color_cycle.scss @@ -0,0 +1,69 @@ +.sheet-color-cycle { + position: relative; + height: 16px; + width: 16px; + + &__radio { + position: absolute; + top: 50%; + left: 50%; + z-index: 1; + background-color: transparent; + padding: 4px; + border-radius: 50%; + opacity: 0; + transform: translate(-50%, -50%); + + &:checked { + opacity: 1; + + & + input { + z-index: 3; + } + } + + &--none, + &--novice { + z-index: 2; + + &:checked { + background-color: transparent; + border-color: transparent; + } + } + + &--red:checked { + background-color: $c-red; + border-color: $c-red; + } + + &--yellow:checked { + background-color: $c-yellow; + border-color: $c-yellow; + } + + &--blue:checked { + background-color: $c-blue; + border-color: $c-blue; + } + + &--green:checked { + background-color: $c-green; + border-color: $c-green; + } + + &--purple:checked { + background-color: $c-purple; + border-color: $c-purple; + } + + &--gray:checked { + background-color: $c-gray; + border-color: $c-gray; + } + + &:last-child:checked { + z-index: 1; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_encumbrance.scss b/Savage Worlds - Graph Paper/source/styles/_encumbrance.scss new file mode 100644 index 0000000000..10345b6df0 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_encumbrance.scss @@ -0,0 +1,78 @@ +.sheet-encumbrance { + display: flex; + text-align: center; + margin: 16px 0 24px; + width: 266px; + + .sheet-label { + display: flex; + align-items: center; + justify-content: center; + text-transform: uppercase; + height: 16px; + } + + &__container { + &:not(:last-child) { + margin-right: 8px; + + .sheet-encumbrance__content { + width: 48px; + } + } + + &--summary { + flex-grow: 1; + } + } + + &__content { + display: flex; + justify-content: center; + align-items: center; + background-color: $c-white; + font-size: $fs-l; + border-radius: 2px; + height: 32px; + overflow: hidden; + box-shadow: $shadow; + + span { + user-select: none; + } + + input[type=text] { + border-radius: 2px; + + &:hover { + background-color: $c-background-hover; + } + + &:focus { + background-color: $c-item; + font-size: 16px !important; + font-weight: 700; + height: 100%; + width: 100%; + + ~ * { + display: none; + } + } + } + + &--summary { + flex-direction: row-reverse; + + > div { + padding: 0 4px; + } + + input[type=text], + span { + font-size: $fs-l; + width: 32px; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_engrams.scss b/Savage Worlds - Graph Paper/source/styles/_engrams.scss new file mode 100644 index 0000000000..8089be9ce5 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_engrams.scss @@ -0,0 +1,12 @@ +.sheet-engrams { + &__penalty { + width: 40px; + padding-right: 8px; + } + + &__description { + flex-shrink: 0; + text-align: left; + width: 280px; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_extra_sheet.scss b/Savage Worlds - Graph Paper/source/styles/_extra_sheet.scss new file mode 100644 index 0000000000..009d6fb330 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_extra_sheet.scss @@ -0,0 +1,245 @@ +.sheet-extra { + width: 100%; + + .sheet-buttons { + padding-bottom: 1px; + width: 100%; + + > div { + margin-right: 8px; + } + } + + .sheet-block { + margin-top: 16px; + } + + .sheet-simple-trait { + &:not(:last-child) { + margin-right: 8px; + } + } + + &-meta { + display: flex; + margin-bottom: 19px; + + .sheet-meta-field:first-child { + flex-grow: 1; + } + + .sheet-meta-field input[type=text].sheet-meta-field__input--name { + width: 100%; + } + } + + .sheet-features { + margin-top: 16px; + } + + .repcontainer { + &:empty ~ .repcontrol .repcontrol_add::before { + width: 474px; + } + } + + .sheet-footer { + opacity: 0; + } + + .sheet-quick-notes { + width: 100%; + + &__content { + padding-bottom: 0; + } + } +} + +.sheet-extra-attributes { + position: relative; + + .sheet-container { + display: flex; + padding-top: 8px; + } +} + +.sheet-extra-skills { + position: relative; + + .sheet-container { + display: flex; + flex-wrap: wrap; + padding-top: 8px; + + &::after { + content: ''; + display: block; + flex-grow: 1000000; + } + } + + &__selection-toggle { + &::after { + position: absolute; + top: 2px; + right: 20px; + display: block; + font-family: Pictos; + font-size: 10px; + line-height: 14px; + } + + &:hover::after { + color: $c-text-light !important; + } + + &:checked { + ~ .sheet-container .sheet-simple-trait { + display: none; + } + + ~ .sheet-container { + justify-content: space-between; + } + + &::after { + content: '3'; + color: $c-text-light; + } + } + + &:not(:checked) { + ~ .sheet-container .sheet-extra-skills__toggle-label { + display: none; + } + + &::after { + content: 'W'; + color: $c-text-lightest; + } + } + } + + &__toggle { + &-label { + flex-shrink: 0; + width: auto; + } + + // Outer checkbox + &:not(:checked) + .sheet-simple-trait { + display: none; + } + + // Inner checkbox + + span { + user-select: none; + display: block; + color: $c-text-lightest; + font-size: 11px; + font-weight: 500; + line-height: 24px; + text-transform: capitalize; + white-space: nowrap; + padding: 0 4px; + } + + &:hover + span { + color: $c-text-lighter; + } + + &:checked + span { + color: $c-text; + } + } +} + +.sheet-extra-secondary { + .sheet-container { + display: flex; + align-items: flex-start; + justify-content: center; + padding-top: 8px; + } + + &__field { + flex-grow: 1; + width: auto; + + &:not(:last-child) { + margin-right: 8px; + } + + .sheet-label { + color: $c-text-lightest; + font-weight: 500; + line-height: 16px; + text-align: center; + text-transform: uppercase; + letter-spacing: -0.1px; + height: 16px; + } + } + + input[type=text] { + line-height: 24px; + + &::placeholder { + font-size: $fs-s; + line-height: 24px; + } + } + + input[type=text].sheet-extra-secondary__input, + &__field > span { + display: block; + background-color: $c-white; + font-weight: 500; + text-align: center; + border: 1px solid $c-outline; + border-radius: 2px; + height: 24px; + width: 100%; + } + + .sheet-simple-trait__expand { + border-color: $c-outline; + } + + .sheet-divider { + border-right: 1px dotted $c-outline; + margin: 0 10px 0 2px; + height: 24px; + } +} + +.sheet-extra-settings { + display: flex; + padding: 8px 0; + margin-top: 15px !important; + border-top: 1px dotted $c-outline; + + &__item { + user-select: none; + line-height: 16px; + width: auto; + + &:not(:last-child) { + margin-right: 8px; + } + + span { + color: $c-text-gray; + font-size: $fs-s; + font-weight: 500; + } + } + + input[type=checkbox]:checked { + ~ span { + color: $c-text-lighter; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_features.scss b/Savage Worlds - Graph Paper/source/styles/_features.scss new file mode 100644 index 0000000000..40315c1135 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_features.scss @@ -0,0 +1,164 @@ +.sheet-features { + position: relative; + flex-grow: 1; + + fieldset, + .repcontainer { + display: flex; + flex-wrap: wrap; + padding: 4px 0; + margin: 0 -4px; + + &::after { + content: ''; + display: block; + flex-grow: 1000000; + } + + > * { + opacity: .6; + transition-delay: .4s; + transition: opacity .3s ease-in-out; + } + + &:hover > * { + opacity: 1; + } + } + + .repitem { + flex-grow: 1; + margin-top: 0; + } + + .sheet-repitem { + position: relative; + display: flex; + padding-right: 6px; + margin: 4px; + width: auto; + } + + .sheet-color-cycle__radio { + top: 1px; + left: 1px; + align-items: center; + padding: 0; + height: 14px; + width: 14px; + opacity: 1; + transform: none; + + &::after { + display: flex; + align-items: center; + justify-content: center; + font-size: $fs-s; + font-weight: 700; + line-height: 1; + height: 100%; + width: 100%; + border-radius: 2px 0 0 2px; + } + + &--novice:checked::after { + content: 'N'; + background-color: rgba(0, 0, 0, .05); + color: $c-text-light; + } + + &--seasoned:checked::after { + content: 'S'; + background-color: $c-green; + color: $c-white; + } + + &--veteran:checked::after { + content: 'V'; + background-color: $c-blue; + color: $c-white; + } + + &--heroic:checked::after { + content: 'H'; + background-color: $c-purple; + color: $c-white; + } + + &--legendary:checked::after { + content: 'L'; + background-color: $c-yellow; + color: $c-white; + } + + &--augmentation:checked::after { + content: 'A'; + background-color: $c-background-dark; + color: $c-white; + } + + &--dot:checked::after { + content: ''; + background-color: $c-text-light; + border: 4px solid $c-item; + border-radius: 50%; + height: 14px; + width: 14px; + } + + &--hindrance:checked::after { + content: '*'; + background-color: $c-dark-red; + color: $c-white; + font-family: Pictos; + } + + &--disabled:checked { + &::after { + content: 'e'; + font-size: $fs-l; + font-family: Pictos; + } + + ~ *, + &::after { + color: $c-text-lightest; + text-shadow: 0 0 3px $c-white, 0 0 3px $c-white, 0 0 3px $c-white, 0 0 3px $c-white; + } + + ~ .sheet-features__inner-background { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 0; + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/unskilled_bg.png') repeat; + } + } + } + + input[type=text].sheet-features__name { + z-index: 1; + line-height: 16px; + margin-left: 20px; + } + + $sizes: 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, + 100, 104, 108, 112,116, 120, 124, 128, 132, 136, 140, 144, 148, 152, + 156, 160, 164, 168, 172, 176, 180; + + @each $s in $sizes { + input[value="#{$s}"] + input { + width: #{$s}px; + } + } + + .repcontainer.editmode { + .itemcontrol { + margin: 4px; + width: calc(100% - 8px) !important; + max-height: 16px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_footer_section.scss b/Savage Worlds - Graph Paper/source/styles/_footer_section.scss new file mode 100644 index 0000000000..b5b10d5d05 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_footer_section.scss @@ -0,0 +1,8 @@ +.sheet-footer-section { + margin-top: 23px; + + .sheet-right { + width: 330px; + padding-left: 64px; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_general.scss b/Savage Worlds - Graph Paper/source/styles/_general.scss new file mode 100644 index 0000000000..aeb275746b --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_general.scss @@ -0,0 +1,688 @@ +// ############################################################################# +// BASIC SETUP +// ############################################################################# +*, +::before, +::after { + box-sizing: border-box; +} + +p { + font-family: inherit; + font-size: inherit; + line-height: inherit; + margin: 0 0 8px 0; +} + +ul { + list-style: none; + padding: 0; + margin: 0; + + li b:first-child { + display: inline-block; + padding-right: 8px; + min-width: 96px; + } +} + +textarea, +select, +button, +fieldset, +input, +option, +label { + display: flex; + background-color: transparent; + background-image: none; + font-family: inherit; + font-weight: 400; + text-decoration: none; + padding: 0; + margin: 0; + border: 0; + border-radius: 0; + outline: 0 !important; + min-width: 0; + box-shadow: none; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + + &::placeholder { + color: $c-text-gray; + } +} + +button, +label, +input[type=checkbox], +input[type=radio] { + cursor: pointer; +} + +button, +button > span { + &:hover, + &:hover > span { + color: $c-text-hover !important; + } +} + +button[type=action] { + color: $c-text-light; + font-size: $fs-s; + font-weight: 500; + line-height: 1; +} + +input[type=text]:not(.sheet-hex) { + background-color: transparent; + color: $c-text; + font-size: $fs-s; + line-height: 20px; + text-overflow: ellipsis; + + &::placeholder { + font-size: $fs-xs; + line-height: 20px; + } + + &:not(.sheet-align-left) { + text-align: center; + } +} + +input[type=hidden] { + display: none; +} + +textarea { + color: $c-text-light; + font-size: 9px; + line-height: 1.6; + width: 100%; + resize: none; +} + +input[type=checkbox].sheet-checkbox { + background-color: $c-white; + border: 1px solid $c-text-lighter; + border-radius: 2px; + height: 10px; + width: 10px; + + &::before { + content: ''; + display: block; + border-radius: 1px; + margin: 1px 0 0 1px; + height: 6px; + width: 6px; + } + + &:checked::before { + background-color: $c-text-lighter; + } +} + +.sheet-wrapper { + text-align: center; +} + +.sheet-body { + color: $c-text; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: $fs-s; + line-height: 1; + text-align: left; + background: { + image: linear-gradient(to right, #fbfbfb 1px, transparent 1px), + linear-gradient(to bottom, #fbfbfb 1px, transparent 1px); + size: 8px 8px; + position: -1px -1px; + } + padding-top: 8px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + + > div { + margin: 0 auto; + } + + ~ rolltemplate { + display: none; + } +} + +.sheet-variant-radio { + display: inline-block; + + &::after { + content: ''; + display: inline-block; + padding: 3px; + border: 1px solid $c-outline; + border-radius: 50%; + } + + &:checked::after { + background-color: $c-outline; + } + + &--wildcard:checked ~ .sheet-body { + width: 800px; + + .sheet-extra { + display: none; + } + } + + &--extra:checked ~ .sheet-body { + width: 474px; + + .sheet-wildcard { + display: none; + } + } +} + +.sheet-wildcard { + .sheet-section { + display: flex; + justify-content: space-between; + + > .sheet-left { + display: flex; + flex-direction: column; + flex-shrink: 0; + width: 470px; + } + + > .sheet-right { + flex-grow: 1; + } + } +} + +// ############################################################################# +// GENERICS & COMMON +// ############################################################################# + +.sheet-hidden { + display: none; +} + +.sheet-block { + position: relative; + margin-top: 40px; +} + +.sheet-header { + display: flex; + justify-content: space-between; + padding-bottom: 4px; + border-bottom: 1px dotted $c-outline; + height: 16px; + + &__title { + display: block; + flex-grow: 1; + color: $c-text-light; + font-size: $fs-l; + font-weight: 700; + text-transform: uppercase; + } + + &__labels { + display: flex; + align-items: flex-end; + line-height: .5; + text-align: center; + text-transform: uppercase; + padding-right: 16px; + + > span { + display: block; + } + } +} + +.sheet-label, +.sheet-header__labels * { + color: $c-text-lightest; + font-size: $fs-xs; +} + +.sheet-large-label { + color: $c-text-light; + font-size: $fs-l; + font-weight: 700; + text-transform: uppercase; +} + +.sheet-footer { + color: $c-text-light; + line-height: 16px; + height: 16px; +} + +.sheet-toggle { + &:not(:checked):not(.sheet-toggle--special) + *, + &:not(:checked):not(.sheet-toggle--special) ~ .repcontainer, + &:not(:checked):not(.sheet-toggle--special) ~ .repcontrol { + display: none; + } + + &::after { + display: flex; + align-items: center; + justify-content: center; + color: $c-text-lighter; + line-height: 1; + width: 16px; + } + + &:checked::after { + color: $c-text-light; + } + + &--block { + display: none; + } + + &--visibility { + position: absolute; + top: 4px; + right: 0; + + &::after { + content: '`'; + color: $c-text-gray; + font-size: $fs-s; + font-family: Pictos; + height: 10px; + } + + &:checked::after { + color: $c-text-gray; + } + + &:checked::after { + content: 'J'; + } + } + + &--arrow { + position: absolute; + right: 0; + top: 0; + + &::after { + content: '►'; + font-size: $fs-xs; + line-height: 20px; + height: 20px; + width: 20px; + transform-origin: 9px 10px; + transition: transform .3s ease-in-out; + } + + &:checked::after { + transform: rotate(90deg); + } + } + + &--settings, + &--note-box, + &--loss { + &::after { + color: $c-text-lightest; + font-family: Pictos; + font-size: $fs-s; + padding-top: 1px; + width: 10px; + } + } + + &--settings { + &::after { + content: 'y'; + } + } + + &--note-box { + &::after { + content: 'n'; + } + } + + &--loss { + &::after { + content: 'Q'; + } + } + + &--weight { + &::after { + content: 'V'; + color: $c-text-lightest; + font-family: Pictos; + font-size: $fs-l; + padding-top: 1px; + width: 10px; + transform: rotateZ(-90deg) scaleX(0.75); + } + } + + &--spoiler { + &::after { + content: '&'; + color: $c-text-light; + font-family: Pictos; + font-size: 10px; + height: 100%; + } + + &:checked::after { + content: '_'; + } + } + + &--list-roll { + &:not(:checked) ~ .sheet-repitem__skill-roll { + display: none; + } + } +} + +.sheet-radio-track { + position: relative; + flex-shrink: 0; + background-color: $c-white; + box-shadow: $shadow; + + &::before { + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + color: $c-white; + font-size: 9px; + height: 100%; + width: 100%; + } + + &::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + display: block; + border-radius: inherit; + height: 0; + width: 0; + transform: translate(-50%, -50%); + transition: height .3s ease-in-out, + width .3s ease-in-out, + background-color .1s ease-in-out; + } + + &:hover::after, + &:hover ~ .sheet-radio-track:not(:checked)::after { + background-color: $c-background-hover; + height: 60%; + width: 60%; + } + + &:checked { + &::after, + ~ .sheet-radio-track:not(:checked)::after { + background-color: $c-background-dark; + height: 100%; + width: 100%; + transition-duration: .1s; + } + } +} + +.sheet-tooltip { + pointer-events: none; + position: absolute; + display: flex; + align-items: center; + background-color: $c-background-tooltip; + color: $c-white; + font-size: $fs-s; + line-height: 1; + padding: 2px 6px; + border-radius: 2px; + opacity: 0; + transition: opacity .3s ease-in-out; + + span:not(:last-child) { + margin-right: 2px; + } + + // Arrow + &::after { + content: ''; + position: absolute; + height: 10px; + width: 10px; + } + + &--left { + top: 50%; + left: -6px; + transform: translate(-100%, -50%); + + &::after { + top: 50%; + right: -8px; + border: 5px solid transparent; + border-left-color: $c-background-tooltip; + transform: translateY(-50%); + } + } + + &--top { + top: -6px; + left: 50%; + transform: translate(-50%, -100%); + + &::after { + bottom: -8px; + left: 50%; + border: 5px solid transparent; + border-top-color: $c-background-tooltip; + transform: translateX(-50%); + } + } +} + +.sheet-damage-roll-toggle { + &-label { + display: block; + line-height: 4px; + text-align: center; + padding-right: 10px; + + input[type=checkbox]:checked ~ span { + color: $c-text-light; + font-weight: 500; + } + + .sheet-icon { + display: inline-block; + font-family: Pictos; + font-size: $fs-s; + margin-right: 4px; + } + } + + ~ .repcontainer .sheet-damage-button-overlay { + position: relative; + + button[type=roll] { + position: absolute; + top: 0; + left: 0; + z-index: -1; + display: block; + height: 100%; + width: 100%; + } + } + + &:checked ~ .repcontainer .sheet-damage-button-overlay { + button[type=roll] { + z-index: 1; + } + + input[type=text] { + position: relative; + z-index: 0; + font-weight: 500; + + &:placeholder-shown { + z-index: 2; // Keeps empty input above button + } + } + } +} + +.sheet-label-toggle { + user-select: none; + flex-shrink: 0; + width: auto; + + input[type=text].sheet-label-toggle__input { + background-color: $c-white; + color: $c-text-light; + line-height: 14px; + border: 1px solid $c-background-dark; + border-width: 1px; + border-radius: 0 2px 2px 0; + padding: 0 4px; + margin-left: -2px; + height: 14px; + width: 96px; + + &:first-child { + border-left-width: 2px; + } + + &--tiny { + width: 32px; + } + + &::placeholder{ + line-height: 12px; + } + } + + span { + display: block; + flex-shrink: 0; + background-color: $c-background-dark; + color: $c-white; + font-size: $fs-xs; + font-weight: 500; + line-height: 15px; + border-radius: 2px; + padding: 0 4px; + height: 14px; + } + + &--full-row { + flex-basis: 100%; + + input[type=text].sheet-label-toggle__input { + text-align: left; + width: 100%; + } + } + + input[type=checkbox] { + display: none; + + &:not(:checked) { + + span { + background-color: $c-text-gray; + } + + ~ input[type=text].sheet-label-toggle__input { + color: $c-text-lightest; + border-color: $c-text-gray; + } + } + } +} + +// ############################################################################# +// SETTING TOGGLES +// ############################################################################# + +.sheet-toggle-roboto:checked ~ .sheet-body { + font-family: $f-roboto; +} + +.sheet-toggle-dark-labels:checked ~ .sheet-body { + .sheet-header__labels *, + .sheet-label, + .sheet-hexfield__label { + color: $c-text-light !important; + } +} + +.sheet-toggle-skill-die-numbers:not(:checked) ~ .sheet-body { + .sheet-radio-track::before { + display: none; + } +} + +.sheet-toggle-corners:not(:checked) ~ .sheet-body { + :not(.sheet-icon):not(.sheet-color-cycle__radio) { + border-radius: 0 !important; + + &::before, + &::after { + border-radius: 0 !important; + } + } +} + +.sheet-toggle-transitions:not(:checked) ~ .sheet-body { + *, + ::before, + ::after { + transition-duration: 0s !important; + } +} + +.sheet-toggle-delays:not(:checked) ~ .sheet-body { + *, + ::before, + ::after { + transition-delay: 0s !important; + } +} + +.sheet-toggle-grid:not(:checked) ~ .sheet-body { + background: none; +} + +.sheet-toggle-description-input:not(:checked) ~ .repcontainer { + .sheet-roll-description { + display: none; + } +} + +.sheet-toggle-injection-input:not(:checked) ~ .repcontainer { + .sheet-roll-injection { + display: none; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_header_section.scss b/Savage Worlds - Graph Paper/source/styles/_header_section.scss new file mode 100644 index 0000000000..d0b6c25e68 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_header_section.scss @@ -0,0 +1,9 @@ +.sheet-header-section { + padding-top: 8px; + + .sheet-left { + position: relative; + display: flex; + flex-grow: 1; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_health.scss b/Savage Worlds - Graph Paper/source/styles/_health.scss new file mode 100644 index 0000000000..33a4ba540d --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_health.scss @@ -0,0 +1,284 @@ +$box-size: 24px; +$box-margin: 8px; + +.sheet-health { + position: relative; + display: flex; + align-items: flex-end; + + > .sheet-hex { + order: 2; + } + + .sheet-header__title { + margin-top: 8px; + } + + &:hover { + .sheet-health__icons * { + opacity: 1; + } + } + + &__icons { + display: flex; + + .sheet-icon { + color: $c-text-lightest; + font-size: $fs-s; + line-height: 1; + opacity: 0; + transition: opacity .3s ease-in-out; + transition-delay: .4s; + + &:checked { + color: $c-white; + opacity: 1; + + &::after { + background-color: $c-background-dark; + border: 1px solid $c-background-dark; + } + } + + &:not(:last-child) { + margin-right: 8px; + } + + &::after { + display: flex; + align-items: center; + justify-content: center; + background-color: $c-white; + font-family: Pictos; + border: 1px dotted $c-outline; + border-radius: 50%; + margin: 2px 2px 6px; + height: 20px; + width: 20px; + } + + &--shield::after { + content: 'b'; + } + + &--bug::after { + content: 'i'; + } + + &--fire::after { + content: 'r'; + font-family: 'Pictos Custom'; + } + + &--hit::after { + content: 't'; + font-family: 'Pictos Custom'; + } + + &--lightning::after { + content: 'e'; + } + + &--cancel::after { + content: 'd'; + } + + &--rad::after { + content: 'l'; + } + + &--tools::after { + content: 'x'; + } + + &--ecg::after { + content: 'Y'; + } + } + } + + &__track { + position: relative; + display: flex; + + .sheet-radio-track, + .sheet-reset-button { + border-radius: 2px; + margin-right: $box-margin; + height: $box-size; + width: $box-size; + } + + &:hover .sheet-reset-button:not(:checked), + &:hover .sheet-radio-track-toggle { + opacity: 1; + transition-delay: .4s; + } + + .sheet-reset-button { + position: absolute; + z-index: 2; + opacity: 0; + transition: opacity .3s ease-in-out; + + &::after { + content: '*'; + display: flex; + align-items: center; + justify-content: center; + background-color: $c-background-dark; + color: $c-white; + font-family: Pictos; + line-height: 1; + border-radius: 2px; + height: 100%; + width: 100%; + } + + &:checked { + display: none; + } + } + + .sheet-radio-track-toggle { + position: absolute; + top: 24px; + z-index: 2; + height: 16px; + width: $box-size; + opacity: 0; + transition: opacity .3s ease-in-out; + + &::before, + &::after { + content: ''; + background-color: rgba(0, 0, 0, .1); + height: 4px; + width: 50%; + } + + &::after { + background-color: rgba(0, 0, 0, .05); + } + + &:checked { + flex-direction: row-reverse; + } + + &:checked + input { + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/unskilled_bg.png') repeat; + + &::before, + &::after { + display: none; + } + } + } + } + + &__wounds { + order: 1; + + .sheet-health__track { + flex-direction: row-reverse; + justify-content: flex-end; + } + + .sheet-radio-track--6 { + margin-right: 0; + } + + .sheet-radio-track-toggle { + &--6 { + left: 5 * ($box-size + $box-margin); + } + + &--5 { + left: 4 * ($box-size + $box-margin); + } + + &--4 { + left: 3 * ($box-size + $box-margin); + } + + &--3 { + left: 2 * ($box-size + $box-margin); + } + + &--2 { + left: $box-size + $box-margin; + } + } + } + + &__center { + order: 3; + position: absolute; + left: 185px; + + .sheet-hexfield { + position: absolute; + bottom: 8px; + transform: translateY(100%); + + &--wound-mitigation { + left: 1px; + } + + &--rads { + left: 33px; + } + } + } + + .sheet-hex--64 { + margin: 0 4px; + + &::after { + content: ''; + display: flex; + align-items: center; + justify-content: center; + background: { + image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/skull.png'); + repeat: no-repeat; + size: 32px; + position: center; + } + height: 100%; + width: 100%; + opacity: .15; + } + + &:checked::after { + opacity: .5; + } + } + + &__fatigue { + order: 4; + display: flex; + flex-direction: column; + align-items: flex-end; + + .sheet-reset-button { + right: 0; + margin: 0; + } + + .sheet-radio-track--1 { + margin-right: 0; + } + + .sheet-radio-track-toggle { + &--3 { + right: 2 * ($box-size + $box-margin); + } + + &--2 { + right: $box-size + $box-margin; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_hexagons.scss b/Savage Worlds - Graph Paper/source/styles/_hexagons.scss new file mode 100644 index 0000000000..e75fd8e355 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_hexagons.scss @@ -0,0 +1,50 @@ +.sheet-hex { + position: relative; + display: block; // For attribute spans + background: { + repeat: no-repeat; + position: center; + } + color: $c-text-light; + font-weight: 700; + text-align: center; + padding: 0 6px; + filter: drop-shadow(rgba(0, 0, 0, 0.5) 0px 0px 0.7px); + + &::placeholder { + color: $c-text-gray; + font-size: inherit; + font-weight: inherit; + line-height: inherit; + } + + &--36 { + background: { + image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/hexagon_36.svg'); + } + font-size: $fs-l; + line-height: 36px; + height: 36px !important; // Overwrite Roll20! + width: 36px; + } + + &--48 { + background: { + image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/hexagon_48.svg'); + } + font-size: 16px !important; + line-height: 48px; + height: 48px !important; // Overwrite Roll20! + width: 48px; + } + + &--64 { + background: { + image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/hexagon_64.svg'); + } + font-size: 18px !important; // Overwrite Roll20! + line-height: 64px; + height: 64px !important; // Overwrite Roll20! + width: 64px; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_hexfields.scss b/Savage Worlds - Graph Paper/source/styles/_hexfields.scss new file mode 100644 index 0000000000..416030017a --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_hexfields.scss @@ -0,0 +1,89 @@ +div:not(:hover) > .sheet-hide-until-needed, +div.sheet-health:not(:hover) .sheet-health__center .sheet-hexfield { + > div, + > input { + opacity: 0; + } + + input:hover, + input:focus { + opacity: 1; + + ~ div, + ~ input { + opacity: 1; + } + } +} + +.sheet-hexfield { + position: relative; + white-space: nowrap; + color: $c-text-light; + height: 36px; + width: 36px; + transition: color .3s ease-in-out, opacity .3s ease-in-out; + + div, + input { + transition: color .3s ease-in-out, opacity .3s ease-in-out; + transition-delay: .4s; + } + + &-gray, + &-gray input { + color: $c-text-lightest; + } + + // Nested Hexfields + .sheet-hexfield .sheet-hexfield__label { + color: $c-text-lightest; + } + + &.sheet-stay-on-input { + input:not(:placeholder-shown) { + opacity: 1 !important; + + ~ :not(.sheet-exception) { + color: $c-text-light; + opacity: 1 !important; + } + } + } + + &__label { + position: absolute; + top: 10px; + display: flex; + align-items: center; + justify-content: flex-end; // Left + font-size: 9px !important; // Override Roll20! + font-weight: 500; + line-height: 10px !important; // Override Roll20! + text-transform: uppercase; + height: 16px; + transform: translateX(-100%); // Left + + &--right { + left: 36px; + justify-content: flex-start; + transform: translateX(0); + } + + &--bottom { + top: 38px; + left: 18px; + align-items: flex-start; + justify-content: center; + transform: translateX(-50%); + } + + &--up { + top: -18px; + left: 18px; + align-items: flex-end; + justify-content: center; + transform: translateX(-50%); + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_integrity.scss b/Savage Worlds - Graph Paper/source/styles/_integrity.scss new file mode 100644 index 0000000000..2931d477fe --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_integrity.scss @@ -0,0 +1,118 @@ +.sheet-integrity { + display: flex; + align-items: center; + justify-content: space-between; + + &__status { + width: 320px; + } + + &__progress { + position: relative; + display: flex; + justify-content: flex-end; + background-color: $c-outline; + border-radius: 2px; + height: 8px; + width: 100%; + overflow: hidden; + + &-fill { + background-color: $c-background-dark; + height: 100%; + width: 100%; // Default; will be overwritten! + transition: width .3s ease-in-out; + } + } + + @for $i from 0 through 80 { + &__bar-width[value="#{$i}"] { + & ~ .sheet-integrity__progress-fill { + width: #{$i*4}px; + } + } + } + + &__marker { + position: absolute; + top: 0; + background-color: $c-white; + width: 2px; + height: 10px; + transform: translateX(-50%); + + &--70 { + left: 40px; + } + + &--60 { + left: 80px; + } + + &--50 { + left: 120px; + } + + &--40 { + left: 160px; + } + + &--30 { + left: 200px; + } + + &--20 { + left: 240px; + } + + &--10 { + left: 280px; + } + } + + &__loss-effects { + display: flex; + align-items: center; + justify-content: space-between; + font-size: $fs-s; + margin: 8px 0; + height: 16px; + width: 100%; + + > span { + display: block; + color: $c-text-gray; + font-weight: 500; + white-space: nowrap; + transition: color .3s ease-in-out; + } + + input[type=checkbox]:checked + span { + color: $c-text-light; + } + } + + &__hexfields { + display: flex; + align-items: center; + + .sheet-container { + position: relative; + } + + .sheet-hexfield { + position: absolute; + bottom: -28px; + + &--integrity-maximum { + right: -6px; + transform: translateX(-100%); + } + + &--integrity-mod { + left: -5px; + transform: translateX(100%); + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_inventory.scss b/Savage Worlds - Graph Paper/source/styles/_inventory.scss new file mode 100644 index 0000000000..e3dbd9bce3 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_inventory.scss @@ -0,0 +1,26 @@ +.sheet-inventory { + position: relative; + width: 266px; + + &__amount, + &__weight { + width: 30px; + } + + &__multi { + color: $c-text-lightest; + line-height: 11px; + text-align: center; + width: 8px; + } + + .sheet-repitem__note-box { + width: 268px; + } + + .repcontainer { + &:empty ~ .repcontrol .repcontrol_add::before { + width: 266px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_meta.scss b/Savage Worlds - Graph Paper/source/styles/_meta.scss new file mode 100644 index 0000000000..59716ca4f2 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_meta.scss @@ -0,0 +1,62 @@ +.sheet-meta { + width: 472px; + margin-bottom: 44px; + + .sheet-container { + display: flex; + + &:first-child { + margin-bottom: 4px; + } + } + + .sheet-label { + text-transform: uppercase; + margin-top: 4px; + } + + .sheet-meta-field { + &:not(:last-child) { + margin-right: 8px; + } + + input.sheet-meta-field__input { + color: $c-text-lighter; + font-weight: 500; + line-height: 15px; + text-align: left; + border-bottom: 1px dotted $c-outline; + padding: 0 2px; + height: 16px; + + &--name { + width: 136px; + } + + &--size, + &--exp, + &--level, + &--age, + &--bennies { + width: 40px; + } + + &--height, + &--weight { + width: 64px; + } + + &--eyes, + &--hair, + &--rank, + &--origin, + &--gender { + width: 64px; + } + + &--bits { + width: 64px; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_notebook.scss b/Savage Worlds - Graph Paper/source/styles/_notebook.scss new file mode 100644 index 0000000000..987ef33268 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_notebook.scss @@ -0,0 +1,8 @@ +.sheet-notebook { + padding: 8px 0 0 64px; + + textarea { + @include note-grid; + height: 100%; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_power.scss b/Savage Worlds - Graph Paper/source/styles/_power.scss new file mode 100644 index 0000000000..f954135a5f --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_power.scss @@ -0,0 +1,24 @@ +.sheet-power { + position: relative; + margin-right: -8px; + + .sheet-header__title { + position: absolute; + top: 50%; + left: 0; + transform: translate(-100%, -50%); + } + + .sheet-hexfield { + position: absolute; + bottom: -28px; + + &--power-consumed { + left: -2px; + } + + &--power-maximum { + left: 30px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_powerarmor.scss b/Savage Worlds - Graph Paper/source/styles/_powerarmor.scss new file mode 100644 index 0000000000..cf164ef9c9 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_powerarmor.scss @@ -0,0 +1,17 @@ +.sheet-powerarmors { + &__size, + &__armor, + &__pace, + &__mods, + &__weight, + &__weapons { + width: 45px; + } + + .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/powerarmor_01.png'); + background-size: contain; + margin-top: 4px; + height: 56px; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_powers.scss b/Savage Worlds - Graph Paper/source/styles/_powers.scss new file mode 100644 index 0000000000..2306cd8536 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_powers.scss @@ -0,0 +1,42 @@ +input.sheet-toggle--pp { + &:checked ~ .sheet-powers { + .sheet-a { + display: none; + } + + .sheet-b { + display: inline; + } + } +} + +.sheet-powers { + &__ap, + &__pp, + &__penalty { + width: 40px; + } + + &__duration { + width: 60px; + } + + &__damage, + &__range { + width: 80px; + } + + &__trapping { + width: 64px; + } + + .sheet-b { + display: none; + } + + input.sheet-toggle:not(:checked) { + ~ .sheet-powers__trapping { + display: none; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_quick_notes.scss b/Savage Worlds - Graph Paper/source/styles/_quick_notes.scss new file mode 100644 index 0000000000..c08ef577f9 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_quick_notes.scss @@ -0,0 +1,19 @@ +.sheet-quick-notes { + position: relative; + width: 266px; + + &__content { + padding: 8px 0; + } + + &__content { + textarea { + @include note-grid; + height: 64px; + } + + input[type=checkbox]:checked + textarea { + height: 128px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_repeating.scss b/Savage Worlds - Graph Paper/source/styles/_repeating.scss new file mode 100644 index 0000000000..152d150adf --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_repeating.scss @@ -0,0 +1,359 @@ +.sheet-wildcard { + button.sheet-repitem__skill-roll--extra { + display: none; + } +} + +.sheet-extra { + button.sheet-repitem__skill-roll--wildcard { + display: none; + } +} + +fieldset, +.repcontainer { + padding: 6px 0; + min-height: 32px; +} + +.repcontainer { + &:empty ~ .repcontrol .repcontrol_add::before { + content: '+ + +'; + position: absolute; + top: -27px; + right: -16px; + background-color: $c-background-hover; + color: $c-text-lighter; + font-size: $fs-s; + line-height: 21px; + border-radius: 2px; + height: 20px; + width: 470px; + } +} + +.repitem { + &:not(:first-child) { + margin-top: 4px; + } + + input[type=text]::placeholder { + line-height: 20px; + } +} + +.sheet-repitem { + position: relative; + background-color: $c-item; + border-radius: 2px; + width: 100%; + box-shadow: $shadow; + + &:not(:last-child) { + margin-bottom: 4px; + } + + button.sheet-repitem__skill-roll { + font-family: Pictos; + color: $c-text-light; + font-size: $fs-s; + height: 16px; + line-height: 15px; + margin-right: 4px !important; + } + + &--full-field textarea { + font-size: $fs-s; + line-height: 16px; + padding: 2px 16px 2px 6px; + height: 20px; + } + + &__size-radio { + position: absolute; + right: 0; + top: 2px; + z-index: 1; + + &--1:not(:checked) { + z-index: 2; + } + + &:checked { + z-index: 0; + opacity: 0; + + + input[type=radio] { + z-index: 3; + } + } + + &::after { + content: attr(label); + display: block; + color: $c-text-gray; + font-family: Pictos; + font-size: 10px; + line-height: 15px; + text-align: center; + height: 16px; + width: 16px; + } + + &:hover::after { + color: $c-text-light; + } + } + + &__primary, + &__secondary { + display: flex; + align-items: center; + + > input.sheet-stretch { + flex-grow: 1; + width: auto; + } + } + + &__primary { + position: relative; + padding: 0 16px 0 6px; + height: 20px; + + .sheet-toggle--note-box { + padding-right: 4px; + + &::after { + padding-top: 0; + } + } + } + + &__secondary { + padding-top: 1px; + height: 16px; + + .sheet-toggle:not(:last-of-type) { + margin-right: 4px; + } + + input[type=text]::placeholder { + line-height: 16px; + } + } + + &__secondary, + &__frame { + color: $c-text-light; + font-size: 9px; + margin: 0 6px; + border-top: 1px dotted $c-outline; + + input[type=text] { + color: $c-text-light; + font-size: 9px; + line-height: 16px; + + &::placeholder { + font-size: 9px !important; + } + } + } + + &__frame { + display: flex; + height: 64px; + + &-silhouette { + background: { + repeat: no-repeat; + size: 80%; + position: center; + } + height: 100%; + width: 64px; + opacity: .25; + + &-button { + height: 100% !important; // Overwrite Roll20! + width: 100%; + } + } + + &-build { + flex-grow: 1; + margin-left: 8px; + height: 100%; + + textarea { + padding-top: 6px; + height: 100%; + } + } + } + + &__settings { + position: absolute; + bottom: 2px; + right: -1px; + z-index: 3; + background-color: $c-item; + padding: 4px 6px 0; + border: 1px solid #dbdbdb; + border-radius: 0 0 2px 2px; + border-width: 0 1px 1px; + width: calc(100% + 2px); + transform: translateY(100%); + + &-content { + display: flex; + flex-wrap: wrap; + align-items: center; + border-top: 1px dotted $c-outline; + padding-top: 4px; + margin-top: -2px; + + > label { + margin-bottom: 4px; + } + + > :not(:last-child) { + margin-right: 4px; + } + } + } + + &__label { + font-weight: 500; + margin: 0 4px 0 6px; + line-height: 16px; + + &::after { + content: ':'; + } + } + + &__note-box { + position: absolute; + top: 4px; + right: -1px; + z-index: 3; + background-color: $c-item; + padding: 4px 6px; + border: 1px solid #dbdbdb; + border-radius: 2px 2px 0 0; + border-width: 1px 1px 0 1px; + width: calc(100% + 2px); + transform: translateY(-100%); + + textarea { + border-bottom: 1px dotted $c-outline; + height: 60px; + } + } + + .sheet-toggle--arrow { + &:not(:checked) ~ .sheet-repitem__weapons { + display: none; + } + } + + &__subitem { + position: relative; + + .sheet-repitem__primary, + input[type=text] { + font-size: 9px !important; + line-height: 16px; + height: 16px; + } + + .sheet-repitem__note-box { + top: 2px; + padding: 4px 6px 2px; + } + } + + .sheet-repitem__weapons { + .sheet-repitem__note-box { + right: -7px; + width: calc(100% + 14px); + } + + .sheet-toggle { + &--arrow::after { + line-height: 16px; + margin: 1px 2px 0 0; + height: 16px; + width: 16px; + transform-origin: 7px 8px; + } + + &--note-box::after { + padding-top: 1px; + } + } + } + + &__weapons { + &-control { + &[value='0'] + .sheet-repitem__weapons { + display: none; + } + + @for $i from 1 through 10 { + &[value='#{$i}'] + .sheet-repitem__weapons { + .sheet-repitem__subitem:nth-child(-n + #{$i+1}) { + @extend %show-weapon-row; + } + } + } + } + + %show-weapon-row { + display: block; + } + + .sheet-header { + border-bottom: 1px solid $c-outline; + + &__labels { + padding-right: 30px; + width: 100%; + } + } + + .sheet-repitem__subitem { + display: none; + + &:not(.sheet-repitem__subitem--1) .sheet-repitem__primary { + border-top: 1px solid $c-outline; + } + } + + .sheet-repitem__primary { + margin-right: 6px; + padding-right: 10px; + } + + &-name { + flex-grow: 1; + text-align: left; + padding-left: 6px; + } + + input[type=text].sheet-repitem__weapons-name { + padding-left: 0; + } + + &-damage, + &-range { + width: 85px; + } + + &-rof { + width: 30px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_reset.scss b/Savage Worlds - Graph Paper/source/styles/_reset.scss new file mode 100644 index 0000000000..6759944fdf --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_reset.scss @@ -0,0 +1,160 @@ +.charsheet { + padding: 0 !important; // Override Roll20! +} + +.charsheet button[type=roll] { + text-shadow: none; + font-size: inherit !important; // Override Roll20! + padding: 0 !important; // Override Roll20! + margin: 0 !important; // Override Roll20! + + &::before { + display: none; + } + + &:hover, + &:focus, + &:active { + background-color: transparent; + box-shadow: none; + } +} + +.repcontrol { + position: absolute; + bottom: -1px; + right: 0; + z-index: 2; + display: flex; +} + +.repcontrol button.btn { + position: relative; + color: transparent; + font-size: 0; + height: 16px; + width: 16px; + transition: color .3s ease-in-out, opacity .3s ease-in-out; + + &::after, + &::before { + transition: color .3s ease-in-out, opacity .3s ease-in-out; + } + + &:hover, + &:focus, + &:active { + background-color: transparent; + box-shadow: none; + } + + &::after { + position: absolute; + top: 0; + left: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + color: $c-text-gray; + font-family: Pictos; + font-size: 12px; + line-height: 1; + height: 100%; + width: 100%; + } + + &:hover::after { + color: $c-text-light; + } + + &:active::after { + color: black; + } + + &.repcontrol_add { + order: 1; + + &::after { + content: '&'; + } + } + + &.repcontrol_edit { + order: 2; + float: none; + + &::after { + content: '_'; + } + } +} + +.repcontainer.editmode { + + .repcontrol { + button.repcontrol_edit::after { + content: '3'; + } + } + + .sheet-repitem__note-box, + .sheet-repitem__settings { + display: none; + } + + .itemcontrol { + z-index: 10; + display: flex !important; // Override Roll20! + justify-content: space-between; + background-color: rgba(255, 255, 255, 0.5) !important; // Override Roll20! + border-radius: 2px; + margin: 0 2px; + width: calc(100% - 4px) !important; + + a.repcontrol_move { + order: 1; + font-size: 18px; + border-radius: 2px 0 0 2px; + padding: 0 2px 0 0; + } + + button.repcontrol_del { + order: 2; + float: none !important; // Override Roll20! + font-family: Pictos; + font-size: 12px; + border-radius: 0 2px 2px 0; + padding: 0 0 0 4px; + } + + a.repcontrol_move, + button.repcontrol_del { + display: flex; + align-items: center; + justify-content: center; + background: $c-white; + text-shadow: none; + color: $c-text; + line-height: 1; + border: 0; + height: 100%; + width: 20px; + max-height: 20px; + box-shadow: none; + + &:hover { + color: black !important; + } + + &:active { + color: black !important; + box-shadow: none; + background: $c-white; + } + } + } + + div.repitem:hover .itemcontrol { + background-color: rgba(255, 255, 255, 0.7) !important; // Override Roll20! + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_rolltemplates.scss b/Savage Worlds - Graph Paper/source/styles/_rolltemplates.scss new file mode 100644 index 0000000000..8389ef4a5e --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_rolltemplates.scss @@ -0,0 +1,261 @@ +.sheet-rolltemplate-TraitRoll, +.sheet-rolltemplate-DiceRoller { + // Use .showtip to increase specificity! + // Necessary to override other adjoining classes! + .inlinerollresult.showtip { + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + z-index: -1; + display: block; + background-color: $c-background-die; + height: 100%; + width: 100%; + } + } +} + +.sheet-rolltemplate-TraitRoll, +.sheet-rolltemplate-DiceRoller, +.sheet-rolltemplate-RunRoll, +.sheet-rolltemplate-DamageRoll, +.sheet-rolltemplate-InfoBox { + color: $c-text; + padding-top: 8px; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + + .inlinerollresult.showtip { + position: relative; + z-index: 1; + background-color: transparent; + padding: 0; + border: 0; + } + + .sheet-rolltemplate { + position: relative; + background: { + color: $c-white; + image: linear-gradient(to right, #fbfbfb 1px, transparent 1px), + linear-gradient(to bottom, #fbfbfb 1px, transparent 1px); + size: 8px 8px; + position: -1px -1px; + } + padding: 8px; + border-radius: 2px; + box-shadow: $shadow; + + &__header { + font-size: 12px; + font-weight: bold; + line-height: 16px; + text-align: center; + + &:not(:last-child) { + border-bottom: 1px dotted $c-outline; + padding-bottom: 7px; + } + } + + &__content { + position: relative; + font-size: 11px; + text-align: center; + + &:not(:first-child) { + padding-top: 8px; + } + + &:not(:last-child) { + border-bottom: 1px dotted $c-outline; + padding-bottom: 7px; + } + + span { + font-size: 11px; + } + + span.inlinerollresult { + font-weight: 400; + } + } + + &__content-row { + display: flex; + align-items: center; + line-height: 16px; + + > div { + text-overflow: ellipsis; + overflow: hidden; + } + + > .sheet-left { + font-weight: 500; + text-align: right; + padding-right: 8px; + width: 96px; + min-width: 96px; + } + + > .sheet-right { + text-align: left; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 0 24px 0 8px; + } + } + + &__dice { + display: flex; + align-items: center; + justify-content: center; + font-size: 11px; + + span { + display: block; + font-size: 11px; + line-height: 20px; + } + + .sheet-left { + display: flex; + flex-wrap: wrap; + padding-right: 8px; + } + + .sheet-right { + display: flex; + flex-shrink: 0; + padding: 0 4px; + } + + &--damage { + flex-wrap: wrap; + } + } + + &__roll { + flex-shrink: 0; + text-align: center; + border-radius: 2px; + min-width: 20px; + margin-top: 8px; + overflow: hidden; + box-shadow: $shadow; + + &:not(:last-child) { + margin-right: 8px; + } + + // [original-title*='"basicdiceroll"'] watches for exploding dice! + // This only occurs if there is no fullcrit and/or critfail! + span:not([original-title*='"basicdiceroll"']).fullcrit { + &::before { + background-color: $c-outline; + } + } + + span:not([original-title*='"basicdiceroll"']).fullfail { + color: $c-white; + + &::before { + background-color: $c-red; + } + } + + &--wd { + height: 20px; + transform: rotateZ(45deg); + + &:not(:last-child) { + margin-right: 16px; + } + + span { + transform: rotateZ(-45deg); + + &::before { + transform: rotateZ(45deg); + } + } + } + } + + &__reroll { + position: absolute; + top: 2px; + right: -4px; + font-family: Pictos; + border: 4px solid $c-white; + } + + &__roll-damage { + position: absolute; + top: 26px; + right: -4px; + font-family: 'Pictos Custom'; + border: 4px solid $c-white; + } + + &__button a { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: center; + background-color: $c-item; + color: $c-text-lightest; + font-size: $fs-s; + font-weight: 500; + line-height: 9px; + border: 1px dotted $c-outline; + border-radius: 2px; + padding: 0 4px; + height: 20px; + min-width: 20px; + + &:hover { + background-color: $c-background-dark; + color: $c-white !important; + border: 1px solid $c-background-dark; + } + } + } +} + +.sheet-rolltemplate-TraitRoll, +.sheet-rolltemplate-DamageRoll { + .sheet-rolltemplate { + &__description { + color: $c-text-light; + font-size: 9px; + font-style: italic; + line-height: 16px; + text-align: center; + padding: 8px 0 7px; + border-bottom: 1px dotted $c-outline; + } + } +} + +.sheet-rolltemplate-DamageRoll { + .sheet-rolltemplate { + &__damage-roll { + padding-right: 8px; + margin: 8px 0 0 8px; + + &:not(:last-child) { + border-right: 1px dotted $c-outline; + } + + span { + font-size: 16px; + line-height: 24px; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_secondary.scss b/Savage Worlds - Graph Paper/source/styles/_secondary.scss new file mode 100644 index 0000000000..b4a8cec944 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_secondary.scss @@ -0,0 +1,35 @@ +.sheet-secondary { + display: flex; + padding-right: 80px; + + > :not(:last-child) { + margin-right: 24px; + } + + .sheet-hexfield { + &--run { + top: -100px; + left: -16px; + } + + &--flight { + top: -64px; + left: 16px; + } + + &--soak-mod { + top: -36px; + left: 32px; + } + + &--soak-wd { + top: -72px; + left: 64px; + } + } + + .sheet-hexfield--soak > button[type=roll] { + color: $c-text-light; + font-weight: 700; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_sections.scss b/Savage Worlds - Graph Paper/source/styles/_sections.scss new file mode 100644 index 0000000000..0c497a41dd --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_sections.scss @@ -0,0 +1,95 @@ +.sheet-sans { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: flex-start; +} + +.sheet-section > .sheet-right:not(.sheet-sans) { + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.sheet-section--footer > .sheet-right { + padding-top: 32px; +} + +.sheet-section--traits { + position: relative; + display: flex; + align-items: center; + justify-content: center; + margin-left: 24px; + height: 400px; +} + +.sheet-attributes { + position: absolute; + top: 0; + left: 0; + z-index: 2; + + .sheet-attribute { + position: absolute; + + &--agility { + top: 0; + left: 32px; + } + + &--smarts { + top: 80px; + left: 16px; + } + + &--spirit { + top: 160px; + left: 0; + } + + &--strength { + top: 240px; + left: 16px; + } + + &--vigor { + top: 320px; + left: 32px; + } + } +} + +.sheet-armor { + position: absolute; + right: 0; + top: 22px; +} + +.sheet-silhouette { + position: absolute; + top: 0; + left: 100px; +} + +.sheet-secondary { + position: absolute; + bottom: 23px; + right: 0; + z-index: 2; +} + +.sheet-section--features { + display: flex; + align-items: flex-start; + flex-grow: 1; + min-height: 176px; + padding: 24px 0 8px; +} + +.sheet-section--resources { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-bottom: 32px; +} diff --git a/Savage Worlds - Graph Paper/source/styles/_settings.scss b/Savage Worlds - Graph Paper/source/styles/_settings.scss new file mode 100644 index 0000000000..e92a2c6e32 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_settings.scss @@ -0,0 +1,192 @@ +.sheet-settings { + text-align: center; + padding: 8px 0 0 64px; + + &__page { + display: flex; + flex-direction: column; + align-items: flex-end; + text-align: left; + + &-tab { + display: inline-block; + color: $c-text-lightest; + margin-bottom: 7px; + + &::before, + &::after { + display: inline-block; + font-size: $fs-s; + font-weight: 500; + line-height: 15px; + height: 16px; + } + + &::before { + content: attr(label); + } + + &:not(:last-of-type)::after { + content: '|'; + margin: 0 2px 0 4px; + } + + &:checked::before { + color: $c-text-lighter; + } + + &--styles { + &:not(:checked) ~ .sheet-settings__page--styles { + @extend %hide-disabled-settings-tab; + } + } + + &--setup { + &:not(:checked) ~ .sheet-settings__page--setup { + @extend %hide-disabled-settings-tab; + } + } + + &--blocks { + &:not(:checked) ~ .sheet-settings__page--blocks { + @extend %hide-disabled-settings-tab; + } + } + + &--skills { + &:not(:checked) ~ .sheet-settings__page--skills { + @extend %hide-disabled-settings-tab; + } + } + + &--help { + &:not(:checked) ~ .sheet-settings__page--help { + @extend %hide-disabled-settings-tab; + } + } + } + } + + %hide-disabled-settings-tab { + display: none; + } + + &__textarea-toggle { + &:not(:checked) + textarea { + display: none; + } + } + + &__item { + user-select: none; + display: flex; + align-items: center; + width: 100%; + min-height: 16px; + + &:not(:last-child) { + margin-bottom: 8px; + } + + > span:first-of-type { + display: block; + flex-grow: 1; + color: $c-text-light; + font-size: $fs-s; + font-weight: 500; + line-height: 15px; + border-bottom: 1px dotted $c-outline; + margin-right: 12px; + height: 100%; + } + + .sheet-checkbox { + margin-right: 4px; + } + + &--text-input { + > span:first-of-type { + flex-grow: 0; + flex-shrink: 0; + margin-right: 0; + + ~ input[type=text] { + padding-left: 5px; + } + } + + input[type=text] { + flex-grow: 1; + color: $c-text-light; + line-height: 15px; + border-bottom: 1px dotted $c-outline; + margin-right: 12px; + height: 16px; + width: auto; + + &::placeholder { + font-size: $fs-s; + } + + &:last-child { + margin-right: 26px; + } + + + span:last-of-type { + display: block; + flex-shrink: 0; + color: $c-text-lighter; + font-family: Pictos; + font-size: 11px; + margin: 0 4px 0 1px; + height: 16px; + width: 9px; + } + } + } + + &--textarea { + flex-wrap: wrap; + + textarea { + flex-basis: 100%; + background-color: $c-white; + font-size: $fs-s; + line-height: 16px; + padding: 4px; + border: 1px solid $c-outline; + border-radius: 2px; + height: 64px; + margin: 8px 4px 0 0; + transition: border-color .3s ease-in-out, + height .3s ease-in-out; + + &:hover { + border-color: $c-background-dark; + } + + &:focus { + border-color: $c-background-dark; + height: 192px; + } + } + } + + &--help { + flex-wrap: wrap; + height: auto; + + > span:first-of-type { + margin-right: 8px; + } + + .sheet-bottom { + user-select: text; + flex-basis: 100%; + text-align: justify; + line-height: 1.6; + padding: 4px 0; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_silhouette.scss b/Savage Worlds - Graph Paper/source/styles/_silhouette.scss new file mode 100644 index 0000000000..fce7b4e740 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_silhouette.scss @@ -0,0 +1,178 @@ +.sheet-toggle-silhouette-markers:not(:checked) { + + .sheet-silhouette .sheet-color-cycle { + display: none; + } +} + +.sheet-silhouette { + position: relative; + z-index: 1; + height: 300px; + width: 200px; + + &__image { + background: { + image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/female_silhouette.png'); + repeat: no-repeat; + size: contain; + } + height: 100%; + width: 100%; + + &:hover ~ .sheet-color-cycle :checked { + opacity: 1; + transition-delay: 0.4s; + } + } + + .sheet-color-cycle { + position: absolute; + transform: translateX(-50%); + + &:hover :checked { + opacity: 1; + } + + &__radio { + border: 2px solid $c-white; + opacity: 0; + transition: opacity .3s ease-in-out; + + &:not(.sheet-color-cycle__radio--none):checked { + opacity: 1; + } + + &--none { + background-color: #d9d9d9 !important; + } + } + } + + &__head { + top: 26px; + left: 99px; + } + + &__torso-upper { + top: 64px; + left: 99px; + } + + &__torso-lower { + top: 100px; + left: 99px; + } + + &__left-arm-upper { + top: 70px; + left: 128px; + } + + &__left-arm-lower { + top: 109px; + left: 138px; + } + + &__left-hand { + top: 134px; + left: 142px; + } + + &__right-arm-upper { + top: 70px; + left: 69px; + } + + &__right-arm-lower { + top: 109px; + left: 59px; + } + + &__right-hand { + top: 134px; + left: 55px; + } + + &__left-leg-upper { + top: 160px; + left: 125px; + } + + &__left-leg-lower { + top: 230px; + left: 129px; + } + + &__right-leg-upper { + top: 160px; + left: 72px; + } + + &__right-leg-lower { + top: 230px; + left: 68px; + } + + &__switch { + position: absolute; + bottom: 12px; + left: 50%; + z-index: 3; + + &::after { + content: '[ ]'; + display: block; + color: $c-text-gray; + font-family: Pictos; + font-size: 8px; + transform: translateX(-50%); + } + + &:checked + .sheet-silhouette__image { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/male_silhouette.png'); + } + + // Marker position overwrites + &:checked ~ .sheet-silhouette { + &__left-arm-upper { + top: 70px; + left: 141px; + } + + &__left-arm-lower { + top: 105px; + left: 150px; + } + + &__left-hand { + top: 143px; + left: 147px; + } + + &__right-arm-upper { + top: 70px; + left: 56px; + } + + &__right-arm-lower { + top: 105px; + left: 47px; + } + + &__right-hand { + top: 143px; + left: 50px; + } + + &__left-leg-upper { + top: 172px; + left: 126px; + } + + &__right-leg-upper { + top: 172px; + left: 71px; + } + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_simple_trait.scss b/Savage Worlds - Graph Paper/source/styles/_simple_trait.scss new file mode 100644 index 0000000000..4b6a6724e8 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_simple_trait.scss @@ -0,0 +1,133 @@ +$container-height: 24px; + +.sheet-simple-trait { + position: relative; + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + font-size: 11px; + line-height: $container-height; + padding-right: 6px; + border-radius: 2px; + height: $container-height; + min-width: 66px; + + span { + color: $c-text; + } + + .sheet-background { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + } + + &__expand { + position: absolute; + top: 0; + left: 0; + z-index: 2; + border: 1px solid transparent; + border-radius: 2px; + height: 100% !important; // Override Roll20! + width: 100%; + transition: border .3s ease-in-out; + + &:hover, + &:checked { + border-color: $c-outline; + } + + &:checked ~ .sheet-simple-trait__inputs { + display: flex; + background-color: $c-white; + } + + &:checked ~ .sheet-background { + background-color: $c-white; + } + } + + button[type=roll].sheet-simple-trait__roll { + padding-left: 6px !important; + } + + &__roll { + position: relative; + z-index: 3; + font-size: 11px; + font-weight: 500; + line-height: $container-height; + + &:hover + .sheet-simple-trait__buttons { + pointer-events: all; + opacity: 1; + transition-delay: .7s; + } + } + + &__custom-roll { + color: $c-text-light; + font-size: 10px; + font-weight: 500; + line-height: 16px; + + &:not(:last-child) { + margin-right: 4px !important; + } + } + + &__buttons { + pointer-events: none; + position: absolute; + left: 0; + top: 0; + z-index: 4; + display: flex; + background-color: $c-white; + padding: 0 4px; + border-radius: 2px; + height: 16px; + transform: translateY(-100%); + opacity: 0; + box-shadow: $shadow; + transition: opacity .3s ease-in-out; + + &:hover { + pointer-events: all; + opacity: 1; + transition-delay: .7s; + } + } + + &__label { + position: relative; + z-index: 1; + font-weight: 500; + margin-left: 8px; + } + + &__inputs { + position: absolute; + bottom: 1px; + left: 0; + z-index: 4; + display: none; + background-color: $c-white; + border: 1px solid $c-outline; + border-width: 0 1px 1px 1px; + border-radius: 0 0 2px 2px; + padding: 0 6px; + width: 100%; + transform: translateY(100%); + + > input[type=text] { + text-align: center; + border-top: 1px dotted $c-outline; + width: 33.3%; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_skills.scss b/Savage Worlds - Graph Paper/source/styles/_skills.scss new file mode 100644 index 0000000000..732545ab0a --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_skills.scss @@ -0,0 +1,207 @@ +.sheet-toggle-skill-markers:not(:checked) { + + .sheet-skills .sheet-color-cycle { + display: none; + } +} + +.sheet-skills { + position: relative; + padding-top: 8px; + + &__lock { + &::after { + position: absolute; + top: 10px; + right: 0; + display: flex; + align-items: center; + justify-content: center; + color: $c-text-lightest; + font-family: Pictos; + font-size: 8px; + height: 16px; + width: 16px; + } + + &:not(:checked) { + &::after { + content: ')'; + } + + + .sheet-skills__wrapper { + .sheet-skills__step-button { + display: none; + } + } + } + + &:checked::after { + content: '('; + } + + &:checked ~ .sheet-skills__wrapper .sheet-skills__track { + input { + cursor: default; + pointer-events: none; + } + } + } + + .sheet-header { + justify-content: flex-end; + border: none; + } + + &__die { + width: 18px; + + &:not(.sheet-a) { + margin-right: 3px; + } + } + + &__mod, + &__wd { + width: 24px; + } + + &__mod { + margin-right: 3px; + } + + &__plus { + color: $c-text-gray; + font-size: $fs-l; + line-height: 1; + text-align: center; + width: 18px; + } + + &__color-marker { + width: 16px; + + .sheet-color-cycle__radio { + padding: 3px; + border: 1px solid transparent; + + &--none { + border-color: $c-outline; + } + } + } + + &__skill { + display: flex; + flex-direction: row-reverse; + align-items: center; + justify-content: flex-start; + height: 16px; + + &:not(:last-child) { + margin-bottom: 8px; + } + + input[type=text].sheet-skills__mod, + input[type=text].sheet-skills__wd { + background-color: $c-white; + font-size: 9px !important; + height: 14px; + box-shadow: $shadow; + + &::placeholder { + line-height: 14px; + } + + &:not(:placeholder-shown) { + background-color: $c-background-dark; + color: $c-white; + } + } + + .sheet-skills__mod { + border-radius: 2px 0 0 2px; + } + + .sheet-skills__wd { + border-radius: 0 2px 2px 0; + } + } + + &__track { + display: flex; + flex-direction: row-reverse; + } + + input[type=radio].sheet-radio-track { + height: 14px; + width: 18px; + + &:not(:first-of-type) { + margin-right: 3px; + } + + &:not(.sheet-d4-2):checked::before{ + content: attr(label); + } + + &.sheet-d12 { + border-radius: 0 2px 2px 0; + } + + &.sheet-d4-2 { + border-radius: 2px 0 0 2px; + + &:checked { + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/unskilled_bg.png') repeat; + + &::after { + background-color: transparent; + } + + ~ button > span { + color: $c-text-lightest; // Untrained skill + } + } + } + } + + button[type=roll] { + .sheet-tooltip { + z-index: 10; + white-space: nowrap; + + &--left { + text-transform: uppercase; + } + } + + &:hover .sheet-tooltip { + opacity: 1; + transition-delay: .4s; + } + } + + button[type=roll].sheet-skills__step-button { + position: relative; + margin-right: -18px !important; + height: 14px; + width: 18px; + } + + &__button { + position: relative; + align-items: center; + color: $c-text-light; + font-size: $fs-s; + font-weight: 500; + line-height: 1; + + > span { + display: block; + padding: 1px 8px 1px 0; + max-width: 88px; + overflow: hidden; + text-overflow: ellipsis; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_tabs.scss b/Savage Worlds - Graph Paper/source/styles/_tabs.scss new file mode 100644 index 0000000000..eade2317b6 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_tabs.scss @@ -0,0 +1,81 @@ +.sheet-san-tabs { + position: absolute; + top: 0; + right: 0; + border-bottom: 1px dotted $c-outline; + height: 16px; + width: 266px; + + ~ div { + flex-basis: 100%; + } +} + +.sheet-tab { + ~ div { + min-height: 100%; + } + + &::after { + content: attr(label); + position: relative; + z-index: 1; + display: block; + align-items: center; + justify-content: center; + color: $c-text-lightest; + font-size: $fs-s; + font-weight: 500; + line-height: 1; + padding: 3px 6px 0; + border: 1px dotted transparent; + border-width: 1px 1px 0 1px; + border-radius: 2px; + height: 16px; + transition: none; + } + + &:hover::after { + color: $c-text-lighter; + } + + &:checked::after { + background-color: $c-white; + color: $c-text-light; + border-color: $c-outline; + } + + &--skills { + margin-left: 72px; + + &:not(:checked) ~ .sheet-skills { + @extend %hide-disabled-tab; + } + } + + &--advancements { + &:not(:checked) ~ .sheet-advancements { + @extend %hide-disabled-tab; + } + } + + &--notebook { + &:not(:checked) ~ .sheet-notebook { + @extend %hide-disabled-tab; + } + + ~ .sheet-notebook { + height: calc(100% - 64px); + } + } + + &--settings { + &:not(:checked) ~ .sheet-settings { + @extend %hide-disabled-tab; + } + } +} + +%hide-disabled-tab { + display: none; +} diff --git a/Savage Worlds - Graph Paper/source/styles/_trait_section.scss b/Savage Worlds - Graph Paper/source/styles/_trait_section.scss new file mode 100644 index 0000000000..1b6934d1ef --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_trait_section.scss @@ -0,0 +1,218 @@ +.sheet-trait-section { + > .sheet-left { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + width: 470px; + } + + .sheet-section-container--center-top { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding-bottom: 112px; + width: 100%; + } + + .sheet-section-container--center-bottom { + position: relative; + display: flex; + align-items: center; + padding: 24px 0 32px 0; + width: 100%; + height: 100%; + } + + .sheet-section-container--bottom { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 0 32px; + width: 100%; + } +} + +.sheet-silhouette { + margin-left: -50px; +} + +.sheet-secondary-block { + position: absolute; + left: 166px; + top: 350px; + z-index: 2; + display: flex; + align-items: center; + transform: translateY(-50%); + + > *:not(:last-child) { + margin-right: 23px; + } + + .sheet-hexfield { + &:hover .sheet-hexfield * { + opacity: 1 !important; + transition-delay: 0.4s; + } + + .sheet-hexfield { + > * { + opacity: 0; + } + + .sheet-hexfield__trait-field { + &:focus { + opacity: 1; + + & ~ * { + opacity: 1; + } + } + } + + .sheet-hexfield__label { + opacity: 0; + } + } + + .sheet-hexfield--flight { + top: -28px; + left: 16px; + + .sheet-hexfield__trait-field:not(:placeholder-shown) { + opacity: 1; + + & ~ * { + opacity: 1; + color: $c-text-light; + } + } + } + + .sheet-hexfield--running, + .sheet-hexfield--soak-bonus { + .sheet-hexfield__trait-field:not(:placeholder-shown) { + opacity: 1; + + & + .sheet-hexfield__hexagon { + opacity: 1; + } + } + } + + .sheet-hexfield--running { + top: -64px; + left: -17px; + } + + .sheet-hexfield--soak-bonus { + top: 0; + left: 33px; + } + + .sheet-hexfield--soak-wd { + top: -36px; + left: 66px; + + .sheet-hexfield__trait-field { + color: $c-text-gray; + } + } + } +} + +.sheet-armor-block { + position: absolute; + right: -25px; + top: 20px; + z-index: 1; + display: flex; + flex-direction: column; + align-items: flex-end; + transform: translateX(-100px); + + > *:not(:last-child) { + margin-bottom: 40px; + } + + .sheet-hexfield--armor { + &-head { + margin-right: 16px; + } + + &-legs { + margin-right: 16px; + } + } + + .sheet-textarea { + position: absolute; + top: 8px; + left: 37px; + color: $c-text-lighter; + font-size: 9px; + line-height: 1.5; + padding-top: 4px; + height: 56px; + width: 105px; + resize: none; + + &::placeholder { + color: #f0f0f0; + font-size: 22px; + font-weight: 700; + line-height: 0.5; + } + } + + .sheet-armor-decoration { + position: absolute; + top: 15px; + right: 16px; + opacity: .08 !important; + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/armor_line.png') no-repeat; + height: 316px; + width: 82px; + } + + .sheet-armor-pointer { + position: absolute; + transform: translateX(-100%); + opacity: .08 !important; + + &--head { + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/head_line.png') no-repeat; + top: 17px; + right: -48px; + height: 3px; + width: 111px; + } + + &--torso { + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/torso_line.png') no-repeat; + top: -17px; + right: -42px; + height: 38px; + width: 110px; + } + + &--arms { + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/arms_line.png') no-repeat; + top: -46px; + right: -13px; + height: 66px; + width: 78px; + } + + &--legs { + background: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/legs_line.png') no-repeat; + top: -31px; + right: -15px; + height: 53px; + width: 76px; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_translation_overrides.scss b/Savage Worlds - Graph Paper/source/styles/_translation_overrides.scss new file mode 100644 index 0000000000..889a00c19d --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_translation_overrides.scss @@ -0,0 +1 @@ +// Put overrides for translations (width, size, etc.) here. diff --git a/Savage Worlds - Graph Paper/source/styles/_variables.scss b/Savage Worlds - Graph Paper/source/styles/_variables.scss new file mode 100644 index 0000000000..248a0a9189 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_variables.scss @@ -0,0 +1,49 @@ +// FONTS +$f-roboto: Roboto, Arial, Helvetica, sans-serif; + +// FONT SIZES (Overwrite Roll20!) +$fs-l: 12px; +$fs-s: 10px; +$fs-xs: 8px; + +// COLORS +$c-text: #404040; +$c-text-light: #606060; +$c-text-lighter: #808080; +$c-text-lightest: #b0b0b0; +$c-text-gray: #d6d6d6; +$c-text-hover: #303030; + +$c-outline: #e0e0e0; +$c-item: #fdfdfd; +$c-background-die: #fafafa; +$c-background-dark: #898989; +$c-background-hover: #f2f2f2; +$c-background-tooltip: #606060; + +$c-white: #fff; +$c-red: #d9534f; +$c-dark-red: #923836; +$c-yellow: #f0ad4e; +$c-blue: #0275d8; +$c-green: #5cb85c; +$c-purple: #b25afd; +$c-gray: #545454; + +// SHADOWS +$shadow: 0 0 1.5px 0 rgba(0, 0, 0, 0.5); + +@mixin note-grid { + background: { + image: linear-gradient(to right, #f6f6f6 1px, transparent 1px), + linear-gradient(to bottom, #f6f6f6 1px, transparent 1px); + size: 16px 16px; + position: 4px -1px; + color: $c-white; + } + color: $c-text-light; + font-size: $fs-s; + line-height: 16px; + padding: 0 8px; + resize: none; +} diff --git a/Savage Worlds - Graph Paper/source/styles/_vehicles.scss b/Savage Worlds - Graph Paper/source/styles/_vehicles.scss new file mode 100644 index 0000000000..99ba2f8a55 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_vehicles.scss @@ -0,0 +1,80 @@ +.sheet-vehicles { + &__size, + &__handling, + &__speed, + &__toughness, + &__crew, + &__weapons { + width: 45px; + } + + .sheet-repitem__frame-silhouette-control { + &[value='0'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_01.png'); + } + + &[value='1'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_02.png'); + } + + &[value='2'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_03.png'); + } + + &[value='3'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/car_04.png'); + } + + &[value='4'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/sports-bike.png'); + } + + &[value='5'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/quad-bike.png'); + } + + &[value='6'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/tank.png'); + } + + &[value='7'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/aircraft_01.png'); + } + + &[value='8'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/aircraft_02.png'); + } + + &[value='9'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/aircraft_03.png'); + } + + &[value='10'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/watercraft_01.png'); + } + + &[value='11'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/watercraft_02.png'); + } + + &[value='12'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/watercraft_03.png'); + } + + &[value='13'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_01.png'); + } + + &[value='14'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_02.png'); + } + + &[value='15'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_03.png'); + } + + &[value='16'] ~ .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/spacecraft_04.png'); + } + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_walkers.scss b/Savage Worlds - Graph Paper/source/styles/_walkers.scss new file mode 100644 index 0000000000..2a47587084 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_walkers.scss @@ -0,0 +1,24 @@ +.sheet-walkers { + &__size, + &__pace, + &__crew { + width: 35px; + } + + &__strength { + width: 60px; + } + + &__toughness, + &__mods, + &__weapons { + width: 45px; + } + + .sheet-repitem__frame-silhouette { + background-image: url('https://raw.githubusercontent.com/Tetrakern/roll20-character-sheets/master/Savage%20Worlds%20-%20Graph%20Paper/img/walker.png'); + background-size: contain; + margin-top: 4px; + height: 56px; + } +} diff --git a/Savage Worlds - Graph Paper/source/styles/_weapons.scss b/Savage Worlds - Graph Paper/source/styles/_weapons.scss new file mode 100644 index 0000000000..f0416d55ee --- /dev/null +++ b/Savage Worlds - Graph Paper/source/styles/_weapons.scss @@ -0,0 +1,37 @@ +.sheet-weapons { + margin-top: 32px; + + &__damage, + &__range { + width: 80px; + } + + &__ap, + &__rof, + &__weight { + width: 30px; + } + + &__shots { + width: 40px; + } + + &__trapping { + width: 64px; + } + + &__damage-button { + position: absolute; + top: 0; + left: 164px; + display: none; + height: 20px; + width: 80px; + } + + input.sheet-toggle:not(:checked) { + ~ .sheet-weapons__trapping { + display: none; + } + } +} diff --git a/Savage Worlds - Graph Paper/source/templates/SavageWorldsGraphPaper.pug b/Savage Worlds - Graph Paper/source/templates/SavageWorldsGraphPaper.pug new file mode 100644 index 0000000000..ccc54b5f00 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/SavageWorldsGraphPaper.pug @@ -0,0 +1,4 @@ +script(type="text/worker") + include ../scripts/workers.js + +include _sheet.pug diff --git a/Savage Worlds - Graph Paper/source/templates/_abilities.pug b/Savage Worlds - Graph Paper/source/templates/_abilities.pug new file mode 100644 index 0000000000..e548759dcf --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_abilities.pug @@ -0,0 +1,41 @@ +input(type='checkbox', + name='attr_toggle_abilities_block', + checked=false, + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-abilities + .sheet-header + span.sheet-header__title.sheet-apparel__name(name='attr_rename_block_abilities', data-i18n='abilities') Abilities + + input(type='checkbox', + name='attr_abilities_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_abilities + .sheet-repitem.sheet-repitem--full-field + input(type='radio', + name='attr_ability_size', + value='1', + label='}', + data-i18n-label='}', + class='sheet-repitem__size-radio sheet-repitem__size-radio--1') + + - var i = 1 + + while i < 6 + - ++i + + input(type='radio', + name='attr_ability_size', + value=`${i}`, + label='}', + data-i18n-label='}', + class='sheet-repitem__size-radio') + + textarea(name='attr_ability', + placeholder='Ability: Description', + data-i18n-placeholder='ability-placeholder', + spellcheck='false') + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_advancements.pug b/Savage Worlds - Graph Paper/source/templates/_advancements.pug new file mode 100644 index 0000000000..36d7f4e317 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_advancements.pug @@ -0,0 +1,34 @@ +- + const levelRanks = [['N', 'Novice'], ['S', 'Seasoned'], ['V', 'Veteran'], + ['H', 'Heroic'], ['L', 'Legendary']] + +.sheet-advancements + - var i = 0, j = 2, r = 0 + + while i < 5 + - ++i + .sheet-advancements__item + input(type='text', + name=`attr_chargen_edge_${i}`, + placeholder='Novice', + data-i18n-placeholder='advancements-novice-placeholder', + spellcheck='false', + class='sheet-align-left') + + while i < 27 + .sheet-advancements__item + .sheet-advancements__rank + span(data-i18n=`advancements-rank-${levelRanks[r][0].toLowerCase()}`)= levelRanks[r][0] + - ++i + + input(type='text', + name=`attr_advancement_${(i - 5)}`, + placeholder=levelRanks[r][1], + data-i18n-placeholder=`advancements-${levelRanks[r][1].toLowerCase()}-placeholder`, + spellcheck='false', + class='sheet-align-left') + + if j % 4 == 0 && r < 4 + - ++r + + - ++j diff --git a/Savage Worlds - Graph Paper/source/templates/_allies.pug b/Savage Worlds - Graph Paper/source/templates/_allies.pug new file mode 100644 index 0000000000..dcd1951072 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_allies.pug @@ -0,0 +1,118 @@ +input(type='checkbox', + name='attr_toggle_allies_block', + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-allies + .sheet-header + span.sheet-header__title.sheet-allies__name(name='attr_rename_block_allies', data-i18n='allies') Allies + .sheet-header__labels + .sheet-allies__pace(data-i18n='pace') Pace + .sheet-allies__parry(data-i18n='parry') Parry + .sheet-allies__toughness(data-i18n='toughness') Tough. + .sheet-allies__size(data-i18n='size') Size + .sheet-allies__exp(data-i18n='exp') EXP + .sheet-allies__level(data-i18n='level') Level + + input(type='checkbox', + name='attr_allies_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_allies + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_ally_name', + placeholder='Name', + data-i18n-placeholder='allies-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-allies__name sheet-stretch') + + input(type='text', + name='attr_ally_pace', + placeholder='6', + spellcheck='false', + class='sheet-allies__pace') + + input(type='text', + name='attr_ally_parry', + placeholder='4', + spellcheck='false', + class='sheet-allies__parry') + + input(type='text', + name='attr_ally_toughness', + placeholder='4', + spellcheck='false', + class='sheet-allies__toughness') + + input(type='text', + name='attr_ally_size', + placeholder='0', + spellcheck='false', + class='sheet-allies__size') + + input(type='text', + name='attr_ally_exp', + placeholder='0', + spellcheck='false', + class='sheet-allies__exp') + + input(type='text', + name='attr_ally_level', + placeholder='1', + spellcheck='false', + class='sheet-allies__level') + + input(type='checkbox', + name='attr_ally_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_ally_note_box', + placeholder='Notes', + data-i18n-placeholder='allies-note-box-placeholder', + spellcheck='false') + + input(type='checkbox', + name='attr_ally_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + .sheet-left + - var rolls = ['2', '4', '6', '8', '10', '12'] + - var i = 0 + + while i < 6 + - var die = rolls[i] == 2 ? 'd4!cs2-2' : `d${rolls[i]}!cs2` + + button(type='roll', + name=`roll_ally_roll_${die.replace('!cs2', '')}`, + value!=`&{template:TraitRoll} {{header=[^{ally}] @{ally_name} ^{rolls}: ${die.replace('!cs2', '')}}} {{commander=@{name}}} {{rof=[[ ?{@{query_rate_of_fire}|1} ]]}} {{modifier=?{@{query_modifier}|0}}} {{wd=?{@{query_wild_die}|@{none},-10000|d4|d6|d8|d10|d12}}} ${maxRof.map(n => `{{traitroll${n}=[[ ${die} + ?{@{query_modifier}|0} ]]}}`).join(' ')} {{wdroll=[[ ?{@{query_wild_die}|@{none},-10000|d4|d6|d8|d10|d12}!cs2 + ?{@{query_modifier}|0} ]]}} {{reroll=[r](~repeating_allies_ally_roll_${die.replace('!cs2', '')})}}`) + span(data-i18n=`die-button-number-${rolls[i]}`)= rolls[i] + + - ++i + + .sheet-allies__health-field.sheet-allies__health-field--wounds + input(type='text', + name='attr_ally_note_wounds', + spellcheck='false') + + .sheet-allies__health-field.sheet-allies__health-field--fatigue + input(type='text', + name='attr_ally_note_fatigue', + spellcheck='false') + + .sheet-right + - var i = 0 + + while i < 20 + - ++i + input(type='text', + name=`attr_ally_note_field_${i}`, + placeholder=`Note #${i}`, + data-i18n-placeholder=`allies-note-field-${i}-placeholder`, + spellcheck='false', + class=`sheet-allies__note-field sheet-allies__note-field--${i}`) + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_ammunition.pug b/Savage Worlds - Graph Paper/source/templates/_ammunition.pug new file mode 100644 index 0000000000..12940da8b6 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_ammunition.pug @@ -0,0 +1,42 @@ +input(type='checkbox', + name='attr_toggle_ammunition_block', + checked=true, + class='sheet-hidden sheet-toggle sheet-toggle-block') + +.sheet-ammunition + .sheet-header + span.sheet-header__title(name='attr_rename_block_ammunition', data-i18n='ammunition') Ammunition + + input(type='checkbox', + name='attr_ammunition_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + .sheet-ammunition__content + - var i = 0 + + while i < 3 + - ++i + + .sheet-ammunition__container.sheet-ammunition__container--1 + input(type='radio', name='attr_ammunition_select', value=`ammunition_container_${i}`, checked= i==1) + span(name=`attr_ammunition_container_${i}_max`) 0 + input(type='text', name=`attr_ammunition_container_${i}`) + span(name=`attr_rename_ammunition_container_${i}`)= `Ammo #${i}` + + .sheet-ammunition__buttons + .sheet-top + button(type='action' name='act_ammunition_+1') +1 + button(type='action' name='act_ammunition_+3') +3 + button(type='action' name='act_ammunition_+5') +5 + button(type='action' name='act_ammunition_+10') +10 + button(type='action' name='act_ammunition_set', data-i18n='ammunition-set') S + + .sheet-bottom + button(type='action' name='act_ammunition_-1') −1 + button(type='action' name='act_ammunition_-3') −3 + button(type='action' name='act_ammunition_-5') −5 + button(type='action' name='act_ammunition_-10') −10 + button(type='action' name='act_ammunition_reset', data-i18n='ammunition-reset') R + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_apparel.pug b/Savage Worlds - Graph Paper/source/templates/_apparel.pug new file mode 100644 index 0000000000..5b9a5d52c1 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_apparel.pug @@ -0,0 +1,78 @@ +.sheet-block.sheet-apparel + .sheet-header + span.sheet-header__title.sheet-apparel__name(name='attr_rename_block_apparel', data-i18n='apparel') Apparel + .sheet-header__labels + .sheet-apparel__armor(data-i18n='apparel-armor') Armor + .sheet-apparel__tags(data-i18n='apparel-properties') Properties + .sheet-apparel__weight(data-i18n='apparel-weight') WGT + + input(type='checkbox', + name='attr_apparel_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_apparel + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_apparel_name', + placeholder='Apparel', + data-i18n-placeholder='apparel-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-apparel__name sheet-stretch') + + input(type='text', + name='attr_apparel_armor', + placeholder='0', + spellcheck='false', + class='sheet-apparel__armor') + + input(type='text', + name='attr_apparel_tags', + placeholder='Protection/Resistance/Tags', + data-i18n-placeholder='apparel-properties-placeholder', + spellcheck='false', + class='sheet-align-left sheet-apparel__tags') + + input(type='text', + name='attr_apparel_weight', + placeholder='WGT', + data-i18n-placeholder='apparel-weight-placeholder', + spellcheck='false', + class='sheet-apparel__weight') + + input(type='checkbox', + name='attr_apparel_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + .sheet-repitem__label(data-i18n='notes') Notes + + input(type='text', + name='attr_apparel_notes', + placeholder='Notes, Tags, Trappings, Requirements, etc.', + data-i18n-placeholder='apparel-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') + + input(type='checkbox', + name='attr_apparel_weight_toggle', + checked=true, + title='Weight On/Off', + data-i18n-title='apparel-weight-toggle-title', + class='sheet-toggle sheet-toggle--special sheet-toggle--weight') + + input(type='checkbox', + name='attr_apparel_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_apparel_note_box', + placeholder='Notes', + data-i18n-placeholder='apparel-note-box-placeholder', + spellcheck='false') + + .sheet-footer + span.sheet-label(data-i18n='apparel-total-weight') Total Weight:  + span(name='attr_carry_weight_apparel', + class='sheet-label sheet-label--weight') 0.0 diff --git a/Savage Worlds - Graph Paper/source/templates/_armor.pug b/Savage Worlds - Graph Paper/source/templates/_armor.pug new file mode 100644 index 0000000000..3b3642de08 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_armor.pug @@ -0,0 +1,29 @@ +.sheet-armor + .sheet-armor__decoration + +hexfield('armor_head', 'Head', 'left', '0') + textarea(name='attr_head_notes', + placeholder='NOTES', + data-i18n-placeholder='armor-notes-u', + spellcheck='false') + .sheet-armor__pointer.sheet-armor__pointer--head + + +hexfield('armor_torso', 'Torso', 'left', '0') + textarea(name='attr_torso_notes', + placeholder='NOTES', + data-i18n-placeholder='armor-notes-u', + spellcheck='false') + .sheet-armor__pointer.sheet-armor__pointer--torso + + +hexfield('armor_arms', 'Arms', 'left', '0') + textarea(name='attr_arms_notes', + placeholder='NOTES', + data-i18n-placeholder='armor-notes-u', + spellcheck='false') + .sheet-armor__pointer.sheet-armor__pointer--arms + + +hexfield('armor_legs', 'Legs', 'left', '0') + textarea(name='attr_legs_notes', + placeholder='NOTES', + data-i18n-placeholder='armor-notes-u', + spellcheck='false') + .sheet-armor__pointer.sheet-armor__pointer--legs diff --git a/Savage Worlds - Graph Paper/source/templates/_attributes.pug b/Savage Worlds - Graph Paper/source/templates/_attributes.pug new file mode 100644 index 0000000000..58838c8cf8 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_attributes.pug @@ -0,0 +1,6 @@ +.sheet-attributes + +attribute('Agility', 'AGI') + +attribute('Smarts', 'SMA') + +attribute('Spirit', 'SPI') + +attribute('Strength', 'STR') + +attribute('Vigor', 'VIG') diff --git a/Savage Worlds - Graph Paper/source/templates/_augmentations.pug b/Savage Worlds - Graph Paper/source/templates/_augmentations.pug new file mode 100644 index 0000000000..9fe2633886 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_augmentations.pug @@ -0,0 +1,126 @@ +input(type='checkbox', + name='attr_toggle_strain', + class='sheet-hidden sheet-toggle--strain') + +input(type='checkbox', + name='attr_toggle_augmentation_markers', + checked=true, + class='sheet-hidden sheet-toggle-augmentation-markers') + +input(type='checkbox', + name='attr_toggle_augmentations_block', + checked=true, + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-augmentations + .sheet-header + span.sheet-header__title.sheet-augmentations__name(name='attr_rename_block_augmentations', data-i18n='augmentations') Augmentations + .sheet-header__labels + .sheet-augmentations__grade(data-i18n='augmentations-grade') Grade + .sheet-augmentations__power(data-i18n='augmentations-power') Power + .sheet-augmentations__slots(data-i18n='augmentations-slots') Slots + .sheet-augmentations__loss + span.sheet-a(data-i18n='augmentations-loss') Loss + span.sheet-b(data-i18n='augmentations-strain') Strain + + input(type='checkbox', + name='attr_augmentations_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_augmentations + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_augmentation_name', + placeholder='[Advanced/Superior] Augmentation [Level] (Upgrades)', + data-i18n-placeholder='augmentations-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-augmentations__name sheet-stretch') + + +color_circle('augmentation-color') + + input(type='text', + name='attr_augmentation_grade', + placeholder='Iron', + data-i18n-placeholder='augmentations-grade-placeholder', + spellcheck='false', + class='sheet-augmentations__grade') + + input(type='text', + name='attr_augmentation_power', + placeholder='0', + spellcheck='false', + class='sheet-augmentations__power') + + input(type='text', + name='attr_augmentation_slots', + placeholder='0', + spellcheck='false', + class='sheet-augmentations__slots') + + input(type='text', + name='attr_augmentation_loss', + placeholder='4.0', + spellcheck='false', + class='sheet-augmentations__loss') + + input(type='checkbox', + name='attr_augmentation_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + input(type='checkbox', + name='attr_multiplier_toggle', + checked=true, + class='sheet-hidden sheet-toggle') + + .sheet-repitem__label(data-i18n='multiplier') Multiplier + + input(type='text', + name='attr_augmentation_multiplier', + value='1.0', + placeholder='1.0', + class='sheet-augmentations__multiplier') + + .sheet-repitem__label(data-i18n='notes') Notes + + input(type='text', + name='attr_augmentation_notes', + placeholder='Effect/Description', + data-i18n-placeholder='augmentations-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') + + input(type='checkbox', + name='attr_settings_toggle', + class='sheet-toggle sheet-toggle--settings') + + .sheet-repitem__settings + .sheet-repitem__settings-content + label.sheet-label-toggle + input(type='checkbox', name='attr_multiplier_toggle', checked=true) + span(data-i18n='multiplier') Multiplier + + input(type='checkbox', + name='attr_augmentation_loss_toggle', + checked=true, + title='Loss/Strain On/Off', + data-i18n-title='augmentations-toggle-title', + class='sheet-toggle sheet-toggle--special sheet-toggle--loss') + + input(type='checkbox', + name='attr_augmentation_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_augmentation_note_box', + placeholder='Notes', + data-i18n-placeholder='augmentations-note-box-placeholder', + spellcheck='false') + + .sheet-footer + span.sheet-label.sheet-a(data-i18n='augmentations-total-loss') Total Loss:  + span.sheet-label.sheet-b(data-i18n='augmentations-total-strain') Total Strain:  + span(name='attr_augmentations_total_loss', + class='sheet-label sheet-label--loss') 0.0 diff --git a/Savage Worlds - Graph Paper/source/templates/_buttons.pug b/Savage Worlds - Graph Paper/source/templates/_buttons.pug new file mode 100644 index 0000000000..c2c926c2ae --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_buttons.pug @@ -0,0 +1,78 @@ +.sheet-buttons + .sheet-dice-roller + input(type='hidden', name='attr_dice_roller_code', value='0') + input(type='hidden', + name='attr_dice_roller_template', + value=`{{rof=[[ 0 + ?{@{query_rate_of_fire}|1} ]]}} ${maxRof.map(n => `{{roll${n}=[[ @{dice_roller_code} ]]}}`).join(' ')}`) + + input(type='text', + name='attr_dice_roller_input', + placeholder= '2d6!+2', + data-i18n-placeholder='dice-roller-code-placeholder', + class='sheet-dice-roller__input') + + button(type='roll', + name='roll_dice_roller_damage', + value!=`@{gm_roll} &{template:DamageRoll} {{header=@{name} ^{rolls} ^{damage}}} {{code=@{dice_roller_input}}} @{dice_roller_template} {{reroll=[r](~dice_roller_damage)}}`) + span(data-i18n='dice-roller-damage') Damage + + button(type='roll', + name='roll_dice_roller_hidden', + value!=`/w gm &{template:DiceRoller} {{header=@{name} ^{rolls} @{dice_roller_input}}} @{dice_roller_template} {{reroll=[r](~dice_roller_hidden)}}`) + span(data-i18n='dice-roller-hidden') Hidden + + button(type='roll', + name='roll_dice_roller_open', + value!=`&{template:DiceRoller} {{header=@{name} ^{rolls} @{dice_roller_input}}} @{dice_roller_template} {{reroll=[r](~dice_roller_open)}}`) + span(data-i18n='dice-roller-roll') Roll + + .sheet-run-roller + input(type='hidden', name='attr_run_wounds', value='@{wound_mod}') + input(type='hidden', name='attr_run_fatigue', value='0') + input(type='hidden', name='attr_run_code', value='@{run_roll}') + + button(type='roll', + name='roll_run', + value!='@{gm_roll} &{template:RunRoll} {{header=@{name} ^{runs-ellipsis} [[ @{run_code} + @{pace} - @{run_wounds} - @{run_fatigue} + ?{@{query_modifier}|0} ]]^{exclamation-mark}}} {{content=^{run} (@{pace} + @{run_code}) + ^{mod} (?{@{query_modifier}|0}) - ^{penalty} ([[ @{run_wounds} + @{run_fatigue} ]])}}') + span(data-i18n='dice-roller-run') Run + + .sheet-raise-calculator + button(type='roll', + name='roll_raise_calculator', + value!='@{gm_roll} &{template:InfoBox} {{content=^{roll-of} (?{@{query_roll_result}}) ^{vs-tn} (?{@{query_target_number}|4}) = [[ floor((?{@{query_roll_result}} - ?{@{query_target_number}|4}) / 4) ]] ^{raises}}}') + span(data-i18n='raise-calculator') Raise Calculator + + label.sheet-label-toggle + input(type='hidden', name=`attr_query_global_rof`, value='1') + input(type='checkbox', name='attr_toggle_global_rof') + span(data-i18n='query-rof') Query RoF + + label.sheet-label-toggle + input(type='hidden', name=`attr_query_global_wd`, value='-10000-d20') + input(type='checkbox', name='attr_toggle_global_wd') + span(data-i18n='query-wd') Query WD + + label.sheet-label-toggle + input(type='hidden', name=`attr_query_global_bonus_wd`, value='-10000-d20') + input(type='checkbox', name='attr_toggle_global_bonus_wd') + span(data-i18n='bonus-wd') Bonus WD + + label.sheet-label-toggle + input(type='checkbox', name='attr_gm_roll', value='/w gm') + span(data-i18n='gm-roll') GM Roll + + - var i = 0 + + while i < 3 + - ++i + + input(type='checkbox', + name=`attr_toggle_custom_button_${i}`, + class='sheet-hidden sheet-toggle') + + .sheet-custom-button + button(type='roll', + name=`roll_custom_button_${i}`, + value!=`@{custom_button_${i}_macro}`) + span(name=`attr_rename_custom_button_${i}`) + = i == 1 ? 'UnShake' : `Button #${i}` diff --git a/Savage Worlds - Graph Paper/source/templates/_common_fields.pug b/Savage Worlds - Graph Paper/source/templates/_common_fields.pug new file mode 100644 index 0000000000..6f7d75445f --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_common_fields.pug @@ -0,0 +1,13 @@ +input(type='hidden', name='attr_unskilled', value='d4-2') +input(type='hidden', name='attr_unskilled_untrained_mod', value='-2') +input(type='hidden', name='attr_unskilled_roll', value='1d4') +input(type='hidden', name='attr_unskilled_wd_roll', value='1d6') +input(type='hidden', name='attr_unskilled_extra_wd_roll', value='-10000') + +input(type='hidden', name=`attr_unskilled_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 + (@{unskilled_untrained_mod})[Untrained] + (@{unskilled_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + +input(type='hidden', name=`attr_unskilled_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 + (@{unskilled_untrained_mod})[Untrained] + (@{unskilled_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + +input(type='hidden', + name=`attr_unskilled_roll_body`, + value!=`@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{query_global_rof} ]]}} {{header=@{name} ^{rolls} ^{unskilled}}} {{trait=^{unskilled}}} {{traitdie=@{unskilled}}} {{flat=@{unskilled_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} ${maxRof.map(n => `{{traitroll${n}=[[ @{unskilled_roll}!cs2 + (@{unskilled_untrained_mod})[Untrained] + (@{unskilled_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{unskilled_global_wd_roll} @{unskilled_global_bonus_wd_roll}`) diff --git a/Savage Worlds - Graph Paper/source/templates/_encumbrance.pug b/Savage Worlds - Graph Paper/source/templates/_encumbrance.pug new file mode 100644 index 0000000000..de5cf196d8 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_encumbrance.pug @@ -0,0 +1,27 @@ +.sheet-encumbrance + .sheet-encumbrance__container + .sheet-label(data-i18n='weapons') Weapons + .sheet-encumbrance__content + span(name='attr_carry_weight_weapons') 0.0 + + .sheet-encumbrance__container + .sheet-label(data-i18n='apparel') Apparel + .sheet-encumbrance__content + span(name='attr_carry_weight_apparel') 0.0 + + .sheet-encumbrance__container + .sheet-label(data-i18n='inventory') Inventory + .sheet-encumbrance__content + span(name='attr_carry_weight_inventory') 0.0 + + .sheet-encumbrance__container.sheet-encumbrance__container--summary + .sheet-label(data-i18n='carried-weight-total') Total Carried Weight + .sheet-encumbrance__content.sheet-encumbrance__content--summary + input(type='text', + name='attr_carry_weight_maximum', + placeholder='20', + value='20') + + div / + + span(name='attr_carry_weight') 0.0 diff --git a/Savage Worlds - Graph Paper/source/templates/_engrams.pug b/Savage Worlds - Graph Paper/source/templates/_engrams.pug new file mode 100644 index 0000000000..80c69d2a6e --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_engrams.pug @@ -0,0 +1,163 @@ +input(type='checkbox', + name='attr_toggle_engrams_block', + checked=true, + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-engrams + .sheet-header + span.sheet-header__title.sheet-engrams__name(name='attr_rename_block_engrams', data-i18n='engrams') Engrams + .sheet-header__labels + .sheet-engrams__penalty(data-i18n='engrams-penalty') Penalty + .sheet-engrams__description(data-i18n='engrams-description') Description + + input(type='checkbox', + name='attr_engrams_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + input(type='checkbox', + name='attr_toggle_description_input_visibility', + checked=true, + class='sheet-toggle-description-input sheet-hidden') + + input(type='checkbox', + name='attr_toggle_injection_input_visibility', + class='sheet-toggle-injection-input sheet-hidden') + + fieldset.repeating_engrams + .sheet-repitem + .sheet-repitem__primary + input(type='checkbox', + name='attr_roll_button_toggle', + class='sheet-hidden sheet-toggle sheet-toggle--list-roll') + + button(type='roll', + name='roll_skill', + value!=`@{skill_roll_body} {{wd=@{skill_wd}}} {{wdroll=[[ @{skill_wd_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} @{wd_override} {{reroll=[r](~repeating_engrams_skill)}} {{description=@{roll_description}}} @{roll_injection}`, + class='sheet-repitem__skill-roll sheet-repitem__skill-roll--wildcard') 9 + + button(type='roll', + name='roll_extra_skill', + value!=`@{skill_roll_body} {{wd=@{skill_wd}}} {{wdroll=[[ @{skill_extra_wd_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} @{wd_override} {{reroll=[r](~repeating_engrams_skill)}} {{description=@{roll_description}}} @{roll_injection}`, + class='sheet-repitem__skill-roll sheet-repitem__skill-roll--extra') 9 + + input(type='text', + name='attr_engram_name', + placeholder='Engram', + data-i18n-placeholder='engrams-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-engrams__name sheet-stretch') + + input(type='text', + name='attr_engram_penalty', + placeholder='-1', + spellcheck='false', + class='sheet-engrams__penalty') + + input(type='text', + name='attr_engram_description', + placeholder='e.g. entangle (SWADE 161) power but resisted by Smarts', + data-i18n-placeholder='engrams-description-placeholder', + spellcheck='false', + class='sheet-align-left sheet-engrams__description') + + input(type='checkbox', + name='attr_engram_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + .sheet-repitem__label(data-i18n='notes') Notes + + input(type='text', + name='attr_engram_notes', + placeholder='Effect/Description', + data-i18n-placeholder='engrams-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') + + input(type='checkbox', + name='attr_engram_settings_toggle', + class='sheet-toggle sheet-toggle--settings') + + .sheet-repitem__settings + .sheet-repitem__settings-content + label.sheet-label-toggle.sheet-label-toggle--full-row.sheet-roll-description + input(type="hidden", name='attr_roll_description') + input(type='checkbox', name='attr_roll_description_toggle') + span(data-i18n='roll-description') Description + input(type='text', + name='attr_roll_description_input', + placeholder='Narrative or functional description below the header in the Roll Template. Leave empty to disable.', + data-i18n-placeholder='roll-description-placeholder', + value='', + spellcheck='false', + class='sheet-label-toggle__input') + + label.sheet-label-toggle.sheet-label-toggle--full-row.sheet-roll-injection + input(type="hidden", name='attr_roll_injection') + input(type='checkbox', name='attr_roll_injection_toggle') + span(data-i18n='roll-injection') Roll Injection + input(type='text', + name='attr_roll_injection_input', + placeholder='{{source_label=}} {{source=}} {{custom3_label=}} {{custom3=}} {{rof=[[ 1 ]]}} {{traitroll8=}}', + data-i18n-placeholder='roll-injection-placeholder', + value='', + spellcheck='false', + class='sheet-label-toggle__input') + + label.sheet-label-toggle + input(type='hidden', name='attr_skill_wd', value='@{hacking_wd}') + input(type='hidden', name='attr_skill_mod', value='@{hacking_mod}') + input(type='hidden', name='attr_skill_untrained_mod', value='@{hacking_untrained_mod}') + input(type='hidden', name='attr_skill_roll', value='@{hacking_roll}') + input(type='hidden', name='attr_skill_wd_roll', value='@{hacking_wd_roll}') + input(type='hidden', name='attr_skill_extra_wd_roll', value='@{hacking_wd_roll}') + + input(type='hidden', name=`attr_skill_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', name=`attr_skill_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', + name=`attr_skill_roll_body`, + value!=`@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{rof_override} ]]}} {{header=@{name} ^{rolls} @{skill_name}}} {{trait=@{skill_name}}} {{source_label=^{source}}} {{source=@{engram_name}}} {{traitdie=@{skill_roll}}} {{flat=@{skill_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} {{bonus=@{skill_bonus}}} ${maxRof.map(n => `{{traitroll${n}=[[ @{skill_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{skill_global_wd_roll} @{skill_global_bonus_wd_roll}`) + + input(type='checkbox', name='attr_roll_button_toggle') + span(data-i18n='roll-button') Roll Button + input(type='text', + name='attr_skill_name', + placeholder='Hacking', + data-i18n-placeholder='engrams-skill-placeholder', + value='Hacking', + spellcheck='false', + class='sheet-label-toggle__input') + input(type='text', + name='attr_skill_bonus', + placeholder='+0', + class='sheet-label-toggle__input sheet-label-toggle__input--tiny') + + label.sheet-label-toggle + input(type="hidden", name='attr_rof_override', value='1') + input(type='checkbox', name='attr_rof_override_toggle') + span(data-i18n='query-rof') Query RoF + + label.sheet-label-toggle + input(type="hidden", name='attr_wd_override', value='') + input(type='checkbox', name='attr_wd_override_toggle') + span(data-i18n='wild-die-override') WD Override + input(type='text', + name='attr_wd_override_die', + value='', + spellcheck='false', + class='sheet-label-toggle__input sheet-label-toggle__input--tiny') + + input(type='checkbox', + name='attr_engram_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_engram_note_box', + placeholder='Notes', + data-i18n-placeholder='engrams-note-box-placeholder', + spellcheck='false') + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_extra_sheet.pug b/Savage Worlds - Graph Paper/source/templates/_extra_sheet.pug new file mode 100644 index 0000000000..e3c9afb685 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_extra_sheet.pug @@ -0,0 +1,262 @@ +.sheet-meta.sheet-extra-meta + +meta_field('name', 'Name') + +meta_field('size', 'Size') + +meta_field('height', 'Height') + +meta_field('weight', 'Weight') + +meta_field('bennies', 'Bennies') + +include _buttons.pug + +.sheet-block.sheet-extra-attributes + .sheet-header + .sheet-header__title + span(data-i18n='attributes') Attributes + + input(type='checkbox', + name='attr_simple_attributes_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + .sheet-container + +simple_trait('agility', 'Agility', 'd4', 'sheet-simple-trait--attribute', true) + +simple_trait('smarts', 'Smarts', 'd4', 'sheet-simple-trait--attribute', true) + +simple_trait('spirit', 'Spirit', 'd4', 'sheet-simple-trait--attribute', true) + +simple_trait('strength', 'Strength', 'd4', 'sheet-simple-trait--attribute', true) + +simple_trait('vigor', 'Vigor', 'd4', 'sheet-simple-trait--attribute', true) + +.sheet-block.sheet-extra-skills + .sheet-header + .sheet-header__title + span(data-i18n='skills') Skills + + input(type='checkbox', + name='attr_simple_skill_selection_toggle', + class='sheet-extra-skills__selection-toggle') + + input(type='checkbox', + name='attr_simple_skills_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + .sheet-container + - + var skills = [['Academics', 'Sma'], ['Athletics', 'Agi'], ['Battle', 'Sma'], + ['Boating', 'Agi'], ['Driving', 'Agi'], ['Common Knowledge', 'Sma'], + ['Electronics', 'Sma'], ['Faith', 'Spi'], ['Fighting', 'Agi'], + ['Focus', 'Spi'], ['Gambling', 'Sma'], ['Hacking', 'Sma'], + ['Healing', 'Sma'], ['Intimidation', 'Spi'], ['Language', 'Sma'], + ['MAGIC', 'Sma'], ['Notice', 'Sma'], ['Occult', 'Sma'], + ['Performance', 'Spi'], ['Persuasion', 'Spi'], ['Piloting', 'Agi'], + ['Psionics', 'Sma'], ['Repair', 'Sma'], ['Research', 'Sma'], + ['Riding', 'Agi'], ['Science', 'Sma'], ['Shooting', 'Agi'], + ['Spellcasting', 'Sma'], ['Stealth', 'Agi'], ['Survival', 'Sma'], + ['Taunt', 'Sma'], ['Thievery', 'Agi'], ['Weird Science', 'Sma'], + ['Custom Skill 1', 'Custom'], ['Custom Skill 2', 'Custom'], + ['Unskilled', 'Custom']] + + - var defaultSkills = ['athletics', 'common-knowledge', 'notice', 'persuasion', 'stealth'] + + each skill in skills + - var trait = skill[0].toLowerCase().replace('.', '').replace(/ /g, '_') + - var skill_name = skill[0] == 'Common Knowledge' ? 'Common Knowl.' : skill[0] + + label.sheet-extra-skills__toggle-label + input(type='checkbox', + name=`attr_extra_skill_toggle_${trait}`, + checked= defaultSkills.includes(trait) || trait == 'unskilled', + class='sheet-extra-skills__toggle') + span(name='attr_rename_' + trait)!= skill_name + + input(type='checkbox', + name=`attr_extra_skill_toggle_${trait}`, + checked= defaultSkills.includes(trait) || trait == 'unskilled', + class='sheet-hidden sheet-extra-skills__toggle') + + +simple_trait(trait, + skill_name, + 'd4-2', + 'sheet-simple-trait--skill', + trait != 'unskilled') + +.sheet-block.sheet-block.sheet-extra-secondary + .sheet-header + span.sheet-header__title(data-i18n='armor-and-statistics') Armor & Statistics + + input(type='checkbox', + name='attr_simple_secondary_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + .sheet-container + .sheet-extra-secondary__field + input(type='text', + name='attr_pace', + placeholder='6', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='pace') Pace + + .sheet-extra-secondary__field + input(type='text', + name='attr_run', + placeholder='d6', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='run') Run + + .sheet-extra-secondary__field + input(type='text', + name='attr_parry', + placeholder='2', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='parry') Parry + + .sheet-extra-secondary__field + input(type='text', + name='attr_toughness', + placeholder='4', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='toughness') Tough. + + .sheet-divider + + .sheet-extra-secondary__field + input(type='text', + name='attr_armor_head', + placeholder='0', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='armor-head') Head + + .sheet-extra-secondary__field + input(type='text', + name='attr_armor_torso', + placeholder='0', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='armor-torso') Torso + + .sheet-extra-secondary__field + input(type='text', + name='attr_armor_arms', + placeholder='0', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='armor-arms') Arms + + .sheet-extra-secondary__field + input(type='text', + name='attr_armor_legs', + placeholder='0', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='armor-legs') Legs + + .sheet-divider + + .sheet-extra-secondary__field + input(type='text', + name='attr_wound_mod', + placeholder='0', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='extra-wounds') WDS + + .sheet-extra-secondary__field + input(type='text', + name='attr_fatigue_mod', + placeholder='0', + spellcheck='false', + class='sheet-extra-secondary__input') + .sheet-label + span(data-i18n='extra-fatigue') FTG + + +simple_trait('soak', 'Soak', 'd4', 'sheet-simple-trait--attribute') + +.sheet-block.sheet-quick-notes + .sheet-header + span.sheet-header__title(name='attr_rename_block_quick_notes', data-i18n='quick-notes') Quick Notes + + input(type='checkbox', + name='attr_simple_quick_notes_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + .sheet-quick-notes__content + input.sheet-hidden(type='checkbox', name='attr_toggle_quick_notes_extension') + + textarea(name='attr_quick_notes', spellcheck='false') + +include _features.pug +include _abilities.pug +include _weapons.pug +include _apparel.pug +include _augmentations.pug +include _engrams.pug +include _powers.pug +include _vehicles.pug +include _walkers.pug +include _powerarmor.pug +include _allies.pug + +.sheet-block.sheet-extra-settings + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_abilities_block', + class='sheet-hidden') + span(name='attr_rename_block_abilities', data-i18n='abilities') Abilities + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_augmentations_block', + checked=true, + class='sheet-hidden') + span(name='attr_rename_block_augmentations', data-i18n='augmentations') Augmentations + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_engrams_block', + checked=true, + class='sheet-hidden') + span(name='attr_rename_block_engrams', data-i18n='engrams') Engrams + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_powerarmors_block', + class='sheet-hidden') + span(name='attr_rename_block_powerarmor', data-i18n='powerarmors') Power Armors + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_powers_block', + class='sheet-hidden') + span(name='attr_rename_block_powers', data-i18n='powers') Powers + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_vehicles_block', + class='sheet-hidden') + span(name='attr_rename_block_vehicles', data-i18n='vehicles') Vehicles + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_walkers_block', + class='sheet-hidden') + span(name='attr_rename_block_walkers', data-i18n='walkers') Walkers + + label.sheet-extra-settings__item + input(type='checkbox', + name='attr_toggle_allies_block', + class='sheet-hidden') + span(name='attr_rename_block_allies', data-i18n='allies') Allies diff --git a/Savage Worlds - Graph Paper/source/templates/_features.pug b/Savage Worlds - Graph Paper/source/templates/_features.pug new file mode 100644 index 0000000000..5023ccd502 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_features.pug @@ -0,0 +1,31 @@ +.sheet-features + .sheet-header + .sheet-header__title(data-i18n='edges-and-hindrances') Edges & Hindrances + + fieldset.repeating_features + .sheet-repitem + - + var ranks = ['novice', 'seasoned', 'veteran', 'heroic', 'legendary', + 'augmentation', 'dot', 'hindrance', 'disabled'] + + each rank in ranks + input(type='radio', + name='attr_feature_rank', + value=rank, + class='sheet-color-cycle__radio sheet-color-cycle__radio--' + rank, + checked= rank == 'novice') + + .sheet-features__inner-background + + input(type='hidden', + name='attr_feature_size', + value='72') + + input(type='text', + name='attr_feature_name', + placeholder='New', + data-i18n-placeholder='feature-name-new', + spellcheck='false', + class='sheet-align-left sheet-features__name') + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_health.pug b/Savage Worlds - Graph Paper/source/templates/_health.pug new file mode 100644 index 0000000000..cb9ef92f0d --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_health.pug @@ -0,0 +1,97 @@ +.sheet-health + input(type='hidden', name='attr_wound_mod', value='0') + input(type='hidden', name='attr_fatigue_mod', value='0') + + input(type='checkbox', + name='attr_incap', + class='sheet-hex sheet-hex--64 sheet-hex--incap') + + .sheet-health__wounds + .sheet-health__icons + input(type='checkbox', + name='attr_health_icon_shield', + class='sheet-icon sheet-icon--shield') + + input(type='checkbox', + name='attr_health_icon_bug', + class='sheet-icon sheet-icon--bug') + + input(type='checkbox', + name='attr_health_icon_fire', + class='sheet-icon sheet-icon--fire') + + input(type='checkbox', + name='attr_health_icon_hit', + class='sheet-icon sheet-icon--hit') + + input(type='checkbox', + name='attr_health_icon_lightning', + class='sheet-icon sheet-icon--lightning') + + input(type='checkbox', + name='attr_health_icon_cancel', + class='sheet-icon sheet-icon--cancel') + + .sheet-health__track + - for (var i = 6; i > 0; --i) { + - if (i > 1) { + input(type='checkbox', + name='attr_wound_toggle_' + i, + class='sheet-radio-track-toggle sheet-radio-track-toggle--' + i, + checked= i > 3 ? true : false) + - } + + input(type='radio', + name='attr_wounds', + value=i, + class='sheet-radio-track sheet-radio-track--' + i) + - } + + input(type='radio', + name='attr_wounds', + value=0, + class='sheet-reset-button', + checked= true) + + .sheet-header__title(data-i18n='wounds') Wounds + + .sheet-health__center + +hexfield('wound_mitigation', 'Wound Mitigation', 'left', '0', '', 'sheet-stay-on-input') + +hexfield('rads', 'Rads', 'right', '0', '', 'sheet-stay-on-input') + + .sheet-health__fatigue + .sheet-health__icons + input(type='checkbox', + name='attr_health_icon_rad', + class='sheet-icon sheet-icon--rad') + + input(type='checkbox', + name='attr_health_icon_tools', + class='sheet-icon sheet-icon--tools') + + input(type='checkbox', + name='attr_health_icon_ecg', + class='sheet-icon sheet-icon--ecg') + + .sheet-health__track + - for (var i = 3; i > 0; --i) { + - if (i > 1) { + input(type='checkbox', + name='attr_fatigue_toggle_' + i, + class='sheet-radio-track-toggle sheet-radio-track-toggle--' + i, + checked= i > 2) + - } + + input(type='radio', + name='attr_fatigue', + value=i, + class='sheet-radio-track sheet-radio-track--' + i, + checked= i == 0) + - } + + input(type='radio', + name='attr_fatigue', + class='sheet-reset-button', + checked= true) + + .sheet-header__title(data-i18n='fatigue') Fatigue diff --git a/Savage Worlds - Graph Paper/source/templates/_integrity.pug b/Savage Worlds - Graph Paper/source/templates/_integrity.pug new file mode 100644 index 0000000000..005dff2c3a --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_integrity.pug @@ -0,0 +1,61 @@ +input(type='checkbox', + name='attr_toggle_integrity_block', + checked=true, + class='sheet-toggle sheet-toggle--block') + +.sheet-integrity.sheet-block + .sheet-integrity__status + .sheet-integrity__loss-effects + input(type='checkbox', name='attr_discord', class='sheet-hidden') + span.sheet-integrity__discord(name='attr_rename_discord', data-i18n='integrity-discord') Discord + + input(type='checkbox', name='attr_psychosis', class='sheet-hidden') + span.sheet-integrity__psychosis(name='attr_rename_psychosis', data-i18n='integrity-psychosis') Psychosis + + input(type='checkbox', name='attr_seizures', class='sheet-hidden') + span.sheet-integrity__seizures(name='attr_rename_seizures', data-i18n='integrity-seizures') Seizures + + input(type='checkbox', name='attr_depersonalization', class='sheet-hidden') + span.sheet-integrity__depersonalization(name='attr_rename_depersonalization', data-i18n='integrity-depersonalization') Depersonalization + + .sheet-integrity__progress + input(type='hidden', + name='attr_integrity_bar_size', + value='80', + readonly=true, + class='sheet-integrity__bar-width') + + .sheet-integrity__progress-fill + + .sheet-integrity__marker.sheet-integrity__marker--70 + .sheet-integrity__marker.sheet-integrity__marker--60 + .sheet-integrity__marker.sheet-integrity__marker--50 + .sheet-integrity__marker.sheet-integrity__marker--40 + .sheet-integrity__marker.sheet-integrity__marker--30 + .sheet-integrity__marker.sheet-integrity__marker--20 + .sheet-integrity__marker.sheet-integrity__marker--10 + + .sheet-integrity__loss-effects + input(type='checkbox', name='attr_dissonance', class='sheet-hidden') + span.sheet-integrity__dissonance(name='attr_rename_dissonance', data-i18n='integrity-dissonance') Dissonance + + input(type='checkbox', name='attr_alienation', class='sheet-hidden') + span.sheet-integrity__alienation(name='attr_rename_alienation', data-i18n='integrity-alienation') Alienation + + input(type='checkbox', name='attr_derealization', class='sheet-hidden') + span.sheet-integrity__derealization(name='attr_rename_derealization', data-i18n='integrity-derealization') Derealization + + input(type='checkbox', name='attr_ego_death', class='sheet-hidden') + span.sheet-integrity__egodeath(name='attr_rename_ego_death', data-i18n='integrity-ego-death') Ego Death + + .sheet-integrity__hexfields + .sheet-container + span(name='attr_integrity', + class='sheet-hex sheet-hex--64 sheet-hexfield__input') 80.0 + + -// Cannot use 'integrity_max' because this would also trigger with 'integrity' + +hexfield('integrity_maximum', 'Max', 'left', '0', '80', 'sheet-hide-until-needed sheet-hexfield-gray') + +hexfield('integrity_mod', 'Mod', 'right', '0', '', 'sheet-hide-until-needed sheet-hexfield-gray') + + .sheet-large-label + span(name='attr_rename_block_integrity', data-i18n='integrity') Integrity diff --git a/Savage Worlds - Graph Paper/source/templates/_inventory.pug b/Savage Worlds - Graph Paper/source/templates/_inventory.pug new file mode 100644 index 0000000000..daffe897dc --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_inventory.pug @@ -0,0 +1,74 @@ +.sheet-inventory + .sheet-header + span.sheet-header__title(name='attr_rename_block_inventory', data-i18n='inventory') Inventory + .sheet-header__labels + .sheet-inventory__amount # + .sheet-inventory__multi + .sheet-inventory__weight(data-i18n='inventory-weight-u') WGT + + input(type='checkbox', + name='attr_inventory_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_inventory + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_inventory_name', + placeholder='Item', + data-i18n-placeholder='inventory-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-inventory__name sheet-stretch') + + input(type='text', + name='attr_inventory_amount', + placeholder='0', + value='1', + spellcheck='false', + class='sheet-inventory__amount') + + .sheet-inventory__multi × + + input(type='text', + name='attr_inventory_weight', + placeholder='WGT', + data-i18n-placeholder='inventory-weight-placeholder-u', + spellcheck='false', + class='sheet-inventory__weight') + + input(type='checkbox', + name='attr_inventory_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + .sheet-repitem__label(data-i18n='notes') Notes + + input(type='text', + name='attr_inventory_notes', + placeholder='About this item...', + data-i18n-placeholder='inventory-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') + + input(type='checkbox', + name='attr_inventory_weight_toggle', + checked=true, + title='Weight On/Off', + data-i18n-title='inventory-weight-toggle-title', + class='sheet-toggle sheet-toggle--special sheet-toggle--weight') + + input(type='checkbox', + name='attr_inventory_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_inventory_note_box', + placeholder='Notes', + data-i18n-placeholder='inventory-note-box-placeholder', + spellcheck='false') + + .sheet-footer + span.sheet-label(data-i18n='inventory-total-weight') Total Weight:  + span(name='attr_carry_weight_inventory', + class='sheet-label sheet-label--weight') 0.0 diff --git a/Savage Worlds - Graph Paper/source/templates/_meta.pug b/Savage Worlds - Graph Paper/source/templates/_meta.pug new file mode 100644 index 0000000000..c812a7dea1 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_meta.pug @@ -0,0 +1,18 @@ +.sheet-meta + .sheet-container + +meta_field('name', 'Name') + +meta_field('origin', 'Origin') + +meta_field('rank', 'Rank') + +meta_field('size', 'Size') + +meta_field('level', 'Level') + +meta_field('exp', 'EXP') + +meta_field('bennies', 'Bennies') + + .sheet-container + +meta_field('gender', 'Gender') + +meta_field('age', 'Age') + +meta_field('hair', 'Hair') + +meta_field('eyes', 'Eyes') + +meta_field('height', 'Height') + +meta_field('weight', 'Weight') + +meta_field('bits', '#Bits') diff --git a/Savage Worlds - Graph Paper/source/templates/_mixin_attribute.pug b/Savage Worlds - Graph Paper/source/templates/_mixin_attribute.pug new file mode 100644 index 0000000000..3b6685441e --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_mixin_attribute.pug @@ -0,0 +1,36 @@ +mixin attribute(name, short) + - var trait = name.toLowerCase() + + .sheet-attribute(class=`sheet-attribute--${trait}`) + + input(type='hidden', name=`attr_rename_${trait}`, value=name) + input(type='hidden', name=`attr_${trait}_roll`, value='1d4') + input(type='hidden', name=`attr_${trait}_wd_roll`, value='1d6') + input(type='hidden', name=`attr_${trait}_extra_wd_roll`, value='-10000') + + input(type='hidden', name=`attr_${trait}_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', name=`attr_${trait}_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', + name=`attr_${trait}_roll_body`, + value!=`@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{query_global_rof} ]]}} {{header=@{name} ^{rolls} @{rename_${trait}}}} {{trait=@{rename_${trait}}}} {{traitdie=@{${trait}}}} {{flat=@{${trait}_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} ${maxRof.map(n => `{{traitroll${n}=[[ @{${trait}_roll}!cs2 + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{${trait}_global_wd_roll} @{${trait}_global_bonus_wd_roll}`) + + button(type='roll', + name=`roll_${trait}`, + value!=`@{${trait}_roll_body} {{wd=@{${trait}_wd}}} {{wdroll=[[ @{${trait}_wd_roll}!cs2 + (@{${trait}_mod}+0)[Flat] - @{fatigue_mod}[FTG] - @{wound_mod}[WND] + (?{@{query_modifier}|0})[Modifier] ]]}} {{reroll=[r](~${trait})}}`, + class='sheet-attribute__button') + span(name=`attr_rename_${short.toLowerCase()}`, data-i18n=`${short.toLowerCase()}-u`)= short + + input(type='text', + name=`attr_${trait}`, + placeholder='d4', + value='d4', + spellcheck='false', + class='sheet-hex sheet-hex--48 sheet-hexfield__input') + + +hexfield(`${trait}_natural`, 'Natural', 'left', 'd4', '', 'sheet-hide-until-needed sheet-hexfield-gray sheet-hexfield--nat') + + +hexfield(`${trait}_mod`, 'Bonus', 'right sheet-exception', '0', '', 'sheet-hide-until-needed sheet-stay-on-input sheet-hexfield--mod') + + +hexfield(`${trait}_wd`, 'WD', 'right', 'd6', '', 'sheet-hide-until-needed sheet-hexfield-gray sheet-hexfield--wd') diff --git a/Savage Worlds - Graph Paper/source/templates/_mixin_color_circle.pug b/Savage Worlds - Graph Paper/source/templates/_mixin_color_circle.pug new file mode 100644 index 0000000000..3e425d516c --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_mixin_color_circle.pug @@ -0,0 +1,10 @@ +- var colors = ['none', 'red', 'yellow', 'blue', 'green', 'purple', 'gray'] + +mixin color_circle(attribute, classes) + .sheet-color-cycle(class=classes) + each color in colors + input(type='radio', + name=`attr_color_marker_${attribute}`, + value=color, + class=`sheet-color-cycle__radio sheet-color-cycle__radio--${color}`, + checked= color == 'none') diff --git a/Savage Worlds - Graph Paper/source/templates/_mixin_hexfield.pug b/Savage Worlds - Graph Paper/source/templates/_mixin_hexfield.pug new file mode 100644 index 0000000000..d65735cfef --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_mixin_hexfield.pug @@ -0,0 +1,14 @@ +mixin hexfield(trait, label, alignment, placeholder=' ', value='', classes='') + .sheet-hexfield(class=`${classes} sheet-hexfield--${trait.toLowerCase().replace(/_/g, '-')}`) + input(type='text', + name=`attr_${trait.toLowerCase()}`, + placeholder=placeholder, + value=value, + spellcheck='false', + class='sheet-hex sheet-hex--36 sheet-hexfield__input') + + if block + block + + .sheet-hexfield__label(class=`sheet-hexfield__label--${alignment}`) + span(data-i18n=trait.toLowerCase().replace(/_/g, '-'))!= label diff --git a/Savage Worlds - Graph Paper/source/templates/_mixin_meta_field.pug b/Savage Worlds - Graph Paper/source/templates/_mixin_meta_field.pug new file mode 100644 index 0000000000..9e859acede --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_mixin_meta_field.pug @@ -0,0 +1,12 @@ +mixin meta_field(attribute, label, placeholder=' ') + .sheet-meta-field + input(type='text', + name=`attr_${attribute}`, + placeholder=placeholder, + spellcheck='false', + class=`sheet-meta-field__input sheet-meta-field__input--${attribute}`) + + - // Roll20 replaces "height" with "Page Height" + - var i18n = attribute == 'height' ? '_height' : attribute + .sheet-label + span(name=`attr_rename_label_${attribute}`, data-i18n=i18n)!= label diff --git a/Savage Worlds - Graph Paper/source/templates/_mixin_simple_trait.pug b/Savage Worlds - Graph Paper/source/templates/_mixin_simple_trait.pug new file mode 100644 index 0000000000..12236b899a --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_mixin_simple_trait.pug @@ -0,0 +1,51 @@ +mixin simple_trait(name, label, value='d4-2', classes='', rename=false) + - var trait = name.toLowerCase() + - var trait_name = rename ? `@{rename_${trait}}` : label + + .sheet-simple-trait(class=classes) + input.sheet-simple-trait__expand(type='checkbox', + name=`attr_expand_simple_${trait}`) + + .sheet-background + + - // Label roll + button(type='roll', + name=`roll_simple_${trait}`, + value!=`@{${trait}_roll_body} {{wd=@{${trait}_wd}}} {{wdroll=[[ @{${trait}_extra_wd_roll}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} {{reroll=[r](~simple_${trait})}}`, + class='sheet-simple-trait__roll') + if rename + span(name=`attr_rename_${trait}`)!= label + else + span(data-i18n=trait)!= label + + if trait != 'unskilled' + .sheet-simple-trait__buttons + - var dice = ['4', '6', '8', '10', '12'] + + each die in dice + - // Die button rolls + button(type='roll', + name=`roll_simple_${trait}_${die}`, + value!= `@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{query_global_rof} ]]}} {{header=@{name} ^{rolls} @{rename_${trait}}}} {{trait=@{rename_${trait}}}} {{traitdie=d${die}}} {{flat=@{${trait}_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} ${maxRof.map(n => `{{traitroll${n}=[[ 1d${die}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{${trait}_global_wd_roll} @{${trait}_global_bonus_wd_roll} {{wd=@{${trait}_wd}}} {{wdroll=[[ @{${trait}_extra_wd_roll}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} {{reroll=[r](~simple_${trait}_${die})}}`, + class='sheet-simple-trait__custom-roll')= `d${die}` + + span.sheet-simple-trait__label(name=`attr_${trait}_code`)= value + + .sheet-simple-trait__inputs + input(type='text', + name=`attr_${trait}`, + placeholder='d4', + value=value, + spellcheck='false') + + input(type='text', + name=`attr_${trait}_mod`, + placeholder='+/−', + data-i18n-placeholder='extra-trait-mod-placeholder', + spellcheck='false') + + input(type='text', + name=`attr_${trait}_wd`, + placeholder='WD', + data-i18n-placeholder='extra-trait-wd-placeholder', + spellcheck='false') diff --git a/Savage Worlds - Graph Paper/source/templates/_mixin_vehicle_weapons_sub_list.pug b/Savage Worlds - Graph Paper/source/templates/_mixin_vehicle_weapons_sub_list.pug new file mode 100644 index 0000000000..fa637b4a2b --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_mixin_vehicle_weapons_sub_list.pug @@ -0,0 +1,73 @@ +mixin vehicle_weapons_sub_list(classes='', item=10) + .sheet-repitem__weapons(class=classes) + .sheet-header + .sheet-header__labels + .sheet-repitem__weapons-name(data-i18n='sublist-weapons-name') Weapon + .sheet-repitem__weapons-damage(data-i18n='sublist-weapons-ap-damage') AP Damage + .sheet-repitem__weapons-damage(data-i18n='sublist-weapons-he-damage') HE Damage + .sheet-repitem__weapons-range(data-i18n='sublist-weapons-range') Range + .sheet-repitem__weapons-rof(data-i18n='sublist-weapons-rof') ROF + + - var i = 0 + + while i < 10 + - ++i + .sheet-repitem__subitem(class=`sheet-repitem__subitem--${i}`) + .sheet-repitem__primary + input(type='text', + name=`attr_vehicle_weapon_${i}_name`, + placeholder=`Weapon #${i}`, + data-i18n-placeholder=`sublist-weapons-name-placeholder-${i}`, + spellcheck='false', + class='sheet-align-left sheet-repitem__weapons-name sheet-stretch') + + input(type='text', + name=`attr_vehicle_weapon_${i}_ap_damage`, + placeholder='3d10, AP 8', + data-i18n-placeholder='sublist-weapons-ap-damage-placeholder', + spellcheck='false', + class='sheet-repitem__weapons-damage') + + input(type='text', + name=`attr_vehicle_weapon_${i}_he_damage`, + placeholder='3d8, AP 4, MBT', + data-i18n-placeholder='sublist-weapons-he-damage-placeholder', + spellcheck='false', + class='sheet-repitem__weapons-damage') + + input(type='text', + name=`attr_vehicle_weapon_${i}_range`, + placeholder='50/100/200', + data-i18n-placeholder='sublist-weapons-range-placeholder', + spellcheck='false', + class='sheet-repitem__weapons-range') + + input(type='text', + name=`attr_vehicle_weapon_${i}_rof`, + placeholder='1', + spellcheck='false', + class='sheet-repitem__weapons-rof') + + input(type='checkbox', + name=`attr_vehicle_weapon_note_box_toggle_${i}`, + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name=`attr_vehicle_weapon_note_box_${i}`, + placeholder='Notes', + data-i18n-placeholder='sublist-weapons-note-box-placeholder', + spellcheck='false') + + input(type='checkbox', + name=`attr_vehicle_weapon_${i}_notes_toggle`, + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + .sheet-repitem__note-label + span(data-i18n='sublist-weapons-notes-label') Notes: + input(type='text', + name=`attr_vehicle_weapon_${i}_notes`, + placeholder='Notes, Tags, Trappings, etc.', + data-i18n-placeholder='sublist-weapons-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') diff --git a/Savage Worlds - Graph Paper/source/templates/_notebook.pug b/Savage Worlds - Graph Paper/source/templates/_notebook.pug new file mode 100644 index 0000000000..0affc5c39b --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_notebook.pug @@ -0,0 +1,4 @@ +.sheet-notebook + textarea(name='attr_notebook', + placeholder=' ', + spellcheck='false') diff --git a/Savage Worlds - Graph Paper/source/templates/_power.pug b/Savage Worlds - Graph Paper/source/templates/_power.pug new file mode 100644 index 0000000000..b3700eb491 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_power.pug @@ -0,0 +1,15 @@ +input(type='checkbox', + name='attr_toggle_power_block', + checked=true, + class='sheet-toggle sheet-toggle--block') + +.sheet-power + input(type='text', + name='attr_power', + placeholder='0', + class='sheet-hex sheet-hex--64 sheet-hexfield__input') + + span.sheet-header__title(name='attr_rename_block_power', data-i18n='power-energy') Power + + +hexfield('power_consumed', 'Consumed', 'left', '0', '', 'sheet-hide-until-needed') + +hexfield('power_maximum', 'Max', 'right', '0', '', 'sheet-hide-until-needed') diff --git a/Savage Worlds - Graph Paper/source/templates/_powerarmor.pug b/Savage Worlds - Graph Paper/source/templates/_powerarmor.pug new file mode 100644 index 0000000000..d71a8a4398 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_powerarmor.pug @@ -0,0 +1,89 @@ +input(type='checkbox', + name='attr_toggle_powerarmors_block', + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-powerarmors + .sheet-header + span.sheet-header__title.sheet-powerarmors__name(name='attr_rename_block_powerarmors', data-i18n='powerarmors') Power Armors + .sheet-header__labels + .sheet-powerarmors__size(data-i18n='powerarmors-size') Size + .sheet-powerarmors__armor(data-i18n='powerarmors-armor') Armor + .sheet-powerarmors__pace(data-i18n='powerarmors-pace') Pace + .sheet-powerarmors__mods(data-i18n='powerarmors-mods') Mods + .sheet-powerarmors__weight(data-i18n='powerarmors-weight') Weight + .sheet-powerarmors__weapons(data-i18n='powerarmors-weapons') Weap. + + input(type='checkbox', + name='attr_powerarmors_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_powerarmors + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_powerarmor_name', + placeholder='Power Armor Type', + data-i18n-placeholder='powerarmors-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-powerarmors__name sheet-stretch') + + input(type='text', + name='attr_powerarmor_size', + placeholder='1', + spellcheck='false', + class='sheet-powerarmors__size') + + input(type='text', + name='attr_powerarmor_armor', + placeholder='8', + spellcheck='false', + class='sheet-powerarmors__armor') + + input(type='text', + name='attr_powerarmor_pace', + placeholder='8', + spellcheck='false', + class='sheet-powerarmors__pace') + + input(type='text', + name='attr_powerarmor_mods', + placeholder='0/5', + data-i18n-placeholder='powerarmors-mods-placeholder', + spellcheck='false', + class='sheet-powerarmors__mods') + + input(type='text', + name='attr_powerarmor_weight', + placeholder='500', + data-i18n-placeholder='powerarmors-weight-placeholder', + spellcheck='false', + class='sheet-powerarmors__weight') + + input(type='text', + name='attr_powerarmor_weapons_count', + placeholder='0', + spellcheck='false', + class='sheet-powerarmors__weapons') + + input(type='checkbox', + name='attr_powerarmor_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__frame + .sheet-repitem__frame-silhouette + + .sheet-repitem__frame-build + textarea(name='attr_powerarmor_build', + placeholder='Chassis | Modifications, Notes, etc.', + data-i18n-placeholder='powerarmors-build-placeholder', + spellcheck='false') + + input(type='hidden', + name='attr_powerarmor_weapons_count', + value='0', + class='sheet-hidden sheet-repitem__weapons-control') + + +vehicle_weapons_sub_list() + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_powers.pug b/Savage Worlds - Graph Paper/source/templates/_powers.pug new file mode 100644 index 0000000000..97c59ade88 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_powers.pug @@ -0,0 +1,246 @@ +input(type='checkbox', + name='attr_toggle_pp', + class='sheet-hidden sheet-toggle--pp') + +input(type='checkbox', + name='attr_toggle_powers_block', + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-powers + .sheet-header + span.sheet-header__title.sheet-powers__name(name='attr_rename_block_powers', data-i18n='powers') Powers + .sheet-header__labels + .sheet-powers__damage + label(title='Toggle Damage Rolls', + data-i18n-title='toggle-damage-rolls-title', + class='sheet-damage-roll-toggle-label') + input.sheet-hidden(type='checkbox', name='attr_powers_damage_roll_toggle') + span.sheet-icon ; + span(data-i18n='powers-damage') Damage + .sheet-powers__range(data-i18n='powers-range') Range + .sheet-powers__ap(data-i18n='powers-ap') AP + .sheet-powers__pp.sheet-a(data-i18n='powers-pp') PP + .sheet-powers__penalty.sheet-b(data-i18n='powers-penalty') Penalty + .sheet-powers__duration(data-i18n='powers-duration') Duration + + input(type='checkbox', + name='attr_powers_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + input(type='checkbox', + name='attr_powers_damage_roll_toggle', + class='sheet-damage-roll-toggle sheet-hidden') + + input(type='checkbox', + name='attr_toggle_description_input_visibility', + checked=true, + class='sheet-toggle-description-input sheet-hidden') + + input(type='checkbox', + name='attr_toggle_injection_input_visibility', + class='sheet-toggle-injection-input sheet-hidden') + + fieldset.repeating_powers + .sheet-repitem + .sheet-repitem__primary + input(type='checkbox', + name='attr_roll_button_toggle', + class='sheet-hidden sheet-toggle sheet-toggle--list-roll') + + button(type='roll', + name='roll_skill', + value!=`@{skill_roll_body} {{wd=@{skill_wd}}} {{wdroll=[[ @{skill_wd_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} @{wd_override} {{reroll=[r](~repeating_powers_skill)}} {{damageroll=[t](~repeating_powers_power_damage)}} {{description=@{roll_description}}} @{roll_injection}`, + class='sheet-repitem__skill-roll sheet-repitem__skill-roll--wildcard') 9 + + button(type='roll', + name='roll_extra_skill', + value!=`@{skill_roll_body} {{wd=@{skill_wd}}} {{wdroll=[[ @{skill_extra_wd_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} @{wd_override} {{reroll=[r](~repeating_powers_skill)}} {{damageroll=[t](~repeating_powers_power_damage)}} {{description=@{roll_description}}} @{roll_injection}`, + class='sheet-repitem__skill-roll sheet-repitem__skill-roll--extra') 9 + + input(type='text', + name='attr_power_name', + placeholder='Power', + data-i18n-placeholder='powers-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-powers__name sheet-stretch') + + input(type='checkbox', + name='attr_damage_input_toggle', + checked=true, + class='sheet-hidden sheet-toggle') + + .sheet-damage-button-overlay + input(type='hidden', name='attr_power_damage_roll', value='0') + + button(type='roll', + name='roll_power_damage', + value!=`@{gm_roll} &{template:DamageRoll} {{header=@{name} ^{rolls} ^{damage}}} {{code=@{power_damage}}} {{source_label=^{source}}} {{source=@{power_name}}} {{rof=[[ 0 + @{rof_override} ]]}} {{modifier=?{@{query_damage_modifier}}}} {{range=@{power_range}}} {{ap=@{power_ap}}} {{trapping=@{power_trapping}}} ${maxRof.map(n => `{{roll${n}=[[ @{power_damage_roll} + (?{@{query_damage_modifier}}+0) ]]}}`).join(' ')} {{reroll=[r](~repeating_powers_power_damage)}}`) + + input(type='text', + name='attr_power_damage', + placeholder='3d6', + data-i18n-placeholder='powers-damage-placeholder', + spellcheck='false', + class='sheet-powers__damage') + + input(type='text', + name='attr_power_range', + placeholder='Range/Melee', + data-i18n-placeholder='powers-range-placeholder', + spellcheck='false', + class='sheet-powers__range') + + input(type='text', + name='attr_power_ap', + placeholder='0', + spellcheck='false', + class='sheet-powers__ap') + + input(type='text', + name='attr_power_pp', + placeholder='2', + data-i18n-placeholder='powers-pp-placeholder', + spellcheck='false', + class='sheet-a sheet-powers__pp') + + input(type='text', + name='attr_power_penalty', + placeholder='-1', + spellcheck='false', + class='sheet-b sheet-powers__penalty') + + input(type='text', + name='attr_power_duration', + placeholder='Duration', + data-i18n-placeholder='powers-duration-placeholder', + spellcheck='false', + class='sheet-powers__duration') + + input(type='checkbox', + name='attr_power_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + input(type='checkbox', + name='attr_trapping_toggle', + checked=true, + class='sheet-hidden sheet-toggle') + + .sheet-repitem__label(data-i18n='trapping') Trapping + + input(type='text', + name='attr_power_trapping', + placeholder='Fire, Light, etc.', + data-i18n-placeholder='powers-trapping-placeholder', + spellcheck='false', + class='sheet-align-left sheet-powers__trapping') + + .sheet-repitem__label(data-i18n='notes') Notes + + input(type='text', + name='attr_power_notes', + placeholder='Effect/Description', + data-i18n-placeholder='powers-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') + + input(type='checkbox', + name='attr_power_settings_toggle', + class='sheet-toggle sheet-toggle--settings') + + .sheet-repitem__settings + .sheet-repitem__settings-content + label.sheet-label-toggle.sheet-label-toggle--full-row.sheet-roll-description + input(type="hidden", name='attr_roll_description') + input(type='checkbox', name='attr_roll_description_toggle') + span(data-i18n='roll-description') Description + input(type='text', + name='attr_roll_description_input', + placeholder='Narrative or functional description below the header in the Roll Template. Leave empty to disable.', + data-i18n-placeholder='roll-description-placeholder', + value='', + spellcheck='false', + class='sheet-label-toggle__input') + + label.sheet-label-toggle.sheet-label-toggle--full-row.sheet-roll-injection + input(type="hidden", name='attr_roll_injection') + input(type='checkbox', name='attr_roll_injection_toggle') + span(data-i18n='roll-injection') Roll Injection + input(type='text', + name='attr_roll_injection_input', + placeholder='{{source_label=}} {{source=}} {{custom3_label=}} {{custom3=}} {{rof=[[ 1 ]]}} {{traitroll8=}}', + data-i18n-placeholder='roll-injection-placeholder', + value='', + spellcheck='false', + class='sheet-label-toggle__input') + + label.sheet-label-toggle + input(type='checkbox', name='attr_damage_input_toggle', checked=true) + span(data-i18n='damage') Damage + + label.sheet-label-toggle + input(type='checkbox', name='attr_trapping_toggle', checked=true) + span(data-i18n='trapping') Trapping + + label.sheet-label-toggle + input(type='hidden', name='attr_skill_wd', value='@{spellcasting_wd}') + input(type='hidden', name='attr_skill_mod', value='@{spellcasting_mod}') + input(type='hidden', name='attr_skill_untrained_mod', value='@{spellcasting_untrained_mod}') + input(type='hidden', name='attr_skill_roll', value='@{spellcasting_roll}') + input(type='hidden', name='attr_skill_wd_roll', value='@{spellcasting_wd_roll}') + input(type='hidden', name='attr_skill_extra_wd_roll', value='@{spellcasting_wd_roll}') + + input(type='hidden', name=`attr_skill_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', name=`attr_skill_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', + name=`attr_skill_roll_body`, + value!=`@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{rof_override} ]]}} {{header=@{name} ^{rolls} @{skill_name}}} {{trait=@{skill_name}}} {{source_label=^{power}}} {{source=@{power_name}}} {{traitdie=@{skill_roll}}} {{flat=@{skill_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} {{bonus=@{skill_bonus}}} ${maxRof.map(n => `{{traitroll${n}=[[ @{skill_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{skill_global_wd_roll} @{skill_global_bonus_wd_roll}`) + + input(type='checkbox', name='attr_roll_button_toggle') + span(data-i18n='roll-button') Roll Button + input(type='text', + name='attr_skill_name', + placeholder='Spellcasting', + data-i18n-placeholder='powers-skill-placeholder', + value='Spellcasting', + spellcheck='false', + class='sheet-label-toggle__input') + input(type='text', + name='attr_skill_bonus', + placeholder='+0', + class='sheet-label-toggle__input sheet-label-toggle__input--tiny') + + label.sheet-label-toggle + input(type="hidden", name='attr_rof_override', value='1') + input(type='checkbox', name='attr_rof_override_toggle') + span(data-i18n='query-rof') Query RoF + + label.sheet-label-toggle + input(type="hidden", name='attr_wd_override', value='') + input(type='checkbox', name='attr_wd_override_toggle') + span(data-i18n='wild-die-override') WD Override + input(type='text', + name='attr_wd_override_die', + value='', + spellcheck='false', + class='sheet-label-toggle__input sheet-label-toggle__input--tiny') + + label.sheet-label-toggle(title='Exploding Damage Dice On/Off', data-i18n-title='ace-damage-title') + input(type="hidden", name='attr_explode_damage', value='!') + input(type='checkbox', name='attr_explode_damage_toggle', checked=true) + span(data-i18n='ace-damage') Ace Damage + + input(type='checkbox', + name='attr_power_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_power_note_box', + placeholder='Notes', + data-i18n-placeholder='powers-note-box-placeholder', + spellcheck='false') + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_quick_notes.pug b/Savage Worlds - Graph Paper/source/templates/_quick_notes.pug new file mode 100644 index 0000000000..ca333cfffc --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_quick_notes.pug @@ -0,0 +1,20 @@ +input(type='checkbox', + name='attr_toggle_quick_notes_block', + checked=true, + class='sheet-hidden sheet-toggle sheet-toggle-block') + +.sheet-quick-notes + .sheet-header + span.sheet-header__title(name='attr_rename_block_quick_notes', data-i18n='quick-notes') Quick Notes + + input(type='checkbox', + name='attr_quick_notes_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + .sheet-quick-notes__content + input.sheet-hidden(type='checkbox', name='attr_toggle_quick_notes_extension') + + textarea(name='attr_quick_notes', spellcheck='false') + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_roll_template.pug b/Savage Worlds - Graph Paper/source/templates/_roll_template.pug new file mode 100644 index 0000000000..eba007ee0d --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_roll_template.pug @@ -0,0 +1,205 @@ +rolltemplate.sheet-rolltemplate-TraitRoll + .sheet-rolltemplate + .sheet-rolltemplate__header {{header}} + = '{{#description}}' + .sheet-rolltemplate__description {{description}} + = '{{/description}}' + .sheet-rolltemplate__content + = '{{#reroll}}' + .sheet-rolltemplate__reroll(title='Reroll', data-i18n-title='rolltemplate-reroll-title') + .sheet-rolltemplate__button {{reroll}} + = '{{/reroll}}' + = '{{#damageroll}}' + .sheet-rolltemplate__roll-damage(title='Roll Damage', data-i18n-title='rolltemplate-damage-title') + .sheet-rolltemplate__button {{damageroll}} + = '{{/damageroll}}' + = '{{#source_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{source_label}} + .sheet-right {{source}} + = '{{/source_label}}' + = '{{#traitdie}}' + .sheet-rolltemplate__content-row + .sheet-left {{trait}} + .sheet-right + span {{traitdie}}  + = '{{#flat}}' + span ({{flat}}) + = '{{/flat}}' + = '{{/traitdie}}' + = '{{#rollLess() global_wdroll 0}}' + = '{{#wd}}' + = '{{#rollGreater() wdroll -1000}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-wild-die') Wild Die + .sheet-right {{wd}} + = '{{/rollGreater() wdroll -1000}}' + = '{{/wd}}' + = '{{/rollLess() global_wdroll 0}}' + = '{{#rollGreater() global_wdroll -1000}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-wild-die') Wild Die + .sheet-right {{global_wd}} + = '{{/rollGreater() global_wdroll -1000}}' + = '{{#rollGreater() bonus_wdroll -1000}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-bonus-wild-die') Bonus Wild Die + .sheet-right {{bonus_wd}} + = '{{/rollGreater() bonus_wdroll -1000}}' + = '{{#commander}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-commander') Commander + .sheet-right {{commander}} + = '{{/commander}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-modifier') Modifier + .sheet-right {{modifier}}{{#bonus}} ({{bonus}}){{/bonus}} + = '{{#rollGreater() rof 1}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-dice-rof') Dice/RoF + .sheet-right {{rof}} + = '{{/rollGreater() rof 1}}' + = '{{#rollGreater() wounds 0}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-wound-penalty') Wound Penalty + .sheet-right {{wounds}} + = '{{/rollGreater() wounds 0}}' + = '{{#rollGreater() fatigue 0}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-fatigue') Fatigue + .sheet-right {{fatigue}} + = '{{/rollGreater() fatigue 0}}' + = '{{#custom1_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{custom1_label}} + .sheet-right {{custom1}} + = '{{/custom1_label}}' + = '{{#custom2_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{custom2_label}} + .sheet-right {{custom2}} + = '{{/custom2_label}}' + = '{{#custom3_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{custom3_label}} + .sheet-right {{custom3}} + = '{{/custom3_label}}' + .sheet-rolltemplate__dice + .sheet-left + each roll in maxRof + if roll > 1 + = `{{#rollGreater() rof ${roll-1}}}` + .sheet-rolltemplate__roll(class=`sheet-rolltemplate__roll--${roll}`) + = `{{traitroll${roll}}}` + if roll > 1 + = `{{/rollGreater() rof ${roll-1}}}` + .sheet-right + = '{{#rollLess() global_wdroll -100}}' + = '{{#rollGreater() wdroll -1000}}' + .sheet-rolltemplate__roll.sheet-rolltemplate__roll--wd + = '{{wdroll}}' + = '{{/rollGreater() wdroll -1000}}' + = '{{/rollLess() global_wdroll -100}}' + = '{{#rollGreater() global_wdroll -1000}}' + .sheet-rolltemplate__roll.sheet-rolltemplate__roll--wd + = '{{global_wdroll}}' + = '{{/rollGreater() global_wdroll -1000}}' + = '{{#rollGreater() bonus_wdroll -1000}}' + .sheet-rolltemplate__roll.sheet-rolltemplate__roll--wd + = '{{bonus_wdroll}}' + = '{{/rollGreater() bonus_wdroll -1000}}' + +rolltemplate.sheet-rolltemplate-DiceRoller + .sheet-rolltemplate + .sheet-rolltemplate__header {{header}} + .sheet-rolltemplate__content + .sheet-rolltemplate__reroll(title='Reroll', data-i18n-title='rolltemplate-reroll-title') + .sheet-rolltemplate__button {{reroll}} + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-dice-rof') Dice/RoF + .sheet-right {{rof}} + .sheet-rolltemplate__dice + each roll in maxRof + if roll > 1 + = `{{#rollGreater() rof ${roll-1}}}` + .sheet-rolltemplate__roll(class=`sheet-rolltemplate__roll--${roll}`) + = `{{roll${roll}}}` + if roll > 1 + = `{{/rollGreater() rof ${roll-1}}}` + +rolltemplate.sheet-rolltemplate-RunRoll + .sheet-rolltemplate + .sheet-rolltemplate__header {{header}} + .sheet-rolltemplate__content {{content}} + +rolltemplate.sheet-rolltemplate-InfoBox + .sheet-rolltemplate + .sheet-rolltemplate__content {{content}} + +rolltemplate.sheet-rolltemplate-DamageRoll + .sheet-rolltemplate + .sheet-rolltemplate__header {{header}} + = '{{#description}}' + .sheet-rolltemplate__description {{description}} + = '{{/description}}' + .sheet-rolltemplate__content + = '{{#reroll}}' + .sheet-rolltemplate__reroll(title='Reroll', data-i18n-title='rolltemplate-reroll-title') + .sheet-rolltemplate__button {{reroll}} + = '{{/reroll}}' + = '{{#source_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{source_label}} + .sheet-right {{source}} + = '{{/source_label}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-damage') Damage + .sheet-right {{code}} + = '{{#modifier}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-damage-modifier') Damage Modifier + .sheet-right {{modifier}} + = '{{/modifier}}' + = '{{#ap}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-armor-piercing') Armor Piercing + .sheet-right {{ap}} + = '{{/ap}}' + = '{{#rollGreater() rof 1}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-hits-rof') Hits/RoF + .sheet-right {{rof}} + = '{{/rollGreater() rof 1}}' + = '{{#range}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-range') Range + .sheet-right {{range}} + = '{{/range}}' + = '{{#trapping}}' + .sheet-rolltemplate__content-row + .sheet-left(data-i18n='rolltemplate-trapping') Trapping + .sheet-right {{trapping}} + = '{{/trapping}}' + = '{{#custom1_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{custom1_label}} + .sheet-right {{custom1}} + = '{{/custom1_label}}' + = '{{#custom2_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{custom2_label}} + .sheet-right {{custom2}} + = '{{/custom2_label}}' + = '{{#custom3_label}}' + .sheet-rolltemplate__content-row + .sheet-left {{custom3_label}} + .sheet-right {{custom3}} + = '{{/custom3_label}}' + .sheet-rolltemplate__dice.sheet-rolltemplate__dice--damage + each roll in maxRof + if roll > 1 + = `{{#rollGreater() rof ${roll-1}}}` + .sheet-rolltemplate__damage-roll + = `{{roll${roll}}}` + if roll > 1 + = `{{/rollGreater() rof ${roll-1}}}` diff --git a/Savage Worlds - Graph Paper/source/templates/_secondary.pug b/Savage Worlds - Graph Paper/source/templates/_secondary.pug new file mode 100644 index 0000000000..64f8119d0b --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_secondary.pug @@ -0,0 +1,36 @@ +.sheet-secondary + +hexfield('pace', 'Pace', 'bottom', '6', '6') + +hexfield('flight', 'Flight', 'right', '0', '', 'sheet-hide-until-needed sheet-stay-on-input') + +hexfield('run', 'Run', 'left', 'd6', '', 'sheet-hide-until-needed') + input(type='hidden', name='attr_run_roll', value='d6') + +hexfield('parry', 'Parry', 'bottom', '2') + +hexfield('toughness', 'Tough.', 'bottom', '4') + + .sheet-hexfield(class=' sheet-hexfield--soak') + input(type='text', + name='attr_soak', + placeholder='d4', + value='d4', + spellcheck='false', + class='sheet-hex sheet-hex--36 sheet-hexfield__input') + + +hexfield('soak_mod', 'Bonus', 'up sheet-exception', '0', '', 'sheet-hide-until-needed sheet-stay-on-input') + +hexfield('soak_wd', 'WD', 'right', 'd6', '', 'sheet-hide-until-needed') + + input(type='hidden', name='attr_soak_roll', value='1d4!cs2') + input(type='hidden', name='attr_soak_wd_roll', value='1d6!cs2') + input(type='hidden', name='attr_soak_extra_wd_roll', value='-10000') + + input(type='hidden', name=`attr_soak_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 @{soak_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}}`) + + input(type='hidden', name=`attr_soak_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 @{soak_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}}`) + + input(type='hidden', + name=`attr_soak_extra_template`, + value!=`@{gm_roll} &{template:TraitRoll} {{header=@{name} ^{rolls} ^{soak}}} {{trait=^{soak}}} {{traitdie=@{soak}}} {{flat=@{soak_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{rof=[[ 1 ]]}} {{modifier=?{@{query_modifier}|0}}} {{wd=@{soak_wd}}} {{traitroll1=[[ @{soak_roll} @{soak_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}} {{wdroll=[[ @{soak_extra_wd_roll} @{soak_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}} @{soak_global_wd_roll} @{soak_global_bonus_wd_roll} {{reroll=[r](~soak)}}`) + + button(type='roll', + name='roll_soak', + value!=`@{gm_roll} &{template:TraitRoll} {{header=@{name} ^{rolls} ^{soak}}} {{trait=^{soak}}} {{traitdie=@{soak}}} {{flat=@{soak_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{rof=[[ 1 ]]}} {{modifier=?{@{query_modifier}|0}}} {{wd=@{soak_wd}}} {{traitroll1=[[ @{soak_roll} @{soak_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}} {{wdroll=[[ @{soak_wd_roll} @{soak_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}} @{soak_global_wd_roll} @{soak_global_bonus_wd_roll} {{reroll=[r](~soak)}}`, + class='sheet-hexfield__label sheet-hexfield__label--bottom') + span(data-i18n='soak') Soak diff --git a/Savage Worlds - Graph Paper/source/templates/_settings.pug b/Savage Worlds - Graph Paper/source/templates/_settings.pug new file mode 100644 index 0000000000..0f5bc019ee --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_settings.pug @@ -0,0 +1,501 @@ +.sheet-settings + input(type='radio', + name='attr_settings_pages', + value='styles', + label='Styles', + data-i18n-label='settings-tab-styles', + checked=true, + class='sheet-settings__page-tab sheet-settings__page-tab--styles') + + input(type='radio', + name='attr_settings_pages', + value='setup', + label='Setup', + data-i18n-label='settings-tab-setup', + class='sheet-settings__page-tab sheet-settings__page-tab--setup') + + input(type='radio', + name='attr_settings_pages', + value='blocks', + label='Blocks', + data-i18n-label='settings-tab-blocks', + class='sheet-settings__page-tab sheet-settings__page-tab--blocks') + + input(type='radio', + name='attr_settings_pages', + value='skills', + label='Skills', + data-i18n-label='settings-tab-skills', + class='sheet-settings__page-tab sheet-settings__page-tab--skills') + + input(type='radio', + name='attr_settings_pages', + value='help', + label='Help', + data-i18n-label='settings-tab-help', + class='sheet-settings__page-tab sheet-settings__page-tab--help') + + .sheet-settings__page.sheet-settings__page--styles + label.sheet-settings__item + span(data-i18n='settings-style-background-grid') Background Grid + input(type='checkbox', + name='attr_toggle_style_grid', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-style-dark-labels') Dark Labels + input(type='checkbox', + name='attr_toggle_style_dark_labels', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-style-roboto-font') Roboto Font (Off: Helvetica Neue) + input(type='checkbox', + name='attr_toggle_style_roboto', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-style-rounded-corners') Rounded Corners + input(type='checkbox', + name='attr_toggle_style_corners', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-style-skill-die-numbers') Skill Die Numbers + input(type='checkbox', + name='attr_toggle_skill_die_numbers', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-style-transitions') Transitions + input(type='checkbox', + name='attr_toggle_style_transitions', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-style-transition-delays') Transition Delays + input(type='checkbox', + name='attr_toggle_style_delays', + checked=true, + class='sheet-checkbox') + + .sheet-settings__page.sheet-settings__page--setup + label.sheet-settings__item + span(data-i18n='settings-function-augmentation-markers') Augmentation Markers + input(type='checkbox', + name='attr_toggle_augmentation_markers', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-rule-augmentation-strain') Augmentation Strain (SciFi Companion) + input(type='checkbox', + name='attr_toggle_strain', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-explode-run-die') Explode Run Die + input(type='checkbox', + name='attr_toggle_run_explode', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-roll-description-inputs') List Roll Description Inputs + input(type='checkbox', + name='attr_toggle_description_input_visibility', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-roll-injection-inputs') List Roll Injection Inputs + input(type='checkbox', + name='attr_toggle_injection_input_visibility', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-rule-no-power-points') No Power Points (SWADE 140) + input(type='checkbox', + name='attr_toggle_pp', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-running-ignores-wounds') Running Ignores Wounds + input(type='checkbox', + name='attr_toggle_run_wounds', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-running-applies-fatigue') Running Applies Fatigue + input(type='checkbox', + name='attr_toggle_run_fatigue', + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-silhouette-markers') Silhouette Markers + input(type='checkbox', + name='attr_toggle_silhouette_markers', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span(data-i18n='settings-function-skill-markers') Skill Markers + input(type='checkbox', + name='attr_toggle_skill_markers', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item + span + span(data-i18n='settings-misc-extent-prefix') Extend  + span(name='attr_rename_block_quick_notes', data-i18n='quick-notes') Quick Notes + input(type='checkbox', + name='attr_toggle_quick_notes_extension', + class='sheet-checkbox') + + - var i = 0 + + while i < 3 + - ++i + + label.sheet-settings__item.sheet-settings__item--text-input.sheet-settings__item--textarea + span(data-i18n=`settings-custom-button-${i}-label`)= `[Custom Button #${i}]` + input(type='text', + name=`attr_rename_custom_button_${i}`, + placeholder='UnShake/Detox/etc.', + data-i18n-placeholder='settings-custom-buttons-placeholder', + value= i == 1 ? 'UnShake' : `Button #${i}`, + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name=`attr_toggle_custom_button_${i}`, + class='sheet-checkbox sheet-settings__textarea-toggle') + textarea(name=`attr_custom_button_${i}_macro`, spellcheck='false') + !=`&{template:TraitRoll} {{header=@{name} ^{rolls} @{rename_spirit}}} {{trait=@{rename_spirit}}} {{traitdie=@{spirit}}} {{flat=@{spirit_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} {{traitroll1=[[ @{spirit_roll} @{spirit_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}} {{wd=@{spirit_wd}}} {{wdroll=[[ @{spirit_wd_roll} @{spirit_mod} - @{fatigue_mod} - @{wound_mod} + ?{@{query_modifier}|0} ]]}} @{spirit_global_wd_roll} @{spirit_global_bonus_wd_roll}` + + .sheet-settings__page.sheet-settings__page--blocks + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-abilities-label') [Abilities] + input(type='text', + name='attr_rename_block_abilities', + placeholder='Abilities', + data-i18n-placeholder='abilities', + value='Abilities', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_abilities_block', + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-allies-label') [Allies] + input(type='text', + name='attr_rename_block_allies', + placeholder='Allies', + data-i18n-placeholder='allies', + value='Allies', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_allies_block', + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-ammunition-label') [Ammunition] + input(type='text', + name='attr_rename_block_ammunition', + placeholder='Ammunition', + data-i18n-placeholder='ammunition', + value='Ammunition', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_ammunition_block', + checked=true, + class='sheet-checkbox') + + - var i = 0 + + while i < 3 + - ++i + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n=`settings-ammunition-container-${i}-label`)= `[Ammo #${i}]` + input(type='text', + name=`attr_rename_ammunition_container_${i}`, + placeholder=`Ammo #${i}`, + data-i18n-placeholder=`settings-ammunition-container-${i}-placeholder`, + value=`Ammo #${i}`, + spellcheck='false', + class='sheet-align-left') + span p + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-augmentations-label') [Augmentations] + input(type='text', + name='attr_rename_block_augmentations', + placeholder='Augmentations', + data-i18n-placeholder='augmentations', + value='Augmentations', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_augmentations_block', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-engrams-label') [Engrams] + input(type='text', + name='attr_rename_block_engrams', + placeholder='Engrams', + data-i18n-placeholder='engrams', + value='Engrams', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_engrams_block', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-integrity-label') [Integrity] + input(type='text', + name='attr_rename_block_integrity', + placeholder='Integrity', + data-i18n-placeholder='integrity', + value='Integrity', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_integrity_block', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-powerarmors-label') [Power Armors] + input(type='text', + name='attr_rename_block_powerarmors', + placeholder='Power Armors', + data-i18n-placeholder='powerarmors', + value='Power Armors', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_powerarmors_block', + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-power-energy-label') [Power/Energy/Mana] + input(type='text', + name='attr_rename_block_power', + placeholder='Power', + data-i18n-placeholder='power', + value='Power', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_power_block', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-powers-spells-label') [Powers/Spells] + input(type='text', + name='attr_rename_block_powers', + placeholder='Powers', + data-i18n-placeholder='powers', + value='Powers', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_powers_block', + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-quick-notes-label') [Quick Notes] + input(type='text', + name='attr_rename_block_quick_notes', + placeholder='Quick Notes', + data-i18n-placeholder='quick-notes', + value='Quick Notes', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_quick_notes_block', + checked=true, + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-vehicles-label') [Vehicles] + input(type='text', + name='attr_rename_block_vehicles', + placeholder='Vehicles', + data-i18n-placeholder='vehicles', + value='Vehicles', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_vehicles_block', + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-walkers-label') [Walkers] + input(type='text', + name='attr_rename_block_walkers', + placeholder='Walkers', + data-i18n-placeholder='walkers', + value='Walkers', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_walkers_block', + class='sheet-checkbox') + + .sheet-settings__page.sheet-settings__page--skills + - + var skills = ['Battle', 'Boating', 'Driving', 'Electronics', 'Faith', 'Focus', + 'Gambling', 'Hacking', 'Healing', 'Language', 'MAGIC', 'Occult', + 'Performance', 'Piloting', 'Repair', 'Psionics', 'Research', + 'Riding', 'Science', 'Spellcasting', 'Survival', 'Taunt', + 'Weird Science'] + + var disabledSkills = ['Faith', 'Focus', 'Occult', 'Psionics', 'Language', + 'Spellcasting', 'Weird Science'] + + each skill in skills + - var substring = skill.toLowerCase().replace(/ /g, '_') + + label.sheet-settings__item + span(name=`attr_rename_${substring}`)= skill + input(type='checkbox', + name=`attr_toggle_skill_${substring}`, + checked= !disabledSkills.includes(skill), + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-custom-skill-1-label') [Custom Skill #1] + input(type='text', + name='attr_rename_custom_skill_1', + placeholder='Custom Skill 1', + data-i18n-placeholder='settings-custom-skill-1-placeholder', + value='Custom Skill 1', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_skill_custom_skill_1', + class='sheet-checkbox') + + label.sheet-settings__item.sheet-settings__item--text-input + span(data-i18n='settings-custom-skill-2-label') [Custom Skill #2] + input(type='text', + name='attr_rename_custom_skill_2', + placeholder='Custom Skill 2', + data-i18n-placeholder='settings-custom-skill-2-placeholder', + value='Custom Skill 2', + spellcheck='false', + class='sheet-align-left') + input(type='checkbox', + name='attr_toggle_skill_custom_skill_2', + class='sheet-checkbox') + + .sheet-settings__page.sheet-settings__page--help + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-ammunition') Ammunition + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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]. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-armor-and-notes') Armor & Notes + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-attribute-reference') Attribute Reference + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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 attributes are appended with hyphens as well. So "Agility" becomes @{agility}, @{agility_mod}, @{agility_wd}, @{agility_extra_wd} (for extras only), and @{agility_natural}. "Tough." becomes @{toughness} and Armor is referenced with @{armor_head|_torso|_arms|_legs}. English only! + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-weapon-damage-rolls') Damage Rolls + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='settings-help-weapon-damage-rolls-description') You can enable damage rolls for list items by clicking the damage label. This will disable editing. Note that the dice codes must be valid, but you can use "Str" or "Agi" (etc.) as shorthands to reference attributes. The parser is not smart, however, so please also refer to the Roll20 Dice Reference. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-edges-and-hindrances') Edges & Hindrances + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-extra-sheet') Extra Sheet + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-helper-buttons') Helper Buttons + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-hexagon-fields') Hexagon Fields + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-list-item-options') List Item Options + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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!' + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-raise-damage') Raise Damage + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-rate-of-fire') Rate of Fire (Multiple Dice) + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-roll-injections') Roll Injections + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='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.

' + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-silhouette') Silhouette + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='settings-help-silhouette-description') Choose your silhouette; it looks fancy! You can set color markers all over the silhouette for any purpose, indicating augmentations or injuries or whatever you like. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-skill-tracks') Skill Tracks + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='settings-help-skill-tracks-description') Enter your skill die by clicking on the corresponding bubble (d4-2 to d12). The skill name will darken once you become trained and acts as roll button. You can enter a modifier and custom Wild Die or leave these fields empty to use defaults; the Wild Die can be disabled with "n/a". Positive modifiers are automatically prefixed. On the far right, you can set a color marker for any purpose. + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-track-rolls') Track Rolls + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='settings-help-track-rolls-description')!= 'When you lock the skill tracks with the icon in the top-right corner above the color marker column, you can click on the bubbles to roll the corresponding die independently. This is useful for effects that dynamically alter your skill die, such as boost/lower trait.' + + .sheet-settings__item.sheet-settings__item--help + span(data-i18n='settings-help-vehicles-and-more') Vehicles & More + input(type='checkbox', + class='sheet-toggle sheet-toggle--spoiler') + .sheet-bottom(data-i18n='settings-help-vehicles-and-more-description') You can enable blocks for vehicles and other vessels in the Blocks tab under Settings. The silhouette of vehicles can be cycled through by clicking; the switch can take a moment. Both blocks can display weapons by adding a number to the corresponding attribute (0-10). diff --git a/Savage Worlds - Graph Paper/source/templates/_sheet.pug b/Savage Worlds - Graph Paper/source/templates/_sheet.pug new file mode 100644 index 0000000000..e56869b948 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_sheet.pug @@ -0,0 +1,106 @@ +- // Global variables +- var maxRof = [...Array(8).keys()].map(n => ++n) + +include _common_fields.pug +include _mixin_attribute.pug +include _mixin_hexfield.pug +include _mixin_color_circle.pug +include _mixin_meta_field.pug +include _mixin_vehicle_weapons_sub_list.pug +include _mixin_simple_trait.pug + +.sheet-wrapper + input(type='checkbox', + name='attr_toggle_style_grid', + checked=true, + class='sheet-hidden sheet-toggle-grid') + + input(type='checkbox', + name='attr_toggle_style_dark_labels', + class='sheet-hidden sheet-toggle-dark-labels') + + input(type='checkbox', + name='attr_toggle_style_corners', + checked=true, + class='sheet-hidden sheet-toggle-corners') + + input(type='checkbox', + name='attr_toggle_style_transitions', + checked=true, + class='sheet-hidden sheet-toggle-transitions') + + input(type='checkbox', + name='attr_toggle_style_delays', + checked=true, + class='sheet-hidden sheet-toggle-delays') + + input(type='checkbox', + name='attr_toggle_style_roboto', + checked=true, + class='sheet-hidden sheet-toggle-roboto') + + input(type='checkbox', + name='attr_toggle_skill_die_numbers', + checked=true, + class='sheet-hidden sheet-toggle-skill-die-numbers') + + input(type='radio', + name='attr_sheet_variant', + value='wildcard', + checked=true, + class='sheet-variant-radio sheet-variant-radio--wildcard') + + input(type='radio', + name='attr_sheet_variant', + value='extra', + class='sheet-variant-radio sheet-variant-radio--extra') + + .sheet-body + .sheet-wildcard + .sheet-section.sheet-section--header + .sheet-left + include _meta.pug + .sheet-right + include _buttons.pug + .sheet-section.sheet-section--center + .sheet-left + .sheet-section--traits + include _attributes.pug + include _secondary.pug + include _armor.pug + include _silhouette.pug + .sheet-section--features + include _features.pug + .sheet-section--resources + include _health.pug + include _power.pug + .sheet-right.sheet-sans + include _tabs.pug + include _skills.pug + include _notebook.pug + include _advancements.pug + include _settings.pug + + .sheet-section.sheet-section--footer + .sheet-left + include _abilities.pug + include _weapons.pug + include _apparel.pug + include _integrity.pug + include _augmentations.pug + include _engrams.pug + include _powers.pug + include _vehicles.pug + include _walkers.pug + include _powerarmor.pug + include _allies.pug + .sheet-right + include _ammunition.pug + include _quick_notes.pug + include _encumbrance.pug + include _inventory.pug + + .sheet-extra + include _extra_sheet.pug + + include _roll_template.pug diff --git a/Savage Worlds - Graph Paper/source/templates/_silhouette.pug b/Savage Worlds - Graph Paper/source/templates/_silhouette.pug new file mode 100644 index 0000000000..faee09d552 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_silhouette.pug @@ -0,0 +1,25 @@ +input(type='checkbox', + name='attr_toggle_silhouette_markers', + checked=true, + class='sheet-hidden sheet-toggle-silhouette-markers') + +.sheet-silhouette + input(type='checkbox', + name='attr_silhouette_selection', + class='sheet-silhouette__switch') + + .sheet-silhouette__image + + +color_circle('head', 'sheet-silhouette__head') + +color_circle('torso_upper', 'sheet-silhouette__torso-upper') + +color_circle('torso_lower', 'sheet-silhouette__torso-lower') + +color_circle('left_arm_upper', 'sheet-silhouette__left-arm-upper') + +color_circle('left_arm_lower', 'sheet-silhouette__left-arm-lower') + +color_circle('left_hand', 'sheet-silhouette__left-hand') + +color_circle('right_arm_upper', 'sheet-silhouette__right-arm-upper') + +color_circle('right_arm_lower', 'sheet-silhouette__right-arm-lower') + +color_circle('right_hand', 'sheet-silhouette__right-hand') + +color_circle('left_leg_upper', 'sheet-silhouette__left-leg-upper') + +color_circle('left_leg_lower', 'sheet-silhouette__left-leg-lower') + +color_circle('right_leg_upper', 'sheet-silhouette__right-leg-upper') + +color_circle('right_leg_lower', 'sheet-silhouette__right-leg-lower') diff --git a/Savage Worlds - Graph Paper/source/templates/_skills.pug b/Savage Worlds - Graph Paper/source/templates/_skills.pug new file mode 100644 index 0000000000..f82e8dfffa --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_skills.pug @@ -0,0 +1,124 @@ +- + var skills = [['Academics', 'Sma'], ['Athletics', 'Agi'], ['Battle', 'Sma'], + ['Boating', 'Agi'], ['Common Knowledge', 'Sma'], ['Driving', 'Agi'], + ['Electronics', 'Sma'], ['Faith', 'Spi'], ['Fighting', 'Agi'], + ['Focus', 'Spi'], ['Gambling', 'Sma'], ['Hacking', 'Sma'], + ['Healing', 'Sma'], ['Intimidation', 'Spi'], ['Language', 'Sma'], + ['MAGIC', 'Sma'], ['Notice', 'Sma'], ['Occult', 'Sma'], + ['Performance', 'Spi'], ['Persuasion', 'Spi'], ['Piloting', 'Agi'], + ['Psionics', 'Sma'], ['Repair', 'Sma'], ['Research', 'Sma'], + ['Riding', 'Agi'], ['Science', 'Sma'], ['Shooting', 'Agi'], + ['Spellcasting', 'Sma'], ['Stealth', 'Agi'], ['Survival', 'Sma'], + ['Taunt', 'Sma'], ['Thievery', 'Agi'], ['Weird Science', 'Sma'], + ['Custom Skill 1', 'Custom'], ['Custom Skill 2', 'Custom']] + + var disabledSkills = ['faith', 'focus', 'language', 'occult', 'psionics', + 'spellcasting', 'weird_science', 'custom_skill_1', + 'custom_skill_2'] + + var steps = [['d4-2', '4'], ['d4', '4'], ['d6', '6'], + ['d8', '8'], ['d10', '10'], ['d12', '12']].reverse() + +input(type='checkbox', + name='attr_toggle_skill_markers', + checked=true, + class='sheet-hidden sheet-toggle-skill-markers') + +.sheet-skills + input(type='checkbox', name='attr_skill_lock', class='sheet-skills__lock') + + .sheet-skills__wrapper + .sheet-header + .sheet-header__labels + .sheet-skills__die + span(data-i18n='die-button-number-2') 2 + .sheet-skills__die + span(data-i18n='die-button-number-4') 4 + .sheet-skills__die + span(data-i18n='die-button-number-6') 6 + .sheet-skills__die + span(data-i18n='die-button-number-8') 8 + .sheet-skills__die + span(data-i18n='die-button-number-10') 10 + .sheet-skills__die.sheet-a + span(data-i18n='die-button-number-12') 12 + .sheet-skills__plus + .sheet-skills__mod + span(data-i18n='skill-track-mod-u') MOD + .sheet-skills__wd + span(data-i18n='skill-track-wd-u') WD + + each skill in skills + - var trait = skill[0].toLowerCase().replace(/\./g, '').replace(/ /g, '_') + + input(type='checkbox', + name=`attr_toggle_skill_${trait}`, + checked= !disabledSkills.includes(trait), + class='sheet-toggle sheet-toggle--block') + + .sheet-skills__skill(class=`sheet-skills__skill--${trait}`) + .sheet-skills__color-marker + +color_circle(trait) + + input(type='text', + name=`attr_${trait}_wd`, + placeholder='WD', + data-i18n-placeholder='skill-track-wd-placeholder-u', + class='sheet-skills__wd') + + input(type='text', + name=`attr_${trait}_mod`, + placeholder='MOD', + data-i18n-placeholder='skill-track-mod-placeholder-u', + class='sheet-skills__mod') + + .sheet-skills__plus + + + .sheet-skills__track + each step in steps + input(type='radio', + name=`attr_${trait}`, + value=step[0], + label=step[0].replace('d', ''), + data-i18n-label=`skill-track-die-label-${step[0]}`, + class=`sheet-radio-track sheet-${step[0]}`, + checked= step[0] == 'd4-2') + + - // Track roll + button(type='roll', + name=`roll_${trait}_${step[1]}`, + value!= `@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + ?{@{query_rate_of_fire}|1}} ]]}} {{header=@{name} ^{rolls} @{rename_${trait}}}} {{trait=@{rename_${trait}}}} {{traitdie=${step[0]}}} {{flat=@{${trait}_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} ${maxRof.map(n => `{{traitroll${n}=[[ 1d${step[1]}!cs2 + (${ step[0] != 'd4-2' ? `@{${trait}_untrained_mod}` : `-2` })[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{${trait}_global_wd_roll} @{${trait}_global_bonus_wd_roll} {{wd=@{${trait}_wd}}} {{wdroll=[[ @{${trait}_wd_roll}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - @{fatigue_mod}[FTG] - @{wound_mod}[WND] + (?{@{query_modifier}|0})[Query] ]]}} {{reroll=[r](~${trait}_${step[1]})}}`, + class='sheet-skills__step-button') + .sheet-tooltip.sheet-tooltip--top + span(data-i18n='roll-tooltip-prefix') Roll + span= `${step[0]} (` + span(data-i18n='roll-tooltip-suffix') RoF + span= `1-${maxRof.length})` + + input(type='hidden', + name=`attr_rename_${trait}`, + value= skill[0] == 'Common Knowledge' ? 'Common Knowl.' : skill[0]) + + input(type='hidden', name=`attr_${trait}_untrained_mod`, value='-2') + input(type='hidden', name=`attr_${trait}_roll`, value='1d4') + input(type='hidden', name=`attr_${trait}_wd_roll`, value='1d6') + input(type='hidden', name=`attr_${trait}_extra_wd_roll`, value='-10000') + + input(type='hidden', name=`attr_${trait}_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', name=`attr_${trait}_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', + name=`attr_${trait}_roll_body`, + value!=`@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{query_global_rof} ]]}} {{header=@{name} ^{rolls} @{rename_${trait}}}} {{trait=@{rename_${trait}}}} {{traitdie=@{${trait}}}} {{flat=@{${trait}_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} ${maxRof.map(n => `{{traitroll${n}=[[ @{${trait}_roll}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{${trait}_global_wd_roll} @{${trait}_global_bonus_wd_roll}`) + + -// Label roll; the modifier needs the +0 to work if empty! + button(type='roll', + name=`roll_${trait}`, + value!=`@{${trait}_roll_body} {{wd=@{${trait}_wd}}} {{wdroll=[[ @{${trait}_wd_roll}!cs2 + (@{${trait}_untrained_mod})[Untrained] + (@{${trait}_mod}+0)[Flat] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} {{reroll=[r](~${trait})}}`, + class='sheet-skills__button') + .sheet-tooltip.sheet-tooltip--left + span(name=`attr_rename_${skill[1].toLowerCase()}`, + data-i18n=`${skill[1].toLowerCase()}-u`)= skill[1] + span(name=`attr_rename_${trait}`) + = skill[0] == 'Common Knowledge' ? 'Common Knowl.' : skill[0] diff --git a/Savage Worlds - Graph Paper/source/templates/_tabs.pug b/Savage Worlds - Graph Paper/source/templates/_tabs.pug new file mode 100644 index 0000000000..6d546faa06 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_tabs.pug @@ -0,0 +1,29 @@ +.sheet-san-tabs +input(type='radio', + name='attr_sans_tabs', + value='skills', + label='Skills', + data-i18n-label='tab-skills', + checked=true, + class='sheet-tab sheet-tab--skills') + +input(type='radio', + name='attr_sans_tabs', + value='advancements', + label='Advancements', + data-i18n-label='tab-advancements', + class='sheet-tab sheet-tab--advancements') + +input(type='radio', + name='attr_sans_tabs', + value='notebook', + label='Notebook', + data-i18n-label='tab-notebook', + class='sheet-tab sheet-tab--notebook') + +input(type='radio', + name='attr_sans_tabs', + value='settings', + label='Settings', + data-i18n-label='tab-settings', + class='sheet-tab sheet-tab--settings') diff --git a/Savage Worlds - Graph Paper/source/templates/_vehicles.pug b/Savage Worlds - Graph Paper/source/templates/_vehicles.pug new file mode 100644 index 0000000000..220169cab4 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_vehicles.pug @@ -0,0 +1,98 @@ +input(type='checkbox', + name='attr_toggle_vehicles_block', + checked=false, + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-vehicles + .sheet-header + span.sheet-header__title.sheet-vehicles__name(name='attr_rename_block_vehicles', data-i18n='vehicles') Vehicles + .sheet-header__labels + .sheet-vehicles__size(data-i18n='vehicles-size') Size + .sheet-vehicles__handling(data-i18n='vehicles-handling') Handling + .sheet-vehicles__speed(data-i18n='vehicles-speed') Speed + .sheet-vehicles__toughness(data-i18n='vehicles-toughness') Tough. + .sheet-vehicles__crew(data-i18n='vehicles-crew') Crew + .sheet-vehicles__weapons(data-i18n='vehicles-weapons') Weap. + + input(type='checkbox', + name='attr_vehicles_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_vehicles + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_vehicle_name', + placeholder='Vehicle Type', + data-i18n-placeholder='vehicles-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-vehicles__name sheet-stretch') + + input(type='text', + name='attr_vehicle_size', + placeholder='3', + spellcheck='false', + class='sheet-vehicles__size') + + input(type='text', + name='attr_vehicle_handling', + placeholder='0', + spellcheck='false', + class='sheet-vehicles__handling') + + input(type='text', + name='attr_vehicle_speed', + placeholder='80', + spellcheck='false', + class='sheet-vehicles__speed') + + input(type='text', + name='attr_vehicle_toughness', + placeholder='4 (0)', + data-i18n-placeholder='vehicles-toughness-placeholder', + spellcheck='false', + class='sheet-vehicles__toughness') + + input(type='text', + name='attr_vehicle_crew', + placeholder='1+3', + data-i18n-placeholder='vehicles-crew-placeholder', + spellcheck='false', + class='sheet-vehicles__crew') + + input(type='text', + name='attr_vehicle_weapons_count', + placeholder='0', + spellcheck='false', + class='sheet-vehicles__weapons') + + input(type='checkbox', + name='attr_vehicle_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__frame + input(type='hidden', + name='attr_vehicle_silhouette', + value='0', + class='sheet-hidden sheet-repitem__frame-silhouette-control') + + .sheet-repitem__frame-silhouette + input(type='checkbox', + name='attr_vehicle_silhouette_cycle', + class='sheet-repitem__frame-silhouette-button') + + .sheet-repitem__frame-build + textarea(name='attr_vehicle_build', + placeholder='Chassis | Modifications, Notes, etc.', + data-i18n-placeholder='vehicles-build-placeholder', + spellcheck='false') + + input(type='hidden', + name='attr_vehicle_weapons_count', + value='0', + class='sheet-hidden sheet-repitem__weapons-control') + + +vehicle_weapons_sub_list() + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_walkers.pug b/Savage Worlds - Graph Paper/source/templates/_walkers.pug new file mode 100644 index 0000000000..e7bd2a3fb9 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_walkers.pug @@ -0,0 +1,97 @@ +input(type='checkbox', + name='attr_toggle_walkers_block', + checked=false, + class='sheet-toggle sheet-toggle--block') + +.sheet-block.sheet-walkers + .sheet-header + span.sheet-header__title.sheet-walkers__name(name='attr_rename_block_walkers', data-i18n='walkers') Walkers + .sheet-header__labels + .sheet-walkers__size(data-i18n='walkers-size') Size + .sheet-walkers__pace(data-i18n='walkers-pace') Pace + .sheet-walkers__strength(data-i18n='walkers-strength') Strength + .sheet-walkers__toughness(data-i18n='walkers-toughness') Tough. + .sheet-walkers__mods(data-i18n='walkers-mods') Mods + .sheet-walkers__crew(data-i18n='walkers-crew') Crew + .sheet-walkers__weapons(data-i18n='walkers-weapons') Weap. + + input(type='checkbox', + name='attr_walkers_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + fieldset.repeating_walkers + .sheet-repitem + .sheet-repitem__primary + input(type='text', + name='attr_walker_name', + placeholder='Walker Type', + data-i18n-placeholder='walkers-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-walkers__name sheet-stretch') + + input(type='text', + name='attr_walker_size', + placeholder='1', + spellcheck='false', + class='sheet-walkers__size') + + input(type='text', + name='attr_walker_pace', + placeholder='6', + spellcheck='false', + class='sheet-walkers__pace') + + input(type='text', + name='attr_walker_strength', + placeholder='d12+4', + spellcheck='false', + class='sheet-walkers__strength') + + input(type='text', + name='attr_walker_toughness', + placeholder='20 (5)', + data-i18n-placeholder='walkers-toughness-placeholder', + spellcheck='false', + class='sheet-walkers__toughness') + + input(type='text', + name='attr_walker_mods', + placeholder='0/20', + data-i18n-placeholder='walkers-mods-placeholder', + spellcheck='false', + class='sheet-walkers__mods') + + input(type='text', + name='attr_walker_crew', + placeholder='1', + spellcheck='false', + class='sheet-walkers__crew') + + input(type='text', + name='attr_walker_weapons_count', + placeholder='0', + spellcheck='false', + class='sheet-walkers__weapons') + + input(type='checkbox', + name='attr_walker_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__frame + .sheet-repitem__frame-silhouette + + .sheet-repitem__frame-build + textarea(name='attr_walker_build', + placeholder='Chassis | Modifications, Notes, etc.', + data-i18n-placeholder='walkers-build-placeholder', + spellcheck='false') + + input(type='hidden', + name='attr_walker_weapons_count', + value='0', + class='sheet-hidden sheet-repitem__weapons-control') + + +vehicle_weapons_sub_list() + + .sheet-footer diff --git a/Savage Worlds - Graph Paper/source/templates/_weapons.pug b/Savage Worlds - Graph Paper/source/templates/_weapons.pug new file mode 100644 index 0000000000..5daaf84a52 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/_weapons.pug @@ -0,0 +1,238 @@ +.sheet-block.sheet-weapons + .sheet-header + span.sheet-header__title.sheet-weapons__name(name='attr_rename_block_weapons', data-i18n='weapons') Weapons + .sheet-header__labels + .sheet-weapons__damage + label(title='Toggle Damage Rolls', + data-i18n-title='toggle-damage-rolls-title', + class='sheet-damage-roll-toggle-label') + input.sheet-hidden(type='checkbox', name='attr_weapons_damage_roll_toggle') + span.sheet-icon ; + span(data-i18n='weapons-damage') Damage + .sheet-weapons__range(data-i18n='weapons-range') Range + .sheet-weapons__ap(data-i18n='weapons-ap') AP + .sheet-weapons__rof(data-i18n='weapons-rof') ROF + .sheet-weapons__shots(data-i18n='weapons-shots') Shots + .sheet-weapons__weight(data-i18n='weapons-weight') WGT + + input(type='checkbox', + name='attr_weapons_visibility_toggle', + checked=true, + class='sheet-toggle sheet-toggle--visibility') + + input(type='checkbox', + name='attr_weapons_damage_roll_toggle', + class='sheet-damage-roll-toggle sheet-hidden') + + input(type='checkbox', + name='attr_toggle_description_input_visibility', + checked=true, + class='sheet-toggle-description-input sheet-hidden') + + input(type='checkbox', + name='attr_toggle_injection_input_visibility', + class='sheet-toggle-injection-input sheet-hidden') + + fieldset.repeating_weapons + .sheet-repitem + .sheet-repitem__primary + input(type='checkbox', + name='attr_roll_button_toggle', + class='sheet-hidden sheet-toggle sheet-toggle--list-roll') + + button(type='roll', + name='roll_skill', + value!=`@{skill_roll_body} {{wd=@{skill_wd}}} {{wdroll=[[ @{skill_wd_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} @{wd_override} {{reroll=[r](~repeating_weapons_skill)}} {{damageroll=[t](~repeating_weapons_weapon_damage)}} {{description=@{roll_description}}} @{roll_injection}`, + class='sheet-repitem__skill-roll sheet-repitem__skill-roll--wildcard') 9 + + button(type='roll', + name='roll_extra_skill', + value!=`@{skill_roll_body} {{wd=@{skill_wd}}} {{wdroll=[[ @{skill_extra_wd_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}} @{wd_override} {{reroll=[r](~repeating_weapons_skill)}} {{damageroll=[t](~repeating_weapons_weapon_damage)}} {{description=@{roll_description}}} @{roll_injection}`, + class='sheet-repitem__skill-roll sheet-repitem__skill-roll--extra') 9 + + input(type='text', + name='attr_weapon_name', + placeholder='Weapon (Ammo)', + data-i18n-placeholder='weapons-name-placeholder', + spellcheck='false', + class='sheet-align-left sheet-weapons__name sheet-stretch') + + .sheet-damage-button-overlay + input(type='hidden', name='attr_weapon_damage_roll', value='0') + + button(type='roll', + name='roll_weapon_damage', + value!=`@{gm_roll} &{template:DamageRoll} {{header=@{name} ^{rolls} ^{damage}}} {{code=@{weapon_damage}}} {{source_label=^{weapon}}} {{source=@{weapon_name}}} {{rof=[[ 0 + @{rof_override} ]]}} {{modifier=?{@{query_damage_modifier}}}} {{range=@{weapon_range}}} {{ap=@{weapon_ap}}} {{trapping=@{weapon_trapping}}} ${maxRof.map(n => `{{roll${n}=[[ @{weapon_damage_roll} + (?{@{query_damage_modifier}}+0) ]]}}`).join(' ')} {{reroll=[r](~repeating_weapons_weapon_damage)}}`, + class='sheet-button sheet-weapons__damage-button') + + input(type='text', + name='attr_weapon_damage', + placeholder='STR+d6', + data-i18n-placeholder='weapons-damage-placeholder', + spellcheck='false', + class='sheet-weapons__damage') + + input(type='text', + name='attr_weapon_range', + placeholder='Range/Melee', + data-i18n-placeholder='weapons-range-placeholder', + spellcheck='false', + class='sheet-weapons__range') + + input(type='text', + name='attr_weapon_ap', + placeholder='0', + spellcheck='false', + class='sheet-weapons__ap') + + input(type='text', + name='attr_weapon_rof', + placeholder='1', + spellcheck='false', + class='sheet-weapons__rof') + + input(type='text', + name='attr_weapon_shots', + placeholder='6', + spellcheck='false', + class='sheet-weapons__shots') + + input(type='text', + name='attr_weapon_weight', + placeholder='4', + spellcheck='false', + class='sheet-weapons__weight') + + input(type='checkbox', + name='attr_weapon_notes_toggle', + class='sheet-toggle sheet-toggle--arrow') + + .sheet-repitem__secondary + input(type='checkbox', + name='attr_trapping_toggle', + checked=true, + class='sheet-hidden sheet-toggle') + + .sheet-repitem__label(data-i18n='trapping') Trapping + + input(type='text', + name='attr_weapon_trapping', + placeholder='Piercing/etc.', + data-i18n-placeholder='weapons-trapping-placeholder', + spellcheck='false', + class='sheet-align-left sheet-weapons__trapping') + + .sheet-repitem__label(data-i18n='notes') Notes + + input(type='text', + name='attr_weapon_notes', + placeholder='Notes, Tags, Requirements, etc.', + data-i18n-placeholder='weapons-notes-placeholder', + spellcheck='false', + class='sheet-align-left sheet-repitem__note sheet-stretch') + + input(type='checkbox', + name='attr_weapon_settings_toggle', + class='sheet-toggle sheet-toggle--settings') + + .sheet-repitem__settings + .sheet-repitem__settings-content + label.sheet-label-toggle.sheet-label-toggle--full-row.sheet-roll-description + input(type="hidden", name='attr_roll_description') + input(type='checkbox', name='attr_roll_description_toggle') + span(data-i18n='roll-description') Description + input(type='text', + name='attr_roll_description_input', + placeholder='Narrative or functional description below the header in the Roll Template. Leave empty to disable.', + data-i18n-placeholder='roll-description-placeholder', + value='', + spellcheck='false', + class='sheet-label-toggle__input') + + label.sheet-label-toggle.sheet-label-toggle--full-row.sheet-roll-injection + input(type="hidden", name='attr_roll_injection') + input(type='checkbox', name='attr_roll_injection_toggle') + span(data-i18n='roll-injection') Roll Injection + input(type='text', + name='attr_roll_injection_input', + placeholder='{{source_label=}} {{source=}} {{custom3_label=}} {{custom3=}} {{rof=[[ 1 ]]}} {{traitroll8=}}', + data-i18n-placeholder='roll-injection-placeholder', + value='', + spellcheck='false', + class='sheet-label-toggle__input') + + label.sheet-label-toggle + input(type='checkbox', name='attr_trapping_toggle', checked=true) + span(data-i18n='trapping') Trapping + + label.sheet-label-toggle + input(type='hidden', name='attr_skill_wd', value='@{shooting_wd}') + input(type='hidden', name='attr_skill_mod', value='@{shooting_mod}') + input(type='hidden', name='attr_skill_untrained_mod', value='@{shooting_untrained_mod}') + input(type='hidden', name='attr_skill_roll', value='@{shooting_roll}') + input(type='hidden', name='attr_skill_wd_roll', value='@{shooting_wd_roll}') + input(type='hidden', name='attr_skill_extra_wd_roll', value='@{shooting_wd_roll}') + + input(type='hidden', name=`attr_skill_global_wd_roll`, value=`{{global_wd=@{query_global_wd}}} {{global_wdroll=[[ @{query_global_wd}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', name=`attr_skill_global_bonus_wd_roll`, value=`{{bonus_wd=@{query_global_bonus_wd}}} {{bonus_wdroll=[[ @{query_global_bonus_wd}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`) + + input(type='hidden', + name=`attr_skill_roll_body`, + value!=`@{gm_roll} &{template:TraitRoll} {{rof=[[ 0 + @{rof_override} ]]}} {{header=@{name} ^{rolls} @{skill_name}}} {{trait=@{skill_name}}} {{source_label=^{weapon}}} {{source=@{weapon_name}}} {{traitdie=@{skill_roll}}} {{flat=@{skill_mod}}} {{wounds=[[ @{wound_mod} ]]}} {{fatigue=[[ @{fatigue_mod} ]]}} {{modifier=?{@{query_modifier}|0}}} {{bonus=@{skill_bonus}}} ${maxRof.map(n => `{{traitroll${n}=[[ @{skill_roll}!cs2 + (@{skill_untrained_mod})[Untrained] + (@{skill_mod}+0)[Flat] + (@{skill_bonus}+0)[Bonus] - (@{fatigue_mod})[Fatigue] - (@{wound_mod})[Wounds] + (?{@{query_modifier}|0})[Modifier] ]]}}`).join(' ')} @{skill_global_wd_roll} @{skill_global_bonus_wd_roll}`) + + input(type='checkbox', name='attr_roll_button_toggle') + span(data-i18n='roll-button') Roll Button + input(type='text', + name='attr_skill_name', + placeholder='Shooting', + data-i18n-placeholder='weapons-skill-placeholder', + value='Shooting', + spellcheck='false', + class='sheet-label-toggle__input') + input(type='text', + name='attr_skill_bonus', + placeholder='+0', + class='sheet-label-toggle__input sheet-label-toggle__input--tiny') + + label.sheet-label-toggle + input(type="hidden", name='attr_rof_override', value='?{@{query_rate_of_fire}|@{weapon_rof}}') + input(type='checkbox', name='attr_rof_override_toggle', checked=true) + span(data-i18n='query-rof') Query RoF + + label.sheet-label-toggle + input(type="hidden", name='attr_wd_override', value='') + input(type='checkbox', name='attr_wd_override_toggle') + span(data-i18n='wild-die-override') WD Override + input(type='text', + name='attr_wd_override_die', + value='', + spellcheck='false', + class='sheet-label-toggle__input sheet-label-toggle__input--tiny') + + label.sheet-label-toggle(title='Exploding Damage Dice On/Off', data-i18n-title='ace-damage-title') + input(type="hidden", name='attr_explode_damage', value='!') + input(type='checkbox', name='attr_explode_damage_toggle', checked=true) + span(data-i18n='ace-damage') Ace Damage + + input(type='checkbox', + name='attr_weapon_weight_toggle', + checked=true, + title='Weight On/Off', + data-i18n-title='weapons-weight-toggle-title', + class='sheet-toggle sheet-toggle--special sheet-toggle--weight') + + input(type='checkbox', + name='attr_weapon_note_box_toggle', + class='sheet-toggle sheet-toggle--note-box') + + .sheet-repitem__note-box + textarea(name='attr_weapon_note_box', + placeholder='Notes', + data-i18n-placeholder='weapons-note-box-placeholder', + spellcheck='false') + + .sheet-footer + span.sheet-label(data-i18n='weapons-total-weight') Total Weight:  + span(name='attr_carry_weight_weapons', + class='sheet-label sheet-label--weight') 0.0 diff --git a/Savage Worlds - Graph Paper/source/templates/browser_preview.pug b/Savage Worlds - Graph Paper/source/templates/browser_preview.pug new file mode 100644 index 0000000000..71afc608b4 --- /dev/null +++ b/Savage Worlds - Graph Paper/source/templates/browser_preview.pug @@ -0,0 +1,8 @@ +doctype html +html + head + meta(charset='utf-8') + style + include ../../SavageWorldsGraphPaper.css + body + include _sheet.pug diff --git a/Savage Worlds - Graph Paper/translation.json b/Savage Worlds - Graph Paper/translation.json new file mode 100644 index 0000000000..6ec0e25d2d --- /dev/null +++ b/Savage Worlds - Graph Paper/translation.json @@ -0,0 +1,631 @@ +{ + "_height": "Height", + "abilities": "Abilities", + "abilities-placeholder": "Abilities", + "ability-placeholder": "Ability: Description", + "ace-damage": "Ace Damage", + "ace-damage-title": "Exploding Damage Dice On/Off", + "advancements-heroic-placeholder": "Heroic", + "advancements-legendary-placeholder": "Legendary", + "advancements-novice-placeholder": "Novice", + "advancements-rank-h": "H", + "advancements-rank-l": "L", + "advancements-rank-n": "N", + "advancements-rank-s": "S", + "advancements-rank-v": "V", + "advancements-seasoned-placeholder": "Seasoned", + "advancements-veteran-placeholder": "Veteran", + "age": "Age", + "agi-u": "AGI", + "agility-mod": "Bonus", + "agility-natural": "Natural", + "agility-wd": "WD", + "allies": "Allies", + "allies-name-placeholder": "Name", + "allies-note-box-placeholder": "Notes", + "allies-note-field-1-placeholder": "Note #1", + "allies-note-field-10-placeholder": "Note #10", + "allies-note-field-11-placeholder": "Note #11", + "allies-note-field-12-placeholder": "Note #12", + "allies-note-field-13-placeholder": "Note #13", + "allies-note-field-14-placeholder": "Note #14", + "allies-note-field-15-placeholder": "Note #15", + "allies-note-field-16-placeholder": "Note #16", + "allies-note-field-17-placeholder": "Note #17", + "allies-note-field-18-placeholder": "Note #18", + "allies-note-field-19-placeholder": "Note #19", + "allies-note-field-2-placeholder": "Note #2", + "allies-note-field-20-placeholder": "Note #20", + "allies-note-field-3-placeholder": "Note #3", + "allies-note-field-4-placeholder": "Note #4", + "allies-note-field-5-placeholder": "Note #5", + "allies-note-field-6-placeholder": "Note #6", + "allies-note-field-7-placeholder": "Note #7", + "allies-note-field-8-placeholder": "Note #8", + "allies-note-field-9-placeholder": "Note #9", + "ally": "Ally", + "ammunition": "Ammunition", + "ammunition-reset": "R", + "ammunition-set": "S", + "apparel": "Apparel", + "apparel-armor": "Armor", + "apparel-name-placeholder": "Apparel", + "apparel-note-box-placeholder": "Notes", + "apparel-notes-label": "Notes:", + "apparel-notes-placeholder": "Notes, Tags, Trappings, Requirements, etc.", + "apparel-properties": "Properties", + "apparel-properties-placeholder": "Protection/Resistance/Tags", + "apparel-total-weight": "Total Weight: ", + "apparel-weight": "WGT", + "apparel-weight-placeholder": "WGT", + "apparel-weight-toggle-title": "Weight On/Off", + "armor-and-statistics": "Armor & Statistics", + "armor-arms": "Arms", + "armor-head": "Head", + "armor-legs": "Legs", + "armor-notes-u": "NOTES", + "armor-torso": "Torso", + "attributes": "Attributes", + "augmentations": "Augmentations", + "augmentations-grade": "Grade", + "augmentations-grade-placeholder": "Iron", + "augmentations-loss": "Loss", + "augmentations-name-placeholder": "[Advanced/Superior] Augmentation [Level] (Upgrades)", + "augmentations-note-box-placeholder": "Notes", + "augmentations-notes-label": "Notes:", + "augmentations-notes-placeholder": "Effect/Description", + "augmentations-power": "Power", + "augmentations-slots": "Slots", + "augmentations-strain": "Strain", + "augmentations-toggle-title": "Loss/Strain On/Off", + "augmentations-total-loss": "Total Loss: ", + "augmentations-total-strain": "Total Strain: ", + "bennies": "Bennies", + "bits": "#Bits", + "bonus-wd": "Bonus WD", + "bonus-wild-die": "Bonus Wild Die", + "carried-weight-total": "Total Carried Weight", + "custom-u": "CUSTOM", + "damage": "Damage", + "damage-modifier": "Damage Modifier", + "defaults-block-show-abilities": "[Block] Show Abilities", + "defaults-block-show-abilities-description": "List special abilities or monstrous powers.", + "defaults-block-show-allies": "[Block] Show Allies", + "defaults-block-show-allies-description": "Keep track of allied characters with a barebone mini sheet.", + "defaults-block-show-ammunition": "[Block] Show Ammunition", + "defaults-block-show-ammunition-description": "Keep track of your \"magazines\" for three weapons.", + "defaults-block-show-augmentations": "[Block] Show Augmentations", + "defaults-block-show-augmentations-description": "Install augmentations/cyberware and keep track of the Loss/Strain.", + "defaults-block-show-engrams": "[Block] Show Engrams", + "defaults-block-show-engrams-description": "Special programs or hardware to execute Hacking actions.", + "defaults-block-show-integrity": "[Block] Show Integrity", + "defaults-block-show-integrity-description": "Quantifies mental health/sanity and keeps track of mental afflictions. Maschinenleben.", + "defaults-block-show-power": "[Block] Show Power/Energy", + "defaults-block-show-power-description": "The energy/mana/etc. reserves of a character.", + "defaults-block-show-powerarmors": "[Block] Show Power Armors", + "defaults-block-show-powerarmors-description": "Vehicles and their modifications/weapons.", + "defaults-block-show-powers": "[Block] Show Powers/Spells", + "defaults-block-show-powers-description": "The known powers/spells of a character.", + "defaults-block-show-vehicles": "[Block] Show Vehicles", + "defaults-block-show-vehicles-description": "Vehicles and their modifications/weapons.", + "defaults-block-show-walkers": "[Block] Show Walkers", + "defaults-block-show-walkers-description": "Walkers/Mechs and their modifications/weapons.

Show/Hide Skills

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.

Show/Hide Blocks

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.

Rename Skills

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.

Rename Integrity Hindrances (Maschinenleben)

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).

Rename Blocks

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.

Rename Labels

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.

Rename Attributes

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.

", + "settings-help-silhouette": "Silhouette", + "settings-help-silhouette-description": "Choose your silhouette; it looks fancy! You can set color markers all over the silhouette for any purpose, indicating augmentations or injuries or whatever you like.", + "settings-help-skill-tracks": "Skill Tracks", + "settings-help-skill-tracks-description": "Enter your skill die by clicking on the corresponding bubble (d4-2 to d12). The skill name will darken once you become trained and acts as roll button. You can enter a modifier and custom Wild Die or leave these fields empty to use defaults; the Wild Die can be disabled with \"n/a\". Positive modifiers are automatically prefixed. On the far right, you can set a color marker for any purpose.", + "settings-help-track-rolls": "Track Rolls", + "settings-help-track-rolls-description": "When you lock the skill tracks with the icon in the top-right corner above the color marker column, you can click on the bubbles to roll the corresponding die independently. This is useful for effects that dynamically alter your skill die, such as boost/lower trait.", + "settings-help-vehicles-and-more": "Vehicles & More", + "settings-help-vehicles-and-more-description": "You can enable blocks for vehicles and other vessels in the Blocks tab under Settings. The silhouette of vehicles can be cycled through by clicking; the switch can take a moment. Both blocks can display weapons by adding a number to the corresponding attribute (0-10).", + "settings-help-weapon-damage-rolls": "Damage Rolls", + "settings-help-weapon-damage-rolls-description": "You can enable damage rolls for list items by clicking the damage label. This will disable editing. Note that the dice codes must be valid, but you can use \"Str\" or \"Agi\" (etc.) as shorthands to reference attributes. The parser is not smart, however, so please also refer to the Roll20 Dice Reference.", + "settings-integrity-label": "[Integrity]", + "settings-misc-extent-prefix": "Extend ", + "settings-power-energy-label": "[Power/Energy/Mana]", + "settings-powerarmors-label": "[Power Armors]", + "settings-powers-spells-label": "[Powers/Spells]", + "settings-quick-notes-label": "[Quick Notes]", + "settings-rule-augmentation-strain": "Augmentation Strain (SciFi Companion)", + "settings-rule-no-power-points": "No Power Points (SWADE 140)", + "settings-style-background-grid": "Background Grid", + "settings-style-dark-labels": "Dark Labels", + "settings-style-roboto-font": "Roboto Font (Off: Helvetica Neue)", + "settings-style-rounded-corners": "Rounded Corners", + "settings-style-skill-die-numbers": "Skill Die Numbers", + "settings-style-transition-delays": "Transition Delays", + "settings-style-transitions": "Transitions", + "settings-tab-blocks": "Blocks", + "settings-tab-help": "Help", + "settings-tab-setup": "Setup", + "settings-tab-skills": "Skills", + "settings-tab-styles": "Styles", + "settings-vehicles-label": "[Vehicles]", + "settings-walkers-label": "[Walkers]", + "size": "Size", + "skill-track-die-label-d10": "10", + "skill-track-die-label-d12": "12", + "skill-track-die-label-d4": "4", + "skill-track-die-label-d4-2": "2", + "skill-track-die-label-d6": "6", + "skill-track-die-label-d8": "8", + "skill-track-mod-placeholder-u": "MOD", + "skill-track-mod-u": "MOD", + "skill-track-wd-placeholder-u": "WD", + "skill-track-wd-u": "WD", + "skills": "Skills", + "sma-u": "SMA", + "smarts-mod": "Bonus", + "smarts-natural": "Natural", + "smarts-wd": "WD", + "soak": "Soak", + "soak-mod": "Bonus", + "soak-wd": "WD", + "source": "Source", + "spi-u": "SPI", + "spirit-mod": "Bonus", + "spirit-natural": "Natural", + "spirit-wd": "WD", + "str-u": "STR", + "strength-mod": "Bonus", + "strength-natural": "Natural", + "strength-wd": "WD", + "sublist-weapons-ap-damage": "AP Damage", + "sublist-weapons-ap-damage-placeholder": "3d10, AP 8", + "sublist-weapons-he-damage": "HE Damage", + "sublist-weapons-he-damage-placeholder": "3d8, AP 4, MBT", + "sublist-weapons-name": "Weapon", + "sublist-weapons-name-placeholder-1": "Weapon #1", + "sublist-weapons-name-placeholder-10": "Weapon #10", + "sublist-weapons-name-placeholder-2": "Weapon #2", + "sublist-weapons-name-placeholder-3": "Weapon #3", + "sublist-weapons-name-placeholder-4": "Weapon #4", + "sublist-weapons-name-placeholder-5": "Weapon #5", + "sublist-weapons-name-placeholder-6": "Weapon #6", + "sublist-weapons-name-placeholder-7": "Weapon #7", + "sublist-weapons-name-placeholder-8": "Weapon #8", + "sublist-weapons-name-placeholder-9": "Weapon #9", + "sublist-weapons-note-box-placeholder": "Notes", + "sublist-weapons-notes-label": "Notes:", + "sublist-weapons-notes-placeholder": "Notes, Tags, Trappings, etc.", + "sublist-weapons-range": "Range", + "sublist-weapons-range-placeholder": "50/100/200", + "sublist-weapons-rof": "ROF", + "tab-advancements": "Advancements", + "tab-notebook": "Notebook", + "tab-settings": "Settings", + "tab-skills": "Skills", + "target-number": "Target Number", + "toggle-damage-rolls-title": "Toggle Damage Rolls", + "toughness": "Tough.", + "trapping": "Trapping", + "unskilled": "Unskilled", + "vehicles": "Vehicles", + "vehicles-build-placeholder": "Chassis | Modifications, Notes, etc.", + "vehicles-crew": "Crew", + "vehicles-crew-placeholder": "1+3", + "vehicles-handling": "Handling", + "vehicles-name-placeholder": "Vehicle Type", + "vehicles-size": "Size", + "vehicles-speed": "Speed", + "vehicles-toughness": "Tough.", + "vehicles-toughness-placeholder": "4 (0)", + "vehicles-weapons": "Weap.", + "vig-u": "VIG", + "vigor-mod": "Bonus", + "vigor-natural": "Natural", + "vigor-wd": "WD", + "vs-tn": "vs. TN", + "walkers": "Walkers", + "walkers-build-placeholder": "Chassis | Modifications, Notes, etc.", + "walkers-crew": "Crew", + "walkers-mods": "Mods", + "walkers-mods-placeholder": "0/20", + "walkers-name-placeholder": "Walker Type", + "walkers-pace": "Pace", + "walkers-size": "Size", + "walkers-strength": "Strength", + "walkers-toughness": "Tough.", + "walkers-toughness-placeholder": "20 (5)", + "walkers-weapons": "Weap.", + "weapon": "Weapon", + "weapons": "Weapons", + "weapons-ap": "AP", + "weapons-damage": "Damage", + "weapons-damage-placeholder": "STR+d6", + "weapons-name-placeholder": "Weapon (Ammo)", + "weapons-note-box-placeholder": "Notes", + "weapons-notes-placeholder": "Notes, Tags, Requirements, etc.", + "weapons-range": "Range", + "weapons-range-placeholder": "Range/Melee", + "weapons-rof": "ROF", + "weapons-shots": "Shots", + "weapons-skill-placeholder": "Shooting", + "weapons-total-weight": "Total Weight: ", + "weapons-trapping-placeholder": "Piercing/etc.", + "weapons-weight": "WGT", + "weapons-weight-toggle-title": "Weight On/Off", + "weight": "Weight", + "wild-die": "Wild Die", + "wild-die-override": "WD Override", + "wound-mitigation": "Wound Mitigation", + "wounds": "Wounds", + "{": "{", + "}": "}" +} diff --git a/Thirsty Sword Lesbians/TSL.css b/Thirsty Sword Lesbians/TSL.css new file mode 100644 index 0000000000..3c715b8775 --- /dev/null +++ b/Thirsty Sword Lesbians/TSL.css @@ -0,0 +1,1356 @@ +.sheet-aaaaainterceptor {} + +/* +Google font, doesn't work and in fact makes the whole sheet barf. Too bad. +@import url('https://fonts.googleapis.com/css2?family=Qwigley&display=swap'); +*/ + +/* + This is supposed to be the established way to set variables, but it seems to be resisting me. Either documentation is wrong, browser support is poor, or roll20 is blocking it. I'll leave these here as good reminders of color values tho. + +:root { + --tsl-pink: #e85761; + --tsl-faint: #fceeef; + --tsl-mild: #f8cccf; + --tsl-dark: #a23c43; + --tsl-faint-gradient: linear-gradient(90deg, #fceeef 0%, #ffffff 5%, #ffffff 95%, #fceeef 100%); + + --logo-gradient: linear-gradient(0deg, #f26928 0%, #db4086 100%) +} +*/ + +/* The emerging W3C standard that is currently Firefox-only */ +* { + scrollbar-width: thin; + scrollbar-color: #f5bbbf linear-gradient(90deg, #fceeef 0%, #ffffff 50% #fceeef 100%); +} + +/* Works on Chrome/Edge/Safari */ +*::-webkit-scrollbar { + width: 12px; +} +*::-webkit-scrollbar-track { + background: #fceeef; + background: linear-gradient(90deg, #fceeef 0%, #ffffff 50%, #fceeef 100%); +} +*::-webkit-scrollbar-thumb { + background-color: #f5bbbf; + border-radius: 20px; + border: 3px solid #fceeef; +} + +/* Roll20's class .ui-dialog .charsheet has padding of 10px, which I can't seem to override, so a workaround by making the margins negative. */ + +.sheet-whole { + margin-right: -36px; + margin-left: -36px; + margin-top: -28px; + padding-left: 15px; + padding-top: 5px; + padding-right: 15px; + background: linear-gradient(90deg, #fceeef 0%, #ffffff 5%, #FFFFFF 95%, #fceeef 100%); +} + +/* url('https://imgsrv.roll20.net/?src=https%3A//raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-logo-faint.png') no-repeat 100% 108px/160px 80px fixed, +*/ + +.sheet-whole button[type="roll"]:before { + content: ''; +} + +.sheet-whole button[type="roll"] { + font-size: 100%; +} + +.sheet-bigname { + font-size: 18px; +} + +.sheet-2d6-button-nofloat .sheet-bigname { + vertical-align: 3px; + padding-right: 6px; +} + +.sheet-bignumber { + font-size: 36px; + font-weight: bold; +} + +input[type="number"].sheet-bignumber { + width: 1.5em; +} + +.sheet-bignumber.sheet-make-plus { + font-size: 30px; +} + +.sheet-centered { + text-align: center; +} + +.sheet-columns { + clear: both; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-between; + align-items: stretch; + align-content: stretch; +} + +.sheet-columns .sheet-wide { + margin-left: 12px; + padding-left: 12px; + border-left: 1px dotted #f8cccf; + margin-right: 12px; + padding-right: 12px; + border-right: 1px dotted #f8cccf; +} + +.sheet-columns .sheet-narrow { + flex-grow: 0; + flex-shrink: 0; + /* flex-basis: 15%; */ + width: 125px; + max-width: 125px; + min-width: 125px; + display: flex; + flex-direction: column; + align-items: stretch; + align-content: stretch; + justify-content: space-between; +} + +.sheet-flexspacer { + flex-grow: 10; +} + +.sheet-copyright-bloc { + font-size: 8pt; + font-style: italic; + color: #ee8990; +} + +.sheet-copyright-statement { + font-size: 8pt; + font-style: italic; +} + + +.sheet-columns .sheet-standard { + flex-grow: 0; + flex-shrink: 0; + width: 225px; + max-width: 225px; + min-width: 225px; + max-height: 552px; + overflow-x: hidden; + overflow-y: scroll; + /* flex-basis: 25%; */ +} + +.sheet-columns .sheet-wide { + flex-grow: 1; + flex-shrink: 1; + min-width: 350px; + /* flex-basis: 60%; */ + max-height: 552px; + height: 100%; + overflow-x: hidden; + overflow-y: scroll; +} + +.sheet-condition { + text-indent: -18px; + margin-left: 18px; + margin-block-end: 6px; +} + +.sheet-tooltip .sheet-tooltip-pop, +.sheet-condition .sheet-condition-pop { + visibility: hidden; + border: 1px solid #f8cccf; + background-color: #fceeef; + text-align: left; + padding: 6px; + border-radius: 6px; + position: absolute; + z-index: 2; + width: 200px; + top: 100%; + left: 50%; + margin-left: -95px; + box-shadow: 0px 3px 6px #f8cccf; + font-size: 90%; +} + +.sheet-string .sheet-tooltip-pop, +.sheet-condition .sheet-condition-pop { + width: 175px; +} + +.sheet-string .sheet-tooltip-pop button { + z-index: 3; +} + +.sheet-tooltip.sheet-bio:hover, .sheet-tooltip.sheet-bio { + background-color: #fceeef; + color: black; +} + +.sheet-tooltip.sheet-bio .sheet-tooltip-pop { + margin-left: 0px; + background-color: #fceeef; /* ZOD */ + color: black; +} + +.sheet-narrow .sheet-tooltip-pop { + margin-left: -50px; +} + +.sheet-tooltip span.sheet-tooltip-pop { + margin-left: -20px; + width: auto; + text-indent: 0px; + white-space: nowrap; +} + +/* This makes the little pointy arrow thing if you want that */ + +.sheet-tooltip div.sheet-tooltip-pop::after, +.sheet-condition div.sheet-condition-pop::after { + content: " "; + position: absolute; + bottom: 100%; + left: 0%; + margin-left: 4px; + border-width: 4px; + border-style: solid; + border-color: transparent transparent #f8cccf transparent; +} + +.sheet-string.sheet-tooltip div:focus-within + .sheet-tooltip-pop, +/* .sheet-string:hover .sheet-tooltip .sheet-tooltip-pop, */ +.sheet-tooltip:hover .sheet-tooltip-pop, +.sheet-condition:hover .sheet-condition-pop { + visibility: visible; +} + +/* Relative position for outer container necessary in order for inner container to render! That was a frustrated discovery. */ + +.sheet-condition, +.sheet-tooltip { + position: relative; +} + +.sheet-condition .sheet-condition-penalty { + display: none; +} + +.sheet-condition input[name="attr_marked"]:checked ~ .sheet-condition-penalty { + display: block; +} + +.sheet-condition div { + text-indent: 0px; +} + +.sheet-devarea { + height: 20px; + overflow: hidden; + margin-top: 24px; + border: 1px solid black; + background: #fffff8; + padding: 6px; + display: none; +} + +.sheet-devarea:hover { + height: auto; +} + +input[type="checkbox"].sheet-checkboxer { + opacity: 0.0; + width: 16px; + height: 16px; + position: relative; + top: -2px; + left: 9px; + margin: -10px; + cursor: pointer; + z-index: 1; +} + +input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-right: -9px; + margin-left: 12px; + margin-top: 1px; + line-height: 14px; + text-align: center; + display: inline-block; + vertical-align: top; + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/checkbox-unchecked.png); + width: 14px; + height: 14px; + font-size: 12px; +} + +input[type="checkbox"].sheet-checkboxer:checked + span.sheet-checkboxed::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/checkbox-checked-tsl.png); +} + +/* Adjustments for other contexts */ + +/* + +.sheet-xptrack input[type="checkbox"].sheet-checkboxer { + left: 10px; +} + +.sheet-xptrack input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-right: -2px; + margin-left: 4px; +} + +*/ + +.sheet-popmenu-box input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-right: 0px; + margin-left: 0px; + margin-top: 0px; +} + +.sheet-popmenu-box .sheet-checkline input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-right: -6px; + margin-left: 10px; + margin-top: 0px; +} + +.sheet-minimum input[type="checkbox"].sheet-checkboxer { + left: 12px; + top: 0px; + margin-right: -8px; +} + +.sheet-minimum input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-top: -3px; + margin-right: -2px; + margin-left: 4px; +} + +.sheet-condition input[type="checkbox"].sheet-checkboxer { + top: -1px; + left: 11px; +} + +.sheet-condition input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-left: 15px; + margin-right: -9px; +} + +.sheet-fill-the-blank input[type="checkbox"].sheet-checkboxer + span.sheet-checkboxed::before { + margin-right: 2px; + margin-left: 1px; + margin-top: 6px; +} + +/* */ + +input[type="checkbox"].sheet-expand-toggle { + opacity: 0.0; + width: 80px; + height: 16px; + position: relative; + top: -3px; + left: 9px; + margin: -10px; + cursor: pointer; + z-index: 1; +} + +.sheet-infobar { + color: #999999; /* grayed out for low contrast */ +} + +.sheet-expand-toggle-container { + white-space: nowrap; + width: 80px; +} + +.sheet-expand-toggle-container .sheet-expand-toggle ~ .sheet-expand-toggle-off, +.sheet-expand-toggle-container .sheet-expand-toggle:checked ~ .sheet-expand-toggle-on { + display: initial; + text-align: left; + margin-left: -64px; +} + +.sheet-expand-toggle-container .sheet-expand-toggle:checked ~ .sheet-expand-toggle-off, +.sheet-expand-toggle-container .sheet-expand-toggle ~ .sheet-expand-toggle-on { + display: none; +} + +.sheet-bold { + font-weight: bold; + color: #e85761; +} + +.sheet-bold-uncolored { + font-weight: bold; +} + +.sheet-buttonless { + border: none; + background: none; + color: black; + font-weight: normal; + text-align: left; + padding: 0px; +} + +input.sheet-popmenu-reveal + * { + display: none; +} + +input.sheet-popmenu-reveal[value="yes"] + * { + display: block; +} + +.sheet-buttonless:hover, +.sheet-buttonless:hover span, +.sheet-buttonless:hover .sheet-bold, +input.sheet-popmenu-select[value=""] + button:hover, +.sheet-popmenu-box .repitem:hover { + background: #e85761; + color: white; +} + +.sheet-popmenu-box.sheet-no-hover .repitem:hover { + background: #fceeef; + color: black; +} + +input.sheet-popmenu-select[value=""] + button { + color: #a23c43; +} + +.sheet-popmenu input[type="text"] { + width: 200px; + max-width: 200px; +} + +.sheet-examples-list { + font-size: 90%; + font-style: italic; + padding-left: 6px; + display: none; +} + +.sheet-popmenu-box .sheet-examples-list { + width: 200px; + max-width: 200px; +} + +.sheet-popmenu-section { + padding-top: 3px; + border-top: 1px solid #f8cccf; +} + +.sheet-float-right { + float: right; +} + +.sheet-fill-the-blank input.sheet-fillme:focus ~ div.sheet-suggestions, +textarea:focus ~ div.sheet-examples-list, +input:focus + div.sheet-examples-list { + display: block; +} + +.sheet-fill-the-blank, .sheet-fill-in-the-blank { + text-indent: 0px; +} + +.sheet-fillme { + border: none; + border-bottom: 0.5px solid #fceeef; + border-radius: 6px; + padding-left: 0px; + margin-left: 0px; + margin-bottom: 6px; +} + +.sheet-fillme:focus, .sheet-fillme:hover { + border-bottom: 0.5px solid #f8cccf; + box-shadow: 0px 3px 6px #f8cccf; +} + +.sheet-fillme:focus { + padding-left: 3px; +} + +.sheet-fullwidth { + width: 100%; +} + + +input.sheet-show-on-checked, input.sheet-show-on-checked + * { + display: none; +} + +input.sheet-show-on-checked:checked + * { + display: initial; +} + +input.sheet-hide-on-checked, input.sheet-hide-on-checked:checked + * { + display: none; +} + +input.sheet-show-on-yes + *, +input.sheet-hide-on-yes[value="yes"] + * { + display: none; +} + +input.sheet-show-on-yes[value="yes"] + * { + display: initial; +} + +input.sheet-hide-on-no[value="no"] + * { + display: none; +} + +input.sheet-hide-on-null[value=""] + * { + display: none; +} + +input.sheet-hide-on-zero[value="0"] + * { + display: none; +} + +input.sheet-make-plus + span.sheet-make-plus:before { + content: "+"; +} + +input.sheet-make-plus[value^="-"] + span.sheet-make-plus:before { + content: ""; +} + +.sheet-mod-state-button[value="forward"] + button:before { + font-family: "Pictos"; + font-style: normal; + font-weight: normal; + content: ']'; + color: #e85761; + background: white; +} + +.sheet-mod-state-button[value="ongoing"] + button:before { + font-family: "Pictos"; + font-style: normal; + font-weight: normal; + content: '0'; + color: #e85761; + background: white; +} + +.sheet-mod-state-button + button > span { + display: none; +} + +.sheet-mod-state-button + button:hover > span, +.sheet-mod-state-button + button:focus > span { + display: inline; + color: white; + background: #e85761; +} + +.sheet-mod-state-button + button:hover, +.sheet-mod-state-button + button:focus, +.sheet-mod-state-button + button:hover:before, +.sheet-mod-state-button + button:focus:before { + color: white; + background: #e85761; +} + +/* Tried this, it looks shit */ +/* +div.sheet-move-whole { + max-height: 80px; + overflow: scroll; +} +*/ + +.sheet-move-whole .sheet-move-extras { + display: none; +} + +.sheet-move-whole:hover .sheet-move-extras { + display: initial; +} + +.sheet-move { + text-indent: -18px; + margin-left: 18px; + margin-block-end: 6px; +} + +.sheet-move .sheet-indented { + text-indent: 1em; +} + +.sheet-move ul { + text-indent: 0px; +} + +.sheet-move ul li { + margin-left: 24px; +} + +/* +input.sheet-collapse-on-unchecked, +input.sheet-collapse-on-checked { + display: none; +} + + +input.sheet-collapse-on-unchecked + .sheet-move-compressor, +input.sheet-collapse-on-checked:checked + .sheet-move-compressor, +.sheet-moves-all .sheet-move-compressor { + display: none; +} + +input.sheet-collapse-on-unchecked:checked + .sheet-move-compressor , +input.sheet-collapse-on-checked + .sheet-move-compressor, +.sheet-moves-all:hover .sheet-move-compressor { + display: block; +} +*/ + +.sheet-rolltemplate-sharemove .sheet-move { + max-height: 40px; + overflow: hidden; + -webkit-mask-image: linear-gradient(to bottom, black 0%, transparent 100%); + mask-image: linear-gradient(to bottom, black 0%, transparent 100%); +} + +.sheet-rolltemplate-sharemove:hover .sheet-move { + max-height: none; + -webkit-mask-image: none; + mask-image: none; + overflow: visible; +} + +.sheet-nocontrol .repcontrol { + display: none; +} + +.sheet-one-line { + white-space: nowrap; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + align-content: stretch; +} + +.sheet-one-line > div { + padding-right: 6px; +} + +.sheet-one-line > div.sheet-unpadded { + padding-right: 2px; +} + +.sheet-one-line .sheet-minimum { + flex-grow: 0; + flex-shrink: 1; +} + +.sheet-one-line .sheet-stretch { + flex-grow: 1; + flex-shrink: 1; +} + +.sheet-one-line input { + width: auto; +} + +.sheet-one-line .sheet-stretch input[type="text"] { + width: 100%; +} + +.sheet-one-line input.sheet-plus-enabled { + width: 1em; +} + +.sheet-one-line input.sheet-make-plus[value^="-"] ~ input.sheet-plus-enabled { + width: 1.5em; +} + +.sheet-one-line input.sheet-make-plus[value^="-"] ~ input.sheet-plus-enabled:hover, +.sheet-one-line input.sheet-plus-enabled:hover, +.sheet-one-line input.sheet-make-plus[value^="-"] ~ input.sheet-plus-enabled:focus, +.sheet-one-line input.sheet-plus-enabled:focus { + width: 3.5em; +} + +/* Chrome, Safari, Edge, Opera */ +.sheet-one-line input.sheet-plus-enabled::-webkit-outer-spin-button, +.sheet-one-line input.sheet-plus-enabled::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +.sheet-one-line input.sheet-plus-enabled:hover::-webkit-outer-spin-button, +.sheet-one-line input.sheet-plus-enabled:hover::-webkit-inner-spin-button, +.sheet-one-line input.sheet-plus-enabled:focus::-webkit-outer-spin-button, +.sheet-one-line input.sheet-plus-enabled:focus::-webkit-inner-spin-button { + -webkit-appearance: auto; + margin: inherit; +} + +/* Firefox */ +input.sheet-plus-enabled[type=number] { + -moz-appearance: textfield; +} + +input.sheet-plus-enabled[type=number]:hover, +input.sheet-plus-enabled[type=number]:focus { + -moz-appearance: auto; +} + +.sheet-one-line input[type="checkbox"] { + vertical-align: 0px; +} + +.sheet-one-line .sheet-buttonless { + vertical-align: 7px; +} + +.sheet-one-line span.sheet-make-plus { + vertical-align: 0px; +} + +.sheet-one-line.sheet-modifier span.sheet-make-plus { + vertical-align: 4px; +} + +.sheet-pictos { + font-family: 'Pictos'; +} + +.sheet-show-following-on-hover + * { + display: none; +} + +.sheet-show-following-on-hover:hover + * { + display: initial; +} + +.sheet-popmenu, +.sheet-popmenu-box { + display: inline-block +} + +.sheet-popmenu repcontainer { + margin-top: 0px; + padding-top: 0px; +} + +.sheet-popmenu-box { + font-size: 12px; + vertical-align: middle; + text-align: left; + width: 200px; + max-width: 200px; + height: 1px; + z-index: 2; + display: none; +} + +.sheet-popmenu-box button { + display: none; + width: 100%; + z-index: 2; +} + +.sheet-popmenu-box .sheet-checkline { + text-align: left; + margin-left: 1.5em; + text-indent: -1.5em; +} + +.sheet-popmenu:hover .sheet-popmenu-box { + display: inline-block; + background: #fceeef; + position: absolute; + width: auto; + height: auto; + z-index: 2; + border: .5px solid #f8cccf; + padding: 6px; + box-shadow: 3px 3px 6px #f8cccf; + border-radius: 3px 3px 6px 6px +} + +.sheet-popmenu-rightside { + right: 20px; +} + +.sheet-popmenu:hover .sheet-popmenu-box button { + display: inline-block; +} + +.sheet-popmenu-trigger { + margin-bottom: 0px; + padding-bottom: 0px; +} + +.sheet-popmenu-righthand .sheet-popmenu-trigger:after, +.sheet-popmenu-trigger:before { + font-family: "Pictos"; + font-style: normal; + font-weight: normal; + content: 'l'; + margin-right: 6px; + padding: 1px; + color: #e85761; +} + +.sheet-popmenu-righthand .sheet-popmenu-trigger:before { + content: ''; + margin-right: 0px; +} + +.sheet-popmenu-righthand .sheet-popmenu-trigger:after { + margin-left: 6px; +} + +.sheet-popmenu:hover .sheet-popmenu-trigger:before, +.sheet-popmenu:hover .sheet-popmenu-trigger:after { + color: white; + background: #e85761; +} + +button[type="roll"].sheet-2d6-button.sheet-no-dice:after, +button[type="roll"].sheet-2d6-button-nofloat.sheet-no-dice:after { + content: ''; +} + +button[type="roll"].sheet-2d6-button.sheet-no-dice, +button[type="roll"].sheet-2d6-button-nofloat.sheet-no-dice { + text-align: left; + margin-left: 0px; +} + +.sheet-narrow button[type="roll"].sheet-2d6-button.sheet-no-dice, +.sheet-narrow button[type="roll"].sheet-2d6-button-nofloat.sheet-no-dice { + text-align: left; + margin-left: -6px; +} + +button[type="roll"].sheet-sharemove, +button[type="roll"].sheet-2d6-button, +button[type="roll"].sheet-2d6-button-nofloat { + background: transparent; + border-style: none; + margin: 0px; + margin-left: 6px; + padding: 0px; +} + +div.sheet-right-buttons { + float: right; + display: flex; /* PAIN */ + flex-direction: row; +} + +/* +button[type="roll"].sheet-sharemove, +button[type="roll"].sheet-2d6-button { + float: right; +} +*/ + +button[type="roll"].sheet-sharemove:after { + font-family: "Pictos"; + font-style: normal; + text-transform: uppercase; + font-weight: normal; + content: 'R'; + color: #e85761; +} + +button[type="roll"].sheet-2d6-button:after, +button[type="roll"].sheet-2d6-button-nofloat:after { + content: 'Fa'; + font-family: 'dicefontd6'; + font-size: 116%; + color: #e85761; +} + +.sheet-result { + margin-left: 30px; +} + +.sheet-result ul { + margin-left: 0px; + margin-block-end: 3px; +} + +.sheet-result ul li { + margin-left: 10px; +} + +.sheet-rolltemplate-2d6-roll { + border: 1px solid #e85761; + background: linear-gradient(0deg, #f26928 0%, #db4086 100%); + /* background: url('https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-roll-bg.png') repeat-x; */ + padding: 6px; + box-shadow: 3px 3px 6px #a23c43; + border-radius: 3px 3px 6px 6px; +} + +.sheet-rolltemplate-2d6-roll .sheet-topline { + padding: 6px; + margin-top: -6px; + margin-left: -6px; + margin-right: -6px; + color: white; + text-shadow: 0px 0px 6px #a23c43; +} + +/* +.sheet-rolltemplate-2d6-roll div { + padding: 2px; + border: 1px solid red; +} +*/ + +.sheet-rolltemplate-2d6-roll .sheet-clearance { + clear: both; +} + +.sheet-rolltemplate-2d6-roll .sheet-dice { + min-height: 48px; + text-align: right; +} + +/* +5 +*/ + +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-roll { + min-height: 48px; + min-width: 60px; + padding-top: 18px; +} + +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-roll .inlinerollresult { + background: none; + border: none; + text-align: center; + vertical-align: middle; + font-size: 48px; + padding-top: 18px; + font-family: Arial; +} + +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-title { + display: block; + text-align: center; + color: white; + font-family: 'Arial'; + font-size: 24px; + font-weight: bold; + padding-top: 18px; +} + +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-reminder { + color: white; + font-style: italic; + text-align: center; + text-shadow: 0px 0px 6px #a23c43; +} + +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-hit, +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-mixed, +.sheet-rolltemplate-2d6-roll .sheet-dice .sheet-dieroll-miss { + float: left; + display: inline-block; + min-width: 48px; + text-align: center; + vertical-align: bottom; + color: white; + text-shadow: 0px 0px 6px #a23c43; +} + +.sheet-rolltemplate-sharemove { + border: 1px solid #e85761; + background-color: white; + padding: 6px; + box-shadow: 3px 3px 6px #a23c43; /* ZORK */ + border-radius: 3px 3px 6px 6px; +} + +.sheet-rolltemplate-sharemove .sheet-move { + text-indent: 0px; + margin-left: 0px; + margin-block-end: 6px; +} + +.sheet-rolltemplate-sharemove .sheet-move .sheet-indented { + text-indent: 1em; +} + +.sheet-rolltemplate-sharemove .sheet-move ul { + text-indent: 0px; +} + +.sheet-rolltemplate-sharemove .sheet-move ul li { + margin-left: 24px; +} + +.sheet-rolltemplate-sharemove .sheet-result { + margin-left: 42px; + text-indent: -30px; +} + +.sheet-rolltemplate-sharemove .sheet-result ul { + margin-left: 0px; + margin-block-end: 3px; + text-indent: 0px; +} + +.sheet-rolltemplate-sharemove .sheet-result ul li { + margin-left: 0px; +} + +.sheet-rolltemplate-sharemove .sheet-space-above, +.sheet-space-above { + padding-top: 6px; +} + +.sheet-rolltemplate-sharemove .sheet-topline { + padding: 6px; + margin-top: -6px; + margin-left: -6px; + margin-right: -6px; + background-color: #e85761; + color: white; + text-shadow: 0px 0px 6px #a23c43; +} + +.sheet-show-on-unchecked-combo { + display: none; +} + +input.sheet-show-on-yes-combo[value="yes"] + input.sheet-show-on-unchecked-combo + * { + display: initial; +} + +input.sheet-show-on-yes-combo:not([value="yes"]) + input.sheet-show-on-unchecked-combo + * { + display: none; +} + +input.sheet-show-on-yes-combo + input.sheet-show-on-unchecked-combo:checked + * { + display: none; +} + +/* + If long != "yes", display. + If long = "yes", consider long-expand. + If long-expand = checked, display + If long-expand != checked, hide + + long: show-on-yes-combo (currently) + long-expand: show-on-checked-combo +*/ + +.sheet-show-on-checked-combo { + display: none; +} + +input.sheet-show-on-yes-combo + input.sheet-show-on-checked-combo + * { + display: none; +} + +/* If the value is not yes and it's paired with show-on-checked, show it; if the value is yes and it's paired with a checked show-on-checked, show it */ + +input.sheet-show-on-yes-combo:not([value="yes"]) + input.sheet-show-on-checked-combo + *, +input.sheet-show-on-yes-combo[value="yes"] + input.sheet-show-on-checked-combo:checked + * { + display: initial; +} + +.sheet-space-below { + padding-bottom: 6px; +} + +.sheet-section-head { + margin-top: 12px; + font-size: 18px; + font-weight: bold; + font-family: 'Arial'; /* Tried Shadows Into Light, but it's crap as a header font goes. Sticking with Arial. */ + border-bottom: 1px solid #f8cccf; + color: #e85761; + padding-bottom: 0px; +} + +.sheet-section-head.sheet-one-line { + border-bottom: none; +} + +.sheet-section-head .sheet-popmenu-box { + font-family: 'Arial'; +} + +.sheet-section-subhead { + margin-top: 6px; + font-size: 15px; + font-weight: bold; + color: #e85761; + border-bottom: .5px solid #fceeef; +} + +.sheet-buttonless.sheet-trashit:after { + font-family: "Pictos"; + font-style: normal; + font-weight: normal; + content: '*'; + color: #f5bbbf; +} + +.sheet-buttonless.sheet-trashit:hover { + background: none; + background-color: none; + color: #e85761; +} + +.sheet-buttonless.sheet-trashit:hover:after { + content: '*'; + background: none; + background-color: none; + color: #e85761; +} + +.sheet-topname { + font-size: 24px; + font-weight: bold; + width: 100%; +} + +.sheet-toprow { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-right: 160px; +} + +.sheet-track { + text-align: center; + vertical-align: middle; +} + +.sheet-track .sheet-bold { + vertical-align: 2px; +} + +input.sheet-tracker + .sheet-tracker-bar:before { + display: inline-block; + margin-left: 0px; + margin-right: 0px; + line-height: 14px; + text-align: center; + vertical-align: 0px; + width: 160px; + height: 16px; + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-tracker-0.png); +} + +input.sheet-tracker[value="0"] + .sheet-tracker-bar:before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-tracker-0.png); +} + +input.sheet-tracker[value="1"] + .sheet-tracker-bar:before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-tracker-1.png); +} + +input.sheet-tracker[value="2"] + .sheet-tracker-bar:before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-tracker-2.png); +} + +input.sheet-tracker[value="3"] + .sheet-tracker-bar:before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-tracker-3.png); +} + +input.sheet-tracker[value="4"] + .sheet-tracker-bar:before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-tracker-4.png); +} + +input[type=number].sheet-tracker-number { + font-size: 16px; + width: 1em; +} + +input[type=number].sheet-tracker-number:hover, +input[type=number].sheet-tracker-number:focus { + font-size: 12px; + width: 3em; +} + +.sheet-tracker-label { + font-size: 16px; +} + +/* Chrome, Safari, Edge, Opera */ +input.sheet-tracker-number::-webkit-outer-spin-button, +input.sheet-tracker-number::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input.sheet-tracker-number:hover::-webkit-outer-spin-button, +input.sheet-tracker-number:hover::-webkit-inner-spin-button, +input.sheet-tracker-number:focus::-webkit-outer-spin-button, +input.sheet-tracker-number:focus::-webkit-inner-spin-button { + -webkit-appearance: auto; + margin: inherit; +} + +.sheet-whole { + color: black; +} + +.sheet-whole ul li { + background: url('https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-bullet.png') no-repeat left top; + background-size: 14px 14px; + margin-left: -14px; + padding-left: 16px; + list-style: none; + vertical-align: top; +} + +.sheet-result.sheet-hit { + background: url('https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-hit.png') no-repeat left top; +} + +.sheet-result.sheet-mixed { + background: url('https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-mixed.png') no-repeat left top; +} + +.sheet-result.sheet-miss { + background: url('https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-miss.png') no-repeat left top; +} + +.sheet-result.sheet-hit, .sheet-result.sheet-mixed, .sheet-result.sheet-miss { + background-size: 26px 18px; + margin-left: 11px; + padding-left: 29px; + list-style: none; + vertical-align: top; + text-indent: 0; +} + +.sheet-string .sheet-string-mask, +.sheet-string .sheet-string-mask ~ .sheet-string-checked-reveal { + display: none; +} + +.sheet-string-mask:checked ~ .sheet-string-checked-reveal { + display: block; +} + +textarea { + height: 24pt; + margin-bottom: 0px; + width: calc( 100% - 12px ); /* Note to fred: the spaces between terms in calc are apparently meaningful and needed */ +} + +.sheet-smallbutton { + font-size: 12px; +} + +ul { + margin-block-end: 6px; +} + +.sheet-xptrack, .sheet-xptrack .sheet-fillme { + text-align: center; + font-size: 24px; +} + +.sheet-track-container { + text-align: center; + text-indent: 0; + margin-top: 6px; + white-space: nowrap; +} + +.sheet-track-container input[type="radio"] { + opacity: 0.0; + width: 24px; + height: 24px; + position: relative; + top: -2px; + left: 10px; + margin: -10px; + cursor: pointer; + z-index: 1; +} + +.sheet-track-container input[type="radio"] + span::before { + margin-right: -2px; + margin-left: -3px; + margin-top: 1px; + line-height: 22px; + text-align: center; + display: inline-block; + vertical-align: top; + width: 22px; + height: 22px; + font-size: 12px; +} + +.sheet-track-container input[type="radio"][value="0"] + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-off0.png); +} + +.sheet-track-container input[type="radio"][value="1"] + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-off1.png); +} + +.sheet-track-container input[type="radio"][value="2"] + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-off2.png); +} + +.sheet-track-container input[type="radio"][value="3"] + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-off3.png); +} + +.sheet-track-container input[type="radio"][value="4"] + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-off4.png); +} + +.sheet-track-container input[type="radio"][value="0"]:checked + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-on0.png); +} + +.sheet-track-container input[type="radio"][value="1"]:checked + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-on1.png); +} + +.sheet-track-container input[type="radio"][value="2"]:checked + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-on2.png); +} + +.sheet-track-container input[type="radio"][value="3"]:checked + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-on3.png); +} + +.sheet-track-container input[type="radio"][value="4"]:checked + span::before { + content: url(https://raw.githubusercontent.com/fredhicks/ehp-roll20/master/art/tsl-track-on4-animated.gif); +} + + + + diff --git a/Thirsty Sword Lesbians/TSL.html b/Thirsty Sword Lesbians/TSL.html new file mode 100644 index 0000000000..0c0b576924 --- /dev/null +++ b/Thirsty Sword Lesbians/TSL.html @@ -0,0 +1,4284 @@ + + +
+ + + + + + + +
+ + + +
+ +
+ +
+ +
+
:
+
+
+ +
+
+
+ + + + + +
+
E
+
+ +
+
+
+
+
+
+ + +
+
+
+
+ +
+ + + +
+ + + + + + + +
+
+ +
+ : + +
+ +
+ +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + +
+
+
:
+
+
+
+
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ + + +
+ + () +
+
+ + + + + +
+
+
+ +
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ + + + + +
+
+
+ + + +
+ + + : + + + +
+
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + : + +
+ +
+
+
+ + + +
+
+
▲▼
+ + + + 2 + + + + ! +
+
+
+
+
+ + + + + +
+
+ +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ + + + +
+
+ +
+
+ + + +
+ : + + +
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+ +
+ +
+
    + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+ +
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+ +
+ : + + +
+
+
+ + + + +
+ +
+
+ +
+ ▲▼ +
+
+
+ +
+ +
+
+
+ + + +
+
+ +
+
+ +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+
+
+
+ : +
+
+
+
+
+
+ + + + + + + +
+
+
+
+
+
+
+ : + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ + +
+
+ + + +
+
+ +
+
+ + +
+
+ + + + +
+ +
+
+ / + +
+
+ +
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+ + + + +
+ : + + + +
+ +
+ +
+
+ +
+
+
+
+ + +
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+ + +
+ {{#name}}**{{name}}**{{/name}} +
+
+ {{#body}}
{{body}}
{{/body}} + {{#preamble}}
{{preamble}}
{{/preamble}} + {{#bullet0}} +
    +
  • {{bullet0}}
  • + {{#bullet1}}
  • {{bullet1}}
  • {{/bullet1}} + {{#bullet2}}
  • {{bullet2}}
  • {{/bullet2}} + {{#bullet3}}
  • {{bullet3}}
  • {{/bullet3}} + {{#bullet4}}
  • {{bullet4}}
  • {{/bullet4}} +
+ {{/bullet0}} + {{#hit}} +
+ **10+:** {{hit}} + {{#hitbullet0}} +
    +
  • {{hitbullet0}}
  • + {{#hitbullet1}}
  • {{hitbullet1}}
  • {{/hitbullet1}} + {{#hitbullet2}}
  • {{hitbullet2}}
  • {{/hitbullet2}} + {{#hitbullet3}}
  • {{hitbullet3}}
  • {{/hitbullet3}} + {{#hitbullet4}}
  • {{hitbullet4}}
  • {{/hitbullet4}} +
+ {{/hitbullet0}} +
+ {{/hit}} + {{#mixed}} +
+ **7-9:** {{mixed}} + {{#mixedbullet0}} +
    +
  • {{mixedbullet0}}
  • + {{#mixedbullet1}}
  • {{mixedbullet1}}
  • {{/mixedbullet1}} + {{#mixedbullet2}}
  • {{mixedbullet2}}
  • {{/mixedbullet2}} + {{#mixedbullet3}}
  • {{mixedbullet3}}
  • {{/mixedbullet3}} + {{#mixedbullet4}}
  • {{mixedbullet4}}
  • {{/mixedbullet4}} +
+ {{/mixedbullet0}} +
+ {{/mixed}} + {{#miss}} +
+ **6-:** {{miss}} + {{#missbullet0}} +
    +
  • {{missbullet0}}
  • + {{#missbullet1}}
  • {{missbullet1}}
  • {{/missbullet1}} + {{#missbullet2}}
  • {{missbullet2}}
  • {{/missbullet2}} + {{#missbullet3}}
  • {{missbullet3}}
  • {{/missbullet3}} + {{#missbullet4}}
  • {{missbullet4}}
  • {{/missbullet4}} +
+ {{/missbullet0}} +
+ {{/miss}} + {{#alternative}}
{{alternative}}
{{/alternative}} + {{#altbullet0}} +
    +
  • {{altbullet0}}
  • + {{#altbullet1}}
  • {{altbullet1}}
  • {{/altbullet1}} + {{#altbullet2}}
  • {{altbullet2}}
  • {{/altbullet2}} + {{#altbullet3}}
  • {{altbullet3}}
  • {{/altbullet3}} + {{#altbullet4}}
  • {{altbullet4}}
  • {{/altbullet4}} +
+ {{/altbullet0}} + {{#althit}} +
+ **10+:** {{althit}} + {{#althitbullet0}} +
    +
  • {{althitbullet0}}
  • + {{#althitbullet1}}
  • {{althitbullet1}}
  • {{/althitbullet1}} + {{#althitbullet2}}
  • {{althitbullet2}}
  • {{/althitbullet2}} + {{#althitbullet3}}
  • {{althitbullet3}}
  • {{/althitbullet3}} + {{#althitbullet4}}
  • {{althitbullet4}}
  • {{/althitbullet4}} +
+ {{/althitbullet0}} +
+ {{/althit}} + {{#altmixed}} +
+ **7-9:** {{altmixed}} + {{#altmixedbullet0}} +
    +
  • {{altmixedbullet0}}
  • + {{#altmixedbullet1}}
  • {{altmixedbullet1}}
  • {{/altmixedbullet1}} + {{#altmixedbullet2}}
  • {{altmixedbullet2}}
  • {{/altmixedbullet2}} + {{#altmixedbullet3}}
  • {{altmixedbullet3}}
  • {{/altmixedbullet3}} + {{#altmixedbullet4}}
  • {{altmixedbullet4}}
  • {{/altmixedbullet4}} +
+ {{/altmixedbullet0}} +
+ {{/altmixed}} + {{#altmiss}} +
+ **6-:** {{altmiss}} + {{#altmissbullet0}} +
    +
  • {{altmissbullet0}}
  • + {{#altmissbullet1}}
  • {{altmissbullet1}}
  • {{/altmissbullet1}} + {{#altmissbullet2}}
  • {{altmissbullet2}}
  • {{/altmissbullet2}} + {{#altmissbullet3}}
  • {{altmissbullet3}}
  • {{/altmissbullet3}} + {{#altmissbullet4}}
  • {{altmissbullet4}}
  • {{/altmissbullet4}} +
+ {{/altmissbullet0}} +
+ {{/altmiss}} + {{#end}}
{{end}}
{{/end}} + {{#blankname0}}
**{{blankname0}}**: {{#blank0}}{{blank0}}{{/blank0}}
{{/blankname0}} + {{#blankname1}}
**{{blankname1}}**: {{#blank1}}{{blank1}}{{/blank1}}
{{/blankname1}} + {{#blankname2}}
**{{blankname2}}**: {{#blank2}}{{blank2}}{{/blank2}}
{{/blankname2}} + {{#blankname3}}
**{{blankname3}}**: {{#blank3}}{{blank3}}{{/blank3}}
{{/blankname3}} + {{#blankname4}}
**{{blankname4}}**: {{#blank4}}{{blank4}}{{/blank4}}
{{/blankname4}} + {{#blankname5}}
**{{blankname5}}**: {{#blank5}}{{blank5}}{{/blank5}}
{{/blankname5}} + {{#blankname6}}
**{{blankname6}}**: {{#blank6}}{{blank6}}{{/blank6}}
{{/blankname6}} + {{#blankname7}}
**{{blankname7}}**: {{#blank7}}{{blank7}}{{/blank7}}
{{/blankname7}} + {{#blankname8}}
**{{blankname8}}**: {{#blank8}}{{blank8}}{{/blank8}}
{{/blankname8}} + {{#blankname9}}
**{{blankname9}}**: {{#blank9}}{{blank9}}{{/blank9}}
{{/blankname9}} +
+
+ + +
+ {{#character}}**{{character}}**:{{/character}} + {{#title}}**{{title}}**{{/title}} +
+
+ {{#rollGreater() roll 9}} +
+
{{roll}}
+
+
+ +
+ {{/rollGreater() roll 9}} + {{#rollBetween() roll 7 9}} +
+
{{roll}}
+
+
+ +
+ {{/rollBetween() roll 7 9}} + {{#rollLess() roll 7}} +
+
{{roll}}
+
+
+ +
+
+ +
+ {{/rollLess() roll 7}} + {{#allprops() character title roll}} +
2 {{value}}
+ {{/allprops() character title roll}} +
+
+
+ + +
**{{character}}, {{playbook}}** {{#pronouns}}(*{{pronouns}}*){{/pronouns}}
+{{#stats}}
*{{stats}}*
{{/stats}} +{{#moves}}
**:** *{{moves}}*
{{/moves}} +
{{aesthetics}}
+
+ + + {{#allprops()}} +
**{{key}}:** {{value}}
+ {{/allprops()}} +
\ No newline at end of file diff --git a/Thirsty Sword Lesbians/TSL.png b/Thirsty Sword Lesbians/TSL.png new file mode 100644 index 0000000000..460552a27f Binary files /dev/null and b/Thirsty Sword Lesbians/TSL.png differ diff --git a/Thirsty Sword Lesbians/sheet.json b/Thirsty Sword Lesbians/sheet.json new file mode 100644 index 0000000000..8db0c26c08 --- /dev/null +++ b/Thirsty Sword Lesbians/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "TSL.html", + "css": "TSL.css", + "authors": "Fred Hicks (Evil Hat Productions)", + "roll20userid": "3844812", + "preview": "TSL.png", + "instructions": "Pop on in, choose a playbook, and get playing! Please note that a new character sheet may take several seconds to render the first time, leaving that tab blank while the sheet populates all of its data. If you run into any issues, have suggestions, or anything else, please reach out to Evil Hat at feedback@evilhat.com. You can learn more about TSL at https://www.evilhat.com/home/thirsty-sword-lesbians/ and https://www.kickstarter.com/projects/evilhat/thirsty-sword-lesbians" +} diff --git a/Thirsty Sword Lesbians/translation.json b/Thirsty Sword Lesbians/translation.json new file mode 100644 index 0000000000..293a08d007 --- /dev/null +++ b/Thirsty Sword Lesbians/translation.json @@ -0,0 +1,617 @@ +{ + "(Default)": "(Default)", + "(start with the move marked and choose two more)": "(start with the move marked and choose two more)", + "+1 forward": "+1 forward", + "0-3 Conditions:": "0-3 Conditions:", + "0–3 Conditions:": "0–3 Conditions:", + "2d6 buttons prompt for mods": "2d6 buttons prompt for mods", + "2d6 buttons use checked mods": "2d6 buttons use checked mods", + "4 or 5 Conditions:": "4 or 5 Conditions:", + "a cold-wrought sword, a sword of teeth, a found sword": "a cold-wrought sword, a sword of teeth, a found sword", + "Add 1 to a stat (max stat of 3)": "Add 1 to a stat (max stat of 3)", + "Add 1 to your roll against them (after rolling)": "Add 1 to your roll against them (after rolling)", + "Add or subtract 1 from any roll they make (after rolling)": "Add or subtract 1 from any roll they make (after rolling)", + "Advances": "Advances", + "Aesthetics": "Aesthetics", + "Angry": "Angry", + "Any PC confessed their love": "Any PC confessed their love", + "Any PC de-escalated a violent situation": "Any PC de-escalated a violent situation", + "Any PC leapt into danger with daring and panache": "Any PC leapt into danger with daring and panache", + "Any player used a safety tool such as the palette or Check-In Card": "Any player used a safety tool such as the palette or Check-In Card", + "Ask a question from Figure Out a Person of anyone, anywhere, if you can name one of their deceased loved ones": "Ask a question from Figure Out a Person of anyone, anywhere, if you can name one of their deceased loved ones", + "At any time, spend a String on someone to do one of the following:": "At any time, spend a String on someone to do one of the following:", + "Basic Moves": "Basic Moves", + "Big Dyke Energy": "Big Dyke Energy", + "Call on a Toxic Power": "Call on a Toxic Power", + "Charm or social insight. +Heart": "Charm or social insight. +Heart", + "check all": "check all", + "Choice made and locked": "Choice made and locked", + "Choose 1": "Choose 1", + "Choose 2 and your opponent chooses 1": "Choose 2 and your opponent chooses 1", + "Choose 2 from the \"0–3 Conditions\" options": "Choose 2 from the \"0–3 Conditions\" options", + "Choose 2 from the 10+ list, but choose 1 thing that goes awry": "Choose 2 from the 10+ list, but choose 1 thing that goes awry", + "Choose 2": "Choose 2", + "Choose 3 and your opponent chooses 1 to apply to you in response": "Choose 3 and your opponent chooses 1 to apply to you in response", + "Choose a playbook!": "Choose a playbook!", + "Clear a Condition": "Clear a Condition", + "Cleverness or knowledge. +Wit": "Cleverness or knowledge. +Wit", + "cleverness, knowledge": "cleverness, knowledge", + "clothes": "clothes", + "Clothes": "Clothes", + "Commune with the Unseen": "Commune with the Unseen", + "Condition is active.": "Condition is active.", + "Modifier is marked.": "Modifier is marked.", + "Modifier is not marked.": "Modifier is not marked.", + "Click to toggle.": "Click to toggle.", + "Conditions": "Conditions", + "Create an opportunity for an ally through prowess or distraction": "Create an opportunity for an ally through prowess or distraction", + "Create an opportunity for you or your allies": "Create an opportunity for you or your allies", + "Current tally": "Current tally", + "Danger Moves": "Danger Moves", + "daring": "daring", + "Daring": "Daring", + "Defy Disaster": "Defy Disaster", + "demeanor": "demeanor", + "Demeanor": "Demeanor", + "Do it with style. At the GM’s discretion, you may also learn new information, discover a new opportunity, or gain a String on someone.": "Do it with style. At the GM’s discretion, you may also learn new information, discover a new opportunity, or gain a String on someone.", + "Down Beat": "Down Beat", + "Each character may only spend one String to add or subtract from a given roll.": "Each character may only spend one String to add or subtract from a given roll.", + "Each player marks XP if, during the session:": "Each player marks XP if, during the session:", + "elegance, agility": "elegance, agility", + "emotional awareness, expression": "emotional awareness, expression", + "Emotional Support": "Emotional Support", + "End of Session": "End of Session", + "Entice": "Entice", + "Experience": "Experience", + "Ferocious": "Ferocious", + "Fight": "Fight", + "Figure Out a Person": "Figure Out a Person", + "Finally Kiss, in a Dangerous Situation": "Finally Kiss, in a Dangerous Situation", + "Find out what it will take to get them to do what you want (for an NPC, spending the String means they may simply agree)": "Find out what it will take to get them to do what you want (for an NPC, spending the String means they may simply agree)", + "Flirt with or provoke your opponent and gain a String on them": "Flirt with or provoke your opponent and gain a String on them", + "For either a PC or an NPC, if you aren’t already Smitten with them, you may choose to treat a 7–9 result as a 10+ by choosing to become Smitten with the target.": "For either a PC or an NPC, if you aren’t already Smitten with them, you may choose to treat a 7–9 result as a 10+ by choosing to become Smitten with the target.", + "forward": "forward", + "Frightened": "Frightened", + "Gain a String on them and they choose 1": "Gain a String on them and they choose 1", + "Gain a String on them, unless they decide instead to choose 1": "Gain a String on them, unless they decide instead to choose 1", + "Gain insight from the GM about an obstacle facing one of you": "Gain insight from the GM about an obstacle facing one of you", + "Get flustered and awkward": "Get flustered and awkward", + "Give in to desire": "Give in to desire", + "Grace": "Grace", + "Guilty": "Guilty", + "heart": "heart", + "Heart": "Heart", + "Heartstring Moves": "Heartstring Moves", + "Heat of the Moment": "Heat of the Moment", + "Hide Basic Moves": "Hide Basic Moves", + "Hide something in the Unseen world": "Hide something in the Unseen world", + "Hide Untaken Moves": "Hide Untaken Moves", + "Hide": "Hide", + "Hopeless": "Hopeless", + "How could I get you to _____?": "How could I get you to _____?", + "How would you feel if I _____?": "How would you feel if I _____?", + "Hungry Unseen destroy all non-sentient life in a small area": "Hungry Unseen destroy all non-sentient life in a small area", + "If more than two people finally kiss in these circumstances, they all get the bonus. Each participant must be enthusiastic about kissing to trigger this move.": "If more than two people finally kiss in these circumstances, they all get the bonus. Each participant must be enthusiastic about kissing to trigger this move.", + "If the target is a PC:": "If the target is a PC:", + "If the target is an NPC:": "If the target is an NPC:", + "If they open up to you, they choose 1, and you either choose 1 or take a String on them": "If they open up to you, they choose 1, and you either choose 1 or take a String on them", + "If they open up to you, they choose 1": "If they open up to you, they choose 1", + "If they’re Smitten with you, they may choose an additional option.": "If they’re Smitten with you, they may choose an additional option.", + "If you gain a fourth String on someone, you have a profound insight and learn something about them that even they don’t know; the player tells you what you learn, possibly asking the GM for ideas. It’s up to you whether you share that insight with the character or not. In addition, clear all but one of your Strings on them and gain 2 XP.": "If you gain a fourth String on someone, you have a profound insight and learn something about them that even they don’t know; the player tells you what you learn, possibly asking the GM for ideas. It’s up to you whether you share that insight with the character or not. In addition, clear all but one of your Strings on them and gain 2 XP.", + "If you’re Smitten with them and they refuse to open up to you, it stings. You mark a Condition.": "If you’re Smitten with them and they refuse to open up to you, it stings. You mark a Condition.", + "Individual Playbook Moves": "Individual Playbook Moves", + "Influence With a String": "Influence With a String", + "Insecure": "Insecure", + "integrity, metaphysical power": "integrity, metaphysical power", + "It answers the question and grants you +1 forward to act on the information": "It answers the question and grants you +1 forward to act on the information", + "It answers the question and the GM chooses 1": "It answers the question and the GM chooses 1", + "It gains a String on you": "It gains a String on you", + "It takes something from you, either knowledge, reputation, or something physical": "It takes something from you, either knowledge, reputation, or something physical", + "Learn something important from the Unseen": "Learn something important from the Unseen", + "Learn the recent history of an object you hold": "Learn the recent history of an object you hold", + "Live happily ever after": "Live happily ever after", + "Lock menu to prevent overwrite": "Lock menu to prevent overwrite", + "Loyal Steed": "Loyal Steed", + "Make sure to mark experience!": "Make sure to mark experience!", + "Mark XP": "Mark XP", + "Might, endurance, or courage. +Daring": "Might, endurance, or courage. +Daring", + "Mixed Beat": "Mixed Beat", + "Modifiers": "Modifiers", + "Mouse over for your options.": "Mouse over for your options.", + "Moves": "Moves", + "My Playbook's Moves Only": "My Playbook's Moves Only", + "Name your steed and detail two strengths and two weaknesses from the lists given. When riding your steed, you may roll +Spirit to Fight and may take a person with you whenever you Defy Disaster.": "Name your steed and detail two strengths and two weaknesses from the lists given. When riding your steed, you may roll +Spirit to Fight and may take a person with you whenever you Defy Disaster.", + "no": "no", + "Notes": "Notes", + "Offer them an XP to do something (don’t spend the String if they refuse the temptation)": "Offer them an XP to do something (don’t spend the String if they refuse the temptation)", + "ongoing": "ongoing", + "Pain is nothing to you; ignore the next time you would Stagger while transformed": "Pain is nothing to you; ignore the next time you would Stagger while transformed", + "Pick one of these sets (overwrites current ratings), then add 1 to two different stats.": "Pick one of these sets (overwrites current ratings), then add 1 to two different stats.", + "Playbook Moves": "Playbook Moves", + "Playbook": "Playbook", + "Promise something they think you want": "Promise something they think you want", + "Pronouns": "Pronouns", + "provoke them to do something foolish or harmful and take advantage of a String on them if you have one": "provoke them to do something foolish or harmful and take advantage of a String on them if you have one", + "Receive experience (XP) whenever you roll a 6- or when a move tells you to mark XP. A PC can spend XP to take an Advance; consult that section for more.": "Receive experience (XP) whenever you roll a 6- or when a move tells you to mark XP. A PC can spend XP to take an Advance; consult that section for more.", + "Restless Unseen cause a haunting": "Restless Unseen cause a haunting", + "roll with modifier": "roll with modifier", + "Shameless": "Shameless", + "Show All Loaded Moves": "Show All Loaded Moves", + "Show": "Show", + "skill at arms, forcefulness": "skill at arms, forcefulness", + "Smitten": "Smitten", + "Special Features": "Special Features", + "Special Moves": "Special Moves", + "spirit": "spirit", + "Spirit": "Spirit", + "Stagger (Reactive Move)": "Stagger (Reactive Move)", + "Starting Stats": "Starting Stats", + "Stern Unseen judge you, inflicting a Condition": "Stern Unseen judge you, inflicting a Condition", + "Strengths": "Strengths", + "String Advance": "String Advance", + "Strings": "Strings", + "Swiftness or elegance. +Grace": "Swiftness or elegance. +Grace", + "Switch to a new playbook": "Switch to a new playbook", + "sword": "sword", + "Sword": "Sword", + "Take a move from any playbook": "Take a move from any playbook", + "Take an object from your opponent or seize a superior position": "Take an object from your opponent or seize a superior position", + "Take another move from your playbook": "Take another move from your playbook", + "Temporarily alter the Unseen nature of a place": "Temporarily alter the Unseen nature of a place", + "Tenacious Purpose": "Tenacious Purpose", + "The Beast": "The Beast", + "The Chosen": "The Chosen", + "The Devoted": "The Devoted", + "The GM will offer you a hard choice or success with a sacrifice.": "The GM will offer you a hard choice or success with a sacrifice.", + "The Infamous": "The Infamous", + "The Nature Witch": "The Nature Witch", + "The Scoundrel": "The Scoundrel", + "The Seeker": "The Seeker", + "The Spooky Witch": "The Spooky Witch", + "The Trickster": "The Trickster", + "They choose 1": "They choose 1", + "They give you a String on them": "They give you a String on them", + "They mark XP if they do it, and must take a Condition if they don't": "They mark XP if they do it, and must take a Condition if they don't", + "They mark XP if they do it": "They mark XP if they do it", + "They take a Condition if they don't": "They take a Condition if they don't", + "They'll do it in exchange for a small concession or reassurance": "They'll do it in exchange for a small concession or reassurance", + "Thirsty Sword Lesbians is copyright Evil Hat Productions, LLC and April Kit Walsh.": "Thirsty Sword Lesbians is copyright Evil Hat Productions, LLC and April Kit Walsh.", + "This move is marked by default for its playbook.": "This move is marked by default for its playbook.", + "Through violence or cutting words, inflict a Condition": "Through violence or cutting words, inflict a Condition", + "To clear, break something important to you or someone you care about": "To clear, break something important to you or someone you care about", + "To clear, lose yourself in escapism or pleasure when you should be doing something important": "To clear, lose yourself in escapism or pleasure when you should be doing something important", + "To clear, run away and leave something important behind": "To clear, run away and leave something important behind", + "To clear, sacrifice something important just to hurt yourself for what you did": "To clear, sacrifice something important just to hurt yourself for what you did", + "To clear, take rash action to confront the object of your jealousy and prove your worth without any plan or advice": "To clear, take rash action to confront the object of your jealousy and prove your worth without any plan or advice", + "to": "to", + "torn clothes, practical clothes, chitinous clothes, raider's clothes": "torn clothes, practical clothes, chitinous clothes, raider's clothes", + "Tracker": "Tracker", + "Transform": "Transform", + "uncheck all": "uncheck all", + "unthreatening, fast and agile, dangerous attack, hardy, stealthy, mental bond, flying (counts as both strength choices unless flight is common)": "unthreatening, fast and agile, dangerous attack, hardy, stealthy, mental bond, flying (counts as both strength choices unless flight is common)", + "unusual diet, conspicuous, plodding, harmless, stubborn, collateral damage, vulnerable to something common": "unusual diet, conspicuous, plodding, harmless, stubborn, collateral damage, vulnerable to something common", + "Up Beat": "Up Beat", + "Weaknesses": "Weaknesses", + "What are your feelings towards _____?": "What are your feelings towards _____?", + "What do you hope to get from _____?": "What do you hope to get from _____?", + "What do you love most?": "What do you love most?", + "When people finally kiss after a period of tension, each takes +1 ongoing to get to safety and protect the other for the rest of the scene.": "When people finally kiss after a period of tension, each takes +1 ongoing to get to safety and protect the other for the rest of the scene.", + "When you appeal to someone’s physical or romantic sensibilities, roll +Heart:": "When you appeal to someone’s physical or romantic sensibilities, roll +Heart:", + "When you become Smitten with someone (always your choice), say why, give them a String on you, and answer the question in the Truths of Heart and Blade section of your playbook.": "When you become Smitten with someone (always your choice), say why, give them a String on you, and answer the question in the Truths of Heart and Blade section of your playbook.", + "When you commit yourself to a specific goal, you may ask the GM once per scene how you could advance that goal in a way that violates “civilized” norms. Take +1 forward to act on the answer. If you refrain, it counts as an uncomfortable situation that reduces your Feral by 1 and you must mark a Condition.": "When you commit yourself to a specific goal, you may ask the GM once per scene how you could advance that goal in a way that violates “civilized” norms. Take +1 forward to act on the answer. If you refrain, it counts as an uncomfortable situation that reduces your Feral by 1 and you must mark a Condition.", + "When you Fight, you may mark a Condition to choose an additional option, even on a 6-.": "When you Fight, you may mark a Condition to choose an additional option, even on a 6-.", + "When you investigate a person’s living space, camp, or trail, or an object important to them, you can roll +Heart instead of +Wit to Figure Them Out, and may do so even when they’re not present. You can also ask the question, “Where did they go?” as if it were an option on the list for that move. On a 7–9, they take a String on you instead of asking a question back. Say why. Do they just smell that good or that fearsome?": "When you investigate a person’s living space, camp, or trail, or an object important to them, you can roll +Heart instead of +Wit to Figure Them Out, and may do so even when they’re not present. You can also ask the question, “Where did they go?” as if it were an option on the list for that move. On a 7–9, they take a String on you instead of asking a question back. Say why. Do they just smell that good or that fearsome?", + "When you make it clear to your foes that you’re the biggest threat, then for the rest of the scene, whenever you roll a 10+, you may choose someone present to be impressed or intrigued with you. Once during the scene, when you gain a String on someone, gain an additional String on someone else who considers you an enemy": "When you make it clear to your foes that you’re the biggest threat, then for the rest of the scene, whenever you roll a 10+, you may choose someone present to be impressed or intrigued with you. Once during the scene, when you gain a String on someone, gain an additional String on someone else who considers you an enemy", + "When you offer someone support in a way that could be meaningful to them, roll +Heart or +Spirit (+3 more if you spend a String on them):": "When you offer someone support in a way that could be meaningful to them, roll +Heart or +Spirit (+3 more if you spend a String on them):", + "When you parley with a Toxic Power, ask it your question and roll +Spirit:": "When you parley with a Toxic Power, ask it your question and roll +Spirit:", + "When you perform a ritual to commune with the Unseen, give a dangerous Unseen a String on you and roll +Spirit:": "When you perform a ritual to commune with the Unseen, give a dangerous Unseen a String on you and roll +Spirit:", + "When you push your limits to achieve something extraordinary that’s not covered by another move, or to avert an imminent danger to yourself or someone else, say what you’re willing to sacrifice and pick your approach:": "When you push your limits to achieve something extraordinary that’s not covered by another move, or to avert an imminent danger to yourself or someone else, say what you’re willing to sacrifice and pick your approach:", + "When you say aloud what you want from an NPC, you may give them a String on you to ask a question about them from the Figure Out move.": "When you say aloud what you want from an NPC, you may give them a String on you to ask a question about them from the Figure Out move.", + "When you seek to incapacitate someone with violence, roll +Daring or +Grace:": "When you seek to incapacitate someone with violence, roll +Daring or +Grace:", + "When you suffer a staggering physical or emotional blow, choose an option from the following based on the number of Conditions you have marked.": "When you suffer a staggering physical or emotional blow, choose an option from the following based on the number of Conditions you have marked.", + "When you taunt someone into doing something they want to do but find unwise, roll +Daring:": "When you taunt someone into doing something they want to do but find unwise, roll +Daring:", + "When you try to understand a person, roll +Wit (+3 more if you spend a String on them):": "When you try to understand a person, roll +Wit (+3 more if you spend a String on them):", + "wild demeanor, hungry demeanor, piercing demeanor": "wild demeanor, hungry demeanor, piercing demeanor", + "Willpower or metaphysical skill. +Spirit": "Willpower or metaphysical skill. +Spirit", + "Wit": "Wit", + "You are in harmony with your beast and may clear a Condition": "You are in harmony with your beast and may clear a Condition", + "You are magnificent and little escapes your notice; you gain leverage or an opportunity with a monster": "You are magnificent and little escapes your notice; you gain leverage or an opportunity with a monster", + "You can move in ways no ordinary person could": "You can move in ways no ordinary person could", + "You choose 1": "You choose 1", + "You grin and bear the blow; mark two Conditions": "You grin and bear the blow; mark two Conditions", + "You have a bestial form, which you can assume at will and must assume whenever your Feral hits 4. When you do, tell everyone what the beast in you looks like, increase your Feral to 4 if it’s not there already, and roll +Daring:": "You have a bestial form, which you can assume at will and must assume whenever your Feral hits 4. When you do, tell everyone what the beast in you looks like, increase your Feral to 4 if it’s not there already, and roll +Daring:", + "You hesitate or stumble and the opposition gains an opportunity": "You hesitate or stumble and the opposition gains an opportunity", + "You lash out at someone whose regard matters to you: provoke them to do something foolish or harmful and take advantage of a String on them if you have one": "You lash out at someone whose regard matters to you: provoke them to do something foolish or harmful and take advantage of a String on them if you have one", + "You mark a Condition": "You mark a Condition", + "You may ask 2 questions, but they may ask 1 of you": "You may ask 2 questions, but they may ask 1 of you", + "You may ask 2 questions, now or later in the scene": "You may ask 2 questions, now or later in the scene", + "You revert to your usual form when your Feral drops below 4. While transformed, you may mark a Condition to avoid reducing your Feral, as often as you like.": "You revert to your usual form when your Feral drops below 4. While transformed, you may mark a Condition to avoid reducing your Feral, as often as you like.", + "You’re rendered helpless for the scene": "You’re rendered helpless for the scene", + "You’re utterly humiliated and news will spread; this could be a consequence of a setback in the confrontation, or might be caused by something you confess in the heat of the moment": "You’re utterly humiliated and news will spread; this could be a consequence of a setback in the confrontation, or might be caused by something you confess in the heat of the moment", + "Your first five Advances must be from the top six on the list. After you take your fifth Advance, you can choose to switch to another playbook or live happily ever after. Choose one of these last two options when the emotional conflict at the core of your playbook has been resolved or eclipsed by a new conflict corresponding to a new playbook.": "Your first five Advances must be from the top six on the list. After you take your fifth Advance, you can choose to switch to another playbook or live happily ever after. Choose one of these last two options when the emotional conflict at the core of your playbook has been resolved or eclipsed by a new conflict corresponding to a new playbook.", + "Feral": "Feral", + "You may walk in civilized circles, but sooner or later your feral truth will come to the fore. Your Feral score starts at 1. If it hits 4, you can't hold back the beast any longer and you Transform. If your Feral drops to 0, you lose access to all your Beast playbook moves until it increases again. On the plus side, you're fitting in. You blend. You've assimilated.": "You may walk in civilized circles, but sooner or later your feral truth will come to the fore. Your Feral score starts at 1. If it hits 4, you can't hold back the beast any longer and you Transform. If your Feral drops to 0, you lose access to all your Beast playbook moves until it increases again. On the plus side, you're fitting in. You blend. You've assimilated.", + "Increase Feral when:": "Increase Feral when:", + "Decrease Feral when:": "Decrease Feral when:", + "You express yourself in a shocking way through your appearance": "You express yourself in a shocking way through your appearance", + "You feel that your bestial nature has hurt someone you care about": "You feel that your bestial nature has hurt someone you care about", + "You display intense emotion that society wants you to conceal": "You display intense emotion that society wants you to conceal", + "You go along with an uncomfortable interaction to fit in": "You go along with an uncomfortable interaction to fit in", + "Truths of Heart and Blade": "Truths of Heart and Blade", + "Smitten Kitten": "Smitten Kitten", + "When you become Smitten with someone, say why, give them a String, and answer this question:": "When you become Smitten with someone, say why, give them a String, and answer this question:", + "What have you done that you are sure they view as inappropriate?": "What have you done that you are sure they view as inappropriate?", + "The Bloody Truth": "The Bloody Truth", + "When you Figure Out a Person in physical conflict, you may additionally ask one of these questions, even on a 6-:": "When you Figure Out a Person in physical conflict, you may additionally ask one of these questions, even on a 6-:", + "What awakens the beast inside you?": "What awakens the beast inside you?", + "How could I get you to kiss me?": "How could I get you to kiss me?", + "The Beast follows their truth and their passions, which puts them in conflict with civilization and civilized norms. Unless they give up what makes them special and powerful, they cannot make themself acceptable to that civilized society. Their central conflict is living their truth versus fitting in with a dominant social order. Example Archetypes: Ranger Between Worlds, Bitten, Raised by Beasts": "The Beast follows their truth and their passions, which puts them in conflict with civilization and civilized norms. Unless they give up what makes them special and powerful, they cannot make themself acceptable to that civilized society. Their central conflict is living their truth versus fitting in with a dominant social order. Example Archetypes: Ranger Between Worlds, Bitten, Raised by Beasts", + "More about": "More about", + "Choose": "Choose", +"The Chosen playbook revolves around special status, relationships across social strata, and the crushing expectations of fate, family, or the adoring public. Their central conflict is inner truth versus crushing social expectations. Example Archetypes: Magical Princess, Pop Idol, Chosen One": "The Chosen playbook revolves around special status, relationships across social strata, and the crushing expectations of fate, family, or the adoring public. Their central conflict is inner truth versus crushing social expectations. Example Archetypes: Magical Princess, Pop Idol, Chosen One", +"Destiny": "Destiny", +"They keep telling you that you have a Destiny, but it’s not what your heart truly desires. What is it?": "They keep telling you that you have a Destiny, but it’s not what your heart truly desires. What is it?", +"Destiny Examples:": "Destiny Examples:", +"You may fulfill your Destiny in the course of play, or reject it so firmly that you no longer feel pressure to fulfill it. This deserves a climactic scene either way, and trying to reject your Destiny draws the full wrath of your Aspects and those pressing you to fulfill it. Afterwards, choose a new Destiny, adopt a new playbook, or live happily ever after.": "You may fulfill your Destiny in the course of play, or reject it so firmly that you no longer feel pressure to fulfill it. This deserves a climactic scene either way, and trying to reject your Destiny draws the full wrath of your Aspects and those pressing you to fulfill it. Afterwards, choose a new Destiny, adopt a new playbook, or live happily ever after.", + "Choose two Heroic Aspects and two Tragic Aspects from the following lists. When you act in accordance with one of your Aspects, check it off and take +1 forward. If it’s a Tragic Aspect, also mark XP. When all four Aspects are checked off, describe how your Destiny grows ever nearer, then erase the check marks and begin again.": "Choose two Heroic Aspects and two Tragic Aspects from the following lists. When you act in accordance with one of your Aspects, check it off and take +1 forward. If it’s a Tragic Aspect, also mark XP. When all four Aspects are checked off, describe how your Destiny grows ever nearer, then erase the check marks and begin again.", + "Heroic Aspect": "Heroic Aspect", + "Portents & Prophecies, Spiritual Prowess, Heir to a Mystic Power, Prominent Suitors, Save Your World, Soother of Monsters, Help of the Masses, Chosen by a God, Legendary Skill": "Portents & Prophecies, Spiritual Prowess, Heir to a Mystic Power, Prominent Suitors, Save Your World, Soother of Monsters, Help of the Masses, Chosen by a God, Legendary Skill", + "Marry the Prince of Heteronormia": "Marry the Prince of Heteronormia", + "Be sacrificed to appease the Horror": "Be sacrificed to appease the Horror", + "Tragic Aspect": "Tragic Aspect", + "Love that Cannot Be, End of the Universe, Lose Those You Love, Arch-Nemesis, Bitter Rival, Betrayal, Seduced by Evil, Coveted Destiny, The End of Love Itself": "Love that Cannot Be, End of the Universe, Lose Those You Love, Arch-Nemesis, Bitter Rival, Betrayal, Seduced by Evil, Coveted Destiny, The End of Love Itself", + "Banish magic from the world": "Banish magic from the world", + "Melt the heart of the Undying One": "Melt the heart of the Undying One", + "The Fated Day Approaches": "The Fated Day Approaches", + "Whenever you miss an opportunity to make progress towards your Destiny, choose 1:": "Whenever you miss an opportunity to make progress towards your Destiny, choose 1:", + "The GM will tell you the details, inspired by your Destiny. They may wait until a lull in the action to drop the consequences on you.": "The GM will tell you the details, inspired by your Destiny. They may wait until a lull in the action to drop the consequences on you.", + "Someone with power over you makes an uncomfortable demand in furtherance of your Destiny, backed by a threat": "Someone with power over you makes an uncomfortable demand in furtherance of your Destiny, backed by a threat", + "The PC you care about the most receives bad news or has an accident serious enough to make them Stagger": "The PC you care about the most receives bad news or has an accident serious enough to make them Stagger", + "Don’t You Know Who I Am?": "Don’t You Know Who I Am?", + "When you meet someone who knows you by reputation (you decide), roll +Heart:": "When you meet someone who knows you by reputation (you decide), roll +Heart:", + "Say two things they’ve heard about you": "Say two things they’ve heard about you", + "You say one, the GM says one": "You say one, the GM says one", + "Entourage": "Entourage", + "You have a group of loyal attendants. Name three of them who accompany you and choose a trait for them: Dangerous, Fanatical, Resourceful, Charming": "You have a group of loyal attendants. Name three of them who accompany you and choose a trait for them: Dangerous, Fanatical, Resourceful, Charming", + "Choose a basic move. Your entourage grants you a +1 on rolls for this move when present. When you would Stagger, you may choose instead for one of your named Entourage to die. If you do, your Entourage gains a String on you.": "Choose a basic move. Your entourage grants you a +1 on rolls for this move when present. When you would Stagger, you may choose instead for one of your named Entourage to die. If you do, your Entourage gains a String on you.", + "Member Names": "Member Names", + "Entourage Trait": "Entourage Trait", + "Dangerous, Fanatical, Resourceful, Charming": "Dangerous, Fanatical, Resourceful, Charming", + "Basic Move Receiving +1": "Basic Move Receiving +1", + "Fight, Defy Disaster, Entice, Figure Out a Person, Emotional Support, Call on a Toxic Power": "Fight, Defy Disaster, Entice, Figure Out a Person, Emotional Support, Call on a Toxic Power", + "Gossip": "Gossip", + "When you seek insight about a person by spending some time gossiping with those who know them, roll +Wit:": "When you seek insight about a person by spending some time gossiping with those who know them, roll +Wit:", + "Someone you speak to who is dangerous to you may ask a question of you from the same list.": "Someone you speak to who is dangerous to you may ask a question of you from the same list.", + "You learn a dangerous secret and gain a String on the target. You may also ask a question from the Figure Out a Person move.": "You learn a dangerous secret and gain a String on the target. You may also ask a question from the Figure Out a Person move.", + "You may ask a question from the Figure Out a Person move.": "You may ask a question from the Figure Out a Person move.", + "Guidance from Above": "Guidance from Above", + "When you petition a superior for guidance, they give you instructions and useful information. Mark XP or clear a Condition if you do as commanded. They gain a String on you if you do otherwise.": "When you petition a superior for guidance, they give you instructions and useful information. Mark XP or clear a Condition if you do as commanded. They gain a String on you if you do otherwise.", + "Help Me~~!": "Help Me~~!", + "You’re a magnet for trouble and hunted by those who would use you for their own purposes. Others mark XP when they Defy Disaster that would otherwise befall you. In addition, whenever you’re captured, your captor reveals something they hope to achieve; gain a String on them and mark XP.": "You’re a magnet for trouble and hunted by those who would use you for their own purposes. Others mark XP when they Defy Disaster that would otherwise befall you. In addition, whenever you’re captured, your captor reveals something they hope to achieve; gain a String on them and mark XP.", + "Know Your Place!": "Know Your Place!", + "When someone dares insult you and you deliver a scathing retort, roll +Wit": "When someone dares insult you and you deliver a scathing retort, roll +Wit", + "Word spreads of your sharp wit, take +1 forward, and they choose 1": "Word spreads of your sharp wit, take +1 forward, and they choose 1", + "Back down": "Back down", + "Make a fool of themself": "Make a fool of themself", + "Attack you": "Attack you", + "Love Is Not My Destiny": "Love Is Not My Destiny", + "How do our respective stations make it impossible to be together?": "How do our respective stations make it impossible to be together?", + "Inescapable Conclusions": "Inescapable Conclusions", + "When you Figure Out a Person during a physical conflict, you may ask one additional question from this list, even on a 6-:": "When you Figure Out a Person during a physical conflict, you may ask one additional question from this list, even on a 6-:", + "What do you hope for your future?": "What do you hope for your future?", + "What do you fear is your destiny?": "What do you fear is your destiny?", + "The Devoted is a selfless protector, committed to a person or a cause. Their central conflict lies in pitting this devotion against self-care. Example Archetypes: Sidekick, Champion, Protective Friend": "The Devoted is a selfless protector, committed to a person or a cause. Their central conflict lies in pitting this devotion against self-care. Example Archetypes: Sidekick, Champion, Protective Friend", + "Devotion": "Devotion", + "Choose a Devotion from the example lists or invent one of your own. What three tenets of your Devotion have you found yourself tempted to violate?": "Choose a Devotion from the example lists or invent one of your own. What three tenets of your Devotion have you found yourself tempted to violate?", + "Mark a Condition if you act contrary to your Devotion, for instance by violating its tenets or disobeying a superior.": "Mark a Condition if you act contrary to your Devotion, for instance by violating its tenets or disobeying a superior.", + "When you Defy Disaster, you may bring a subject of your Devotion with you safely.": "When you Defy Disaster, you may bring a subject of your Devotion with you safely.", + "My Devotion": "My Devotion", + "To a cause: Freedom, vengeance, justice, love, the gay agenda. To a person: A PC, a liege, an idol. To a higher power: A god, a sexy dragon, a sentient planet.": "To a cause: Freedom, vengeance, justice, love, the gay agenda. To a person: A PC, a liege, an idol. To a higher power: A god, a sexy dragon, a sentient planet.", + "Tenet 1": "Tenet 1", + "Tenet 2": "Tenet 2", + "Tenet 3": "Tenet 3", + "Last Stand": "Last Stand", + "When you face a superior foe on behalf of your Devotion, you may roll +Conditions (the number of Conditions you have marked) instead of the normal stat to Fight or to Defy Disaster that’s about to befall someone else.": "When you face a superior foe on behalf of your Devotion, you may roll +Conditions (the number of Conditions you have marked) instead of the normal stat to Fight or to Defy Disaster that’s about to befall someone else.", + "What’s Best for Them": "What’s Best for Them", + "When you’re Smitten with someone, you may treat them as a subject of your Devotion. Also, when you take action to help them be romantic with someone other than you, mark XP.": "When you’re Smitten with someone, you may treat them as a subject of your Devotion. Also, when you take action to help them be romantic with someone other than you, mark XP.", + "Fanatical Self-Sacrifice": "Fanatical Self-Sacrifice", + "You may mark a Condition to prevent a Condition being inflicted on another. When you do, mark XP, and you may only clear that Condition by taking the associated destructive action. Mark it with an asterisk to remind yourself. Also, your Conditions only cause a –1 penalty to the associated basic moves (instead of –2).": "You may mark a Condition to prevent a Condition being inflicted on another. When you do, mark XP, and you may only clear that Condition by taking the associated destructive action. Mark it with an asterisk to remind yourself. Also, your Conditions only cause a –1 penalty to the associated basic moves (instead of –2).", + "For the Cause!": "For the Cause!", + "When you Fight the enemy of your Devotion, you can suffer a Condition to choose an additional option from the Fight move, even if you roll a 6-. You can inflict a Condition a second time within a single Fight move this way.": "When you Fight the enemy of your Devotion, you can suffer a Condition to choose an additional option from the Fight move, even if you roll a 6-. You can inflict a Condition a second time within a single Fight move this way.", + "Gallant Rescue": "Gallant Rescue", + "When you Defy Disaster that’s about to befall someone else, you can either gain a String on them or ask one of the following questions, even if you roll a 6-. You can only gain one String per scene in this way on any given person.": "When you Defy Disaster that’s about to befall someone else, you can either gain a String on them or ask one of the following questions, even if you roll a 6-. You can only gain one String per scene in this way on any given person.", + "How do you feel about my Devotion?": "How do you feel about my Devotion?", + "What secret pain lies in your heart?": "What secret pain lies in your heart?", + "Power of Conviction": "Power of Conviction", + "When you Entice someone while extolling the virtues of your Devotion or invoking its authority, you may roll +Spirit instead of +Heart. A superior in your Devotion gains a String on you, representing your dependence.": "When you Entice someone while extolling the virtues of your Devotion or invoking its authority, you may roll +Spirit instead of +Heart. A superior in your Devotion gains a String on you, representing your dependence.", + "Lay on Hands": "Lay on Hands", + "When you touch someone as part of Emotional Support, you heal their physical ailments. Tell them how your Devotion sustains you; they mark an XP if they validate your Devotion, and you gain a String on them if they criticize it.": "When you touch someone as part of Emotional Support, you heal their physical ailments. Tell them how your Devotion sustains you; they mark an XP if they validate your Devotion, and you gain a String on them if they criticize it.", + "Toxic Devotion": "Toxic Devotion", + "Once per scene, when you forgive your Devotion for abusing you or make excuses for obvious problems with your Devotion, take +1 forward or mark XP. Also, once per scene, when you learn that another PC thinks your Devotion is problematic and you don’t defend it, mark a Condition and give them a String on you.": "Once per scene, when you forgive your Devotion for abusing you or make excuses for obvious problems with your Devotion, take +1 forward or mark XP. Also, once per scene, when you learn that another PC thinks your Devotion is problematic and you don’t defend it, mark a Condition and give them a String on you.", + "My Heart is Not Mine to Give": "My Heart is Not Mine to Give", + "How does pursuing them conflict with your Devotion?": "How does pursuing them conflict with your Devotion?", + "What Will You Fight For?": "What Will You Fight For?", + "When you Figure Out a Person during a physical conflict, you may additionally ask one of these questions, even on a 6-:": "When you Figure Out a Person during a physical conflict, you may additionally ask one of these questions, even on a 6-:", + "What are you willing to risk death for?": "What are you willing to risk death for?", + "What kind of deeds earn your loyalty?": "What kind of deeds earn your loyalty?", + "This move is not available for other playbooks.": "This move is not available for other playbooks.", + "The Infamous once participated in wicked deeds, but they’ve become fiercely righteous in trying to atone. Their central conflict arises from the lasting consequences of their past actions and beliefs versus their new convictions. Will they repair the harm they caused, will they seek forgiveness, or will they despair? Will they find a new place to belong? Example Archetypes: Former Villain, Escaped Henchperson, Veteran of Dishonor": "The Infamous once participated in wicked deeds, but they’ve become fiercely righteous in trying to atone. Their central conflict arises from the lasting consequences of their past actions and beliefs versus their new convictions. Will they repair the harm they caused, will they seek forgiveness, or will they despair? Will they find a new place to belong? Example Archetypes: Former Villain, Escaped Henchperson, Veteran of Dishonor", + "What Cannot Be Undone": "What Cannot Be Undone", + "You’ve hurt people, and they have no obligation to forgive you or engage with you.": "You’ve hurt people, and they have no obligation to forgive you or engage with you.", + "Before defining Relationships in character creation, propose a wicked past that you think could be forgiven, and ask each PC this question:": "Before defining Relationships in character creation, propose a wicked past that you think could be forgiven, and ask each PC this question:", + "If anyone hesitates or can’t answer the question, revisit your past and tone it down. You can tone down the gravity of your backstory by reducing the severity of your deeds or the agency you had in enacting them. Afterwards, answer these questions:": "If anyone hesitates or can’t answer the question, revisit your past and tone it down. You can tone down the gravity of your backstory by reducing the severity of your deeds or the agency you had in enacting them. Afterwards, answer these questions:", + "What circumstances or subsequent deeds could make it possible to forgive this past?": "What circumstances or subsequent deeds could make it possible to forgive this past?", + "What personal growth are you proud of?": "What personal growth are you proud of?", + "What about your past causes you the most grief?": "What about your past causes you the most grief?", + "You swore to never again perform certain actions that could lead to harm. What are they? Examples include: Lying, stealing, accepting someone’s love, drawing blood, or breaking a promise. If you break your vow, you Stagger. Then decide whether to keep the vow or abandon it.": "You swore to never again perform certain actions that could lead to harm. What are they? Examples include: Lying, stealing, accepting someone’s love, drawing blood, or breaking a promise. If you break your vow, you Stagger. Then decide whether to keep the vow or abandon it.", + "(start with the moves marked and choose two more)": "(start with the moves marked and choose two more)", + "Wicked Past": "Wicked Past", + "When you hear about a villain for the first time, you may decide that you know them from your past. If so, give them a String on you to ask a question from the Figure Out a Person list and take +1 forward against them.": "When you hear about a villain for the first time, you may decide that you know them from your past. If so, give them a String on you to ask a question from the Figure Out a Person list and take +1 forward against them.", + "Make It Right": "Make It Right", + "When you allow yourself to be vulnerable to someone you hurt during your villainous past, they choose 1": "When you allow yourself to be vulnerable to someone you hurt during your villainous past, they choose 1", + "Decline to engage; they gain a String on you": "Decline to engage; they gain a String on you", + "Lash out; you Stagger": "Lash out; you Stagger", + "Guide you; they mark XP and give you a task to help make amends": "Guide you; they mark XP and give you a task to help make amends", + "Show vulnerability; you take +1 forward to interact with them": "Show vulnerability; you take +1 forward to interact with them", + "Forgive you; you each clear a Condition and this move no longer triggers with this person": "Forgive you; you each clear a Condition and this move no longer triggers with this person", + "Always Suspect": "Always Suspect", + "When you pretend to be a villain to win a villain’s trust, they trust you enough to offer you an opportunity and you gain a String on them. You must choose one of the following options:": "When you pretend to be a villain to win a villain’s trust, they trust you enough to offer you an opportunity and you gain a String on them. You must choose one of the following options:", + "Someone watching comes to the worst possible conclusion": "Someone watching comes to the worst possible conclusion", + "The villain requires an act of villainy to prove your intentions first": "The villain requires an act of villainy to prove your intentions first", + "The villain is only pretending to trust you and the opportunity is a trap": "The villain is only pretending to trust you and the opportunity is a trap", + "Talons of the Past": "Talons of the Past", + "When you gain a String on someone associated with your villainous past, or vice versa, mark XP. The first time this happens for a given person, you each can define a secret or vulnerability you know about the other.": "When you gain a String on someone associated with your villainous past, or vice versa, mark XP. The first time this happens for a given person, you each can define a secret or vulnerability you know about the other.", + "They Can Change, Too": "They Can Change, Too", + "When you give up an advantage on someone dangerous because you believe they can mend their wicked ways, you can ask a question as if you’d Figured Them Out.": "When you give up an advantage on someone dangerous because you believe they can mend their wicked ways, you can ask a question as if you’d Figured Them Out.", + "Used to Disappointment": "Used to Disappointment", + "When you rely upon or trust someone else with something important, say how you expect them to let you down.": "When you rely upon or trust someone else with something important, say how you expect them to let you down.", + "If they pleasantly surprise you, they gain a String on you": "If they pleasantly surprise you, they gain a String on you", + "If they do as you expect, choose 1: they lose a String on you, or you gain a String on them": "If they do as you expect, choose 1: they lose a String on you, or you gain a String on them", + "If they are somehow even worse than you expected, you have a choice: berate them and inflict a Condition, or swallow your loneliness and take a Condition yourself": "If they are somehow even worse than you expected, you have a choice: berate them and inflict a Condition, or swallow your loneliness and take a Condition yourself", + "What Makes a Home": "What Makes a Home", + "If every other PC in a scene has a String on you, your Conditions cause you only a –1 penalty instead of a –2 to the associated basic moves.": "If every other PC in a scene has a String on you, your Conditions cause you only a –1 penalty instead of a –2 to the associated basic moves.", + "Who’s the Monster?": "Who’s the Monster?", + "When you expose the hypocrisy of someone who is supposedly virtuous, roll +Daring:": "When you expose the hypocrisy of someone who is supposedly virtuous, roll +Daring:", + "Gain a String on them and choose 1": "Gain a String on them and choose 1", + "The wrongness of their act is exposed to all; they mark XP if they change their mind. If they don’t, they must attack you or take a Condition.": "The wrongness of their act is exposed to all; they mark XP if they change their mind. If they don’t, they must attack you or take a Condition.", + "Your words sting; they take a Condition.": "Your words sting; they take a Condition.", + "You impress an onlooker; gain a String on them.": "You impress an onlooker; gain a String on them.", + "Undeserving": "Undeserving", + "Why do you think they would be wrong to forgive you?": "Why do you think they would be wrong to forgive you?", + "Your Wicked Heart": "Your Wicked Heart", + "When you Figure Out a Person during physical conflict, you may additionally ask one of these questions, even on a 6-:": "When you Figure Out a Person during physical conflict, you may additionally ask one of these questions, even on a 6-:", + "What are you most ashamed of?": "What are you most ashamed of?", + "How could I get you to betray your ideals?": "How could I get you to betray your ideals?", + "The Nature Witch is deeply connected to their environment and less experienced when it comes to people. They’re either new to socializing or are newly exploring what it feels like to socialize as their true self. Their central conflict revolves around the growth that their explorations will require from them and those who love them. Example Archetypes: Oblivious Horse Girl, Beacon of Kindness, Plant Geek Babygay": "The Nature Witch is deeply connected to their environment and less experienced when it comes to people. They’re either new to socializing or are newly exploring what it feels like to socialize as their true self. Their central conflict revolves around the growth that their explorations will require from them and those who love them. Example Archetypes: Oblivious Horse Girl, Beacon of Kindness, Plant Geek Babygay", + "Curiosity": "Curiosity", + "Dealing with people feels new to you and you might be awkward, but you want to learn. What better way to learn than by doing?": "Dealing with people feels new to you and you might be awkward, but you want to learn. What better way to learn than by doing?", + "Choose four Trials from the list. When you complete a chosen Trial, mark it and choose one: mark XP, clear a Condition, or take a String on someone involved. When your four chosen Trials are all fulfilled, reflect on what you’ve learned about yourself and pick four more. If you complete the entire list, choose the ones that meant the most to you and then evolve into a new form of life inspired by those experiences. Adopt a new playbook, remain a Nature Witch, or retire to live happily ever after.": "Choose four Trials from the list. When you complete a chosen Trial, mark it and choose one: mark XP, clear a Condition, or take a String on someone involved. When your four chosen Trials are all fulfilled, reflect on what you’ve learned about yourself and pick four more. If you complete the entire list, choose the ones that meant the most to you and then evolve into a new form of life inspired by those experiences. Adopt a new playbook, remain a Nature Witch, or retire to live happily ever after.", + "Trial 1": "Trial 1", + "Ride a fantastical creature. Win a duel. Go somewhere no person has tread before. Fall in love. Stick up for yourself, though it breaks someone’s heart. Lose someone you care about. Befriend someone very different from you. Liberate something dangerous. Receive a rare gift from someone you respect. Experience an altered state with a friend. Fail at something that means the world to you. Reject a conviction you once held. Extend kindness to someone who doesn’t deserve it. Achieve a lost cause. Throw away something comfortable to pursue a dream. Kiss someone dangerous. Forgive someone who deserves forgiveness. Trust someone with your secrets, only to be betrayed. Shock someone with an unwelcome truth. Earn forgiveness for a misdeed.": "Ride a fantastical creature. Win a duel. Go somewhere no person has tread before. Fall in love. Stick up for yourself, though it breaks someone’s heart. Lose someone you care about. Befriend someone very different from you. Liberate something dangerous. Receive a rare gift from someone you respect. Experience an altered state with a friend. Fail at something that means the world to you. Reject a conviction you once held. Extend kindness to someone who doesn’t deserve it. Achieve a lost cause. Throw away something comfortable to pursue a dream. Kiss someone dangerous. Forgive someone who deserves forgiveness. Trust someone with your secrets, only to be betrayed. Shock someone with an unwelcome truth. Earn forgiveness for a misdeed.", + "Trial 2": "Trial 2", + "Trial 3": "Trial 3", + "Trial 4": "Trial 4", + "Wild Friends": "Wild Friends", + "You can speak with animals and plants and may Influence them with Strings just like other NPCs. Near your home, or anywhere you have spent a long period of time, animal and plant friends are always nearby when you want them.": "You can speak with animals and plants and may Influence them with Strings just like other NPCs. Near your home, or anywhere you have spent a long period of time, animal and plant friends are always nearby when you want them.", + "Awaken the Wild": "Awaken the Wild", + "When you are in a safe position and attempt to commune with a place or non-sentient creature, roll +Spirit:": "When you are in a safe position and attempt to commune with a place or non-sentient creature, roll +Spirit:", + "If you attempt this move while rushed or while distressed to the point of having three or more Conditions, it works as above, briefly, but afterwards the place or creature will fall dead and barren.": "If you attempt this move while rushed or while distressed to the point of having three or more Conditions, it works as above, briefly, but afterwards the place or creature will fall dead and barren.", + "Choose 1, GM will offer you a hard choice or success at a cost": "Choose 1, GM will offer you a hard choice or success at a cost", + "You cleanse it of hurt, corruption, or sickness": "You cleanse it of hurt, corruption, or sickness", + "You alter its behavior, ecosystem, or atmosphere to one you choose": "You alter its behavior, ecosystem, or atmosphere to one you choose", + "You make it dangerous to a certain person or creature, or a type of person or creature": "You make it dangerous to a certain person or creature, or a type of person or creature", + "Familiar": "Familiar", + "You have a cute animal as your loyal familiar. You can perceive the world through its senses whenever you choose and communicate with it at any distance. In addition, choose a basic move. When the familiar helps with that basic move or with Emotional Support, take +1 to your roll.": "You have a cute animal as your loyal familiar. You can perceive the world through its senses whenever you choose and communicate with it at any distance. In addition, choose a basic move. When the familiar helps with that basic move or with Emotional Support, take +1 to your roll.", + "Basic Move": "Basic Move", + "Fight, Defy Disaster, Entice, Figure Out a Person, Call on a Toxic Power": "Fight, Defy Disaster, Entice, Figure Out a Person, Call on a Toxic Power", + "I Ship It": "I Ship It", + "When you want to make a match between two other people and talk up one to the other, roll +Heart:": "When you want to make a match between two other people and talk up one to the other, roll +Heart:", + "Anyone involved may mark XP if they become Smitten with anyone else involved, including the Witch (immediately or later this session, maximum of 1 XP per PC).": "Anyone involved may mark XP if they become Smitten with anyone else involved, including the Witch (immediately or later this session, maximum of 1 XP per PC).", + "You may give the listener a String on the other person or give the other person a String on the listener": "You may give the listener a String on the other person or give the other person a String on the listener", + "As above, and the listener can either take a String on you or give the other person a String on you": "As above, and the listener can either take a String on you or give the other person a String on you", + "The Magic of Love": "The Magic of Love", + "When you’re Smitten with someone and proudly extol the power of love, either of you may spend a String on the other to gain the use of one of their playbook moves for one scene.": "When you’re Smitten with someone and proudly extol the power of love, either of you may spend a String on the other to gain the use of one of their playbook moves for one scene.", + "Nature’s Touch": "Nature’s Touch", + "When you touch someone and let the power of the natural world flow into them, roll +Spirit:": "When you touch someone and let the power of the natural world flow into them, roll +Spirit:", + "They may give you a String on them to clear a Condition": "They may give you a String on them to clear a Condition", + "They gain the ability to speak with plants and animals for the rest of the scene": "They gain the ability to speak with plants and animals for the rest of the scene", + "They must answer one of the Figure Out a Person questions of your choice or else they take a Condition": "They must answer one of the Figure Out a Person questions of your choice or else they take a Condition", + "Love Conquers All": "Love Conquers All", + "What is a clear challenge to being with them that you’re overlooking because of your naivete?": "What is a clear challenge to being with them that you’re overlooking because of your naivete?", + "Clear-Hearted Insight": "Clear-Hearted Insight", + "What makes you feel loved?": "What makes you feel loved?", + "What do you hope for the future?": "What do you hope for the future?", + "Living in the Moment": "Living in the Moment", + "Why are you so fickle? Is there something you need to figure out about yourself, and you keep looking for it in other people instead? Are you afraid of the vulnerability that comes from investing in a relationship? Is your true love unattainable? Are you just that oblivious?": "Why are you so fickle? Is there something you need to figure out about yourself, and you keep looking for it in other people instead? Are you afraid of the vulnerability that comes from investing in a relationship? Is your true love unattainable? Are you just that oblivious?", + "Choose something that you’ll be able to grow past to give your character an emotional story arc. You don’t need to figure it out immediately, and the Scoundrel themself may not know at all.": "Choose something that you’ll be able to grow past to give your character an emotional story arc. You don’t need to figure it out immediately, and the Scoundrel themself may not know at all.", + "I may grow past": "I may grow past", + "Lust at First Sight": "Lust at First Sight", + "When you become Smitten with someone you barely know, declare your undying love and give them a String on you. Lose your Smitten status with anyone who has no Strings on you. Take +1 forward to any act you think might impress your new interest.": "When you become Smitten with someone you barely know, declare your undying love and give them a String on you. Lose your Smitten status with anyone who has no Strings on you. Take +1 forward to any act you think might impress your new interest.", + "Shiny and New": "Shiny and New", + "When you give or receive Emotional Support in an intimate moment with someone new, you each mark XP or clear a Condition.": "When you give or receive Emotional Support in an intimate moment with someone new, you each mark XP or clear a Condition.", + "Better to Seek Forgiveness": "Better to Seek Forgiveness", + "When you apologize to someone for your outrageous conduct and put yourself at their mercy, roll +Daring:": "When you apologize to someone for your outrageous conduct and put yourself at their mercy, roll +Daring:", + "You find out what it will take for them to forgive you and you each gain a String on the other. If they forgive you, you each clear a Condition.": "You find out what it will take for them to forgive you and you each gain a String on the other. If they forgive you, you each clear a Condition.", + "You find out what it will take for them to forgive you. If you do it, you either take Strings on each other or they may clear a Condition, your choice.": "You find out what it will take for them to forgive you. If you do it, you either take Strings on each other or they may clear a Condition, your choice.", + "Fools Rush In": "Fools Rush In", + "When you vault into a situation without forethought and wind up way over your head, give someone dangerous to you a String, mark XP, and take +1 forward to Defy Disaster.": "When you vault into a situation without forethought and wind up way over your head, give someone dangerous to you a String, mark XP, and take +1 forward to Defy Disaster.", + "Impressive Swordplay": "Impressive Swordplay", + "Whenever you roll a 7+ to Fight, you may gain a String on someone who is present and ask their player what it is about you that has impressed or intrigued them.": "Whenever you roll a 7+ to Fight, you may gain a String on someone who is present and ask their player what it is about you that has impressed or intrigued them.", + "The Main Attraction": "The Main Attraction", + "When you make a dramatic entrance, roll +Grace:": "When you make a dramatic entrance, roll +Grace:", + "All attention is focused on you for a moment": "All attention is focused on you for a moment", + "You hold the attention of one person for as long as you deliver a dramatic speech": "You hold the attention of one person for as long as you deliver a dramatic speech", + "Take a String on someone present": "Take a String on someone present", + "You take +1 forward": "You take +1 forward", + "One in Every Port": "One in Every Port", + "When you return to any town you’ve been to before, name a person with whom you shared intimacy here and say how you left things. If you left on bad terms, mark XP and the GM will tell you something interesting that has changed since you were last here.": "When you return to any town you’ve been to before, name a person with whom you shared intimacy here and say how you left things. If you left on bad terms, mark XP and the GM will tell you something interesting that has changed since you were last here.", + "Rrrip!": "Rrrip!", + "When you take or narrowly evade a physical blow from someone dangerous to you, you may declare that your clothes were damaged and are now practically indecent. For the remainder of the scene, when you roll a 10+ on any move against an NPC, you may declare that they have a crush on you (up to one NPC per roll and subject to GM discretion). Additionally, any PC who becomes Smitten with you during the remainder of the scene may mark XP.": "When you take or narrowly evade a physical blow from someone dangerous to you, you may declare that your clothes were damaged and are now practically indecent. For the remainder of the scene, when you roll a 10+ on any move against an NPC, you may declare that they have a crush on you (up to one NPC per roll and subject to GM discretion). Additionally, any PC who becomes Smitten with you during the remainder of the scene may mark XP.", + "To Love and Lose": "To Love and Lose", + "When you become Smitten with someone, say why, give them a String, and answer this question:": "When you become Smitten with someone, say why, give them a String, and answer this question:", + "Why would your romance never last?": "Why would your romance never last?", + "Repartée": "Repartée", + "What would make you run away with me?": "What would make you run away with me?", + "Where did you learn to fight?": "Where did you learn to fight?", + "The Seeker comes from a toxic society and has found a new community in which to belong and grow. Their central conflict pits tradition and upbringing against justice and developing their personal values. Example Archetypes: Immigrant from Heteronormia, Enclave-Raised, Privileged Background": "The Seeker comes from a toxic society and has found a new community in which to belong and grow. Their central conflict pits tradition and upbringing against justice and developing their personal values. Example Archetypes: Immigrant from Heteronormia, Enclave-Raised, Privileged Background", + "Tradition, Commandments, Conviction": "Tradition, Commandments, Conviction", + "Tradition": "Tradition", + "Tradition is a measure of how you feel your Authority would judge your behavior.": "Tradition is a measure of how you feel your Authority would judge your behavior.", + "Your Tradition starts at 1. Gain a point of Tradition whenever you make a personal sacrifice to act in accordance with your Commandments, to a maximum of 4. When you are at 4 Tradition, you incur a Condition each time you act contrary to your Commandments.": "Your Tradition starts at 1. Gain a point of Tradition whenever you make a personal sacrifice to act in accordance with your Commandments, to a maximum of 4. When you are at 4 Tradition, you incur a Condition each time you act contrary to your Commandments.", + "Spend Tradition at any time to temper the wrath of the Authority, or to take +1 forward to follow your Commandments or Call on a Toxic Power.": "Spend Tradition at any time to temper the wrath of the Authority, or to take +1 forward to follow your Commandments or Call on a Toxic Power.", + "Commandments": "Commandments", + "Describe the Authority that governed your upbringing and choose at least six Commandments the Authority has issued:": "Describe the Authority that governed your upbringing and choose at least six Commandments the Authority has issued:", + "Commandment": "Commandment", + "Always answer an insult with a drawn sword. Never admit to your weak emotions. Always cover your sinful body. No intimacy until after a monogamous marriage. Never give when you can sell. Never let a weaker person fight their own battles. Never fight a weaker person’s battles. Always obey the Authority. Always obey a certain type of person (gender, race, class, belief, elders). Never go unchaperoned (or at all) with a certain type of person.": "Always answer an insult with a drawn sword. Never admit to your weak emotions. Always cover your sinful body. No intimacy until after a monogamous marriage. Never give when you can sell. Never let a weaker person fight their own battles. Never fight a weaker person’s battles. Always obey the Authority. Always obey a certain type of person (gender, race, class, belief, elders). Never go unchaperoned (or at all) with a certain type of person.", + "Convictions": "Convictions", + "When you break a Commandment and repudiate it forever, mark its checkbox and mark XP. Write a Conviction expressing your new beliefs, something that contradicts the Commandment.": "When you break a Commandment and repudiate it forever, mark its checkbox and mark XP. Write a Conviction expressing your new beliefs, something that contradicts the Commandment.", + "Each time you live up to a Conviction despite temptation or cost, reduce your Tradition by 1 and ask an onlooker if they agree with that Conviction. If they say yes, take a String on them and learn what holds them back from living up to it, if anything. If they say no, mark a Condition.": "Each time you live up to a Conviction despite temptation or cost, reduce your Tradition by 1 and ask an onlooker if they agree with that Conviction. If they say yes, take a String on them and learn what holds them back from living up to it, if anything. If they say no, mark a Condition.", + "Convictions should be bold statements that stand in contrast to the Commandments. Refer to the suggestions for each blank for ideas.": "Convictions should be bold statements that stand in contrast to the Commandments. Refer to the suggestions for each blank for ideas.", + "Conviction": "Conviction", + "I care for myself as I would my dearest friend. Fear will not stop me from speaking the truth of my heart. I will fight for the well-being of those targeted by the Authority, if they wish it. I will atone for the harm I’ve done by liberating others from the Authority. When I see something unjust, I will educate those who can learn to do better and challenge those who must be overcome.": "I care for myself as I would my dearest friend. Fear will not stop me from speaking the truth of my heart. I will fight for the well-being of those targeted by the Authority, if they wish it. I will atone for the harm I’ve done by liberating others from the Authority. When I see something unjust, I will educate those who can learn to do better and challenge those who must be overcome.", + "People Are People": "People Are People", + "When you talk about your home, roll +Heart:": "When you talk about your home, roll +Heart:", + "Admit a flaw about your home; gain +1 forward": "Admit a flaw about your home; gain +1 forward", + "Share something good about your home; clear a Condition": "Share something good about your home; clear a Condition", + "Lie about your home to impress a listener; take a String on them": "Lie about your home to impress a listener; take a String on them", + "Hear Me!": "Hear Me!", + "When you shout one of your Convictions aloud in confrontation with those who hold a contrary belief, roll +Daring:": "When you shout one of your Convictions aloud in confrontation with those who hold a contrary belief, roll +Daring:", + "Ask 2": "Ask 2", + "Ask 1": "Ask 1", + "Why do you think you have to follow that belief?": "Why do you think you have to follow that belief?", + "What does it cost you to follow that belief?": "What does it cost you to follow that belief?", + "What do you wish for that is contrary to that belief?": "What do you wish for that is contrary to that belief?", + "It Wasn’t All Bad": "It Wasn’t All Bad", + "When you encounter someone whose perspective is different from that of your companions, share a relevant story from your home culture and roll +Spirit:": "When you encounter someone whose perspective is different from that of your companions, share a relevant story from your home culture and roll +Spirit:", + "In either case, they also tell you something interesting or useful about their upbringing.": "In either case, they also tell you something interesting or useful about their upbringing.", + "Gain a String on them and either take +1 forward to interact with them or grant that +1 forward to a companion": "Gain a String on them and either take +1 forward to interact with them or grant that +1 forward to a companion", + "Gain a String on them": "Gain a String on them", + "Listen and Learn": "Listen and Learn", + "When you ask someone what you should do in an unfamiliar situation:": "When you ask someone what you should do in an unfamiliar situation:", + "If you follow their advice, take +1 forward and clear a Condition": "If you follow their advice, take +1 forward and clear a Condition", + "If you follow their advice and it goes poorly, mark XP": "If you follow their advice and it goes poorly, mark XP", + "Proper Courtship": "Proper Courtship", + "When you’re Smitten with someone and perform an elaborate and roundabout courtship ritual…": "When you’re Smitten with someone and perform an elaborate and roundabout courtship ritual…", + "If the recipient responds properly, you each get +1 forward to protect each other until either of you breaks a Commandment, and they gain a point of Tradition that they can spend for the same effects you can": "If the recipient responds properly, you each get +1 forward to protect each other until either of you breaks a Commandment, and they gain a point of Tradition that they can spend for the same effects you can", + "If they don’t understand that you’re Smitten, give a String to an onlooker who does understand": "If they don’t understand that you’re Smitten, give a String to an onlooker who does understand", + "Silly Tourist": "Silly Tourist", + "When you Figure Out a Person or Defy Disaster by playing the fool, you may additionally ask a question from this list, even on a 6-:": "When you Figure Out a Person or Defy Disaster by playing the fool, you may additionally ask a question from this list, even on a 6-:", + "What would make you laugh?": "What would make you laugh?", + "What hidden threat or opportunity am I missing?": "What hidden threat or opportunity am I missing?", + "How are you vulnerable?": "How are you vulnerable?", + "Stiff Upper Lip": "Stiff Upper Lip", + "You can spend a point of Tradition to ignore the -2 penalty caused by Conditions. This effect ends if you violate a Commandment or at the end of the scene. When the effect ends, take a Condition.": "You can spend a point of Tradition to ignore the -2 penalty caused by Conditions. This effect ends if you violate a Commandment or at the end of the scene. When the effect ends, take a Condition.", + "I Don’t Belong": "I Don’t Belong", + "Which of your values do they openly violate or decry?": "Which of your values do they openly violate or decry?", + "Not So Different": "Not So Different", + "What prejudice do you hold?": "What prejudice do you hold?", + "What tradition do you most value?": "What tradition do you most value?", + "The Spooky Witch is a weirdo who does their own thing while craving connection. They’ve found that many monsters are quite friendly if you give them a chance, but befriending them brands you a monster, as well. Their central conflict lies in navigating pressures to conform versus their own desires or those of their monstrous friends. Example archetypes: Spell Dancer, Nerdy Alchemist, Speaker for the Unseen": "The Spooky Witch is a weirdo who does their own thing while craving connection. They’ve found that many monsters are quite friendly if you give them a chance, but befriending them brands you a monster, as well. Their central conflict lies in navigating pressures to conform versus their own desires or those of their monstrous friends. Example archetypes: Spell Dancer, Nerdy Alchemist, Speaker for the Unseen", + "The Unseen": "The Unseen", + "The Unseen are mysterious beings most cannot perceive. Their very existence may be debated, but you know the truth, because they have spoken to you. You know that some are kind and some are dangerous, that they have abilities and limitations that differ from “normal” people, and that you find yourself in between.": "The Unseen are mysterious beings most cannot perceive. Their very existence may be debated, but you know the truth, because they have spoken to you. You know that some are kind and some are dangerous, that they have abilities and limitations that differ from “normal” people, and that you find yourself in between.", + "Work with your GM to define what the Unseen are—or what your Spooky Witch thinks they are. They could be friendly spirits, phase-shifted aliens, psychic remnants, glitched-out nanites, angry poltergeists, or something totally other. When did you first interact with them? What do you think they want?": "Work with your GM to define what the Unseen are—or what your Spooky Witch thinks they are. They could be friendly spirits, phase-shifted aliens, psychic remnants, glitched-out nanites, angry poltergeists, or something totally other. When did you first interact with them? What do you think they want?", + "I Like Snails!": "I Like Snails!", + "When you are Smitten with someone and Figure Them Out, blurt out something weird and let them ask you a question from the list. Then ask them another question from the list, even on a 6-.": "When you are Smitten with someone and Figure Them Out, blurt out something weird and let them ask you a question from the list. Then ask them another question from the list, even on a 6-.", + "Astral Dance": "Astral Dance", + "When you dance across the boundary into the realm beyond, describe it and roll +Grace:": "When you dance across the boundary into the realm beyond, describe it and roll +Grace:", + "You and a small number of others who dance with you arrive at a distant destination of your choice.": "You and a small number of others who dance with you arrive at a distant destination of your choice.", + "You don’t arrive where you intend, you arrive almost too late, or you lose something important in the process. The GM will tell you which.": "You don’t arrive where you intend, you arrive almost too late, or you lose something important in the process. The GM will tell you which.", + "Divination": "Divination", + "When you have time and safety to read the unseen truth of someone present, describe your divination process and what makes it conspicuous. The GM will tell you something interesting about the person or the obstacles they face that they don’t know. Then roll +Spirit:": "When you have time and safety to read the unseen truth of someone present, describe your divination process and what makes it conspicuous. The GM will tell you something interesting about the person or the obstacles they face that they don’t know. Then roll +Spirit:", + "If you tell the truth, they clear a Condition. If you lie, gain a String on them.": "If you tell the truth, they clear a Condition. If you lie, gain a String on them.", + "They learn the truth and clear a Condition.": "They learn the truth and clear a Condition.", + "Dreamwalk": "Dreamwalk", + "When you touch an unconscious, sleeping, or willing subject, you can see an impression of their thoughts and appear in their dreams. You may roll +Spirit to Figure Out or Entice them in this state.": "When you touch an unconscious, sleeping, or willing subject, you can see an impression of their thoughts and appear in their dreams. You may roll +Spirit to Figure Out or Entice them in this state.", + "Eerie Companion": "Eerie Companion", + "You have a little pet monster or spirit. Choose two basic moves. The companion grants you +1 to these moves when it assists you, but its assistance is always obvious and alarming to ordinary people. In addition, you can speak with monsters.": "You have a little pet monster or spirit. Choose two basic moves. The companion grants you +1 to these moves when it assists you, but its assistance is always obvious and alarming to ordinary people. In addition, you can speak with monsters.", + "Friends in Weird Places": "Friends in Weird Places", + "You are friends with some odd people. Folx that others might not consider people at all…": "You are friends with some odd people. Folx that others might not consider people at all…", + "Name three of them. For each one, write down one thing they’re good at, one reason why everyone else is afraid of them, and what you like to do together when you hang out.": "Name three of them. For each one, write down one thing they’re good at, one reason why everyone else is afraid of them, and what you like to do together when you hang out.", + "When you call on them for help, the GM tells you what they provide. Give them a String on you and mark the Favor next to their name. Whenever significant time passes, one of your friends with marked Favor will need help from you. Clear their Favor if you help, mark a Condition if you don’t.": "When you call on them for help, the GM tells you what they provide. Give them a String on you and mark the Favor next to their name. Whenever significant time passes, one of your friends with marked Favor will need help from you. Clear their Favor if you help, mark a Condition if you don’t.", + "1st friend": "1st friend", + "Why everyone else is afraid of them": "Why everyone else is afraid of them", + "What we like to do together": "What we like to do together", + "2nd friend": "2nd friend", + "3rd friend": "3rd friend", + "Talk Nerdy to Me": "Talk Nerdy to Me", + "You may roll +Wit instead of +Heart to Entice someone. In addition, choose an area of study that holds special interest for you. You have top-tier knowledge of this area and are always prepared with an interesting fact, and sometimes even a useful fact, when you come across something within your expertise. The GM will provide the information or invite you to make something up.": "You may roll +Wit instead of +Heart to Entice someone. In addition, choose an area of study that holds special interest for you. You have top-tier knowledge of this area and are always prepared with an interesting fact, and sometimes even a useful fact, when you come across something within your expertise. The GM will provide the information or invite you to make something up.", + "Witchfire": "Witchfire", + "You may roll +Spirit instead of +Daring to Fight, but you’re very conspicuous when you do. The consequences of a 6- will be severe.": "You may roll +Spirit instead of +Daring to Fight, but you’re very conspicuous when you do. The consequences of a 6- will be severe.", + "Why Did I Bring up the Snails?": "Why Did I Bring up the Snails?", + "What obvious thing about you are you sure would make them reject you?": "What obvious thing about you are you sure would make them reject you?", + "Whispered Secrets": "Whispered Secrets", + "What makes you insecure?": "What makes you insecure?", + "What haunts you?": "What haunts you?", + "The Trickster is devious and calculating. They fear closeness, sincerity, and vulnerability. If they show you the truth of their heart, they’ll be wearing a mask to do it. Their central conflict lies in desiring closeness while fearing vulnerability. Example Archetypes: Businesslike Spy, Endearing Charlatan, Cold Mastermind": "The Trickster is devious and calculating. They fear closeness, sincerity, and vulnerability. If they show you the truth of their heart, they’ll be wearing a mask to do it. Their central conflict lies in desiring closeness while fearing vulnerability. Example Archetypes: Businesslike Spy, Endearing Charlatan, Cold Mastermind", + "Too Many Feelings": "Too Many Feelings", + "Feelings": "Feelings", + "Your heart is as passionate as any other, but you bury it beneath layers of deception—until you can’t keep your feelings in any longer.": "Your heart is as passionate as any other, but you bury it beneath layers of deception—until you can’t keep your feelings in any longer.", + "Start at 1 and increase your Feelings by 1 each time you gain a String, someone gains a String on you, or you mark a Condition. You may also choose to increase your Feelings any time you find yourself gasping or swooning over someone. Strings assigned during character creation don’t increase your Feelings.": "Start at 1 and increase your Feelings by 1 each time you gain a String, someone gains a String on you, or you mark a Condition. You may also choose to increase your Feelings any time you find yourself gasping or swooning over someone. Strings assigned during character creation don’t increase your Feelings.", + "If your Feelings track reaches 4, you can’t hold it in anymore. Tear off the mask and scream what you’ve been holding in, do what you’ve been afraid to do, and damn the consequences. You can give anyone present a String on you to gain a String on them. Stop when the consequences catch up with you, for good or ill. Afterwards, reduce your Feelings to 0 and clear a Condition. It feels good to get it out, at least in the moment.": "If your Feelings track reaches 4, you can’t hold it in anymore. Tear off the mask and scream what you’ve been holding in, do what you’ve been afraid to do, and damn the consequences. You can give anyone present a String on you to gain a String on them. Stop when the consequences catch up with you, for good or ill. Afterwards, reduce your Feelings to 0 and clear a Condition. It feels good to get it out, at least in the moment.", + "When you open up to someone whose regard matters to you, reduce your Feelings by 2. When you secretly perform a loving act for someone, reduce your Feelings by 1.": "When you open up to someone whose regard matters to you, reduce your Feelings by 2. When you secretly perform a loving act for someone, reduce your Feelings by 1.", + "Ew, Feelings": "Ew, Feelings", + "When someone offers you Emotional Support and you refuse to open up, increase your Feelings by 1 and choose 1 from the listed options for that move as if they rolled 7–9. If they rolled 10+, they know they got through to you; they gain the benefits of a 10+ result as if you had opened up.": "When someone offers you Emotional Support and you refuse to open up, increase your Feelings by 1 and choose 1 from the listed options for that move as if they rolled 7–9. If they rolled 10+, they know they got through to you; they gain the benefits of a 10+ result as if you had opened up.", + "The Mask": "The Mask", + "When you seek to persuade an NPC of a lie about yourself, roll +Wit:": "When you seek to persuade an NPC of a lie about yourself, roll +Wit:", + "Additionally, whenever a PC Figures You Out, you can give false answers. You must increase your Feelings by 1 at the end of any scene where you do this.": "Additionally, whenever a PC Figures You Out, you can give false answers. You must increase your Feelings by 1 at the end of any scene where you do this.", + "They believe a big lie": "They believe a big lie", + "The lie you have chosen is unexpectedly perfect, creating a new opportunity": "The lie you have chosen is unexpectedly perfect, creating a new opportunity", + "They give you the benefit of the doubt and remain convinced even if there is some evidence of your lie": "They give you the benefit of the doubt and remain convinced even if there is some evidence of your lie", + "Center of the Web": "Center of the Web", + "When someone approaches you to get something from you or threaten you. Choose 1:": "When someone approaches you to get something from you or threaten you. Choose 1:", + "Gain a String on them or they lose a String on you": "Gain a String on them or they lose a String on you", + "Ask them a question from the Figure Out a Person move": "Ask them a question from the Figure Out a Person move", + "+1 ongoing against them for the scene": "+1 ongoing against them for the scene", + "Deft Fingers": "Deft Fingers", + "When you filch something from a person, roll +Grace:": "When you filch something from a person, roll +Grace:", + "The item reveals a secret love or vulnerability": "The item reveals a secret love or vulnerability", + "The item creates an opportunity (such as a map, key, or note)": "The item creates an opportunity (such as a map, key, or note)", + "The person doesn’t know you took it": "The person doesn’t know you took it", + "Devious Scheme": "Devious Scheme", + "When others go along with your cunning plan, roll +Wit:": "When others go along with your cunning plan, roll +Wit:", + "Twice during your plan, you may choose 1": "Twice during your plan, you may choose 1", + "Once during your plan, you may choose 1": "Once during your plan, you may choose 1", + "Produce just the right object": "Produce just the right object", + "Describe an unexpected weakness in an obstacle": "Describe an unexpected weakness in an obstacle", + "Appear right behind someone at a crucial moment": "Appear right behind someone at a crucial moment", + "Knives behind the Mask": "Knives behind the Mask", + "When someone reveals a secret about you in your presence, you’re prepared with a damaging secret about them. If you reveal it now in retaliation, they mark a Condition. If you keep the secret for the time being, gain a String on them.": "When someone reveals a secret about you in your presence, you’re prepared with a damaging secret about them. If you reveal it now in retaliation, they mark a Condition. If you keep the secret for the time being, gain a String on them.", + "Play the Part": "Play the Part", + "When you use someone else’s personal item or clothing to disguise yourself as them, roll +Daring:": "When you use someone else’s personal item or clothing to disguise yourself as them, roll +Daring:", + "While you remain so dressed, your disguise is perfect; only your words or deeds may expose you.": "While you remain so dressed, your disguise is perfect; only your words or deeds may expose you.", + "Someone sees through your disguise, but they don’t give you away just yet. Give them a String.": "Someone sees through your disguise, but they don’t give you away just yet. Give them a String.", + "A Beautiful Lie": "A Beautiful Lie", + "What secret do you have that you think would make them reject you if they knew?": "What secret do you have that you think would make them reject you if they knew?", + "I See through You": "I See through You", + "Who do you want me to be?": "Who do you want me to be?", + "What are you most afraid of right now?": "What are you most afraid of right now?", + "The Scoundrel is a hero of action and intense physicality. Their sword fights are punctuated by banter and flirtation and end in kisses as often as they end in bloodshed. Their central conflict lies in their urge to explore new horizons versus committing to purpose or security. Example Archetypes: Shimbo Pirate, Diva Fencing Champion, Dashing Jewel Thief": "The Scoundrel is a hero of action and intense physicality. Their sword fights are punctuated by banter and flirtation and end in kisses as often as they end in bloodshed. Their central conflict lies in their urge to explore new horizons versus committing to purpose or security. Example Archetypes: Shimbo Pirate, Diva Fencing Champion, Dashing Jewel Thief", + "Playful demeanor, provocative demeanor, eyes only for you": "Playful demeanor, provocative demeanor, eyes only for you", + "Revealing clothes, flowing clothes, tight clothes, gaudy costume": "Revealing clothes, flowing clothes, tight clothes, gaudy costume", + "A flashy sword, a famous sword, a delicate sword": "A flashy sword, a famous sword, a delicate sword", + "Show More": "Show More", + "Show Less": "Show Less", + "What the Unseen are like": "What the Unseen are like", + "Filter Out Moves I Can't Take": "Filter Out Moves I Can't Take", + "Hide Special Features": "Hide Special Features", + "Hide Playbook Moves": "Hide Playbook Moves", + "Hide Truths of Heart and Blade": "Hide Truths of Heart and Blade", + "Note to display": "Note to display", + "Override penalty value": "Override penalty value", + "Number of Conditions marked": "Number of Conditions marked", + "When you fill your XP track, you gain an Advance from the list. If you’re playing a single session rather than an ongoing game, you earn an Advance every 3 XP instead of every 5.": "When you fill your XP track, you gain an Advance from the list. If you’re playing a single session rather than an ongoing game, you earn an Advance every 3 XP instead of every 5.", + "You may experience a short pause before your choice displays, slightly longer for playbooks that haven't been loaded yet! Please note that when displayed, moves will appear in your character sheet in the order in which you loaded them.": "You may experience a short pause before your choice displays, slightly longer for playbooks that haven't been loaded yet! Please note that when displayed, moves will appear in your character sheet in the order in which you loaded them.", + "Load and": "Load and", + "Load": "Load", + "Consult the basic move “Influence with a String” for options to influence others for good or ill. Several basic and playbook moves also have effects upon spending a string.": "Consult the basic move “Influence with a String” for options to influence others for good or ill. Several basic and playbook moves also have effects upon spending a string.", + "Gaining a fourth String on someone triggers a String Advance. The basic moves reference contains details.": "Gaining a fourth String on someone triggers a String Advance. The basic moves reference contains details.", + "Quick String Spending Buttons": "Quick String Spending Buttons", + "+3 to a roll to Figure Out or Emotionally Support": "+3 to a roll to Figure Out or Emotionally Support", + "Spend on any other purpose for": "Spend on any other purpose for", + "Spend": "Spend", + "Other": "Other", + "Figure Out": "Figure Out", + "Time for a String Advance!": "Time for a String Advance!", + "Introduce yourself!": "Introduce yourself!", + "__end__": "END OF JSON" +} diff --git a/approved.yaml b/approved.yaml index 45c1a32d44..17d7716027 100644 --- a/approved.yaml +++ b/approved.yaml @@ -182,6 +182,12 @@ tesoroygloriaofficial: - "Tesoro y Gloria" - "publisher" +thirstyswordlesbians: + - "Thirsty Sword Lesbians" + - "Thirsty Sword Lesbians by Evil Hat Games" + - "Powered by the Apocalypse" + - "publisher" + valorofficial: - "Valor" - "Valor by Valorous Games" @@ -2992,6 +2998,11 @@ savageworldsofficial: - "Official Savage Worlds by Pinnacle" - "Savage Worlds" +savageworldsadventureedition: + - "Savage Worlds - Graph Paper" + - "Savage Worlds Adventure Edition - Graph Paper" + - "Savage Worlds" + #SCARLET HEROES scarletheroes: - "Scarlet Heros" @@ -4852,3 +4863,33 @@ exoterrorists: - "Esoterroristas" - "Esoterrorists" - "GUMSHOE" + +aria: + - "Aria" + - "Aria" + - "Aria" + +arcanasandancestrais: + - "Arcanas&Ancestrais" + - "Arcanas & Ancestrais" + - "Arcanas & Ancestrais" + +kamigakari: + - "Kamigakari" + - "Kamigakari: God Hunters" + - "Kamigakari: God Hunters" + +apocthulhu: + - "APOCTHULHU" + - "APOCTHULHU" + - "APOCTHULHU" + +acesandeights: + - "Aces and Eights (Shattered Frontier)" + - "Aces and Eights - Shattered Frontier" + - "Aces and Eights" + +blackvoid: + - "Black Void by Penny for a Tale" + - "Black Void" + - "Black Void"