diff --git a/module/applications/dialogs/damageDialog.mjs b/module/applications/dialogs/damageDialog.mjs index 0d98ce24..21b2c0ad 100644 --- a/module/applications/dialogs/damageDialog.mjs +++ b/module/applications/dialogs/damageDialog.mjs @@ -6,7 +6,6 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application this.roll = roll; this.config = config; - this.originalIsCritical = config.isCritical; this.selectedEffects = this.config.bonusEffects; } @@ -123,16 +122,6 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application static async submitRoll() { 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 = this.originalIsCritical; - - /* If a critical has been forced in the Dialog, save that forced state to the damage roll */ - if (this.config.isCritical && !this.originalIsCritical) { - damageFormula.roll.options.isCritical = true; - for (const formula of resourceFormulas) - formula.roll.options.isCritical = true; - } - this.config.damageFormula = damageFormula; this.config.resourceFormulas = resourceFormulas; await this.close({ submitted: true }); diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index e0517abe..5779bd00 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -1,7 +1,6 @@ import { ResourceUpdateMap } from '../../data/action/baseAction.mjs'; import { ChatDamageData } from '../../data/chat-message/chatDamageData.mjs'; import { MemberData } from '../../data/tagTeamData.mjs'; -import DamageRoll from '../../dice/damageRoll.mjs'; import { getCritDamageBonus, shouldUseHopeFearAutomation } from '../../helpers/utils.mjs'; import { emitGMUpdate, GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs'; import PartySheet from '../sheets/actors/party.mjs'; @@ -238,10 +237,6 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio const selectedRoll = Object.values(this.party.system.tagTeam.members).find(member => member.selected); const critSelected = !selectedRoll ? undefined : (selectedRoll?.roll?.isCritical ?? false); - const isCritical = critSelected || (critSelected === undefined && data.roll?.isCritical); - if (data.damageRollData.main) { - data.damageRollData.main.options.isCritical = isCritical; - } return { ...data, @@ -253,7 +248,8 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio rollOptions, damageRollOptions, damage: data.damageRollData, - isCritical + critDamage: this.getCriticalDamage(data.damageRollData), + useCritDamage: critSelected || (critSelected === undefined && data.roll?.isCritical) }; } @@ -644,13 +640,17 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio secondaryRoll.damageRollData = baseSecondaryRoll.damageRollData ? ChatDamageData.fromJSON(JSON.stringify(baseSecondaryRoll.damageRollData)) : null; - if (secondaryRoll.damageRollData) { - const secondaryDamage = secondaryRoll.damageRollData; + const isCritical = overrideIsCritical ?? mainRoll.roll.isCritical; + if (isCritical) mainRoll.damageRollData = this.getCriticalDamage(mainRoll.damageRollData); + if (secondaryRoll.damageRollData) { + const secondaryDamage = (displayVersion ? overrideIsCritical : isCritical) + ? this.getCriticalDamage(secondaryRoll.damageRollData) + : secondaryRoll.damageRollData; if (mainRoll.damageRollData) { if (secondaryDamage.main) { if (mainRoll.damageRollData.main) { - mainRoll.damageRollData.main = DamageRoll.fromTerms([ + mainRoll.damageRollData.main = Roll.fromTerms([ ...baseMainRoll.damageRollData.main.terms, new foundry.dice.terms.OperatorTerm({ operator: '+' }), ...baseSecondaryRoll.damageRollData.main.terms @@ -672,7 +672,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio for (const [key, damage] of Object.entries(secondaryDamage.resources ?? {})) { if (key in mainRoll.damageRollData.resources) { - mainRoll.damageRollData.resources[key] = DamageRoll.fromTerms([ + mainRoll.damageRollData.resources[key] = Roll.fromTerms([ ...baseMainRoll.damageRollData.resources[key].terms, new foundry.dice.terms.OperatorTerm({ operator: '+' }), ...baseSecondaryRoll.damageRollData.resources[key].terms @@ -696,12 +696,6 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } } - if (mainRoll.damageRollData.main) { - const isCritical = overrideIsCritical ?? mainRoll.roll.isCritical; - mainRoll.damageRollData.main.options.isCritical = isCritical; - } - - return mainRoll; } catch (err) { console.error(err); @@ -761,11 +755,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio }; if (joinedRoll.damageRollData.main) { - systemData.damage.main = joinedRoll.damageRollData.main.toJSON(); - // isCritical is used internally in TagTeamDialog to force-flip damage from normal to critical and vice versa. - // It's deleted here to avoid interupting normal critical damage logic in the chatMessage. - // If someone explicitly set their own damage roll to be a forced critical, then I think it's fine that isn't transmitted to the final joined roll. - delete systemData.damage.main.options.isCritical; + systemData.damage.main = joinedRoll.damageRollData.toJSON(); } for (const type of Object.keys(joinedRoll.damageRollData?.resources ?? {})) { systemData.damage.resources[type] = joinedRoll.damageRollData.resources[type].toJSON(); diff --git a/module/data/chat-message/chatDamageData.mjs b/module/data/chat-message/chatDamageData.mjs index da28061f..404cda43 100644 --- a/module/data/chat-message/chatDamageData.mjs +++ b/module/data/chat-message/chatDamageData.mjs @@ -1,6 +1,4 @@ import { triggerChatRollFx } from '../../helpers/utils.mjs'; -import { MemberData } from '../tagTeamData.mjs'; -import DHActorRoll from './actorRoll.mjs'; export class ChatDamageData extends foundry.abstract.DataModel { constructor(data = {}, options = {}) { @@ -9,17 +7,6 @@ export class ChatDamageData extends foundry.abstract.DataModel { this._prepareRolls(); } - get isCritical() { - if (this.parent && this.parent instanceof MemberData) { - return this.parent.roll.isCritical; - } - if (this.parent && this.parent instanceof DHActorRoll && this.parent.parent) { - return Roll.fromJSON(this.parent.parent._source.rolls[0]).isCritical; - } - - return false; - } - static defineSchema() { const fields = foundry.data.fields; @@ -41,15 +28,7 @@ export class ChatDamageData extends foundry.abstract.DataModel { } _prepareRolls() { - this.main &&= Roll.fromData({ - ...this.main, - options: { - ...this.main.options, - isCritical: - this.main.options.isCritical === false ? false : (this.main.options.isCritical || this.isCritical) - } - }); - + this.main &&= Roll.fromData(this.main); for (const key of Object.keys(this.resources)) { this.resources[key] = Roll.fromData(this.resources[key]); } diff --git a/module/data/fields/action/damageField.mjs b/module/data/fields/action/damageField.mjs index 05d9f664..25b3ba97 100644 --- a/module/data/fields/action/damageField.mjs +++ b/module/data/fields/action/damageField.mjs @@ -107,7 +107,7 @@ export default class DamageField extends fields.SchemaField { if (configDamage.main) { const multiplier = config.actionActor?.system.rules?.attack?.damage?.hpDamageMultiplier ?? 1; const takenMultiplier = actor.system.rules?.attack?.damage?.hpDamageTakenMultiplier; - configDamage.main.total = Math.ceil(config.damage.main.total * multiplier * takenMultiplier); + configDamage.main.total = Math.ceil(configDamage.main.total * multiplier * takenMultiplier); } damagePromises.push( diff --git a/module/dice/damageRoll.mjs b/module/dice/damageRoll.mjs index 722b05f6..2ca04a06 100644 --- a/module/dice/damageRoll.mjs +++ b/module/dice/damageRoll.mjs @@ -8,7 +8,7 @@ export default class DamageRoll extends DHRoll { } get isCritical() { - return this.options.isCritical; + return true; } get modifierTotal() { @@ -16,11 +16,6 @@ export default class DamageRoll extends DHRoll { return super.modifierTotal + criticalDamageBonus; } - get total() { - const criticalDamageBonus = this.isCritical ? getCritDamageBonus(this.terms) : 0; - return super.total + criticalDamageBonus; - } - static DefaultDialog = DamageDialog; static createRollInstance(config) { @@ -33,7 +28,7 @@ export default class DamageRoll extends DHRoll { const evaluateRoll = async roll => { await roll.roll.evaluate(); - roll.roll.options = { ...roll.roll.options, damageTypes: roll.damageTypes ? [...roll.damageTypes] : [] }; + roll.roll.options = { damageTypes: roll.damageTypes ? [...roll.damageTypes] : [] }; return roll.roll; } @@ -41,10 +36,8 @@ export default class DamageRoll extends DHRoll { if (config.damageFormula) { config.damage.main = await evaluateRoll(config.damageFormula); - config.damage.main.options = { - ...config.damage.main.options, - damageTypes: - config.damageFormula.damageTypes ? [...config.damageFormula.damageTypes] : [] + config.damage.main.options = { damageTypes: + config.damageFormula.damageTypes ? [...config.damageFormula.damageTypes] : [] }; } diff --git a/styles/less/dialog/tag-team-dialog/sheet.less b/styles/less/dialog/tag-team-dialog/sheet.less index 3a6778d8..82bc0270 100644 --- a/styles/less/dialog/tag-team-dialog/sheet.less +++ b/styles/less/dialog/tag-team-dialog/sheet.less @@ -252,8 +252,11 @@ width: 100%; text-align: center; - .damage-info { - text-decoration: underline; + .result-info { + display: flex; + gap: 4px; + align-items: center; + justify-content: center; } } } diff --git a/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs b/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs index 4727d7e8..e8bec150 100644 --- a/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs +++ b/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs @@ -1,5 +1,5 @@ {{#if damage.main}} - {{> damage roll=damage.main label=(localize "DAGGERHEART.GENERAL.damage") memberKey=key isCritical=isCritical}} + {{> damage roll=damage.main label=(localize "DAGGERHEART.GENERAL.damage") memberKey=key}} {{/if}} {{#each damage.resources as |roll key|}} diff --git a/templates/dialogs/tagTeamDialog/result.hbs b/templates/dialogs/tagTeamDialog/result.hbs index 4351823e..88f579a6 100644 --- a/templates/dialogs/tagTeamDialog/result.hbs +++ b/templates/dialogs/tagTeamDialog/result.hbs @@ -6,14 +6,23 @@ {{#if hintText}}
{{localize hintText}}
{{else}} + {{#if joinedRoll.rollData}} +
+ {{localize "DAGGERHEART.GENERAL.dualityRoll"}} +
+
{{joinedRoll.rollData.total}}
+
{{localize "DAGGERHEART.GENERAL.withThing" thing=joinedRoll.roll.totalLabel}}
+
+
+ {{/if}} {{#if joinedRoll.damageRollData}}
-
{{joinedRoll.rollData.total}} {{localize "DAGGERHEART.GENERAL.withThing" thing=joinedRoll.roll.totalLabel}}
- {{#if joinedRoll.damageRollData.main}} - {{> damageSummary roll=joinedRoll.damageRollData.main label=(localize "DAGGERHEART.GENERAL.damage")}} - {{/if}} - {{#each joinedRoll.damageRollData.resources as |roll key|}} - {{> damageSummary roll=roll label=(localize (concat "DAGGERHEART.CONFIG.HealingType." key ".name"))}} + {{localize "DAGGERHEART.GENERAL.damage"}} + {{#each joinedRoll.damageRollData.types as |damage key|}} +
+
{{localize (concat "DAGGERHEART.CONFIG.HealingType." key ".name")}}
+
{{damage.total}}
+
{{/each}}
{{/if}} @@ -29,8 +38,4 @@ - - -{{#*inline "damageSummary"}} -
{{label}} {{roll.total}}
-{{/inline}} \ No newline at end of file + \ No newline at end of file diff --git a/templates/dialogs/tagTeamDialog/tagTeamMember.hbs b/templates/dialogs/tagTeamDialog/tagTeamMember.hbs index 079a2a6f..7758979b 100644 --- a/templates/dialogs/tagTeamDialog/tagTeamMember.hbs +++ b/templates/dialogs/tagTeamDialog/tagTeamMember.hbs @@ -109,7 +109,11 @@ {{#if damage.active}} - {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=damage isCritical=isCritical }} + {{#if useCritDamage}} + {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=critDamage isCritical=true }} + {{else}} + {{> "systems/daggerheart/templates/dialogs/tagTeamDialog/parts/tagTeamDamageParts.hbs" damage=damage }} + {{/if}} {{else}} {{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.makeYourRoll"}} {{/if}}