import { PowerEffect } from './basePowers.js'; export class DispelEffect extends PowerEffect { get name() { return 'Dispel'; } get icon() { return 'icons/magic/symbols/triangle-glowing-green.webp'; } get duration() { return this?.data?.antiMagic ? 5 : 0; } get usePrimaryEffect() { return !!this?.data?.antiMagic; } get basePowerPoints() { return 1; } get isTargeted() { return true; } get hasAoe() { return true; } get modifiers() { return [ ...super.modifiers, { name: 'Anti-Magic Field', type: 'checkbox', value: 8, id: 'antiMagic', epic: true, effect: false, }, { type: 'select', default: 'none', name: 'Area of Effect', id: 'aoe', epic: false, choices: { none: 'None', sbt: 'Small Blast Template', mbt: 'Medium Blast Template', lbt: 'Large Blast Template', }, effects: { none: null, sbt: null, mbt: null, lbt: null }, values: { none: 0, sbt: 1, mbt: 2, lbt: 3 }, }, { name: 'Disenchant', type: 'checkbox', value: 1, id: 'disenchant', epic: true, effect: false, }, { name: 'Multiple Powers', type: 'checkbox', value: 8, id: 'multiple', epic: false, effect: false, }, { name: 'Remove Curse', type: 'checkbox', value: 2, id: 'removeCurse', epic: true, effect: false, }, ]; } get effectName() { return this.data.antiMagic ? 'Anti-Magic Field' : super.effectName; } getPrimaryEffectChanges() { if (this.data.antiMagic) { const base = 'flags.swade.auras.antiMagicField'; const priority = 0; const mode = foundry.CONST.ACTIVE_EFFECT_MODES.OVERRIDE; return [ { key: `${base}.enabled`, value: true, priority, mode }, { key: `${base}.walls`, value: true, priority, mode }, { key: `${base}.color`, value: '#ff00cc', priority, mode }, { key: `${base}.alpha`, value: 0.1, priority, mode }, { key: `${base}.radius`, value: 1.5, priority, mode }, { key: `${base}.visibleTo`, value: [-1, 0, 1], priority, mode }, ]; } return super.getPrimaryEffectChanges(); } get description() { let text = super.description; if (this.data.antiMagic) { text += `
Magic items, effects, and powers within the anti magic field have no effect. Summoned creatures must make a Spirit roll each round or or take a wound.
`; return text; } const multi = this.data.multiple || this.data.aoe; const affected = `${multi ? 'all' : 'a single'} ${this.data.disenchant ? 'magic item' : 'power'}${multi ? 's' : ''} ${this.data.aoe === 'none' ? 'cast by or on the recipient' : 'within a ' + this.data.aoe.toUpperCase()}`; text += `Attempt to dispel ${affected}. `; if (this.data.disenchant) { text += `The item(s) magical abilities are negated for ${this.data.raise ? 'two rounds' : 'one round'}`; } else { text += `Each target must make an opposed arcane skill (spirit for Mystic Powers) roll or have the power(s) end immediately.`; } if (this.data.removeCurse) { text += `The normal -2 penalty to remove a curse is ignored.`; } else { text += `If the effect is a Curse, there is a -2 penalty to the dispeller's roll`; } text += '
'; return text; } }