From 5972f2797889636b469ffb05ec300abba70a7d58 Mon Sep 17 00:00:00 2001 From: Zen-Raven Date: Thu, 19 Mar 2026 14:40:06 -0700 Subject: [PATCH 1/6] Bugfix - Single monster imports from Forge Steel now import properly. - Malice Abilities no longer cause an error on import. --- Draw Steel/draw-steel.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Draw Steel/draw-steel.html b/Draw Steel/draw-steel.html index 54ccb1256b..a588ce89d3 100644 --- a/Draw Steel/draw-steel.html +++ b/Draw Steel/draw-steel.html @@ -6298,7 +6298,6 @@ getConditionImmunities(allFeatures), ].filter(Boolean).join(', '); - console.log(immunity); // ATTRIBUTE MAPPING const newAttrs = { forgesteel_json: '', // Clear the import field. @@ -6485,7 +6484,9 @@ */ function _processAbilityCore(abilityData, isNPC = false) { + console.log('~~~ processAbilityCore ```'); const id = generateRowID(); + //console.log(abilityData); const { type: usageData, sections, cost: rawCost, name, description, keywords, target } = abilityData; // Configuration & Naming @@ -6652,17 +6653,18 @@ } function importMalice(maliceData) { - if (maliceData === undefined ) { + console.log('~~~ importMalice ~~~'); + if (maliceData === undefined || maliceData.length === 0) { return []; } const maliceFeatures = maliceData.reduce((acc, f) => { if (f.type === FEATURE_TYPES.MALICE_ABILITY) { - return {...acc, ...processAbility(f)}; + return {...acc, ...processMonsterAbility(f.data.ability)}; } else { return {...acc, ...processMaliceAbility(f)}; } - }); + },[]); console.log(maliceFeatures); return maliceFeatures; } From 0ad53f1e235310b0aa2705cec512a76aaa60cbcc Mon Sep 17 00:00:00 2001 From: Zen-Raven Date: Sun, 22 Mar 2026 15:14:21 -0700 Subject: [PATCH 2/6] Updated Director Screen - Made Director Screen available on player sheet. - Updated Growing Resource Table to allow custom entries - Updated options panel, adding new options and visual changes. --- Draw Steel/draw-steel.css | 306 +++++------ Draw Steel/draw-steel.html | 1013 ++++++++++++++++++----------------- Draw Steel/translation.json | 7 +- 3 files changed, 670 insertions(+), 656 deletions(-) diff --git a/Draw Steel/draw-steel.css b/Draw Steel/draw-steel.css index 3fd83ebe76..38b7244715 100644 --- a/Draw Steel/draw-steel.css +++ b/Draw Steel/draw-steel.css @@ -307,9 +307,20 @@ input.sheet-options-checkbox { .sheet-options-toggle { display: grid; - gap: 0.25em; + gap: 0.5em; } +.sheet-options-toggle hr { + margin-top: var(--sheet-padding); + margin-bottom: var(--sheet-padding); + border-top: var(--border-main); +} + +.sheet-options-toggle label { + font-weight: normal; +} + + /* Switches between Character and NPC Sheets */ .charsheet input.npc-checkbox:not([value="on"]) ~ .npc-sheet-body, .charsheet input.npc-checkbox[value="on"] ~ .sheet-body @@ -336,12 +347,7 @@ input.sheet-options-checkbox { #inventory-minimize-checkbox:checked + label::before, #projects-minimize-checkbox:checked + label::before, #notes-minimize-checkbox:checked + label::before, -#director-screen-minimize-checkbox:checked + label::before, -#director-screen-conditions-minimize-checkbox:checked + label::before, -#director-screen-basics-minimize-checkbox:checked + label::before, -#director-screen-combat-minimize-checkbox:checked + label::before, -#director-screen-movement-minimize-checkbox:checked + label::before, -#director-screen-areas-of-effect-minimize-checkbox:checked + label::before { +#director-screen-minimize-checkbox:checked + label::before { content:'&'; } @@ -355,22 +361,7 @@ label[for*='minimize']::before { .minimizable:has(.minimize-control > .minimize:checked) > :not(.minimize-control):not(.minimize-ignore):not(.minimize-show), .minimizable:has(.minimize-control > .minimize:checked) > .minimize-ignore > :not(.minimize-ignore), -.minimizable:has(.minimize-control > .minimize:not(:checked)) > .minimize-show, -.minimizable-conditions:has(.minimize-control-conditions > .minimize:checked) > :not(.minimize-control-conditions):not(.minimize-ignore):not(.minimize-show), -.minimizable-conditions:has(.minimize-control-conditions > .minimize:checked) > .minimize-ignore > :not(.minimize-ignore), -.minimizable-conditions:has(.minimize-control-conditions > .minimize:not(:checked)) > .minimize-show, -.minimizable-basics:has(.minimize-control-basics > .minimize:checked) > :not(.minimize-control-basics):not(.minimize-ignore):not(.minimize-show), -.minimizable-basics:has(.minimize-control-basics > .minimize:checked) > .minimize-ignore > :not(.minimize-ignore), -.minimizable-basics:has(.minimize-control-basics > .minimize:not(:checked)) > .minimize-show, -.minimizable-combat:has(.minimize-control-combat > .minimize:checked) > :not(.minimize-control-combat):not(.minimize-ignore):not(.minimize-show), -.minimizable-combat:has(.minimize-control-combat > .minimize:checked) > .minimize-ignore > :not(.minimize-ignore), -.minimizable-combat:has(.minimize-control-combat > .minimize:not(:checked)) > .minimize-show, -.minimizable-movement:has(.minimize-control-movement > .minimize:checked) > :not(.minimize-control-movement):not(.minimize-ignore):not(.minimize-show), -.minimizable-movement:has(.minimize-control-movement > .minimize:checked) > .minimize-ignore > :not(.minimize-ignore), -.minimizable-movement:has(.minimize-control-movement > .minimize:not(:checked)) > .minimize-show, -.minimizable-areas-of-effect:has(.minimize-control-areas-of-effect > .minimize:checked) > :not(.minimize-control-areas-of-effect):not(.minimize-ignore):not(.minimize-show), -.minimizable-areas-of-effect:has(.minimize-control-areas-of-effect > .minimize:checked) > .minimize-ignore > :not(.minimize-ignore), -.minimizable-areas-of-effect:has(.minimize-control-areas-of-effect > .minimize:not(:checked)) > .minimize-show { +.minimizable:has(.minimize-control > .minimize:not(:checked)) > .minimize-show { display: none; } @@ -623,127 +614,97 @@ label[for*='minimize']::before { text-align: center; } +/* Growing Resource Table */ +.has-resource-toggle[value="0"] ~ .resource-container { + display: none; +} + +.growing-resource-grid { + display: grid; + grid-template-columns: 80px 1fr; /* Adjust label width as needed */ + gap: 4px; + align-items: center; +} + +.grid-header { + display: contents; /* Allows children to participate in parent grid */ + font-weight: bold; + border-bottom: 1px solid #000; +} + +.resource-container { + position: relative; +} + +.resource-row { + display: contents; +} + +.resource-row .edit-mode { + display: none; +} + +.resource-row .display-mode { + display: contents; + +} + +.resource-container .ability-edit:checked ~ .growing-resource-grid .display-mode { + display: none; +} +.resource-container .ability-edit:checked ~ .growing-resource-grid .edit-mode { + display: contents; +} + +.row-toggle-2[value="0"] ~ .resource-container .grid-header { display: none; } +.row-toggle-2[value="0"] ~ .resource-container .tier-2 .display-mode { display: none; } +.row-toggle-4[value="0"] ~ .resource-container .tier-4 .display-mode { display: none; } +.row-toggle-6[value="0"] ~ .resource-container .tier-6 .display-mode { display: none; } +.row-toggle-8[value="0"] ~ .resource-container .tier-8 .display-mode { display: none; } +.row-toggle-10[value="0"] ~ .resource-container .tier-10 .display-mode { display: none; } +.row-toggle-12[value="0"] ~ .resource-container .tier-12 .display-mode { display: none; } + +.growing-resource-grid input[type="text"], +.growing-resource-grid textarea { + width: 100%; + box-sizing: border-box; +} + +.growing-resource-grid textarea { + height: 40px; + resize: vertical; +} .growing-resource { grid-column: 1 / -1; + padding-left: 20px; + padding-right: 20px; } -.growing-resource:has([name="attr_has_growing_resource"]:not(:checked)) > .growing-resource-display, -.growing-resource:has([name="attr_has_growing_resource"]:not(:checked)) > .growing-resource-selector-display { - display: none; +.stormwight-only { + display: none; + margin-top: 5px; + padding-left: 15px; /* Indent to show hierarchy */ + border-left: 2px solid #ccc; } -.growing-resource-display { - display: flex; - gap: 0.25em; - flex-direction: column; +/* 2. Show it only when the hidden input's value is 'furystormwight' */ +.main-resource-state[value="furystormwight"] ~ .stormwight-only { + display: flex; + align-items: center; + gap: 10px; } -.growing-resource-selector-display { - display: grid; - grid-template-columns: max-content max-content; - gap: 0.25em; - justify-items: start; - align-items: left; - jutify-content: start; - font-weight: bold; +/* Optional: Styling for the labels within the selectors */ +.selector-row label { + margin-right: 10px; + min-width: 100px; } -.berserker-growing-resource-display, -.reaver-growing-resource-display, -.boren-growing-resource-display, -.corven-growing-resource-display, -.raden-growing-resource-display, -.vuken-growing-resource-display, -.chronokinetic-growing-resource-display, -.cryokinetic-growing-resource-display, -.metakinetic-growing-resource-display { - display: grid; - grid-template-columns: 1fr 2fr; - gap: 0.25em; - row-gap: 0.4em; - grid-auto-rows: auto; +.selector-row select { + width: 100%; + cursor: pointer; } -.growing-resource-display-label { - display: contents; - text-align: center; - font-size: 0.85em; - font-weight: normal; -} - -.growing-resource-display-label > label:nth-child(1) { - font-size: 1.2em; - font-weight: bold; -} - -.growing-resource-display-label > label:not(:nth-child(1)):not(:nth-child(2)):not(:nth-child(3)):not(:nth-child(5)):not(:nth-child(7)):not(:nth-child(9)):not(:nth-child(11)):not(:nth-child(13)) { - text-align: left; -} - -.growing-resource:not(:has(.growing-resource-selector > option[value="furyberserker"]:checked)) .berserker-growing-resource-display, -.growing-resource:not(:has(.growing-resource-selector > option[value="furyreaver"]:checked)) .reaver-growing-resource-display, -.growing-resource-selector-display:not(:has(.growing-resource-selector > option[value="furystormwight"]:checked)) .stormwight-growing-resource-selector, -.growing-resource:not(:has(.stormwight-growing-resource-selector > option[value="boren"]:checked)) .boren-growing-resource-display, -.growing-resource:not(:has(.stormwight-growing-resource-selector > option[value="corven"]:checked)) .corven-growing-resource-display, -.growing-resource:not(:has(.stormwight-growing-resource-selector > option[value="raden"]:checked)) .raden-growing-resource-display, -.growing-resource:not(:has(.stormwight-growing-resource-selector > option[value="vuken"]:checked)) .vuken-growing-resource-display, -.growing-resource:not(:has(.growing-resource-selector > option[value="nullchronokinetic"]:checked)) .chronokinetic-growing-resource-display, -.growing-resource:not(:has(.growing-resource-selector > option[value="nullcryokinetic"]:checked)) .cryokinetic-growing-resource-display, -.growing-resource:not(:has(.growing-resource-selector > option[value="nullmetakinetic"]:checked)) .metakinetic-growing-resource-display { - display: none; -} - -input[name="attr_growingresource_show_2"]:not([value="1"]) ~ .growing-resource-display, -input[name="attr_growingresource_show_2"]:not([value="1"]) ~ .growing-resource-display-label, -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .berserker-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .berserker-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .berserker-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .berserker-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .berserker-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .reaver-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .reaver-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .reaver-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .reaver-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .reaver-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .boren-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .boren-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .boren-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .boren-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .boren-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .corven-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .corven-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .corven-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .corven-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .corven-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .raden-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .raden-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .raden-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .raden-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .raden-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .vuken-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .vuken-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .vuken-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .vuken-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .vuken-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .chronokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .chronokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .chronokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .chronokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .chronokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .cryokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .cryokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .cryokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .cryokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .cryokinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)), -input[name="attr_growingresource_show_4"]:not([value="1"]) ~ .growing-resource-display .metakinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+4)), -input[name="attr_growingresource_show_6"]:not([value="1"]) ~ .growing-resource-display .metakinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+6)), -input[name="attr_growingresource_show_8"]:not([value="1"]) ~ .growing-resource-display .metakinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+8)), -input[name="attr_growingresource_show_10"]:not([value="1"]) ~ .growing-resource-display .metakinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+10)), -input[name="attr_growingresource_show_12"]:not([value="1"]) ~ .growing-resource-display .metakinetic-growing-resource-display .growing-resource-display-label > label:not(:nth-child(-n+12)) { - display: none; -} - - .stamina-panel { grid-column-start: 6; grid-column-end: span 2; @@ -1741,50 +1702,58 @@ input.name-input { border-right: var(--border-main); } -/*Director screen styling*/ -.director-screen-panel, -.director-screen-sub-panel { - display: grid; +/*Director screen styling */ + +#director-screen-toggle:not([value="1"]) ~ .director-screen-panel { + display: none; } -.director-screen-panel > .minimize-control, -.director-screen-sub-panel > .minimize-control-conditions, -.director-screen-sub-panel > .minimize-control-basics, -.director-screen-sub-panel > .minimize-control-combat, -.director-screen-sub-panel > .minimize-control-movement, -.director-screen-sub-panel > .minimize-control-areas-of-effect { - grid-column-start: 1; - grid-column-end: -1; +.director-screen-panel details{ + padding-left: 30px; + padding-bottom: 8px; } -.director-screen-sub-panel h5.panel-title { - text-align: left; - display: inline; - margin-top: 0.2em; +.director-screen-panel summary { + display: list-item; + font-weight: bold; + margin-left: -15px; } -.director-screen-sub-panel h5.panel-title > span:not(.director-screen-sub-desc):first-child { + +/* Container for the specific rules */ +.director-rules-container { + display: flex; + flex-direction: column; + gap: 0.5em; +} + +/* Individual Rule Item */ +.director-rule-item { + display: block; /* Stacked for better mobile/small panel flow */ + border-bottom: var(--border-main); + padding-bottom: 4px; + padding-left: 15px; +} + +/* The Label (e.g., "Bleeding") */ +.director-rule-name { + display: inline-block; + font-weight: bold; + color: var(--color-text-header); + font-size: 0.9em; + margin-left: -15px; + margin-right: 5px; text-decoration: underline; } -.director-screen-sub-panel h2.panel-title { - text-align: left; - font-size: 2em; - font-weight: 800; +/* The Description */ +.director-rule-desc, +.director-section-text { + font-size: 0.85em; + line-height: 1.2; + color: var(--color-text-body); } -.director-screen-sub-panel h3.panel-title { - text-align: left; - font-size: 1.5em; - font-weight: 800; -} - -.director-screen-sub-panel h5.panel-title .director-screen-sub-desc { - font-weight: normal; - font-size: 0.9em; -} - - /* NPC edit styling */ .charsheet label.npc-edit-icon { font-family: "Pictos"; @@ -1913,13 +1882,6 @@ input.npc-edit-toggle:not(:checked) ~ div.npc-edit { padding-top: 5px; } -label[for="npc-checkbox"] { - color: var(--color-text-body); - font-weight: bold; - font-size: 1em; - padding-left: 0.5em; -} - /* Roll Template Styling */ .sheet-rolltemplate-powerroll .sheet-roll-container, diff --git a/Draw Steel/draw-steel.html b/Draw Steel/draw-steel.html index a588ce89d3..e29de98271 100644 --- a/Draw Steel/draw-steel.html +++ b/Draw Steel/draw-steel.html @@ -10,7 +10,7 @@
- +
@@ -19,13 +19,50 @@ -
-
Damage Calculator
- +
+
+ +
+
+
+ +
+
+
+ + +
+
+ + +
+ +
+ +
+ + +
+
+
@@ -57,10 +94,364 @@
- -
+ + + + + +
+
+ + +
+ +
+ + +

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

