diff --git a/module/applications/dialogs/damageDialog.mjs b/module/applications/dialogs/damageDialog.mjs index 21b2c0ad..46bfde76 100644 --- a/module/applications/dialogs/damageDialog.mjs +++ b/module/applications/dialogs/damageDialog.mjs @@ -121,7 +121,14 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application } static async submitRoll() { + const isCritical = this.config.isCritical; const { damageFormula, resourceFormulas } = this.roll.constructFormulas({ ...this.config, isCritical: false }); + /* Sideeffect occuring in constructFormulas that sets this.config.isCritical to the false value. Can remove the below if it can be prevented */ + this.config.isCritical = isCritical; + damageFormula.roll.options.isCritical = isCritical; + for (const formula of resourceFormulas) + formula.roll.options.isCritical = isCritical; + this.config.damageFormula = damageFormula; this.config.resourceFormulas = resourceFormulas; await this.close({ submitted: true }); diff --git a/module/data/chat-message/chatDamageData.mjs b/module/data/chat-message/chatDamageData.mjs index 231c03f2..f2bb8285 100644 --- a/module/data/chat-message/chatDamageData.mjs +++ b/module/data/chat-message/chatDamageData.mjs @@ -8,6 +8,8 @@ export class ChatDamageData extends foundry.abstract.DataModel { } get isCritical() { + if (!this.parent?.parent) return false; + const roll = Roll.fromJSON(this.parent.parent._source.rolls[0]); return roll.isCritical; } @@ -33,7 +35,14 @@ export class ChatDamageData extends foundry.abstract.DataModel { } _prepareRolls() { - this.main &&= Roll.fromData({ ...this.main, options: { ...this.main.options, isCritical: this.isCritical } }); + this.main &&= Roll.fromData({ + ...this.main, + options: { + ...this.main.options, + isCritical: this.main.options.isCritical || this.isCritical + } + }); + for (const key of Object.keys(this.resources)) { this.resources[key] = Roll.fromData(this.resources[key]); } diff --git a/module/dice/damageRoll.mjs b/module/dice/damageRoll.mjs index 3e99865d..722b05f6 100644 --- a/module/dice/damageRoll.mjs +++ b/module/dice/damageRoll.mjs @@ -33,7 +33,7 @@ export default class DamageRoll extends DHRoll { const evaluateRoll = async roll => { await roll.roll.evaluate(); - roll.roll.options = { damageTypes: roll.damageTypes ? [...roll.damageTypes] : [] }; + roll.roll.options = { ...roll.roll.options, damageTypes: roll.damageTypes ? [...roll.damageTypes] : [] }; return roll.roll; } @@ -41,8 +41,10 @@ export default class DamageRoll extends DHRoll { if (config.damageFormula) { config.damage.main = await evaluateRoll(config.damageFormula); - config.damage.main.options = { damageTypes: - config.damageFormula.damageTypes ? [...config.damageFormula.damageTypes] : [] + config.damage.main.options = { + ...config.damage.main.options, + damageTypes: + config.damageFormula.damageTypes ? [...config.damageFormula.damageTypes] : [] }; }