// SPDX-FileCopyrightText: 2021 Johannes Loher // SPDX-FileCopyrightText: 2021 Oliver Rümpelein // // SPDX-License-Identifier: MIT import { DS4Check } from "./check"; export default function registerSlayingDiceModifier(): void { DicePool.MODIFIERS.x = slay; DicePool.POOL_REGEX = /^{([^}]+)}([A-z]([A-z0-9<=>]+)?)?$/; } function slay(this: DicePool, modifier: string): void { const rgx = /[xX]/; const match = modifier.match(rgx); if (!match || !this.rolls) return; let checked = 0; while (checked < (this.dice.length ?? 0)) { const diceTerm = this.dice[checked]; checked++; if (diceTerm instanceof DS4Check && diceTerm.coup) { const formula = `dsv${diceTerm.checkTargetNumber}c${diceTerm.maximumCoupResult}:${diceTerm.minimumFumbleResult}n`; const additionalRoll = Roll.create(formula).evaluate(); this.rolls.push(additionalRoll); this.results.push({ result: additionalRoll.total ?? 0, active: true }); } if (checked > 1000) throw new Error(game.i18n.localize("DS4.ErrorSlayingDiceRecursionLimitExceeded")); } }