From 93709ed7e4a59915d40cfa606163a55a17dc9b91 Mon Sep 17 00:00:00 2001 From: Stuart Harper Date: Mon, 15 Jun 2026 16:02:57 -0600 Subject: [PATCH] Dolmenwood: update the rolling of skills and attributes to work correctly. --- Dolmenwood/dolmenwood.css | 80 ++++---------------------- Dolmenwood/dolmenwood.html | 114 ++++++++++++++++++------------------- 2 files changed, 66 insertions(+), 128 deletions(-) diff --git a/Dolmenwood/dolmenwood.css b/Dolmenwood/dolmenwood.css index d34f5f6702..c05bac3204 100644 --- a/Dolmenwood/dolmenwood.css +++ b/Dolmenwood/dolmenwood.css @@ -18,9 +18,7 @@ } .sheet-rolltemplate-simple h3, -.sheet-rolltemplate-greater h3, -.sheet-rolltemplate-less h3, -.sheet-rolltemplate-skill h3 { +.sheet-rolltemplate-greater h3 { color: white; background-color: #333; line-height: 2.2rem; @@ -29,9 +27,7 @@ } .sheet-rolltemplate-simple span, -.sheet-rolltemplate-greater span, -.sheet-rolltemplate-less span, -.sheet-rolltemplate-skill span { +.sheet-rolltemplate-greater span { background: white; color: black; display: inline-block; @@ -46,9 +42,7 @@ } .sheet-rolltemplate-simple h3, -.sheet-rolltemplate-greater h3, -.sheet-rolltemplate-less h3, -.sheet-rolltemplate-skill h3 { +.sheet-rolltemplate-greater h3 { font-family: "Metamorphous", serif; font-size: 1.6rem; } @@ -59,9 +53,7 @@ } .sheet-rolltemplate-simple .inlinerollresult, -.sheet-rolltemplate-greater .inlinerollresult, -.sheet-rolltemplate-less .inlinerollresult, -.sheet-rolltemplate-skill .inlinerollresult { +.sheet-rolltemplate-greater .inlinerollresult { background-color: transparent; border: none; color: black; @@ -74,18 +66,14 @@ .sheet-rolltemplate-simple .fullfail, .sheet-rolltemplate-simple .sheet-fullfail, -.sheet-rolltemplate-greater .sheet-rollfail, -.sheet-rolltemplate-less .sheet-rollfail, -.sheet-rolltemplate-skill .sheet-rollfail { +.sheet-rolltemplate-greater .sheet-rollfail { color: #990000; font-weight: bold; } .sheet-rolltemplate-simple .fullcrit, .sheet-rolltemplate-simple .sheet-fullcrit, -.sheet-rolltemplate-greater .sheet-rollsuccess, -.sheet-rolltemplate-less .sheet-rollsuccess, -.sheet-rolltemplate-skill .sheet-rollsuccess { +.sheet-rolltemplate-greater .sheet-rollsuccess { color: #009900; font-weight: bold; } @@ -932,15 +920,6 @@ div.sheet-custom-spells div.custom-spell-selector label { width: auto; } -div.glamour-grid, -div.rune-grid, -div.knack-grid, -div.spells-grid, -div.repcontainer textarea { - font-family: "Metamorphous", serif; - font-size: 12px; -} - .h-line { width: 100%; height: 1px; @@ -981,43 +960,6 @@ div.repcontainer textarea { width: 210px; } -div.glamour-grid input[type="text"], -div.knack-grid input[type="text"], -div.rune-grid input[type="text"], -div.spells-grid input[type="text"] { - width: 100%; -} - -div.rune-grid textarea, -div.rune-grid textarea, -div.knack-grid textarea, -div.spells-grid textarea { - margin-top: 5px; - height: 70px; -} - -.spells-per-level { - display: flex; - align-items: flex-end; - font-family: "Metamorphous", serif; - font-size: 15px; - margin-bottom: 10px; -} - -.ui-dialog .charsheet div.spells-per-level span { - margin-left: 16px; -} - -.ui-dialog .charsheet div.spells-per-level label { - margin: 0; - padding: 0; - width: auto; -} - -.ui-dialog .charsheet div.spells-per-level input[type="number"] { - width: 30px; -} - .monster-row { display: flex; font-family: "Metamorphous", serif; @@ -1041,13 +983,13 @@ div.spells-grid textarea { color: inherit; } -input[name="attr_coinsOverloaded"][value="1"] ~ div .sheet-coins span, -input[name="attr_coinsOverloaded"][value="1"] ~ div .sheet-coins input { +input[name="attr_coinsOverloaded"]:checked ~ div .sheet-coins span, +input[name="attr_coinsOverloaded"]:checked ~ div .sheet-coins input { color: red; } .sheet-pouch-full { - display: none; + display: none !important; } .sheet-pouch-full input { @@ -1060,9 +1002,9 @@ span.sheet-pouch-full span { color: red; } -input[name="attr_coinsOverloaded"][value="1"] ~ .sheet-pouch-full { +input[name="attr_coinsOverloaded"]:checked ~ .sheet-pouch-full { color: red; - display: flex; + display: flex !important; justify-content: center; align-items: center; } diff --git a/Dolmenwood/dolmenwood.html b/Dolmenwood/dolmenwood.html index fb658bb2c8..c89588cec2 100644 --- a/Dolmenwood/dolmenwood.html +++ b/Dolmenwood/dolmenwood.html @@ -137,7 +137,7 @@
- +
Item Notes: @@ -1461,7 +1461,7 @@
@@ -1801,19 +1797,19 @@ {{#reaction}}
{{#rollLess() result 3}} -

Hostile, attacks

+

Attacks

{{/rollLess() result 3}} {{#rollBetween() result 3 5}} -

Unfriendly, may attack

+

Hostile, may attack

{{/rollBetween() result 3 5}} {{#rollBetween() result 6 8}} -

Neutral, uncertain

+

Uncertain, wary

{{/rollBetween() result 6 8}} {{#rollBetween() result 9 11}} -

Indifferent, uninterested

+

Indifferent, may negotiate

{{/rollBetween() result 9 11}} {{#rollGreater() result 11}} -

Friendly, helpful

+

Eager, friendly

{{/rollGreater() result 11}}
{{/reaction}} @@ -1947,34 +1943,18 @@ }); // Attribute Changes - on("sheet:opened change:dex", function () { - updateWeaponBonuses(); + const registerAbilityModWatcher = (ability, updatesWeaponBonuses = false) => { + on(`sheet:opened change:${ability}`, function () { + if (updatesWeaponBonuses) updateWeaponBonuses(); - getAttrs(["dex"], function (values) { - setAttrs({ dexMod: getModifiers(values.dex) }); + getAttrs([ability], function (values) { + setAttrs({ [`${ability}Mod`]: getModifiers(values[ability]) }); + }); }); - }); - on("sheet:opened change:str", function () { - updateWeaponBonuses(); + }; - getAttrs(["str"], function (values) { - setAttrs({ strMod: getModifiers(values.str) }); - }); - }); - on("sheet:opened change:con", function () { - getAttrs(["conMod", "con"], function (values) { - setAttrs({ conMod: getModifiers(values.con) }); - }); - }); - on("sheet:opened change:int", function () { - getAttrs(["int"], function (values) { - setAttrs({ intMod: getModifiers(values.int) }); - }); - }); - on("sheet:opened change:wis", function () { - getAttrs(["wis"], function (values) { - setAttrs({ wisMod: getModifiers(values.wis) }); - }); + ["dex", "str", "con", "int", "wis"].forEach((ability) => { + registerAbilityModWatcher(ability, ability === "dex" || ability === "str"); }); on("sheet:opened change:cha change:kindred", function () { getAttrs(["cha", "kindred"], function (values) { @@ -2285,8 +2265,9 @@ } ); - // Update weaponAttributeBonus and weaponAttributeBonusDamage when STR or DEX changes - on("change:repeating_weapons:attackType change:str change:dex", function () { + on("change:repeating_weapons:attackType change:str change:dex change:bab change:repeating_weapons add:repeating_weapons remove:repeating_weapons", function () { + updateWeaponBonuses(); + getSectionIDs("repeating_weapons", function (idArray) { idArray.forEach(function (id) { const attributes = ["attackType"] @@ -2312,7 +2293,7 @@ // Set saving throws, BAB, HD, Next Level Experience on( "change:level change:class change:wis change:monsterHitDice change:monsterSpecialAbilities change:kindred change:customGlamours change:customRunes change:customKnacks change:customArcaneSpells change:customHolySpells", - function () { + function (eventInfo) { const classData = { bard: [ @@ -2602,7 +2583,15 @@ function (values) { const charClass = values.class.toLowerCase(); const charKindred = values.kindred.toLowerCase(); - const level = values.sheetTab === "character" ? parseInt(values.level, 10) : Math.ceil(values.monsterHitDice); + const characterLevel = parseInt(values.level, 10) || 0; + const monsterLevel = Math.ceil(parseFloat(values.monsterHitDice)) || 0; + const level = eventInfo.sourceAttribute === "monsterHitDice" + ? monsterLevel + : eventInfo.sourceAttribute === "level" + ? characterLevel + : values.sheetTab === "character" + ? characterLevel + : monsterLevel; const kindredData = { breggle: { @@ -2820,6 +2809,12 @@ holySpellsLevel5Total: newAttributes.holySpells[4], } } + + newAttributes = { + ...newAttributes, + level, + monsterHitDice: level, + }; setAttrs(newAttributes); updateWeaponBonuses(); @@ -2865,6 +2860,7 @@ const isOverloaded = (type === "slots" && total > maxLoad && maxLoad !== 0) ? "1" : "0"; + console.log("Encumbrance Check:", { type, pp, gp, sp, cp, maxLoad, total, isOverloaded }); setAttrs({ coinsOverloaded: isOverloaded }); }); });