diff --git a/lang/en.json b/lang/en.json index d466b0fc..61498321 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1546,7 +1546,8 @@ "Range": "Range", "Damage": { "Title": "Damage", - "Value": "Value", + "Die": "Die", + "Bonus": "Bonus", "Type": "Type" }, "Burden": "Burden", diff --git a/module/applications/roll.mjs b/module/applications/roll.mjs index e2a490a0..36188ad8 100644 --- a/module/applications/roll.mjs +++ b/module/applications/roll.mjs @@ -123,6 +123,18 @@ export class DHRoll extends Roll { } return (this._formula = this.constructor.getFormula(this.terms)); } + + static calculateTotalModifiers(roll, config) { + config.roll.modifierTotal = 0; + for (let i = 0; i < roll.terms.length; i++) { + if ( + roll.terms[i] instanceof foundry.dice.terms.NumericTerm && + !!roll.terms[i - 1] && + roll.terms[i - 1] instanceof foundry.dice.terms.OperatorTerm + ) + config.roll.modifierTotal += Number(`${roll.terms[i - 1].operator}${roll.terms[i].total}`); + } + } } export class DualityDie extends foundry.dice.terms.Die { @@ -298,15 +310,8 @@ export class D20Roll extends DHRoll { value: d.total }; }); - config.roll.modifierTotal = 0; - for (let i = 0; i < roll.terms.length; i++) { - if ( - roll.terms[i] instanceof foundry.dice.terms.NumericTerm && - !!roll.terms[i - 1] && - roll.terms[i - 1] instanceof foundry.dice.terms.OperatorTerm - ) - config.roll.modifierTotal += Number(`${roll.terms[i - 1].operator}${roll.terms[i].total}`); - } + + this.calculateTotalModifiers(roll, config); } resetFormula() { @@ -464,17 +469,10 @@ export class DamageRoll extends DHRoll { static DefaultDialog = DamageDialog; - static async getDamageModifiers(roll) { - const modifierFormula = roll.formula.replace(/[\d]+d[\d]+([a-zA-Z0-9.<>!=]*)?/g, '').replace(/\s*\+\s*/, ''); - const modifierRoll = new Roll(modifierFormula); - await modifierRoll.evaluate(); - return modifierRoll.total; - } - static async postEvaluate(roll, config = {}) { super.postEvaluate(roll, config); config.roll.type = config.type; - config.roll.modifierTotal = await this.getDamageModifiers(roll); + this.calculateTotalModifiers(roll, config); if (config.source?.message) { const chatMessage = ui.chat.collection.get(config.source.message); chatMessage.update({ 'system.damage': config }); diff --git a/module/data/action/action.mjs b/module/data/action/action.mjs index 411333a8..ddf4fb5c 100644 --- a/module/data/action/action.mjs +++ b/module/data/action/action.mjs @@ -621,43 +621,15 @@ export class DHAttackAction extends DHDamageAction { super.prepareData(); if (this.damage.includeBase && !!this.item?.system?.damage) { const baseDamage = this.getParentDamage(); - this.cleanBaseDamage(baseDamage); this.damage.parts.unshift(new DHDamageData(baseDamage)); } } - cleanBaseDamage(baseDamage) { - let possibleRoll = new Roll(baseDamage.value.dice); - let die = 'd6'; - let modifier = 0; - let nextOperator = '+'; - - possibleRoll.terms.forEach(term => { - if (term instanceof DiceTerm) { - die = `d${term._faces}`; - } - if (term instanceof OperatorTerm) { - nextOperator = term.operator; - } - if (term instanceof NumericTerm) { - if (nextOperator == '+') { - modifier += term.number; - } - - if (nextOperator == '-') { - modifier -= term.number; - } - } - }); - - return (baseDamage.value = { ...baseDamage.value, dice: die, bonus: modifier }); - } - getParentDamage() { return { value: { multiplier: 'prof', - dice: this.item?.system?.damage.value, + dice: this.item?.system?.damage.dice, bonus: this.item?.system?.damage.bonus ?? 0 }, type: this.item?.system?.damage.type, diff --git a/module/data/item/weapon.mjs b/module/data/item/weapon.mjs index 9154eb31..9c821160 100644 --- a/module/data/item/weapon.mjs +++ b/module/data/item/weapon.mjs @@ -32,6 +32,8 @@ export default class DHWeapon extends BaseDataItem { burden: new fields.StringField({ required: true, choices: SYSTEM.GENERAL.burden, initial: 'oneHanded' }), //DAMAGE damage: new fields.SchemaField({ + dice: new fields.StringField({ choices: SYSTEM.GENERAL.diceTypes, initial: 'd6' }), + bonus: new fields.NumberField({ nullable: true, initial: null }), value: new FormulaField({ initial: 'd6' }), type: new fields.StringField({ required: true, diff --git a/templates/sheets/items/weapon/header.hbs b/templates/sheets/items/weapon/header.hbs index 5d33c6ae..7a10bcc1 100644 --- a/templates/sheets/items/weapon/header.hbs +++ b/templates/sheets/items/weapon/header.hbs @@ -14,7 +14,8 @@ - {{localize (concat 'DAGGERHEART.Range.' source.system.range '.name')}} - - {{source.system.damage.value}} + {{log this}} + {{source.system.damage.dice}} + {{source.system.damage.bonus}} ({{localize (concat 'DAGGERHEART.DamageType.' source.system.damage.type '.abbreviation')}}) - {{localize (concat 'DAGGERHEART.Burden.' source.system.burden)}} diff --git a/templates/sheets/items/weapon/settings.hbs b/templates/sheets/items/weapon/settings.hbs index aaa5192b..b431f1dd 100644 --- a/templates/sheets/items/weapon/settings.hbs +++ b/templates/sheets/items/weapon/settings.hbs @@ -19,8 +19,10 @@