add reorged blind power
This commit is contained in:
parent
6ec4d9019e
commit
eaf5b8a066
110
src/module/powers/blind.js
Normal file
110
src/module/powers/blind.js
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
import { moduleName } from '../globals.js';
|
||||||
|
import { PowerEffect } from './basePowers.js';
|
||||||
|
|
||||||
|
export class BlindEffect extends PowerEffect {
|
||||||
|
get name() {
|
||||||
|
return 'Blind';
|
||||||
|
}
|
||||||
|
|
||||||
|
get icon() {
|
||||||
|
return 'icons/skills/wounds/injury-eyes-blood-red.webp';
|
||||||
|
}
|
||||||
|
|
||||||
|
get duration() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
get isTargeted() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
get hasAoe() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
get basePowerPoints() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPrimaryEffectChanges() {
|
||||||
|
const changes = [
|
||||||
|
{
|
||||||
|
key: 'system.stats.globalMods.trait',
|
||||||
|
value: -2,
|
||||||
|
priority: 0,
|
||||||
|
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
return changes;
|
||||||
|
}
|
||||||
|
|
||||||
|
get description() {
|
||||||
|
return (
|
||||||
|
super.description +
|
||||||
|
`<p>${this.data.raise ? -4 : -2} penalty to all actions involving sight.</p>
|
||||||
|
<p>Shake off attempts at end of turns with a Vigor ${this.data.strong ? '-2 ' : ''}
|
||||||
|
roll as a free action. Success removes 2 points of penalties.
|
||||||
|
A raise removes the effect.</p>`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async createSecondaryEffects(maintId) {
|
||||||
|
const docs = await super.createSecondaryEffects(maintId);
|
||||||
|
if (this.data.raise) {
|
||||||
|
const strong = this.data.mods.has('strong');
|
||||||
|
const doc = this.createEffectDocument(this.icon, `Blinded (${strong ? 'Strong, ' : ''}Raise)`, [
|
||||||
|
{
|
||||||
|
key: 'system.stats.globalMods.trait',
|
||||||
|
value: -2,
|
||||||
|
priority: 0,
|
||||||
|
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
doc.duration.seconds = 594;
|
||||||
|
doc.description = this.description + '<p>This is the raise effect which can be shaken off separately.</p>';
|
||||||
|
doc.flags[moduleName].maintId = maintId;
|
||||||
|
docs.push(doc);
|
||||||
|
}
|
||||||
|
return docs;
|
||||||
|
}
|
||||||
|
|
||||||
|
get modifiers() {
|
||||||
|
const mods = super.modifiers;
|
||||||
|
mods.push({
|
||||||
|
name: 'Strong',
|
||||||
|
type: 'checkbox',
|
||||||
|
value: 1,
|
||||||
|
id: 'strong',
|
||||||
|
epic: false,
|
||||||
|
effect: false,
|
||||||
|
});
|
||||||
|
mods.push({
|
||||||
|
type: 'select',
|
||||||
|
default: 'none',
|
||||||
|
name: 'Area of Effect',
|
||||||
|
id: 'aoe',
|
||||||
|
epic: true,
|
||||||
|
choices: {
|
||||||
|
none: 'None',
|
||||||
|
mbt: 'Medium Blast Template',
|
||||||
|
lbt: 'Large Blast Template',
|
||||||
|
},
|
||||||
|
effects: { none: null, mbt: null, lbt: null },
|
||||||
|
values: { none: 0, mbt: 2, lbt: 3 },
|
||||||
|
});
|
||||||
|
return mods;
|
||||||
|
}
|
||||||
|
|
||||||
|
get effectName() {
|
||||||
|
const strong = this.data.strong;
|
||||||
|
return `Blinded${strong ? ' (Strong)' : ''}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
get chatMessageEffects() {
|
||||||
|
const list = super.chatMessageEffects;
|
||||||
|
if (this.data.aoe !== 'none') {
|
||||||
|
list.push(this.data.aoe.toUpperCase());
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,129 +6,7 @@ import { BanishEffect } from './banish.js';
|
|||||||
import { BarrierEffect } from './barrier.js';
|
import { BarrierEffect } from './barrier.js';
|
||||||
import { BeastFriendEffect } from './beastFriend.js';
|
import { BeastFriendEffect } from './beastFriend.js';
|
||||||
import { BlastEffect } from './blast.js';
|
import { BlastEffect } from './blast.js';
|
||||||
|
import { BlindEffect } from './blind.js';
|
||||||
class BlindEffect extends PowerEffect {
|
|
||||||
get name() {
|
|
||||||
return 'Blind';
|
|
||||||
}
|
|
||||||
|
|
||||||
get icon() {
|
|
||||||
return 'icons/skills/wounds/injury-eyes-blood-red.webp';
|
|
||||||
}
|
|
||||||
|
|
||||||
get duration() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
get isTargeted() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
get hasAoe() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
get basePowerPoints() {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
getPrimaryEffectChanges() {
|
|
||||||
const changes = [
|
|
||||||
{
|
|
||||||
key: 'system.stats.globalMods.trait',
|
|
||||||
value: -2,
|
|
||||||
priority: 0,
|
|
||||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
return changes;
|
|
||||||
}
|
|
||||||
|
|
||||||
get description() {
|
|
||||||
return (
|
|
||||||
super.description +
|
|
||||||
`<p>${this.data.raise ? -4 : -2} penalty to all actions involving sight.</p>
|
|
||||||
<p>Shake off attempts at end of turns with a Vigor
|
|
||||||
${this.data.mods.has('strong') ? '-2 ' : ''}roll as a free action.
|
|
||||||
Success removes 2 points of penalties. A raise removes the effect.</p>`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async createSecondaryEffects(maintId) {
|
|
||||||
const docs = await super.createSecondaryEffects(maintId);
|
|
||||||
if (this.data.raise) {
|
|
||||||
const strong = this.data.mods.has('strong');
|
|
||||||
const doc = this.createEffectDocument(this.icon, `Blinded (${strong ? 'Strong, ' : ''}Raise)`, [
|
|
||||||
{
|
|
||||||
key: 'system.stats.globalMods.trait',
|
|
||||||
value: -2,
|
|
||||||
priority: 0,
|
|
||||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
doc.duration.seconds = 594;
|
|
||||||
doc.description = this.description + '<p>This is the raise effect which can be shaken off separately.</p>';
|
|
||||||
doc.flags[moduleName].maintId = maintId;
|
|
||||||
docs.push(doc);
|
|
||||||
}
|
|
||||||
return docs;
|
|
||||||
}
|
|
||||||
|
|
||||||
get modifiers() {
|
|
||||||
const mods = super.modifiers;
|
|
||||||
mods.push({
|
|
||||||
name: 'Strong',
|
|
||||||
value: 1,
|
|
||||||
id: 'strong',
|
|
||||||
epic: false,
|
|
||||||
effect: false,
|
|
||||||
});
|
|
||||||
return mods;
|
|
||||||
}
|
|
||||||
|
|
||||||
get menuInputs() {
|
|
||||||
const inputs = super.menuInputs;
|
|
||||||
inputs.push({
|
|
||||||
type: 'select',
|
|
||||||
label: 'Area of Effect',
|
|
||||||
options: [
|
|
||||||
{ html: 'None', value: 0, selected: true },
|
|
||||||
{ html: 'Medium Blast Template (+2)', value: 2, selected: false },
|
|
||||||
{ html: 'Large Blast Template (+3)', value: 3, selected: false },
|
|
||||||
],
|
|
||||||
});
|
|
||||||
return inputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
async parseValues() {
|
|
||||||
await super.parseValues();
|
|
||||||
this.data.aoe = this.data.values.shift();
|
|
||||||
}
|
|
||||||
|
|
||||||
get powerPoints() {
|
|
||||||
let total = super.powerPoints;
|
|
||||||
total += this.data.aoe;
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
get effectName() {
|
|
||||||
const strong = this.data.mods.has('strong');
|
|
||||||
return `Blinded${strong ? ' (Strong)' : ''}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
get chatMessageEffects() {
|
|
||||||
const list = super.chatMessageEffects;
|
|
||||||
switch (this.data.aoe) {
|
|
||||||
case 2:
|
|
||||||
list.push('MBT');
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
list.push('LBT');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class BoltEffect extends PowerEffect {
|
class BoltEffect extends PowerEffect {
|
||||||
get name() {
|
get name() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user