add object reading, planar binding, plane shift
This commit is contained in:
parent
1cd4a08990
commit
f80e551835
66
src/module/powers/objectReading.js
Normal file
66
src/module/powers/objectReading.js
Normal file
@ -0,0 +1,66 @@
|
||||
import { PowerEffect } from './basePowers.js';
|
||||
|
||||
export class ObjectReadingEffect extends PowerEffect {
|
||||
get name() {
|
||||
return 'Object Reading';
|
||||
}
|
||||
|
||||
get icon() {
|
||||
return 'icons/skills/trades/academics-investigation-study-blue.webp';
|
||||
}
|
||||
|
||||
get duration() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
get isTargeted() {
|
||||
return false;
|
||||
}
|
||||
|
||||
get basePowerPoints() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
get usePrimaryEffect() {
|
||||
return false;
|
||||
}
|
||||
|
||||
get isRaisable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get modifiers() {
|
||||
return [
|
||||
...super.modifiers,
|
||||
{
|
||||
type: 'checkbox',
|
||||
default: false,
|
||||
name: 'Projection',
|
||||
value: 2,
|
||||
epic: true,
|
||||
effect: false,
|
||||
id: 'projection',
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
get description() {
|
||||
let text = super.description;
|
||||
text += `<p>Get visions of the past from an object.
|
||||
`;
|
||||
if (this.data.raise) {
|
||||
text += `With a raise, the object yields specific and more actionable
|
||||
information related to the caster's investigation.`;
|
||||
} else {
|
||||
text += `On success, the caster gets a vague impression of whatever
|
||||
information they're looking for.`;
|
||||
}
|
||||
text += '</p>';
|
||||
if (this.data.projection) {
|
||||
text += `<p>The caster projects the vision out into a space the size of a
|
||||
small room, allowing anyone present to see and hear the events and examine
|
||||
the projection.</p>`;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
}
|
||||
41
src/module/powers/planarBinding.js
Normal file
41
src/module/powers/planarBinding.js
Normal file
@ -0,0 +1,41 @@
|
||||
import { PowerEffect } from './basePowers.js';
|
||||
|
||||
export class PlanarBindingEffect extends PowerEffect {
|
||||
get name() {
|
||||
return 'Planar Binding';
|
||||
}
|
||||
|
||||
get icon() {
|
||||
return 'icons/magic/control/debuff-chains-orb-movement-blue.webp';
|
||||
}
|
||||
|
||||
get duration() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
get isTargeted() {
|
||||
return false;
|
||||
}
|
||||
|
||||
get basePowerPoints() {
|
||||
return 8;
|
||||
}
|
||||
|
||||
get usePrimaryEffect() {
|
||||
return false;
|
||||
}
|
||||
|
||||
get isRaisable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
get description() {
|
||||
let text =
|
||||
super.description +
|
||||
`
|
||||
<p>Opposed roll vs the entity's Spirit. The entity is bound until it breaks
|
||||
free or agrees to complete a task.</p>
|
||||
`;
|
||||
return text;
|
||||
}
|
||||
}
|
||||
77
src/module/powers/planeShift.js
Normal file
77
src/module/powers/planeShift.js
Normal file
@ -0,0 +1,77 @@
|
||||
import { PowerEffect } from './basePowers.js';
|
||||
|
||||
export class PlaneShiftEffect extends PowerEffect {
|
||||
get name() {
|
||||
return 'Plane Shift';
|
||||
}
|
||||
|
||||
get icon() {
|
||||
return 'icons/magic/movement/trail-streak-zigzag-yellow.webp';
|
||||
}
|
||||
|
||||
get duration() {
|
||||
return this.data.foe ? (this.data.raise ? 5 : 3) : 0;
|
||||
}
|
||||
|
||||
get isTargeted() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get usePrimaryEffect() {
|
||||
return this.data.foe;
|
||||
}
|
||||
|
||||
get isDamaging() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get basePowerPoints() {
|
||||
return 4;
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get additionalRecipientCost() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
get modifiers() {
|
||||
return [
|
||||
...super.modifiers,
|
||||
{
|
||||
name: 'Extra-Dimensional Space',
|
||||
value: 2,
|
||||
id: 'extra',
|
||||
epic: true,
|
||||
type: 'checkbox',
|
||||
effect: false,
|
||||
},
|
||||
{
|
||||
name: 'Transport Foe',
|
||||
value: 2,
|
||||
id: 'foe',
|
||||
epic: true,
|
||||
type: 'checkbox',
|
||||
effect: false,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
get description() {
|
||||
let text = super.description;
|
||||
if (this.data.foe) {
|
||||
text += `<p>Opposed roll vs Spirit to transport the foe to another plane for
|
||||
${this.duration} rounds, before it returns.</p>`;
|
||||
} else if (this.data.extra) {
|
||||
text += `<p>Transport the recipient to the caster's semi-permanant
|
||||
extra-dimensional space, with basic necessities for 5 people.</p>`;
|
||||
} else {
|
||||
text += `<p>Transport the recipient to another dimension. If the desired
|
||||
location is known, the recipient arrives within
|
||||
[[/r ${this.data.raise ? 5 : 10}d10]] of the location.</p>`;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
}
|
||||
@ -39,6 +39,9 @@ import { LocateEffect } from './locate.js';
|
||||
import { MindLinkEffect } from './mindLink.js';
|
||||
import { MindReadingEffect } from './mindReading.js';
|
||||
import { MindWipeEffect } from './mindWipe.js';
|
||||
import { ObjectReadingEffect } from './objectReading.js';
|
||||
import { PlanarBindingEffect } from './planarBinding.js';
|
||||
import { PlaneShiftEffect } from './planeShift.js';
|
||||
|
||||
const PowerClasses = {
|
||||
'arcane-protection': ArcaneProtectionEffect,
|
||||
@ -91,6 +94,9 @@ const PowerClasses = {
|
||||
'mind-link': MindLinkEffect,
|
||||
'mind-reading': MindReadingEffect,
|
||||
'mind-wipe': MindWipeEffect,
|
||||
'object-reading': ObjectReadingEffect,
|
||||
'planar-binding': PlanarBindingEffect,
|
||||
'plane-shift': PlaneShiftEffect,
|
||||
shrink: GrowthShrinkEffect,
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user