diff --git a/daggerheart.mjs b/daggerheart.mjs index b92be2a2..11e93696 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -38,6 +38,8 @@ CONFIG.RegionBehavior.dataModels = { }; Object.assign(CONFIG.Dice.termTypes, dice.diceTypes); +CONFIG.Dice.terms.d = dice.BaseDie; +CONFIG.Dice.types = [dice.BaseDie, CONFIG.Dice.terms.f]; CONFIG.Actor.documentClass = documents.DhpActor; CONFIG.Actor.dataModels = models.actors.config; diff --git a/module/dice/_module.mjs b/module/dice/_module.mjs index e1206f82..6a5724bd 100644 --- a/module/dice/_module.mjs +++ b/module/dice/_module.mjs @@ -4,4 +4,5 @@ export { default as DamageRoll } from './damageRoll.mjs'; export { default as DHRoll } from './dhRoll.mjs'; export { default as DualityRoll } from './dualityRoll.mjs'; export { default as FateRoll } from './fateRoll.mjs'; +export { BaseDie } from './die/_module.mjs'; export { diceTypes } from './die/_module.mjs'; diff --git a/module/dice/die/_module.mjs b/module/dice/die/_module.mjs index 19ca951a..b84cef86 100644 --- a/module/dice/die/_module.mjs +++ b/module/dice/die/_module.mjs @@ -3,6 +3,7 @@ import HopeDie from './hopeDie.mjs'; import FearDie from './fearDie.mjs'; import AdvantageDie from './advantageDie.mjs'; import DisadvantageDie from './disadvantageDie.mjs'; +export { default as BaseDie } from './baseDie.mjs'; export const diceTypes = { DualityDie, diff --git a/module/dice/die/advantageDie.mjs b/module/dice/die/advantageDie.mjs index 9c2f0b03..66b6f124 100644 --- a/module/dice/die/advantageDie.mjs +++ b/module/dice/die/advantageDie.mjs @@ -1,4 +1,6 @@ -export default class AdvantageDie extends foundry.dice.terms.Die { +import BaseDie from './baseDie.mjs'; + +export default class AdvantageDie extends BaseDie { constructor(options) { super(options); diff --git a/module/dice/die/baseDie.mjs b/module/dice/die/baseDie.mjs new file mode 100644 index 00000000..a14814e4 --- /dev/null +++ b/module/dice/die/baseDie.mjs @@ -0,0 +1,31 @@ +import { adjustDice } from '../../helpers/utils.mjs'; + +export default class BaseDie extends foundry.dice.terms.Die { + static MODIFIERS = { + ...foundry.dice.terms.Die.MODIFIERS, + c: 'comboDice' + }; + + async comboDice(modifier) { + /* ComboDice only works with exactly two dice and both have to be the same denomination */ + if (this.number !== 2) return false; + + const maxIncreasesDiceSize = modifier.endsWith('1'); + return this.continueCombo(maxIncreasesDiceSize); + } + + async continueCombo(maxIncreasesDiceSize) { + const lastIndex = this.results.length - 1; + + /* The Combo only continues if the latest roll was higher than the previous */ + if (this.results[lastIndex].result <= this.results[lastIndex - 1].result) return false; + + const increaseDiceSize = maxIncreasesDiceSize && this.results[lastIndex].result === this.faces; + const denomination = increaseDiceSize ? adjustDice(this.denomination, false) : this.denomination; + const newRoll = await (new Roll(`1${denomination}`)).evaluate(); + this.results.push({ result: newRoll.total, active: true }); + this.number += 1; + + return this.continueCombo(); + } +} \ No newline at end of file diff --git a/module/dice/die/disadvantageDie.mjs b/module/dice/die/disadvantageDie.mjs index f56ebe96..e79845f3 100644 --- a/module/dice/die/disadvantageDie.mjs +++ b/module/dice/die/disadvantageDie.mjs @@ -1,4 +1,6 @@ -export default class DisadvantageDie extends foundry.dice.terms.Die { +import BaseDie from './baseDie.mjs'; + +export default class DisadvantageDie extends BaseDie { constructor(options) { super(options); diff --git a/module/dice/die/dualityDie.mjs b/module/dice/die/dualityDie.mjs index cc7ee75e..1e51e851 100644 --- a/module/dice/die/dualityDie.mjs +++ b/module/dice/die/dualityDie.mjs @@ -1,6 +1,7 @@ import { updateResourcesForDualityReroll } from '../helpers.mjs'; +import BaseDie from './baseDie.mjs'; -export default class DualityDie extends foundry.dice.terms.Die { +export default class DualityDie extends BaseDie { constructor(options) { super(options);