+ +
+

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

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

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

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

+
+
+ +
+ +
+

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

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

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
@@ -277,134 +668,90 @@
+
- - - - - - - -
- - -
-
+ + + + + + + + +
-
-
- - - - - - - + + + +
+
+ +
-
-
-
- - - - - - - + +
+
+ + +
+
+ + +
-
-
-
- - - - - - - +
+
+ + +
+
+ + +
-
-
-
- - - - - - - +
+
+ + +
+
+ + +
-
-
-
- - - - - - - +
+
+ + +
+
+ + +
-
-
-
- - - - - - - +
+
+ + +
+
+ + +
-
-
-
- - - - - - - -
-
-
-
- - - - - - - -
-
-
-
- - - - - - - +
+
+ + +
+
+ + +
-
+
@@ -2513,365 +2860,6 @@
- -
-
- - -
-
-
- - -
-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-

-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-

-
- -
-
-
-
- - -
-
- - -
-
- - -
-

-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-

-
- -
-
- - -
-
- - -
-
- - -
-

-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-

-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-

-
- -
-
-
-
- - -
-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-

-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
- - -
-
- -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
@@ -5505,6 +5493,10 @@ calculateRespite(); }); + on("change:growing_resource_type change:stormwight_growing_resource_type", () => { + updateGrowingResource(); + }); + // Configuration map for feature sharing // Maps the trigger event to its specific attribute names and translation key const featureShareHandlers = { @@ -5685,7 +5677,64 @@ }); }); } + + // Updates the Growing Resources Table when the options are changed + async function updateGrowingResource() { + console.log('~~~ updateGrowingResource ~~~'); + // Get current selector values + const attrs = await getAttrsAsync(['growing_resource_type', 'stormwight_growing_resource_type']); + const mainType = attrs.growing_resource_type; + const stormType = attrs.stormwight_growing_resource_type; + + // Identify the subclass prefix for translation keys + // If it's Stormwight, use the sub-selector; otherwise, strip prefixes like "fury" or "null" + let subClassKey = ''; + if (mainType === 'furystormwight') { + subClassKey = stormType; // e.g., "raden" + } else if (mainType !== 'custom') { + // Strips "fury" or "null" from "furyberserker" -> "berserker" + subClassKey = mainType.replace(/^(fury|null)/, ''); + } + + // Define the levels/tiers we are filling + const tiers = [ + { num: 2, word: 'two' }, + { num: 4, word: 'four' }, + { num: 6, word: 'six' }, + { num: 8, word: 'eight' }, + { num: 10, word: 'ten' }, + { num: 12, word: 'twelve' } + ]; + + const updateObj = {}; + + // Populate the Table + tiers.forEach(tier => { + const labelAttr = `growingresource_${tier.num}_label`; + const textAttr = `growingresource_${tier.num}_text`; + + if (!subClassKey) { + // Reset fields if 'custom' or no Stormwight type selected + updateObj[labelAttr] = tier.num.toString(); + updateObj[textAttr] = ""; + return; + } + + // Handle Labels (Tiers 8-12 have extra level requirements) + if (tier.num >= 8) { + updateObj[labelAttr] = getTranslationByKey(`${tier.word}-label`) || tier.num.toString(); + } else { + updateObj[labelAttr] = tier.num.toString(); + } + + // Handle Benefits (Lookup translation key: subclass-word-ben) + const benefitKey = `${subClassKey}-${tier.word}-ben`; + updateObj[textAttr] = getTranslationByKey(benefitKey) || ""; + }); + + setAttrs(updateObj); + } /** ** Import from Forge Steel Start diff --git a/Draw Steel/translation.json b/Draw Steel/translation.json index d9ea3f1fbb..e6d4412b06 100644 --- a/Draw Steel/translation.json +++ b/Draw Steel/translation.json @@ -236,7 +236,7 @@ "I": "I", "P": "P", "damage-autocalc": "Damage Calculator", - "options-calculate-damage": "Automatically Calculate Damage:", + "options-calculate-damage": "Automatically Calculate Damage", "resource-amount": "Amount", "standard-abilities": "Standard Abilities", "standard-main-actions": "Standard Main Actions", @@ -566,5 +566,8 @@ "roll-surge-potency-desc": "Surges used to increase potency by 1", "roll-resource-gain": "Gain", "damage-calc-or": "or", - "import-select-prompt": "Select One" + "import-select-prompt": "Select One", + "player-options-title": "Player Options", + "growing-resource-custom": "Custom", + "options-show-director-screen": "Show Director Screen" } From fec6224c61be88e7610abf81ad61bf98cd06cea5 Mon Sep 17 00:00:00 2001 From: Zen-Raven Date: Mon, 23 Mar 2026 09:32:20 -0700 Subject: [PATCH 3/6] Import Minion Text - Updated the import function to add appropriate minion text to the encounter value for minions. --- Draw Steel/draw-steel.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Draw Steel/draw-steel.html b/Draw Steel/draw-steel.html index e29de98271..5fa72bc9de 100644 --- a/Draw Steel/draw-steel.html +++ b/Draw Steel/draw-steel.html @@ -6476,6 +6476,8 @@ const maliceFeatures = malice ? importMalice(malice) : []; + const minionTag = roleString.includes('Minion') ? getTranslationByKey('minion-text') : ''; + // ATTRIBUTE MAPPING const newAttrs = { forgesteel_json: '', // Clear the import field. @@ -6486,7 +6488,7 @@ level: level, npc_role: roleString, npc_keywords: keywords.join(', '), - npc_EV: encounterValue, + npc_EV: `${encounterValue} ${minionTag}`.trim(), // Stats size: sizeString, speed: dataSpeed.value ?? 5, From 143d773244fb03bdb84615bf5dea05b93abd5bd7 Mon Sep 17 00:00:00 2001 From: Zen-Raven Date: Mon, 23 Mar 2026 11:11:48 -0700 Subject: [PATCH 4/6] CSS Adjustments - Minor clean up to CSS to remove unused code - Adjusted growing resource table to not show title when characteristics panel is minimized. --- Draw Steel/draw-steel.css | 72 +++++++++----------------------------- Draw Steel/draw-steel.html | 8 ++--- 2 files changed, 19 insertions(+), 61 deletions(-) diff --git a/Draw Steel/draw-steel.css b/Draw Steel/draw-steel.css index 38b7244715..f0c8fd8fb9 100644 --- a/Draw Steel/draw-steel.css +++ b/Draw Steel/draw-steel.css @@ -109,7 +109,7 @@ .sheet-rolltemplate-darkmode.sheet-rolltemplate-powerrollability .sheet-roll-container, .sheet-rolltemplate-darkmode.sheet-rolltemplate-ability .sheet-roll-container, .sheet-rolltemplate-darkmode.sheet-rolltemplate-powerroll .sheet-roll-container, -.sheet-rolltemplate-simpleroll.sheet-rolltemplate-darkmode .sheet-roll-container { +.sheet-rolltemplate-darkmode.sheet-rolltemplate-simpleroll .sheet-roll-container { --color-bg-main: #1f1f1f; --color-bg-section: rgb(59, 64, 69); @@ -235,16 +235,6 @@ border-right: var(--border-main); } -/*.charsheet input[type=number].no-spin::-webkit-inner-spin-button, -.charsheet input[type=number].no-spin::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -.charsheet input[type=number].no-spin { - -moz-appearance: textfield ; -}*/ - .charsheet input.input-md { height: 20px; font-size: 0.9em; @@ -339,6 +329,7 @@ input.sheet-options-checkbox { display:none; } +/* #stats-minimize-checkbox:checked + label::before, #biography-minimize-checkbox:checked + label::before, #skills-languages-minimize-checkbox:checked + label::before, @@ -350,6 +341,11 @@ input.sheet-options-checkbox { #director-screen-minimize-checkbox:checked + label::before { content:'&'; } +*/ + +[id*='minimize-checkbox']:checked + label::before { + content: '&'; +} label[for*='minimize']::before { display: inline-block; @@ -458,16 +454,6 @@ label[for*='minimize']::before { gap: 5px; } -/*.charsheet .sheet-body .stats-panel input[type=number]::-webkit-inner-spin-button, -.charsheet .sheet-body .stats-panel input[type=number]::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} - -.charsheet .sheet-body .stats-panel input[type=number] { - -moz-appearance: textfield; -} -*/ .stats-panel > .minimize-control { grid-column: 1 / -1; } @@ -482,17 +468,6 @@ label[for*='minimize']::before { } -.hexagon { ---b: 2px; - height: 75px; - aspect-ratio: cos(30deg); - clip-path: polygon(50% 0,-50% 50%,50% 100%,150% 50%,50% 0, 50% var(--b), calc(100% - var(--b)*sin(60deg)) calc(25% + var(--b)*cos(60deg)), calc(100% - var(--b)*sin(60deg)) calc(75% - var(--b)*cos(60deg)), 50% calc(100% - var(--b)), calc(var(--b)*sin(60deg)) calc(75% - var(--b)*cos(60deg)), calc(var(--b)*sin(60deg)) calc(25% + var(--b)*cos(60deg)), 50% var(--b)); - background: var(--color-bg-main); - position: absolute; - z-index: -10; - top: 0px; -} - .dashboard-characteristics { grid-column-start: 1; grid-column-end: span 5; @@ -523,12 +498,6 @@ label[for*='minimize']::before { color: var(--color-text-header); } -/*.charsheet .sheet-body .dashboard-stat-group input[type=number]::-webkit-inner-spin-button, -.charsheet .sheet-body .dashboard-stat-group input[type=number]::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -}*/ - .dashboard-stamina { grid-column: 6/ span 2; display: grid; @@ -615,19 +584,23 @@ label[for*='minimize']::before { } /* Growing Resource Table */ -.has-resource-toggle[value="0"] ~ .resource-container { +.has-resource-toggle[value="0"] ~ .growing-resource { display: none; } +.growing-resource { + display: block; +} + .growing-resource-grid { display: grid; - grid-template-columns: 80px 1fr; /* Adjust label width as needed */ + grid-template-columns: 80px 1fr; gap: 4px; align-items: center; } .grid-header { - display: contents; /* Allows children to participate in parent grid */ + display: contents; font-weight: bold; border-bottom: 1px solid #000; } @@ -656,7 +629,7 @@ label[for*='minimize']::before { display: contents; } -.row-toggle-2[value="0"] ~ .resource-container .grid-header { display: none; } +.row-toggle-2[value="0"] ~ .resource-container { display: none; } .row-toggle-2[value="0"] ~ .resource-container .tier-2 .display-mode { display: none; } .row-toggle-4[value="0"] ~ .resource-container .tier-4 .display-mode { display: none; } .row-toggle-6[value="0"] ~ .resource-container .tier-6 .display-mode { display: none; } @@ -683,18 +656,16 @@ label[for*='minimize']::before { .stormwight-only { display: none; margin-top: 5px; - padding-left: 15px; /* Indent to show hierarchy */ + padding-left: 15px; border-left: 2px solid #ccc; } -/* 2. Show it only when the hidden input's value is 'furystormwight' */ .main-resource-state[value="furystormwight"] ~ .stormwight-only { display: flex; align-items: center; gap: 10px; } -/* Optional: Styling for the labels within the selectors */ .selector-row label { margin-right: 10px; min-width: 100px; @@ -1056,15 +1027,6 @@ label[for*='minimize']::before { grid-column-end: span 2; } -] { - display: grid; - grid-gap: 0.2em; - box-shadow: - inset 1px 1px 2px #555, - inset -1px -1px 2px #111, - 0 2px 6px rgba(0, 0, 0, 0.5); -} - .modifiers-panel { grid-column-start: 1; grid-column-end: -1; @@ -1158,7 +1120,7 @@ label[for*='minimize']::before { .kit-damage-label, .other-modifiers-label { - font-size: 0.75em !important; + font-size: 0.75em; } .kit-melee-damage-group, diff --git a/Draw Steel/draw-steel.html b/Draw Steel/draw-steel.html index 5fa72bc9de..27807a61b6 100644 --- a/Draw Steel/draw-steel.html +++ b/Draw Steel/draw-steel.html @@ -668,9 +668,9 @@
- +
- +
@@ -679,16 +679,12 @@
-
- -
-
From e4eda15399fcfffa598f8c7eecf3960ee7f8315c Mon Sep 17 00:00:00 2001 From: Zen-Raven Date: Mon, 23 Mar 2026 15:29:37 -0700 Subject: [PATCH 5/6] Options button - Updated options button visually --- Draw Steel/draw-steel.css | 18 ++++++++++++++---- Draw Steel/draw-steel.html | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Draw Steel/draw-steel.css b/Draw Steel/draw-steel.css index f0c8fd8fb9..b7977bf567 100644 --- a/Draw Steel/draw-steel.css +++ b/Draw Steel/draw-steel.css @@ -276,16 +276,26 @@ color: var(--color-button-bg); cursor: pointer; right: 30px; - top: 100px; font-weight: normal; } +.charsheet label.sheet-options-checkbox-label::before { + content: 'y'; +} + +.charsheet .sheet-header:has(#sheet-options-checkbox:checked) > .sheet-options-checkbox-label::before { /*~ label.sheet-options-checkbox-label::before {*/ + color: var(--color-accent-steel); + content: '*'; +} + +.charsheet .sheet-header:has(#sheet-options-checkbox:checked) > .sheet-options-checkbox-label { + top: 108px; +} + .charsheet label.sheet-options-checkbox-label:hover { color: var(--color-accent-steel); } -.charsheet.has(.sheet-options-checkbox:checked) ~ label.sheet-options-checkbox-label { - color: var(--color-accent-steel); -} + input.sheet-options-checkbox { display: none; diff --git a/Draw Steel/draw-steel.html b/Draw Steel/draw-steel.html index 27807a61b6..2fc78b09d2 100644 --- a/Draw Steel/draw-steel.html +++ b/Draw Steel/draw-steel.html @@ -7,7 +7,7 @@ style="height: 60px" /> - +
From c373434fe6b9fedde46a5b531ecbbed4b03bc31d Mon Sep 17 00:00:00 2001 From: Zen-Raven Date: Tue, 24 Mar 2026 10:18:47 -0700 Subject: [PATCH 6/6] Bugfix - Fixed Advance and Ride abilities so that they are shown as move actions and not maneuvers. --- Draw Steel/draw-steel.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Draw Steel/draw-steel.html b/Draw Steel/draw-steel.html index 2fc78b09d2..d5e50db444 100644 --- a/Draw Steel/draw-steel.html +++ b/Draw Steel/draw-steel.html @@ -2680,7 +2680,7 @@
- + @@ -2738,7 +2738,7 @@
- +