diff --git a/src/module/powers/blind.js b/src/module/powers/blind.js index 60b7167..1c0b7f5 100644 --- a/src/module/powers/blind.js +++ b/src/module/powers/blind.js @@ -48,6 +48,23 @@ export class BlindEffect extends PowerEffect { ); } + get primaryEffectButtons() { + const buttons = super.primaryEffectButtons; + const mods = []; + if (this.data.strong) { + mods.push({ label: 'Strong', value: -2 }); + } + buttons.push({ + label: `Shake off (Vigor${this.data.strong ? ' -2' : ''})`, + type: 'trait', + rollType: 'attribute', + rollDesc: 'Vigor', + flavor: 'Success shakes off one level, Raise shakes off two', + mods, + }); + return buttons; + } + async createSecondaryEffects(maintId) { const docs = await super.createSecondaryEffects(maintId); if (this.data.raise) { diff --git a/src/module/powers/boostLowerTrait.js b/src/module/powers/boostLowerTrait.js index 33a4cb9..63d5592 100644 --- a/src/module/powers/boostLowerTrait.js +++ b/src/module/powers/boostLowerTrait.js @@ -118,6 +118,25 @@ export class BoostLowerTraitEffect extends PowerEffect { return desc; } + get primaryEffectButtons() { + const buttons = super.primaryEffectButtons; + if (this.data.direction === 'Lower') { + const mods = []; + if (this.data.strong) { + mods.push({ label: 'Strong', value: -2 }); + } + buttons.push({ + label: `Shake off (Spirit${this.data.strong ? ' -2' : ''})`, + type: 'trait', + rollType: 'attribute', + rollDesc: 'Spirit', + flavor: 'Success shakes off one level, Raise shakes off two', + mods, + }); + } + return buttons; + } + get modifiers() { const mods = super.modifiers; let traitOptions = ['Agility', 'Smarts', 'Spirit', 'Strength', 'Vigor']; diff --git a/src/module/powers/powers.js b/src/module/powers/powers.js index 9fcf4a1..2a4dd02 100644 --- a/src/module/powers/powers.js +++ b/src/module/powers/powers.js @@ -47,6 +47,7 @@ import { PuppetEffect } from './puppet.js'; import { ReliefEffect } from './relief.js'; import { ResurrectionEffect } from './resurrection.js'; import { SanctuaryEffect } from './sanctuary.js'; +import { ScryingEffect } from './scrying.js'; const PowerClasses = { 'arcane-protection': ArcaneProtectionEffect, @@ -107,6 +108,7 @@ const PowerClasses = { relief: ReliefEffect, resurrection: ResurrectionEffect, sanctuary: SanctuaryEffect, + scrying: ScryingEffect, shrink: GrowthShrinkEffect, }; diff --git a/src/module/powers/scrying.js b/src/module/powers/scrying.js new file mode 100644 index 0000000..4d6d44a --- /dev/null +++ b/src/module/powers/scrying.js @@ -0,0 +1,47 @@ +import { PowerEffect } from './basePowers.js'; + +export class ScryingEffect extends PowerEffect { + get name() { + return 'Scrying'; + } + + get basePowerPoints() { + return 3; + } + + get duration() { + return 5; + } + + get icon() { + return 'icons/magic/perception/orb-crystal-ball-scrying.webp'; + } + + get modifiers() { + const mods = super.modifiers; + mods.push({ + name: 'Group Sight', + id: 'group', + value: 2, + type: 'checkbox', + default: false, + epic: false, + effect: false, + }); + return mods; + } + + get description() { + let text = super.description; + text += `
Opposed by the subject's spirit. If the target wins, he knows + he is being spied upon. If the caster wins, he can see and hear the target + and the area around it. With a raise, he can move his perspective as well. +
${this.data.group ? 'The caster may share perception with nearby allies.
' : ''} + `; + return text; + } + + get effectName() { + return `${this.name}${this.data.group ? ' (Group Sight)' : ''}`; + } +}