add teleport
This commit is contained in:
parent
e016437b73
commit
f4bfa13cab
@ -58,6 +58,7 @@ import { SpeakLanguageEffect } from './speakLanguage.js';
|
||||
import { StunEffect } from './stun.js';
|
||||
import { SummonAllyEffect } from './summon.js';
|
||||
import { TelekinesisEffect } from './telekinesis.js';
|
||||
import { TeleportEffect } from './teleport.js';
|
||||
|
||||
const PowerClasses = {
|
||||
'arcane-protection': ArcaneProtectionEffect,
|
||||
@ -136,6 +137,7 @@ const PowerClasses = {
|
||||
stun: StunEffect,
|
||||
'summon-ally': SummonAllyEffect,
|
||||
telekinesis: TelekinesisEffect,
|
||||
teleport: TeleportEffect,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
98
src/module/powers/teleport.js
Normal file
98
src/module/powers/teleport.js
Normal file
@ -0,0 +1,98 @@
|
||||
import { PowerEffect } from './basePowers.js';
|
||||
|
||||
export class TeleportEffect extends PowerEffect {
|
||||
get name() {
|
||||
return 'Teleport';
|
||||
}
|
||||
|
||||
get icon() {
|
||||
return 'icons/magic/movement/portal-vortex-orange.webp';
|
||||
}
|
||||
|
||||
get duration() {
|
||||
return this?.data?.gate ? 5 : 0;
|
||||
}
|
||||
|
||||
get isTargeted() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get isRaisable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients() {
|
||||
return true;
|
||||
}
|
||||
|
||||
get additionalRecipientCost() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
get usePrimaryEffect() {
|
||||
return false;
|
||||
}
|
||||
|
||||
get basePowerPoints() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
get modifiers() {
|
||||
return [
|
||||
{
|
||||
name: 'Gate',
|
||||
type: 'checkbox',
|
||||
value: 5,
|
||||
id: 'gate',
|
||||
epic: true,
|
||||
effect: false,
|
||||
},
|
||||
{
|
||||
name: 'Greater Teleport',
|
||||
type: 'checkbox',
|
||||
value: 5,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false,
|
||||
},
|
||||
{
|
||||
name: 'Teleport Foe',
|
||||
type: 'checkbox',
|
||||
value: 2,
|
||||
id: 'foe',
|
||||
epic: false,
|
||||
effect: false,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
get description() {
|
||||
let desc = super.description;
|
||||
if (this.data.gate) {
|
||||
desc += `<p>The caster opens a gate between locations that stays open for
|
||||
5 rounds.</p>`;
|
||||
} else {
|
||||
desc += `<p>The caster instantly moves the subject(s) to a new location
|
||||
${this.data.greater && !this.data.foe ? 'elsewhere on the planet' : `within ${this.data.raise ? 48 : 24} yards`}.</p>
|
||||
`;
|
||||
if (this.data.foe) {
|
||||
desc += `<p>Unwilling foes may be targeted by a Multi-Action sequence of a Touch
|
||||
attack followed by casting this spell. This is resisted by an opposed Spirit roll.</p>`;
|
||||
}
|
||||
}
|
||||
if (this.data.greater & !this.data.foe) {
|
||||
desc += `<p>A greater teleport may arrive anywhere on the planet with three
|
||||
rounds of concentration. How close the subjects arrive is dependent on the
|
||||
caster's knowledge of the destination:</p>
|
||||
<ul>
|
||||
<li>Physically experienced the place: ${this.data.raise ? 'on target' : '[[/r 2d6*10]] feet away'}
|
||||
and no penalty to the roll.</li>
|
||||
<li>Detailed map or seen through remote viewing means: -2 penalty and
|
||||
${this.data.raise ? 'on target' : '[[/r 2d6*100]] feet away'}.</li>
|
||||
<li>Crude map or general idea of the location: -4 penalty and
|
||||
${this.data.raise ? '[[/r 2d10]] miles' : '[[/r 2d6*100]] feet'} away.</li>
|
||||
</ul>`;
|
||||
}
|
||||
return desc;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user