From cb19e1d96f25402f58249626fa118109d12afc0e Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Wed, 1 Apr 2026 02:32:36 -0400 Subject: [PATCH] Add toggle for critical damage --- lang/en.json | 1 + module/applications/dialogs/damageDialog.mjs | 7 ++++++ module/dice/damageRoll.mjs | 5 ++++ .../less/dialog/damage-selection/sheet.less | 24 +++++++++++++++++++ .../dialogs/dice-roll/damageSelection.hbs | 6 ++++- templates/ui/chat/parts/damage-part.hbs | 10 +++++++- 6 files changed, 51 insertions(+), 2 deletions(-) diff --git a/lang/en.json b/lang/en.json index d4c81546..9bcf02b5 100755 --- a/lang/en.json +++ b/lang/en.json @@ -55,6 +55,7 @@ }, "damage": { "name": "Damage", + "critical": "Damage (Critical)", "tooltip": "Direct damage without a roll." }, "effect": { diff --git a/module/applications/dialogs/damageDialog.mjs b/module/applications/dialogs/damageDialog.mjs index d00a744d..97f1c538 100644 --- a/module/applications/dialogs/damageDialog.mjs +++ b/module/applications/dialogs/damageDialog.mjs @@ -22,6 +22,7 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application }, actions: { toggleSelectedEffect: this.toggleSelectedEffect, + toggleCritical: this.toggleCritical, submitRoll: this.submitRoll }, form: { @@ -53,6 +54,7 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application context.hasHealing = this.config.hasHealing; context.directDamage = this.config.directDamage; context.selectedMessageMode = this.config.selectedMessageMode; + context.isCritical = this.config.isCritical; context.rollModes = Object.entries(CONFIG.ChatMessage.modes).map(([action, { label, icon }]) => ({ action, label, @@ -74,6 +76,11 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application this.render(); } + static toggleCritical() { + this.config.isCritical = !this.config.isCritical; + this.render(); + } + static toggleSelectedEffect(_event, button) { this.selectedEffects[button.dataset.key].selected = !this.selectedEffects[button.dataset.key].selected; this.render(); diff --git a/module/dice/damageRoll.mjs b/module/dice/damageRoll.mjs index bb9e31c7..1d680a1b 100644 --- a/module/dice/damageRoll.mjs +++ b/module/dice/damageRoll.mjs @@ -7,6 +7,10 @@ export default class DamageRoll extends DHRoll { super(formula, data, options); } + get isCritical() { + return !!this.options.isCritical; + } + static DefaultDialog = DamageDialog; static async buildEvaluate(roll, config = {}, message = {}) { @@ -138,6 +142,7 @@ export default class DamageRoll extends DHRoll { } constructFormula(config) { + this.options.isCritical = config.isCritical; for (const [index, part] of this.options.roll.entries()) { part.roll = new Roll(Roll.replaceFormulaData(part.formula, config.data)); part.roll.terms = Roll.parse(part.roll.formula, config.data); diff --git a/styles/less/dialog/damage-selection/sheet.less b/styles/less/dialog/damage-selection/sheet.less index 461fb0b5..0f765748 100644 --- a/styles/less/dialog/damage-selection/sheet.less +++ b/styles/less/dialog/damage-selection/sheet.less @@ -17,6 +17,30 @@ } } + .bonuses { + gap: 4px; + .critical-chip { + flex: 0; + + display: flex; + align-items: center; + border-radius: 5px; + width: fit-content; + gap: 5px; + cursor: pointer; + padding: 5px; + transition: all 0.3s ease; + + background: @green-10; + color: @green; + + &.selected { + color: @beige; + background: @gradient-green; + } + } + } + .damage-section-controls { display: flex; align-items: center; diff --git a/templates/dialogs/dice-roll/damageSelection.hbs b/templates/dialogs/dice-roll/damageSelection.hbs index a5add3a4..b2d1a895 100644 --- a/templates/dialogs/dice-roll/damageSelection.hbs +++ b/templates/dialogs/dice-roll/damageSelection.hbs @@ -34,8 +34,12 @@ {{/unless}} -
+
+
{{/each}} {{#unless (empty @root.modifiers)}} diff --git a/templates/ui/chat/parts/damage-part.hbs b/templates/ui/chat/parts/damage-part.hbs index 7c72c92c..02519a86 100644 --- a/templates/ui/chat/parts/damage-part.hbs +++ b/templates/ui/chat/parts/damage-part.hbs @@ -1,5 +1,13 @@
-
{{localize (ifThen hasHealing "DAGGERHEART.ACTIONS.TYPES.healing.name" "DAGGERHEART.ACTIONS.TYPES.damage.name")}}
+
+
+ {{#if hasHealing}} + {{localize "DAGGERHEART.ACTIONS.TYPES.healing.name"}} + {{else}} + {{localize (ifThen roll.isCritical "DAGGERHEART.ACTIONS.TYPES.damage.critical" "DAGGERHEART.ACTIONS.TYPES.damage.name")}} + {{/if}} +
+
{{#each damage as | roll index | }}