diff --git a/src/module/powers/basePowers.js b/src/module/powers/basePowers.js index 558bbf5..4f0dcf9 100644 --- a/src/module/powers/basePowers.js +++ b/src/module/powers/basePowers.js @@ -607,7 +607,7 @@ export class PowerEffect { } async apply() { - const maintId = randomID(); + const maintId = foundry.utils.randomID(); const secondaryDocs = await this.createSecondaryEffects(maintId); const primaryDoc = await this.createPrimaryEffect(maintId); const maintainDoc = await this.createMaintainEffect(maintId); @@ -873,7 +873,7 @@ export class ActorFolderEffect extends PowerEffect { async parseValues() { await super.parseValues(); - this.data.maintId = randomID(); + this.data.maintId = foundry.utils.randomID(); this.targetActor = await game.actors.get(this.data.actorId); this.targetTokenDoc = await this.targetActor.getTokenDocument(); const sourceUpdates = { diff --git a/src/module/powers/powers.js b/src/module/powers/powers.js index 7b0b215..c0d2f62 100644 --- a/src/module/powers/powers.js +++ b/src/module/powers/powers.js @@ -59,6 +59,7 @@ import { StunEffect } from './stun.js'; import { SummonAllyEffect } from './summon.js'; import { TelekinesisEffect } from './telekinesis.js'; import { TeleportEffect } from './teleport.js'; +import { TimeStopEffect } from './timeStop.js'; const PowerClasses = { 'arcane-protection': ArcaneProtectionEffect, @@ -138,6 +139,7 @@ const PowerClasses = { 'summon-ally': SummonAllyEffect, telekinesis: TelekinesisEffect, teleport: TeleportEffect, + 'time-stop': TimeStopEffect, }; /* ---------------------------------------------------------------- */ diff --git a/src/module/powers/timeStop.js b/src/module/powers/timeStop.js new file mode 100644 index 0000000..27bf147 --- /dev/null +++ b/src/module/powers/timeStop.js @@ -0,0 +1,42 @@ +import { PowerEffect } from './basePowers.js'; + +export class TimeStopEffect extends PowerEffect { + get name() { + return 'Time Stop'; + } + + get icon() { + return 'icons/magic/time/hourglass-tilted-gray.webp'; + } + + get duration() { + return 0; + } + + get isTargeted() { + return false; + } + + get isRaisable() { + return true; + } + + get basePowerPoints() { + return 10; + } + + get description() { + let desc = super.description; + desc += `
Stop time for all but the caster, granting [[/r 1d4+1]] new turns + immediately after this one. During these turns the caster may act as normal + on their current Action Card. + `; + if (this.data.raise) { + desc += `With the raise, the caster may choose to draw a new Action Card each turn. + `; + } + desc += `
Time stop ends if any of the caster's action affect + another character or creature.
`; + return desc; + } +}