From fe0e889c02b2d98a130ca692f717dcce620f5f00 Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sat, 8 Jun 2024 23:00:53 -0500 Subject: [PATCH] add create pit --- src/module/powers/createPit.js | 109 +++++++++++++++++++++++++++++++++ src/module/powers/powers.js | 2 + 2 files changed, 111 insertions(+) create mode 100644 src/module/powers/createPit.js diff --git a/src/module/powers/createPit.js b/src/module/powers/createPit.js new file mode 100644 index 0000000..3fc141f --- /dev/null +++ b/src/module/powers/createPit.js @@ -0,0 +1,109 @@ +import { PowerEffect } from './basePowers.js'; + +export class CreatePitEffect extends PowerEffect { + get name() { + return 'Create Pit'; + } + + get duration() { + return 5; + } + + get icon() { + return 'icons/environment/traps/spike-skull-white-brown.webp'; + } + + get isTargeted() { + return false; + } + + get basePowerPoints() { + return 2; + } + + get usePrimaryEffect() { + return false; + } + + get modifiers() { + return [ + ...super.modifiers, + { + name: 'Soft Ground', + id: 'soft', + type: 'checkbox', + default: false, + value: 1, + epic: false, + effect: false, + }, + { + name: 'Spiked', + id: 'spiked', + type: 'checkbox', + default: false, + value: 1, + epic: false, + effect: false, + }, + { + name: 'Deep', + id: 'deep', + type: 'checkbox', + default: false, + value: 2, + epic: false, + effect: false, + }, + ]; + } + + get damage() { + let dice = 2; + let mod = 2; + if (this.data.deep) { + dice += 2; + mod = 4; + } + if (this.data.spiked) { + dice += 1; + } + return { dice, mod }; + } + + get description() { + let text = super.description; + const deep = this.data.deep ? '8" (16 yards)' : '4" (8 yards)'; + const damage = this.damage; + text += `

An extradimension pit appears as a hole the size of an MBT, + ${deep} deep. + `; + if (this.data.spiked) { + text += 'The bottom is covered in spikes.'; + } + text += `

+

Anyone in or adjacent to the area must make an Evasion roll + ${this.data.raise ? '(at -2 from the raise)' : ''} or fall in. + `; + if (this.data.soft) { + text += 'The bottom is soft and does no damage.'; + } else { + text += `Those who fall in take ${damage.dice}d6+${damage.mod} damage.`; + } + return text; + } + + get maintEffectButtons() { + const damage = this.damage; + const buttons = super.maintEffectButtons; + if (!this.data.soft) { + buttons.push({ + label: `Falling Damage (${damage.dice}d6+${damage.mod})`, + type: 'damage', + flavor: `Falling Damage${this.data.spiked ? ' with spikes!' : ''}`, + formula: `${damage.dice}d6x+${damage.mod}`, + }); + } + return buttons; + } +} diff --git a/src/module/powers/powers.js b/src/module/powers/powers.js index 3674865..db6a76a 100644 --- a/src/module/powers/powers.js +++ b/src/module/powers/powers.js @@ -13,6 +13,7 @@ import { BoostLowerTraitEffect } from './boostLowerTrait.js'; import { BurstEffect } from './burst.js'; import { ConfusionEffect } from './confusion.js'; import { ConjureItemEffect } from './conjureItem.js'; +import { CreatePitEffect } from './createPit'; import { CurseEffect } from './curse.js'; import { DamageFieldEffect } from './damageField.js'; import { DarksightEffect } from './darksight.js'; @@ -82,6 +83,7 @@ const PowerClasses = { 'conceal-arcana': DetectConcealArcanaEffect, confusion: ConfusionEffect, 'conjure-item': ConjureItemEffect, + 'create-pit': CreatePitEffect, curse: CurseEffect, 'damage-field': DamageFieldEffect, darkness: LightDarknessEffect,