diff --git a/Demon Gate/Circle.png b/Demon Gate/Circle.png deleted file mode 100644 index b44992594d..0000000000 Binary files a/Demon Gate/Circle.png and /dev/null differ diff --git a/Demon Gate/DemonGate.css b/Demon Gate/DemonGate.css index 1358925535..9b8aa1a0fc 100644 --- a/Demon Gate/DemonGate.css +++ b/Demon Gate/DemonGate.css @@ -1,54 +1,73 @@ +@import url("https://fonts.googleapis.com/css?family=IM+Fell+English+SC&display=swap"); +@import url("https://fonts.googleapis.com/css?family=Atkinson+Hyperlegible&display=swap"); +@import url("https://fonts.googleapis.com/css?family=Lato&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400&family=IM+Fell+English+SC&family=Lato:wght@400;700&display=swap"); + /* ************************************************************************************************************************************************ */ /* Colours */ /* ************************************************************************************************************************************************ */ /* -#948a54 (mid brown) - table borders, headings of older parts of the sheet -#ddd9c3 (beige) - header cells, active tab button -#b6ad7c (darker beige) - inactive tab buttons -#f6f5ef (pale beige) - input control backgrounds -#e0e0e0 (light grey) - read-only cell background +#5c4228 (dark warm brown) - table borders, headings of older parts of the sheet +#c2bba0 (aged parchment) - header cells, active tab button +#8c7d58 (darker aged parchment) - inactive tab buttons +#edeae0 (pale parchment) - input control backgrounds +#c8c2ac (muted parchment) - read-only cell background -#c4bc96 (slightly darker beige) - tab button borders +#c9c2a6 - tab button borders */ /* Theme variables: modify these to change the sheet appearance quickly */ :root { /* New semantic theme tokens (use these going forward) */ - --dg-border: #948a54; /* table outer borders, headings */ - --dg-table-cell-border: #c9c2a6; /* table cell borders */ - --dg-surface: #ddd9c3; /* header cells, active tab button */ - --dg-surface-variant: #b6ad7c; /* inactive tab buttons */ - --dg-control-bg: #f6f5ef; /* input control backgrounds */ - --dg-muted-bg: #e0e0e0; /* read-only cell background */ - --dg-primary: maroon; /* primary accent / text */ - --dg-primary-dark: #590902; /* deep accent used in headings */ - --dg-text-muted: dimgray; /* muted text color */ + --dg-border: #8a7038; /* table outer borders, headings */ + --dg-border-dark: #5f1d14; /* border color in dark mode */ - /* Dark mode tokens (semantic names) */ - --dg-dark-border: #222222; /* border color in dark mode */ - --dg-dark-surface: #555555; /* dark-mode surface/background */ - --dg-dark-muted: #353535; - --dg-success: #05ad05; - --dg-failure: #f80303; - --dg-success-border: #028502; - --dg-failure-border: #b30000; + --dg-table-cell-border: #baa870; /* table cell borders */ + --dg-table-cell-border-dark: #6a3828; /* dark-mode table cell borders */ + + --dg-table-header-bg: #d8c694; /* table header cell background */ + --dg-table-header-bg-dark: #262424; /* dark-mode table header background */ + + --dg-surface: #e8dcb0; /* default table cells, active tab button */ + --dg-surface-dark: #202020; /* dark-mode surface/background */ + + --dg-control-bg: #f2eedc; /* input control backgrounds */ + --dg-control-bg-dark: #302a28; /* dark warm brown — editable control background in dark mode */ + + --dg-primary: #3a1008; /* primary accent / text */ + --dg-primary-dark: #d4c0a0; /* warm cream — editable control text in dark mode */ + + --dg-text-muted: #786848; /* muted text color */ + --dg-text-muted-dark: #8a6840; /* faded warm brown — disabled/read-only text in dark mode */ + + --dg-placeholder: rgba(120, 104, 72, 0.5); /* input placeholder — faded version of text-muted */ + --dg-placeholder-dark: rgba(138, 104, 64, 0.5); /* dark mode placeholder */ + + --dg-h1-fg: #120705; /* near-black charred ink */ + --dg-h1-fg-dark: #c98b4e; /* amber for headings in dark mode */ + + --dg-h1-bg-dark: #4b1208; /* darker edge / border */ + + --dg-h2-fg: #4b1208; /* heading foreground to use on parchment surfaces */ + --dg-h2-fg-dark: #c98b4e; /* amber — h2/h3 heading foreground in dark mode */ /* Condition level colors (progressive severity scales) */ - --dg-condition-none: white; /* no condition (baseline) */ + /* rgba with varying alpha — single values work in both light and dark mode */ + --dg-condition-none: transparent; /* no condition (baseline) */ - --dg-physical-1: #ffcccc; /* lightest physical condition */ - --dg-physical-2: #ff9999; - --dg-physical-3: #ff6666; - --dg-physical-4: #ff3333; - --dg-physical-5: #cc0000; - --dg-physical-6: #800000; /* darkest physical condition */ + --dg-physical-1: rgba(220, 30, 30, 0.12); + --dg-physical-2: rgba(220, 30, 30, 0.28); + --dg-physical-3: rgba(220, 30, 30, 0.46); + --dg-physical-4: rgba(220, 30, 30, 0.62); + --dg-physical-5: rgba(220, 30, 30, 0.78); + --dg-physical-6: rgba(220, 30, 30, 0.94); - --dg-mental-1: #cce0ff; /* lightest mental condition */ - --dg-mental-2: #80b3ff; - --dg-mental-3: #4d94ff; - --dg-mental-4: #0066ff; - --dg-mental-5: #0047b3; - --dg-mental-6: #003380; /* darkest mental condition */ + --dg-mental-1: rgba(110, 20, 185, 0.12); + --dg-mental-2: rgba(110, 20, 185, 0.28); + --dg-mental-3: rgba(110, 20, 185, 0.46); + --dg-mental-4: rgba(110, 20, 185, 0.62); + --dg-mental-5: rgba(110, 20, 185, 0.78); + --dg-mental-6: rgba(110, 20, 185, 0.94); } /* ************************************************************************************************************************************************ */ @@ -56,7 +75,12 @@ /* ************************************************************************************************************************************************ */ .charsheet { - background: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Demon%20Gate/Paper.jpg"); + background: url("https://cdn.discordapp.com/attachments/1125309911065182298/1506167597639532574/map_watermark.jpg?ex=6a0e98e2&is=6a0d4762&hm=331e6d084dd9fa07ccb94fe9ba6459261ae0e91e6c6064cb96e83b575b039b76&"); + font-family: "Atkinson Hyperlegible", sans-serif; +} + +.sheet-darkmode .charsheet { + background: url("https://cdn.discordapp.com/attachments/1125309911065182298/1506318410714317040/map_watermark_dark.jpg?ex=6a0dd3d7&is=6a0c8257&hm=c64d10feff93c714449f44b67717df395002d6f4a70116e16c0224311c2e5d8b&"); } .sheet-demon-gate-charsheet { @@ -118,10 +142,10 @@ span.sheet-tab { display: inline-block; font-size: 14px; line-height: 28px; - color: var(--dg-primary); - border: 2px solid var(--dg-primary); + color: var(--dg-text-muted); + border: 1px solid var(--dg-primary); border-radius: 4px; - background: var(--dg-surface-variant); + background: var(--dg-table-header-bg); width: 90px; height: 28px; cursor: pointer; @@ -147,6 +171,24 @@ input.sheet-tab8:checked ~ div.sheet-section-notes { input.sheet-tab:checked + span { background: var(--dg-surface); + color: var(--dg-primary); + border: 2px solid var(--dg-primary); +} + +/* ************************************************************************************************************************************************ */ +/* Dark mode overrides */ +/* ************************************************************************************************************************************************ */ + +.sheet-darkmode span.sheet-tab { + color: var(--dg-text-muted-dark); + border-color: var(--dg-border-dark); + background: var(--dg-table-header-bg-dark); +} + +.sheet-darkmode input.sheet-tab:checked + span { + background: var(--dg-surface-dark); + color: var(--dg-primary-dark); + border-color: var(--dg-primary-dark); } /* ************************************************************************************************************************************************ */ @@ -161,24 +203,57 @@ h3 { } h1 { - height: 40px; - line-height: 40px; - color: var(--dg-surface); - background-color: var(--dg-primary-dark); - background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Demon%20Gate/runes-dark.png"); + position: relative; + overflow: hidden; + isolation: isolate; + + color: var(--dg-h1-fg); + + background: radial-gradient(ellipse at center, #d48a2f 0%, #c85e21 22%, #a53c18 42%, #732012 72%, #4f140b 100%); background-position-y: center; background-repeat: repeat-x; + border: 2px solid var(--dg-primary-dark); border-radius: 4px; - font-size: 20px; + border-color: var(--dg-h1-bg-dark); + + height: 40px; + line-height: 40px; + font-family: "IM Fell English SC", serif; + font-size: 20pt; + font-weight: normal; +} + +.sheet-darkmode h1 { + color: #c98b4e; + + background: radial-gradient(ellipse at center, #5f1d14 0%, #441711 22%, #301411 42%, #26201e 72%, #202020 100%); + + border: none; +} + +h1::before { + content: ""; + position: absolute; + inset: 0; + + background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Demon%20Gate/runes-dark.png"); + background-repeat: repeat; + background-position: center; + + opacity: 0.15; + mix-blend-mode: multiply; + + pointer-events: none; + z-index: -1; } h2, h3 { - color: var(--dg-primary); - background-color: var(--dg-surface); + color: var(--dg-h2-fg); + font-family: "IM Fell English SC", serif; font-weight: normal; - font-size: 16px; + font-size: 18px; height: 28px; line-height: 28px; } @@ -192,6 +267,22 @@ h3 { text-align: left; } +.sheet-table-like-heading { + border: 2px solid var(--dg-border); + border-radius: 4px; + background-color: var(--dg-table-header-bg); +} + +.sheet-darkmode h2, +.sheet-darkmode h3 { + color: var(--dg-h2-fg-dark); +} + +.sheet-darkmode .sheet-table-like-heading { + border-color: var(--dg-border-dark); + background-color: var(--dg-table-header-bg-dark); +} + .sheet-info { font-weight: normal; font-style: italic; @@ -205,6 +296,7 @@ h3 { .sheet-collapse-wrapper { border: 2px solid var(--dg-border); margin-top: 20px; + background-color: var(--dg-table-header-bg); } /* Hide the browser's default checkbox */ @@ -256,15 +348,25 @@ input[type="checkbox"].sheet-expand-collapse-checkbox:checked ~ .sheet-collapsib padding: 0; } +/* .sheet-collapse-section { - background-color: var(--dg-surface); -} + background-color: var(--dg-surface); +}*/ .sheet-collapsible table, table.sheet-embedded-table { border: 0; } +/* ************************************************************************************************************************************************ */ +/* Dark mode overrides */ +/* ************************************************************************************************************************************************ */ + +.sheet-darkmode .sheet-collapse-wrapper { + border-color: var(--dg-border-dark); + background-color: var(--dg-table-header-bg-dark); +} + /* ************************************************************************************************************************************************ */ /* Flexbox columns */ /* ************************************************************************************************************************************************ */ @@ -337,6 +439,7 @@ table { th, td { border: 1px solid var(--dg-table-cell-border); + font-family: "Lato", sans-serif; } th { @@ -347,6 +450,7 @@ th { color: var(--dg-text-muted); padding-left: 10px; padding-right: 10px; + background-color: var(--dg-table-header-bg); } th.sheet-small-table-header { @@ -365,7 +469,8 @@ th.sheet-small-text { td.sheet-small-text { font-size: 0.7em; - background-color: var(--dg-control-bg); + background-color: var(--dg-surface); + color: var(--dg-text-muted); } th.sheet-small-text { @@ -397,6 +502,34 @@ td.sheet-cell-numeric { text-align: center; } +/* ************************************************************************************************************************************************ */ +/* Dark mode overrides */ +/* ************************************************************************************************************************************************ */ + +.sheet-darkmode table { + border-color: var(--dg-border-dark); + background-color: var(--dg-surface-dark); +} + +.sheet-darkmode th, +.sheet-darkmode td { + border-color: var(--dg-table-cell-border-dark); +} + +.sheet-darkmode th { + color: var(--dg-text-muted-dark); + background-color: var(--dg-table-header-bg-dark); +} + +.sheet-darkmode td.sheet-small-text { + background-color: var(--dg-surface-dark); + color: var(--dg-text-muted-dark); +} + +.sheet-darkmode td.sheet-cell-numeric { + background-color: var(--dg-control-bg-dark); +} + /* ************************************************************************************************************************************************ */ /* Entry controls */ /* ************************************************************************************************************************************************ */ @@ -404,10 +537,10 @@ td.sheet-cell-numeric { input, select, textarea, -.sheet-input-like, -.sheet-input-like-no-padding { +.sheet-input-like { width: 100%; background-color: var(--dg-control-bg); + color: var(--dg-primary); } .sheet-demon-gate-charsheet input[type="number"], @@ -423,7 +556,7 @@ input[type="text"].sheet-totalfield { font-weight: bold; font-size: 16px; color: var(--dg-text-muted); - background-color: var(--dg-muted-bg); + background-color: var(--dg-surface); border: 0; border-radius: 0; } @@ -448,8 +581,8 @@ td input[type="number"] { .sheet-read-only-field, td.sheet-cell-numeric-readonly, td input:read-only { - color: lightslategray; - background-color: var(--dg-muted-bg); + color: var(--dg-text-muted); + background-color: var(--dg-surface); } .sheet-text-centred, @@ -490,6 +623,12 @@ button.btn { background: var(--dg-surface); } +.sheet-darkmode button.btn { + background: var(--dg-surface-dark); + color: var(--dg-primary-dark); + border: 1px solid var(--dg-primary-dark); +} + .sheet-demon-gate-charsheet button.sheet-display-text-button[type="roll"]:before, .sheet-demon-gate-charsheet button.sheet-display-text-button-small[type="roll"]:before { content: ""; @@ -507,6 +646,45 @@ button.sheet-display-text-button-small { font-size: 1em; } +input::placeholder, +textarea::placeholder { + color: var(--dg-placeholder); +} + +/* ************************************************************************************************************************************************ */ +/* Dark mode overrides */ +/* ************************************************************************************************************************************************ */ + +.sheet-darkmode input, +.sheet-darkmode select, +.sheet-darkmode textarea, +.sheet-darkmode .sheet-input-like { + color: var(--dg-primary-dark); + background-color: var(--dg-control-bg-dark); +} + +.sheet-darkmode textarea { + border-color: var(--dg-border-dark); +} + +.sheet-darkmode input::placeholder, +.sheet-darkmode textarea::placeholder { + color: var(--dg-placeholder-dark); +} + +.sheet-darkmode input[type="number"].sheet-totalfield, +.sheet-darkmode input[type="text"].sheet-totalfield { + color: var(--dg-text-muted-dark); + background-color: var(--dg-surface-dark); +} + +.sheet-darkmode .sheet-read-only-field, +.sheet-darkmode td.sheet-cell-numeric-readonly, +.sheet-darkmode td input:read-only { + color: var(--dg-text-muted-dark); + background-color: var(--dg-surface-dark); +} + /* ************************************************************************************************************************************************ */ /* Top section of first sheet */ /* ************************************************************************************************************************************************ */ @@ -530,10 +708,6 @@ button.sheet-display-text-button-small { min-width: 12em; } -.sheet-input-like-no-padding input.sheet-input-narrow { - max-width: 7.5em; -} - .sheet-demon-gate-charsheet td input.sheet-prominent-label, .sheet-demon-gate-charsheet td input.sheet-prominent-field { height: 72px; @@ -564,10 +738,6 @@ td .sheet-input-spacer { text-align: center; } -.sheet-beauty-table-spacer-cell { - min-width: 19.5em; -} - /* ************************************************************************************************************************************************ */ /* HP, Mana etc. */ /* ************************************************************************************************************************************************ */ @@ -604,74 +774,64 @@ td .sheet-input-spacer { width: 14%; } +/* inset box-shadow instead of background-color bypasses Roll20's html.dark td override */ tr td.sheet-physical-condition-0, tr td.sheet-mental-condition-0 { - background-color: var(--dg-condition-none); + box-shadow: none; } tr td.sheet-physical-condition-1 { - background-color: var(--dg-physical-1); + box-shadow: inset 0 0 0 9999px var(--dg-physical-1); } tr td.sheet-physical-condition-2 { - background-color: var(--dg-physical-2); + box-shadow: inset 0 0 0 9999px var(--dg-physical-2); } tr td.sheet-physical-condition-3 { - background-color: var(--dg-physical-3); + box-shadow: inset 0 0 0 9999px var(--dg-physical-3); } tr td.sheet-physical-condition-4 { - background-color: var(--dg-physical-4); + box-shadow: inset 0 0 0 9999px var(--dg-physical-4); } tr td.sheet-physical-condition-5 { - background-color: var(--dg-physical-5); + box-shadow: inset 0 0 0 9999px var(--dg-physical-5); } tr td.sheet-physical-condition-6 { - background-color: var(--dg-physical-6); + box-shadow: inset 0 0 0 9999px var(--dg-physical-6); } tr td.sheet-mental-condition-1 { - background-color: var(--dg-mental-1); + box-shadow: inset 0 0 0 9999px var(--dg-mental-1); } tr td.sheet-mental-condition-2 { - background-color: var(--dg-mental-2); + box-shadow: inset 0 0 0 9999px var(--dg-mental-2); } tr td.sheet-mental-condition-3 { - background-color: var(--dg-mental-3); + box-shadow: inset 0 0 0 9999px var(--dg-mental-3); } tr td.sheet-mental-condition-4 { - background-color: var(--dg-mental-4); + box-shadow: inset 0 0 0 9999px var(--dg-mental-4); } tr td.sheet-mental-condition-5 { - background-color: var(--dg-mental-5); + box-shadow: inset 0 0 0 9999px var(--dg-mental-5); } tr td.sheet-mental-condition-6 { - background-color: var(--dg-mental-6); + box-shadow: inset 0 0 0 9999px var(--dg-mental-6); } /* ************************************************************************************************************************************************ */ /* Skills tab /* ************************************************************************************************************************************************ */ -.sheet-top-margin { - margin-top: 40px; -} - -.charsheet select.sheet-skilldescshort { - width: 4.2em; - margin: 0; - border: 0; - border-radius: 0; -} - .sheet-skillname, .sheet-skillname-indented { padding-right: 10px; @@ -693,26 +853,8 @@ tr td.sheet-mental-condition-6 { /* ************************************************************************************************************************************************ */ /* Abilities and notes tabs /* ************************************************************************************************************************************************ */ -.sheet-subsection-header, -.sheet-subsection-header-wide { - width: 100%; - height: 36px; - line-height: 36px; - color: var(--dg-text-muted); - background-color: var(--dg-surface); - text-align: center; - font-size: 16px; -} - -.sheet-subsection-header-wide { - min-width: 15em; - border: 2px solid var(--dg-table-cell-border); - margin-bottom: 5px; -} - textarea.sheet-text-area-full, textarea.sheet-text-area-large, -textarea.sheet-standalone-textarea, textarea.sheet-textarea-gems, textarea.sheet-textarea-equipment { box-sizing: border-box; @@ -753,7 +895,6 @@ h1.sheet-spacer-top-margin { margin-top: 40px; } -.sheet-standalone-textarea, .sheet-textarea-gems, .sheet-textarea-equipment { margin-top: 20px; @@ -761,10 +902,6 @@ h1.sheet-spacer-top-margin { border-radius: 0; } -textarea.sheet-standalone-textarea { - height: 150px; -} - textarea.sheet-textarea-gems { height: 530px; } @@ -778,6 +915,20 @@ textarea.sheet-textarea-equipment { margin-bottom: -10px; } +/* ************************************************************************************************************************************************ */ +/* Dark mode overrides */ +/* ************************************************************************************************************************************************ */ + +.sheet-darkmode .sheet-repeating-section { + background-color: var(--dg-surface-dark); + border-color: var(--dg-border-dark); +} + +.sheet-darkmode .sheet-textarea-gems, +.sheet-darkmode .sheet-textarea-equipment { + border-color: var(--dg-border-dark); +} + /* ************************************************************************************************************************************************ */ /* Mysic tab /* ************************************************************************************************************************************************ */ @@ -794,21 +945,18 @@ textarea.sheet-textarea-equipment { border-right: 0; } -.sheet-spiritual-influence-header { - border: 2px solid var(--dg-border); -} - .sheet-spiritual-influence-image { - background: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Demon%20Gate/Circle.png"); + background: url("https://cdn.discordapp.com/attachments/1125309911065182298/1506656076089790555/circle_v2.png?ex=6a0f0e50&is=6a0dbcd0&hm=58b1be69d46b6392d53f53c44aa2ee247d80b0ba640d28fcf1c1da309c3e5204&"); background-repeat: no-repeat; background-size: contain; background-position: center; - height: 271px; - width: 288px; + height: 280px; + width: 280px; display: flex; flex-flow: column nowrap; align-items: center; justify-content: center; + margin: 8px; } .sheet-spiritual-influence-image input[type="number"].sheet-spiritual-influence { @@ -859,6 +1007,18 @@ tr.sheet-spell-spacer-row td { background-color: var(--dg-border); } +/* ************************************************************************************************************************************************ */ +/* Dark mode overrides */ +/* ************************************************************************************************************************************************ */ + +.sheet-darkmode .sheet-religion-table { + border-color: var(--dg-border-dark); +} + +.sheet-darkmode tr.sheet-spell-spacer-row td { + background-color: var(--dg-border-dark); +} + /* ************************************************************************************************************************************************ */ /* Roll Templates /* ************************************************************************************************************************************************ */ @@ -875,18 +1035,35 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-spell-effect, .sheet-rolltemplate-simple, .sheet-rolltemplate-two-part { - --dg-roll-border: #948a54; /* Keep in sync with --dg-border */ - --dg-roll-surface: #ddd9c3; /* Keep in sync with --dg-surface */ - --dg-roll-control-bg: #f6f5ef; /* Keep in sync with --dg-control-bg */ - --dg-roll-primary: maroon; /* Keep in sync with --dg-primary */ - --dg-roll-primary-dark: #590902; /* Keep in sync with --dg-primary-dark */ - --dg-roll-dark-border: #222222; /* Keep in sync with --dg-dark-border */ - --dg-roll-dark-surface: #555555; /* Keep in sync with --dg-dark-surface */ - --dg-roll-dark-muted: #353535; /* Keep in sync with --dg-dark-muted */ - --dg-roll-success: #05ad05; /* Keep in sync with --dg-success */ - --dg-roll-failure: #f80303; /* Keep in sync with --dg-failure */ - --dg-roll-success-border: #028502; /* Keep in sync with --dg-success-border */ - --dg-roll-failure-border: #b30000; /* Keep in sync with --dg-failure-border */ + --dg-roll-border: #8a7038; /* Keep in sync with --dg-border */ + --dg-roll-border-dark: #5f1d14; /* Keep in sync with --dg-border-dark */ + + --dg-roll-table-cell-border: #baa870; /* Keep in sync with --dg-table-cell-border */ + --dg-roll-table-cell-border-dark: #5a3820; /* Keep in sync with --dg-table-cell-border-dark */ + + --dg-roll-surface: #e8dcb0; /* Keep in sync with --dg-surface */ + --dg-roll-surface-dark: #202020; /* Keep in sync with --dg-surface-dark */ + + --dg-roll-control-bg: #f2eedc; /* Keep in sync with --dg-control-bg */ + --dg-roll-control-bg-dark: #302820; /* Keep in sync with --dg-control-bg-dark */ + + --dg-roll-primary: #3a1008; /* Keep in sync with --dg-primary */ + --dg-roll-primary-dark: #d4c0a0; /* Keep in sync with --dg-primary-dark */ + + --dg-roll-text-muted: #786848; /* Keep in sync with --dg-text-muted */ + --dg-roll-text-muted-dark: #8a6840; /* Keep in sync with --dg-text-muted-dark */ + + --dg-roll-h1-fg: #120705; /* Keep in sync with --dg-h1-fg */ + --dg-roll-h1-fg-dark: #c98b4e; /* Keep in sync with --dg-h1-fg-dark */ + + --dg-roll-table-header-bg: #d8c694; /* Keep in sync with --dg-table-header-bg */ + --dg-roll-table-header-bg-dark: #26201e; /* Keep in sync with --dg-table-header-bg-dark */ + + --dg-roll-success: #239c23; /* Roll template only */ + --dg-roll-success-dark: #3eec3e; /* Roll template only */ + + --dg-roll-failure: #d31b1b; /* Roll template only */ + --dg-roll-failure-dark: #ff3a3a; /* Roll template only */ } .sheet-rolltemplate-text .sheet-template-container { @@ -906,9 +1083,21 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-two-part .sheet-template-box { width: 100%; border: 2px solid var(--dg-roll-border); - background-color: var(--dg-roll-control-bg); + background-color: var(--dg-roll-surface); + font-family: "Atkinson Hyperlegible", sans-serif; } +.sheet-rolltemplate-text .sheet-template-text, +.sheet-rolltemplate-class-ability-text .sheet-template-text, +.sheet-rolltemplate-percentile .sheet-template-text, +.sheet-rolltemplate-spell-description .sheet-template-text { + font-size: 13px; + padding: 4px; + color: var(--dg-roll-primary); +} + +/* Titles and subtitles - light and dark mode */ + .sheet-rolltemplate-text .sheet-template-title, .sheet-rolltemplate-class-ability-text .sheet-template-title, .sheet-rolltemplate-percentile .sheet-template-title, @@ -920,15 +1109,44 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-spell-effect .sheet-template-title, .sheet-rolltemplate-simple .sheet-template-title, .sheet-rolltemplate-two-part .sheet-template-title { + position: relative; + overflow: hidden; + isolation: isolate; width: 100%; text-align: center; - color: var(--dg-roll-primary); - background-color: var(--dg-roll-surface); + color: var(--dg-roll-h1-fg); + background: radial-gradient(ellipse at center, #d48a2f 0%, #c85e21 37%, #a53c18 52%, #732012 72%, #4f140b 100%); + background-position-y: center; + background-repeat: repeat-x; + font-family: "IM Fell English SC", serif; font-weight: normal; - font-size: 16px; + font-size: 22px; padding: 8px 0; } +.sheet-rolltemplate-text .sheet-template-title::before, +.sheet-rolltemplate-class-ability-text .sheet-template-title::before, +.sheet-rolltemplate-percentile .sheet-template-title::before, +.sheet-rolltemplate-attack .sheet-template-title::before, +.sheet-rolltemplate-damage .sheet-template-title::before, +.sheet-rolltemplate-roll .sheet-template-title::before, +.sheet-rolltemplate-spell-description .sheet-template-title::before, +.sheet-rolltemplate-spell-cast .sheet-template-title::before, +.sheet-rolltemplate-spell-effect .sheet-template-title::before, +.sheet-rolltemplate-simple .sheet-template-title::before, +.sheet-rolltemplate-two-part .sheet-template-title::before { + content: ""; + position: absolute; + inset: 0; + background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Demon%20Gate/runes-dark.png"); + background-repeat: repeat; + background-position: center; + opacity: 0.15; + mix-blend-mode: multiply; + pointer-events: none; + z-index: -1; +} + .sheet-rolltemplate-text .sheet-template-subtitle, .sheet-rolltemplate-class-ability-text .sheet-template-subtitle, .sheet-rolltemplate-percentile .sheet-template-subtitle, @@ -942,12 +1160,47 @@ tr.sheet-spell-spacer-row td { width: 100%; text-align: center; color: var(--dg-roll-primary); - background-color: var(--dg-roll-surface); + background-color: var(--dg-roll-table-header-bg); + font-family: "IM Fell English SC", serif; font-weight: normal; - font-size: 12px; - padding-bottom: 2px; + font-size: 16px; + padding: 4px 0 2px 0; + border-bottom: 1px solid var(--dg-roll-border); } +.sheet-rolltemplate-darkmode.sheet-rolltemplate-text .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-description .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .sheet-template-title, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-title { + color: var(--dg-roll-h1-fg-dark); + background: radial-gradient(ellipse at center, #5f1d14 0%, #441711 37%, #301411 62%, #26201e 82%, #202020 100%); + border-bottom-color: transparent; +} + +.sheet-rolltemplate-darkmode.sheet-rolltemplate-text .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .sheet-template-subtitle, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-subtitle { + color: var(--dg-roll-h1-fg-dark); + background-color: var(--dg-roll-table-header-bg-dark); + border-bottom: 1px solid var(--dg-roll-border-dark); +} + +/* Divider styling for roll templates that use them */ + .sheet-rolltemplate-class-ability-text .sheet-template-hr, .sheet-rolltemplate-percentile .sheet-template-hr, .sheet-rolltemplate-attack .sheet-template-hr, @@ -965,30 +1218,37 @@ tr.sheet-spell-spacer-row td { padding: 0; } -.sheet-rolltemplate-text .sheet-template-text, -.sheet-rolltemplate-class-ability-text .sheet-template-text, -.sheet-rolltemplate-percentile .sheet-template-text, -.sheet-rolltemplate-spell-description .sheet-template-text { - font-size: 13px; - padding: 4px; -} +/** Table styling for roll templates that use them */ .sheet-rolltemplate-class-ability-text th, .sheet-rolltemplate-percentile th, .sheet-rolltemplate-spell-description th, .sheet-rolltemplate-spell-cast th, .sheet-rolltemplate-spell-effect th { - font-size: 13px; + font-size: 14px; padding: 4px; font-weight: bold; + font-family: "Lato", sans-serif; } .sheet-rolltemplate-attack th, .sheet-rolltemplate-damage th, .sheet-rolltemplate-roll th { - font-size: 16px; + font-size: 14px; padding: 10px; font-weight: bold; + font-family: "Lato", sans-serif; +} + +.sheet-rolltemplate-class-ability-text th span, +.sheet-rolltemplate-percentile th span, +.sheet-rolltemplate-attack th span, +.sheet-rolltemplate-damage th span, +.sheet-rolltemplate-roll th span, +.sheet-rolltemplate-spell-description th span, +.sheet-rolltemplate-spell-cast th span, +.sheet-rolltemplate-spell-effect th span { + color: var(--dg-roll-text-muted); } .sheet-rolltemplate-class-ability-text td, @@ -1000,6 +1260,8 @@ tr.sheet-spell-spacer-row td { text-align: center; min-width: 3em; padding: 4px; + color: var(--dg-roll-primary); + font-family: "Lato", sans-serif; } .sheet-rolltemplate-attack td, @@ -1009,25 +1271,8 @@ tr.sheet-spell-spacer-row td { text-align: center; min-width: 3em; padding: 10px; -} - -.sheet-rolltemplate-percentile .sheet-template-success, -.sheet-rolltemplate-percentile .sheet-template-failure { - font-size: 16px; - font-weight: bold; - padding: 10px; - margin-top: 4px; - text-align: center; -} - -.sheet-rolltemplate-percentile .sheet-template-success { - color: darkgreen; - font-size: 20px; -} - -.sheet-rolltemplate-percentile .sheet-template-failure { color: var(--dg-roll-primary); - font-size: 20px; + font-family: "Lato", sans-serif; } .sheet-rolltemplate-simple .sheet-template-text-prominent, @@ -1035,12 +1280,50 @@ tr.sheet-spell-spacer-row td { font-size: 16px; padding: 10px; text-align: center; + color: var(--dg-roll-primary); } .sheet-rolltemplate-two-part .sheet-template-text-supplementary { font-size: 13px; padding: 10px; text-align: center; + color: var(--dg-roll-primary); +} + +/* Dark mode text colour — th span overrides Roll20's html.dark th !important; td/text elements get full amber */ +.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-description th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast th span, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect th span { + color: var(--dg-roll-text-muted-dark); +} + +.sheet-rolltemplate-darkmode.sheet-rolltemplate-text td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-description td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple td, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part td { + color: var(--dg-roll-primary-dark); +} + +.sheet-rolltemplate-darkmode.sheet-rolltemplate-text .sheet-template-text, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text .sheet-template-text, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-text, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-description .sheet-template-text, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .sheet-template-text-prominent, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-text-prominent, +.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-text-supplementary { + color: var(--dg-roll-primary-dark); } /* Dark mode support */ @@ -1055,45 +1338,28 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .sheet-template-box, .sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .sheet-template-box, .sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-box { - border: 2px solid var(--dg-roll-dark-border); - background-color: var(--dg-roll-dark-surface); + border: 2px solid var(--dg-roll-border-dark); + background-color: var(--dg-roll-surface-dark); } -.sheet-rolltemplate-darkmode.sheet-rolltemplate-text .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-description .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-title, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-text .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-class-ability-text .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .sheet-template-subtitle, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .sheet-template-subtitle { - color: var(--dg-roll-surface); - background-color: var(--dg-roll-primary-dark); -} -.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-attack .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-damage .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-roll .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-description .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-cast .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .inlinerollresult, -.sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .inlinerollresult { - background-color: var(--dg-roll-dark-muted); - border: 2px solid var(--dg-roll-dark-border); +/** Roll result styling - light and dark mode */ + +.sheet-rolltemplate-text .inlinerollresult, +.sheet-rolltemplate-class-ability-text .inlinerollresult, +.sheet-rolltemplate-percentile .inlinerollresult, +.sheet-rolltemplate-attack .inlinerollresult, +.sheet-rolltemplate-damage .inlinerollresult, +.sheet-rolltemplate-roll .inlinerollresult, +.sheet-rolltemplate-spell-description .inlinerollresult, +.sheet-rolltemplate-spell-cast .inlinerollresult, +.sheet-rolltemplate-spell-effect .inlinerollresult, +.sheet-rolltemplate-simple .inlinerollresult, +.sheet-rolltemplate-two-part .inlinerollresult { + background-color: var(--dg-roll-control-bg); + border: 2px solid var(--dg-roll-table-cell-border); + border-radius: 4px; + color: var(--dg-roll-primary); + font-family: sans-serif; } .sheet-rolltemplate-darkmode.sheet-rolltemplate-text .inlinerollresult, @@ -1107,8 +1373,73 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .inlinerollresult, .sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .inlinerollresult, .sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .inlinerollresult { - background-color: var(--dg-roll-dark-muted); - border: 2px solid var(--dg-roll-dark-border); + background-color: var(--dg-roll-control-bg-dark); + border: 2px solid var(--dg-roll-table-cell-border-dark); + border-radius: 4px; + color: var(--dg-roll-primary-dark); +} + +/** Success and failure result styling - light and dark mode */ + +/** NOTE - the repeated styling below is weird, but it seems to break Roll20 otherwise. **/ +.sheet-rolltemplate-percentile .sheet-template-success, +.sheet-rolltemplate-percentile .sheet-template-failure { + font-size: 20px; + font-weight: bold; + padding: 10px; + margin-top: 4px; + text-align: center; +} + +.sheet-rolltemplate-percentile .sheet-template-success { + color: var(--dg-roll-success); + font-size: 20px; + font-weight: bold; + padding: 10px; + margin-top: 4px; + text-align: center; +} + +.sheet-rolltemplate-percentile .sheet-template-failure { + color: var(--dg-roll-failure); +} + +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-success { + color: var(--dg-roll-success-dark); +} + +.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-failure { + color: var(--dg-roll-failure-dark); +} + +/** Critical success and failure borders (light and dark mode)*/ + +.sheet-rolltemplate-text .inlinerollresult.fullfail, +.sheet-rolltemplate-class-ability-text .inlinerollresult.fullfail, +.sheet-rolltemplate-percentile .inlinerollresult.fullfail, +.sheet-rolltemplate-attack .inlinerollresult.fullfail, +.sheet-rolltemplate-damage .inlinerollresult.fullfail, +.sheet-rolltemplate-roll .inlinerollresult.fullfail, +.sheet-rolltemplate-spell-description .inlinerollresult.fullfail, +.sheet-rolltemplate-spell-cast .inlinerollresult.fullfail, +.sheet-rolltemplate-spell-effect .inlinerollresult.fullfail, +.sheet-rolltemplate-simple .inlinerollresult.fullfail, +.sheet-rolltemplate-two-part .inlinerollresult.fullfail { + border: 3px solid var(--dg-roll-failure); +} + +.sheet-rolltemplate-text .inlinerollresult.fullcrit, +.sheet-rolltemplate-class-ability-text .inlinerollresult.fullcrit, +.sheet-rolltemplate-percentile .inlinerollresult.fullcrit, +.sheet-rolltemplate-attack .inlinerollresult.fullcrit, +.sheet-rolltemplate-damage .inlinerollresult.fullcrit, +.sheet-rolltemplate-roll .inlinerollresult.fullcrit, +.sheet-rolltemplate-spell-description .inlinerollresult.fullcrit, +.sheet-rolltemplate-spell-cast .inlinerollresult.fullcrit, +.sheet-rolltemplate-spell-effect .inlinerollresult.fullcrit, +.sheet-rolltemplate-simple .inlinerollresult.fullcrit, +.sheet-rolltemplate-two-part .inlinerollresult.fullcrit { + border: 3px solid var(--dg-roll-success); } .sheet-rolltemplate-darkmode.sheet-rolltemplate-text .inlinerollresult.fullfail, @@ -1122,7 +1453,7 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .inlinerollresult.fullfail, .sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .inlinerollresult.fullfail, .sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .inlinerollresult.fullfail { - border-color: var(--dg-roll-failure-border); + border: 3px solid var(--dg-roll-failure-dark); } .sheet-rolltemplate-darkmode.sheet-rolltemplate-text .inlinerollresult.fullcrit, @@ -1136,13 +1467,5 @@ tr.sheet-spell-spacer-row td { .sheet-rolltemplate-darkmode.sheet-rolltemplate-spell-effect .inlinerollresult.fullcrit, .sheet-rolltemplate-darkmode.sheet-rolltemplate-simple .inlinerollresult.fullcrit, .sheet-rolltemplate-darkmode.sheet-rolltemplate-two-part .inlinerollresult.fullcrit { - border-color: var(--dg-roll-success-border); -} - -.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-success { - color: var(--dg-roll-success); -} - -.sheet-rolltemplate-darkmode.sheet-rolltemplate-percentile .sheet-template-failure { - color: var(--dg-roll-failure); + border: 3px solid var(--dg-roll-success-dark); } diff --git a/Demon Gate/DemonGate.html b/Demon Gate/DemonGate.html index 0695d7c9da..3c61ce58d5 100644 --- a/Demon Gate/DemonGate.html +++ b/Demon Gate/DemonGate.html @@ -263,7 +263,7 @@ rankToUse = 50; } - return diceTable[rank] || ""; + return diceTable[rankToUse] || ""; } // Helper function to generate race summary from modifiers @@ -833,7 +833,8 @@ setAttrs({ StrTotal: total, StrRank: rank, - StrDice: getDice(rank) + StrDice: getDice(rank), + WtAllow: calculateWeightAllowance(total) }); const damageModifierBonus = Number(values.DmgModBonus); @@ -883,8 +884,9 @@ } function calculateDamageModifier(str) { - if (str <= 3) return Math.min(-3, 4 - str); - if (str >= 80) return 33; + if (str <= 1) return -3; + if (str === 2) return -2; + if (str === 3) return -1; if (str >= 15) return Math.floor((str - 13) / 2); return 0; } @@ -898,9 +900,10 @@ if (str <= 9) return "l"; if (str <= 14) return "m/2vl"; if (str <= 19) return "h/2l"; - if (str <= 30) return "vh/2m"; + if (str <= 29) return "vh/2m"; if (str <= 49) return "vh/2h"; - return "vh/2vh"; + if (str <= 99) return "vh/2vh"; + return "Godly"; } /* DEXTERITY */ @@ -1015,6 +1018,7 @@ function calculateMovementModifier(dexterity) { if (dexterity <= 3) return -1; + if (dexterity >= 90) return 6; if (dexterity >= 60) return 5; if (dexterity >= 50) return 4; if (dexterity >= 15) return Math.floor(dexterity / 10); @@ -1079,35 +1083,37 @@ if (bdy <= 35) return Math.floor((bdy - 6) / 3); if (bdy <= 47) return Math.floor((bdy + 4) / 4); if (bdy <= 62) return Math.floor((bdy + 17) / 5); - if (bdy <= 74) return Math.floor((bdy + 33) / 6); - return 18; + if (bdy <= 80) return Math.floor((bdy + 33) / 6); + if (bdy <= 87) return 19; + if (bdy <= 94) return 20; + return 21; } function calculateHPAdjustment(bdy) { if (bdy <= 14) return 0; - if (bdy == 15) return 1; - if (bdy == 16) return 3; - if (bdy == 17) return 6; - if (bdy == 18) return 10; - if (bdy == 19) return 15; - if (bdy <= 21) return 21; - if (bdy <= 23) return 28; - if (bdy <= 25) return 36; - if (bdy <= 27) return 45; - if (bdy <= 30) return 55; - if (bdy <= 33) return 66; - if (bdy <= 36) return 78; - if (bdy <= 39) return 91; - if (bdy <= 42) return 105; - if (bdy <= 46) return 120; - if (bdy <= 50) return 136; - if (bdy <= 54) return 153; - if (bdy <= 58) return 171; - if (bdy <= 62) return 190; - if (bdy <= 67) return 210; - if (bdy <= 72) return 231; - if (bdy <= 77) return 253; - return 276; + if (bdy <= 19) return bdy - 14; + if (bdy <= 21) return 6; + if (bdy <= 23) return 7; + if (bdy <= 25) return 8; + if (bdy <= 27) return 9; + if (bdy <= 30) return 10; + if (bdy <= 33) return 11; + if (bdy <= 36) return 12; + if (bdy <= 39) return 13; + if (bdy <= 42) return 14; + if (bdy <= 46) return 15; + if (bdy <= 50) return 16; + if (bdy <= 54) return 17; + if (bdy <= 58) return 18; + if (bdy <= 62) return 19; + if (bdy <= 67) return 20; + if (bdy <= 72) return 21; + if (bdy <= 77) return 22; + if (bdy <= 82) return 23; + if (bdy <= 87) return 24; + if (bdy <= 93) return 25; + if (bdy <= 99) return 26; + return 27; } function calculateBodySave(bdy) { @@ -1118,12 +1124,13 @@ if (bdy <= 24) return 14; if (bdy <= 27) return 13; if (bdy <= 30) return 12; - if (bdy <= 34) return 11; + if (bdy <= 33) return 11; if (bdy <= 39) return 10; if (bdy <= 49) return 9; if (bdy <= 59) return 8; if (bdy <= 69) return 7; - return 6; + if (bdy <= 99) return 6; + return 5; } function updateTotalArmorRating() { @@ -1249,9 +1256,9 @@ } function calculateShotDamageModifier(prc) { - if (prc >= 78) return 22; - if (prc >= 15) return Math.floor((prc - 12) / 3); - return 0; + if (prc <= 14) return 0; + if (prc >= 20 && prc <= 23) return 3; + return Math.floor((prc - 12) / 3); } function calculateToHitModifier(perception) { @@ -1259,7 +1266,6 @@ } function calculateRangeModifier(prc) { - if (prc >= 80) return 8; if (prc >= 15) return Math.floor(prc / 10); return 0; } @@ -1330,7 +1336,6 @@ } function calculateSpellEffectModifier(int) { - if (int >= 80) return 8; if (int >= 15) return Math.floor(int / 10); return 0; } @@ -1341,15 +1346,18 @@ if (int <= 9) return "d12"; if (int <= 12) return "d8"; if (int <= 14) return "d4"; - if (int <= 19) return "2d6"; - if (int <= 24) return "d8"; - if (int <= 29) return "d6"; + if (int <= 17) return "d10"; + if (int <= 19) return "d8"; + if (int <= 24) return "d6"; + if (int <= 29) return "d4"; if (int <= 39) return "2d10"; if (int <= 49) return "2d6"; - if (int <= 59) return "d10"; - if (int <= 69) return "d8"; - if (int <= 79) return "d6"; - return "d4"; + if (int <= 59) return "1d10"; + if (int <= 69) return "1d8"; + if (int <= 79) return "1d6"; + if (int <= 89) return "1d4"; + if (int <= 99) return "1d3"; + return "1d2"; } function determineSpellTimeText(int) { @@ -1441,37 +1449,34 @@ } function calculateFortitude(wil) { - if (wil >= 80) return 33; - if (wil >= 15) return Math.floor((wil - 13) / 2); + if (wil >= 15) return wil - 14; return 0; } function calculateManaAdjustment(wil) { - // Mana adjustment uses the same calculation as HP adjustment if (wil <= 14) return 0; - if (wil == 15) return 1; - if (wil == 16) return 3; - if (wil == 17) return 6; - if (wil == 18) return 10; - if (wil == 19) return 15; - if (wil <= 21) return 21; - if (wil <= 23) return 28; - if (wil <= 25) return 36; - if (wil <= 27) return 45; - if (wil <= 30) return 55; - if (wil <= 33) return 66; - if (wil <= 36) return 78; - if (wil <= 39) return 91; - if (wil <= 42) return 105; - if (wil <= 46) return 120; - if (wil <= 50) return 136; - if (wil <= 54) return 153; - if (wil <= 58) return 171; - if (wil <= 62) return 190; - if (wil <= 67) return 210; - if (wil <= 72) return 231; - if (wil <= 77) return 253; - return 276; + if (wil <= 19) return wil - 14; + if (wil <= 21) return 6; + if (wil <= 23) return 7; + if (wil <= 25) return 8; + if (wil <= 27) return 9; + if (wil <= 30) return 10; + if (wil <= 33) return 11; + if (wil <= 36) return 12; + if (wil <= 39) return 13; + if (wil <= 42) return 14; + if (wil <= 46) return 15; + if (wil <= 50) return 16; + if (wil <= 54) return 17; + if (wil <= 59) return 18; + if (wil <= 64) return 19; + if (wil <= 69) return 20; + if (wil <= 74) return 21; + if (wil <= 80) return 22; + if (wil <= 86) return 23; + if (wil <= 92) return 24; + if (wil <= 98) return 25; + return 26; } /* CHARISMA */ @@ -1516,12 +1521,17 @@ } function calculateSocialPool(chr) { - if (chr <= 30) return Math.max(0, Math.floor(chr / 15)); - return Math.min(Math.floor((chr + 10) / 20), 4); + if (chr <= 14) return 0; + if (chr <= 19) return 1; + if (chr <= 29) return 2; + if (chr <= 39) return 3; + if (chr <= 59) return 4; + if (chr <= 79) return 5; + if (chr <= 99) return 6; + return 7; } function calculateReputationBonus(chr) { - if (chr >= 80) return 40; if (chr >= 15) return Math.floor(chr / 10) * 5; return 0; } @@ -1587,37 +1597,17 @@ function calculateInfluence(allure) { if (allure <= 3) return -10; if (allure <= 6) return -5; - if (allure >= 80) return 40; if (allure >= 15) return Math.floor(allure / 10) * 5; return 0; } function calculateSocialModifier(allure) { - if (allure < 2) { - return -3; - } - if (allure < 4) { - return -2; - } - if (allure < 7) { - return -1; - } - if (allure < 16) { - return 0; - } - if (allure < 20) { - return 1; - } - if (allure < 30) { - return 2; - } - if (allure < 40) { - return 3; - } - if (allure < 50) { - return 4; - } - return 5; + if (allure <= 1) return -3; + if (allure <= 3) return -2; + if (allure <= 6) return -1; + if (allure <= 15) return 0; + if (allure <= 19) return 1; + return Math.floor(allure / 10); } /* SHARED ATTRIBUTE FUNCTIONS */ @@ -1985,6 +1975,14 @@ }); } + on("change:armordefbase change:armordefbonus", function () { + getAttrs(["ArmorDefBase", "ArmorDefBonus"], function (values) { + setAttrs({ + ArmorDefTotal: Number(values.ArmorDefBase) + Number(values.ArmorDefBonus) + }); + }); + }); + function updateUnarmed() { getAttrs(["Unarmed", "RaceUnarmedRank", "Race"], function (values) { const baseRank = Math.max(0, Number(values.Unarmed) - 2); @@ -3477,7 +3475,7 @@ Rating - Unarmed + Unarmed * @@ -3515,7 +3513,7 @@ - Flails + Flails * @@ -3553,7 +3551,7 @@ - Hammers + Hammers * @@ -3591,7 +3589,7 @@ - Knives + Knives * @@ -3629,7 +3627,7 @@ - Polearms + Polearms * @@ -3667,7 +3665,7 @@ - Staves + Staves * @@ -3705,7 +3703,7 @@ - Whips + Whips * @@ -3734,7 +3732,7 @@ - Dual Melee + Dual Melee 3 @@ -3779,7 +3777,7 @@ Rating - Black Powder + Black Powder 1 @@ -3808,7 +3806,7 @@ - Pistols + Pistols * @@ -3846,7 +3844,7 @@ - Shotguns + Shotguns * @@ -3875,7 +3873,7 @@ - Dual Shooting + Dual Shooting 3 @@ -3895,7 +3893,7 @@ - Blow Guns + Blow Guns * @@ -3933,7 +3931,7 @@ - Crossbows + Crossbows * @@ -3971,7 +3969,7 @@ - Slings + Slings * @@ -4000,7 +3998,7 @@ - Ballistae + Ballistae * @@ -4038,7 +4036,7 @@ - Catapults + Catapults * @@ -4098,7 +4096,7 @@ Rating - Sorcery + Sorcery 1 @@ -4127,7 +4125,7 @@ - Blue Magic + Blue Magic * @@ -4165,7 +4163,7 @@ - Gold Magic + Gold Magic * @@ -4203,7 +4201,7 @@ - Green Magic + Green Magic * @@ -4241,7 +4239,7 @@ - White Magic + White Magic * @@ -4305,7 +4303,7 @@ - Medium Armor + Medium Armor 1 @@ -4327,7 +4325,7 @@ - Heavy Armor + Heavy Armor 1 @@ -4349,7 +4347,7 @@ - Shields + Shields 1 @@ -6138,25 +6136,25 @@ Amt - Unarmed + Unarmed - Melee + Melee - Projectile + Projectile - Magic + Magic @@ -6167,17 +6165,31 @@
- + - + + + + + + + - + + - + + - + + - + + @@ -6259,7 +6304,7 @@ - + - + - + - + - + - + - + - + - + @@ -7211,7 +7256,37 @@
+

Defense

TypeModifier Bonus Roll
DodgeArmor Defense + +
Dodge + +
ParryParry + +
Block w/ MeleeBlock + +
Block w/ ShieldShield Block + +
Mental DefenseMental + +
InitiativeInitiative
Total Armor ValueTotal Armor Value
ToughnessToughness
FortitudeFortitude
FireFire
ColdCold
ToxicToxic
ElectricalElectrical
SonicSonic
- + + + + + + + + + + + +
+ +

Armor Defense

+
BaseBonusTotal
+ + + + + +
+ + + + @@ -7223,7 +7298,7 @@ - + @@ -7241,7 +7316,7 @@

Shield

Cover
ShieldShield
- @@ -7253,7 +7328,7 @@ - + @@ -7268,7 +7343,7 @@ - + @@ -7283,7 +7358,7 @@ - + @@ -7298,7 +7373,7 @@ - + @@ -7318,7 +7393,7 @@ - + @@ -7333,7 +7408,7 @@ - + @@ -7348,7 +7423,7 @@ - + @@ -7363,7 +7438,7 @@ - + @@ -7378,7 +7453,7 @@ - + @@ -7393,7 +7468,7 @@ - + @@ -7408,7 +7483,7 @@ - + @@ -7423,7 +7498,7 @@ - + @@ -7438,7 +7513,7 @@ - + @@ -7453,7 +7528,7 @@ - + @@ -7468,7 +7543,7 @@ - + @@ -7643,7 +7718,7 @@
+

Armor

Armor Rating
HelmetHelmet
AmuletAmulet
CloakCloak
PauldronsPauldrons
ClothingClothing
TorsoTorso
BracersBracers
GlovesGloves
BeltBelt
GreavesGreaves
BootsBoots
RingRing
RingRing
OtherOther
OtherOther
-

Equipment (Backpack)

+

Equipment (Backpack)

@@ -7680,7 +7755,7 @@ class="sheet-textarea-equipment" > -

Transportation

+

Transportation

@@ -7713,7 +7788,7 @@

Other

-

Hideouts

+

Hideouts

@@ -7760,11 +7835,14 @@
-

Details

-
- + + + + - + - + @@ -7797,19 +7875,19 @@ - + - + - + @@ -7819,7 +7897,7 @@
-

Spiritual Influence

+

Spiritual Influence

@@ -9797,10 +9875,14 @@
-

Honor (Good Reputation)

Soul Points +

Details

+
Soul Points
PathPath
GodsGods
Spirit AnimalSpirit Animal
Astrological SignAstrological Sign
Fate PowerFate Power
- + + + + - +
Honor +

Honor (Good Reputation)

+
Honor
TitleTitle
-

Corruption (Bad Reputation)

- + + + + - +
Corruption +

Corruption (Bad Reputation)

+
Corruption
TitleTitle
-

Total Reputation

- + + + + - + - + - + @@ -10090,15 +10180,15 @@
Total Reputation +

Total Reputation

+
Total Reputation
Next TierNext Tier
Additional TalentsAdditional Talents
FameFame %
- + - + - +
RatingRating {{rating}}
Max. RatingMax. Rating {{maxRating}}
PowerPower {{power}}
@@ -10126,11 +10216,11 @@ - + - +
RollRoll {{roll}}
TargetTarget {{target}}
@@ -10146,7 +10236,7 @@ - +
Total To HitTotal To Hit {{roll}}
@@ -10155,7 +10245,7 @@ - +
ActionsActions {{actions}}
@@ -10171,7 +10261,7 @@ - +
DamageDamage {{damage}}
@@ -10187,7 +10277,7 @@ - +
RollRoll {{roll}}
@@ -10229,23 +10319,23 @@ - + - + - + - + - +
AreaArea {{area}}
DurationDuration {{duration}}
ProtectionProtection {{protection}}
Mana DrainMana Drain {{drain}}
Magic ActionsMagic Actions {{actions}}
@@ -10265,7 +10355,7 @@ - +
Total to CastTotal to Cast {{roll}}
@@ -10274,19 +10364,19 @@ - + - + - + - +
AreaArea {{area}}
DurationDuration {{duration}}
Mana DrainMana Drain {{drain}}
Magic ActionsMagic Actions {{actions}}
@@ -10302,7 +10392,7 @@ - +
Total Spell EffectTotal Spell Effect {{roll}}
@@ -10311,7 +10401,7 @@ - +
ProtectionProtection {{protection}}
diff --git a/Demon Gate/Paper.jpg b/Demon Gate/Paper.jpg deleted file mode 100644 index e1fd212118..0000000000 Binary files a/Demon Gate/Paper.jpg and /dev/null differ diff --git a/Demon Gate/circle_v2.png b/Demon Gate/circle_v2.png new file mode 100644 index 0000000000..37794b07b4 Binary files /dev/null and b/Demon Gate/circle_v2.png differ diff --git a/Demon Gate/map_watermark.jpg b/Demon Gate/map_watermark.jpg new file mode 100644 index 0000000000..a0f3d7e210 Binary files /dev/null and b/Demon Gate/map_watermark.jpg differ diff --git a/Demon Gate/map_watermark_dark.jpg b/Demon Gate/map_watermark_dark.jpg new file mode 100644 index 0000000000..670f2efc87 Binary files /dev/null and b/Demon Gate/map_watermark_dark.jpg differ