mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-21 18:09:54 +02:00
Merge branch 'main' into feature/combo-dice-modifier
This commit is contained in:
commit
0779443d4a
421 changed files with 2867 additions and 4508 deletions
|
|
@ -392,7 +392,7 @@ const updateActorsRangeDependentEffects = async token => {
|
||||||
).rangeMeasurement;
|
).rangeMeasurement;
|
||||||
|
|
||||||
for (let effect of token.actor?.allApplicableEffects() ?? []) {
|
for (let effect of token.actor?.allApplicableEffects() ?? []) {
|
||||||
if (!effect.system.rangeDependence?.enabled) continue;
|
if (!effect.system.rangeDependence) continue;
|
||||||
const { target, range, type } = effect.system.rangeDependence;
|
const { target, range, type } = effect.system.rangeDependence;
|
||||||
|
|
||||||
// If there are no targets, assume false. Otherwise, start with the effect enabled.
|
// If there are no targets, assume false. Otherwise, start with the effect enabled.
|
||||||
|
|
|
||||||
|
|
@ -167,9 +167,7 @@
|
||||||
},
|
},
|
||||||
"ACTIVEEFFECT": {
|
"ACTIVEEFFECT": {
|
||||||
"Config": {
|
"Config": {
|
||||||
"rangeDependence": {
|
"rangeDependence": { "title": "Range Dependence" },
|
||||||
"title": "Range Dependence"
|
|
||||||
},
|
|
||||||
"stacking": { "title": "Stacking" },
|
"stacking": { "title": "Stacking" },
|
||||||
"targetDispositions": "Affected Dispositions"
|
"targetDispositions": "Affected Dispositions"
|
||||||
},
|
},
|
||||||
|
|
@ -774,7 +772,7 @@
|
||||||
"removeRoll": "Remove Roll",
|
"removeRoll": "Remove Roll",
|
||||||
"resultsHint": "Results will appear when characters roll",
|
"resultsHint": "Results will appear when characters roll",
|
||||||
"selectLeaderHint": "Select one Character to be the leader",
|
"selectLeaderHint": "Select one Character to be the leader",
|
||||||
"selectParticipantsHint": "Select one Character to be the leader",
|
"selectParticipantsHint": "Select all Characters who will participate in the roll",
|
||||||
"startGroupRoll": "Start Group Roll",
|
"startGroupRoll": "Start Group Roll",
|
||||||
"title": "Group Roll"
|
"title": "Group Roll"
|
||||||
},
|
},
|
||||||
|
|
@ -3235,7 +3233,7 @@
|
||||||
"beastformToManyAdvantages": "You cannot select any more advantages.",
|
"beastformToManyAdvantages": "You cannot select any more advantages.",
|
||||||
"beastformToManyFeatures": "You cannot select any more features.",
|
"beastformToManyFeatures": "You cannot select any more features.",
|
||||||
"beastformEquipWeapon": "You cannot use weapons while in a Beastform.",
|
"beastformEquipWeapon": "You cannot use weapons while in a Beastform.",
|
||||||
"loadoutMaxReached": "You've reached maximum loadout. Move atleast one domain card to the vault, or increase the limit in homebrew settings if desired.",
|
"loadoutMaxReached": "You've reached the maximum loadout size. To add more, move at least one domain card to the vault.",
|
||||||
"domainMaxReached": "You've reached the maximum domains for the class. Increase the limit in homebrew settings if desired.",
|
"domainMaxReached": "You've reached the maximum domains for the class. Increase the limit in homebrew settings if desired.",
|
||||||
"insufficientResources": "You don't have enough resources to use that action.",
|
"insufficientResources": "You don't have enough resources to use that action.",
|
||||||
"actionNoUsesRemaining": "That action doesn't have remaining uses.",
|
"actionNoUsesRemaining": "That action doesn't have remaining uses.",
|
||||||
|
|
|
||||||
|
|
@ -315,15 +315,15 @@ export default class BeastformDialog extends HandlebarsApplicationMixin(Applicat
|
||||||
|
|
||||||
const beastformEffect = selected.effects.find(x => x.type === 'beastform');
|
const beastformEffect = selected.effects.find(x => x.type === 'beastform');
|
||||||
for (const traitBonus of app.modifications.traitBonuses) {
|
for (const traitBonus of app.modifications.traitBonuses) {
|
||||||
const existingChange = beastformEffect.changes.find(
|
const existingChange = beastformEffect.system.changes.find(
|
||||||
x => x.key === `system.traits.${traitBonus.trait}.value`
|
x => x.key === `system.traits.${traitBonus.trait}.value`
|
||||||
);
|
);
|
||||||
if (existingChange) {
|
if (existingChange) {
|
||||||
existingChange.value = Number.parseInt(existingChange.value) + traitBonus.bonus;
|
existingChange.value = Number.parseInt(existingChange.value) + traitBonus.bonus;
|
||||||
} else {
|
} else {
|
||||||
beastformEffect.changes.push({
|
beastformEffect.system.changes.push({
|
||||||
key: `system.traits.${traitBonus.trait}.value`,
|
key: `system.traits.${traitBonus.trait}.value`,
|
||||||
mode: 2,
|
type: 'add',
|
||||||
priority: null,
|
priority: null,
|
||||||
value: traitBonus.bonus
|
value: traitBonus.bonus
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -139,13 +139,15 @@ export default class DhDeathMove extends HandlebarsApplicationMixin(ApplicationV
|
||||||
name: game.i18n.localize('DAGGERHEART.CONFIG.DeathMoves.blazeOfGlory.name'),
|
name: game.i18n.localize('DAGGERHEART.CONFIG.DeathMoves.blazeOfGlory.name'),
|
||||||
description: game.i18n.localize('DAGGERHEART.CONFIG.DeathMoves.blazeOfGlory.description'),
|
description: game.i18n.localize('DAGGERHEART.CONFIG.DeathMoves.blazeOfGlory.description'),
|
||||||
img: CONFIG.DH.GENERAL.deathMoves.blazeOfGlory.img,
|
img: CONFIG.DH.GENERAL.deathMoves.blazeOfGlory.img,
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.rules.roll.guaranteedCritical',
|
{
|
||||||
mode: 2,
|
key: 'system.rules.roll.guaranteedCritical',
|
||||||
value: 'true'
|
type: 'add',
|
||||||
}
|
value: 'true'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { ResourceUpdateMap } from '../../data/action/baseAction.mjs';
|
import { ResourceUpdateMap } from '../../data/action/baseAction.mjs';
|
||||||
import { shouldUseHopeFearAutomation } from '../../helpers/utils.mjs';
|
import { shouldUseHopeFearAutomation } from '../../helpers/utils.mjs';
|
||||||
import { emitGMUpdate, GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs';
|
import { emitGMUpdate, GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs';
|
||||||
import Party from '../sheets/actors/party.mjs';
|
import PartySheet from '../sheets/actors/party.mjs';
|
||||||
|
|
||||||
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
||||||
|
|
||||||
|
|
@ -11,7 +11,7 @@ export default class GroupRollDialog extends HandlebarsApplicationMixin(Applicat
|
||||||
|
|
||||||
this.party = party;
|
this.party = party;
|
||||||
this.partyMembers = party.system.partyMembers
|
this.partyMembers = party.system.partyMembers
|
||||||
.filter(x => Party.DICE_ROLL_ACTOR_TYPES.includes(x.type))
|
.filter(x => PartySheet.DICE_ROLL_ACTOR_TYPES.includes(x.type))
|
||||||
.map(member => ({
|
.map(member => ({
|
||||||
...member.toObject(),
|
...member.toObject(),
|
||||||
uuid: member.uuid,
|
uuid: member.uuid,
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import { ResourceUpdateMap } from '../../data/action/baseAction.mjs';
|
||||||
import { MemberData } from '../../data/tagTeamData.mjs';
|
import { MemberData } from '../../data/tagTeamData.mjs';
|
||||||
import { getCritDamageBonus, shouldUseHopeFearAutomation } from '../../helpers/utils.mjs';
|
import { getCritDamageBonus, shouldUseHopeFearAutomation } from '../../helpers/utils.mjs';
|
||||||
import { emitGMUpdate, GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs';
|
import { emitGMUpdate, GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs';
|
||||||
import Party from '../sheets/actors/party.mjs';
|
import PartySheet from '../sheets/actors/party.mjs';
|
||||||
|
|
||||||
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
||||||
|
|
||||||
|
|
@ -13,7 +13,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
||||||
this.usesTagTeamHopeCost = true;
|
this.usesTagTeamHopeCost = true;
|
||||||
this.party = party;
|
this.party = party;
|
||||||
this.partyMembers = party.system.partyMembers
|
this.partyMembers = party.system.partyMembers
|
||||||
.filter(x => Party.DICE_ROLL_ACTOR_TYPES.includes(x.type))
|
.filter(x => PartySheet.DICE_ROLL_ACTOR_TYPES.includes(x.type))
|
||||||
.map(member => ({
|
.map(member => ({
|
||||||
...member.toObject(),
|
...member.toObject(),
|
||||||
uuid: member.uuid,
|
uuid: member.uuid,
|
||||||
|
|
@ -208,6 +208,16 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
||||||
|
|
||||||
const rollOptions = [];
|
const rollOptions = [];
|
||||||
const damageRollOptions = [];
|
const damageRollOptions = [];
|
||||||
|
|
||||||
|
if (actor?.system.usedUnarmed) {
|
||||||
|
damageRollOptions.push({
|
||||||
|
value: actor.system.attack.uuid,
|
||||||
|
label: actor.system.usedUnarmed.name,
|
||||||
|
group: actor.name,
|
||||||
|
baseAction: actor.system.attack
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
for (const item of actor?.items ?? []) {
|
for (const item of actor?.items ?? []) {
|
||||||
if (!item.system.metadata.hasActions) continue;
|
if (!item.system.metadata.hasActions) continue;
|
||||||
const actions = [...item.system.actions, ...(item.system.attack ? [item.system.attack] : [])];
|
const actions = [...item.system.actions, ...(item.system.attack ? [item.system.attack] : [])];
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,10 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac
|
||||||
.querySelector('.stacking-change-checkbox')
|
.querySelector('.stacking-change-checkbox')
|
||||||
?.addEventListener('change', this.stackingChangeToggle.bind(this));
|
?.addEventListener('change', this.stackingChangeToggle.bind(this));
|
||||||
|
|
||||||
|
htmlElement
|
||||||
|
.querySelector('.range-dependence-change-checkbox')
|
||||||
|
?.addEventListener('change', this.rangeDependenceChangeToggle.bind(this));
|
||||||
|
|
||||||
htmlElement
|
htmlElement
|
||||||
.querySelector('.armor-change-checkbox')
|
.querySelector('.armor-change-checkbox')
|
||||||
?.addEventListener('change', this.armorChangeToggle.bind(this));
|
?.addEventListener('change', this.armorChangeToggle.bind(this));
|
||||||
|
|
@ -224,6 +228,20 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac
|
||||||
return this.submit({ updateData: { system: systemData } });
|
return this.submit({ updateData: { system: systemData } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rangeDependenceChangeToggle(event) {
|
||||||
|
const rangeFields = this.document.system.schema.fields.rangeDependence.fields;
|
||||||
|
const systemData = {
|
||||||
|
rangeDependence: event.target.checked
|
||||||
|
? _replace({
|
||||||
|
type: rangeFields.type.initial,
|
||||||
|
target: rangeFields.target.initial,
|
||||||
|
range: rangeFields.range.initial
|
||||||
|
})
|
||||||
|
: null
|
||||||
|
};
|
||||||
|
return this.submit({ updateData: { system: systemData } });
|
||||||
|
}
|
||||||
|
|
||||||
armorChangeToggle(event) {
|
armorChangeToggle(event) {
|
||||||
if (event.target.checked) {
|
if (event.target.checked) {
|
||||||
this.addArmorChange();
|
this.addArmorChange();
|
||||||
|
|
|
||||||
10
module/applications/sheets/actors/_types.d.ts
vendored
10
module/applications/sheets/actors/_types.d.ts
vendored
|
|
@ -1,8 +1,18 @@
|
||||||
import DhCompanion from '../../../data/actor/companion.mjs';
|
import DhCompanion from '../../../data/actor/companion.mjs';
|
||||||
|
import DhParty from '../../../data/actor/party.mjs';
|
||||||
import DhpActor from '../../../documents/actor.mjs';
|
import DhpActor from '../../../documents/actor.mjs';
|
||||||
|
|
||||||
declare module './companion.mjs' {
|
declare module './companion.mjs' {
|
||||||
export default interface DhCompanionSheet {
|
export default interface DhCompanionSheet {
|
||||||
actor: DhpActor<DhCompanion>;
|
actor: DhpActor<DhCompanion>;
|
||||||
|
document: DhpActor<DhCompanion>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module './party.mjs' {
|
||||||
|
export default interface PartySheet {
|
||||||
|
actor: DhpActor<DhParty>;
|
||||||
|
document: DhpActor<DhParty>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -914,7 +914,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
const doc = await getDocFromElement(button);
|
const doc = await getDocFromElement(button);
|
||||||
const { available } = this.document.system.loadoutSlot;
|
const { available } = this.document.system.loadoutSlot;
|
||||||
if (doc.system.inVault && !available && !doc.system.loadoutIgnore) {
|
if (doc.system.inVault && !available && !doc.system.loadoutIgnore) {
|
||||||
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.loadoutMaxReached'));
|
return ui.notifications.warn('DAGGERHEART.UI.Notifications.loadoutMaxReached', { localize: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
await doc?.update({ 'system.inVault': !doc.system.inVault });
|
await doc?.update({ 'system.inVault': !doc.system.inVault });
|
||||||
|
|
@ -1206,10 +1206,22 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
if (!confirmed) return;
|
if (!confirmed) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.document.uuid === item.parent?.uuid) {
|
// Check for same actor drag/drop attempts
|
||||||
|
const isSameActor = this.document.uuid === item.parent?.uuid;
|
||||||
|
const loadoutFieldset = event.target.closest('[data-in-vault]');
|
||||||
|
const vaulting = loadoutFieldset?.dataset.inVault === 'true';
|
||||||
|
if (isSameActor && loadoutFieldset && item.type === 'domainCard' && vaulting !== item.system.inVault) {
|
||||||
|
// This is likely an attempt to vault or unvault an item
|
||||||
|
const { available } = this.document.system.loadoutSlot;
|
||||||
|
if (!vaulting && !available && !item.system.loadoutIgnore) {
|
||||||
|
return ui.notifications.warn('DAGGERHEART.UI.Notifications.loadoutMaxReached', { localize: true });
|
||||||
|
}
|
||||||
|
return item.update({ 'system.inVault': vaulting });
|
||||||
|
} else if (isSameActor) {
|
||||||
return super._onDropItem(event, item);
|
return super._onDropItem(event, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle beastforms
|
||||||
if (item.type === 'beastform') {
|
if (item.type === 'beastform') {
|
||||||
if (this.document.effects.find(x => x.type === 'beastform')) {
|
if (this.document.effects.find(x => x.type === 'beastform')) {
|
||||||
return ui.notifications.warn(
|
return ui.notifications.warn(
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ import DaggerheartMenu from '../../sidebar/tabs/daggerheartMenu.mjs';
|
||||||
import { socketEvent } from '../../../systemRegistration/socket.mjs';
|
import { socketEvent } from '../../../systemRegistration/socket.mjs';
|
||||||
import DhpActor from '../../../documents/actor.mjs';
|
import DhpActor from '../../../documents/actor.mjs';
|
||||||
|
|
||||||
export default class Party extends DHBaseActorSheet {
|
/**@typedef {import('@client/applications/_types.mjs').ApplicationClickAction} ApplicationClickAction */
|
||||||
|
|
||||||
|
export default class PartySheet extends DHBaseActorSheet {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
super(options);
|
super(options);
|
||||||
|
|
||||||
|
|
@ -24,17 +26,17 @@ export default class Party extends DHBaseActorSheet {
|
||||||
resizable: true
|
resizable: true
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
openDocument: Party.#openDocument,
|
openDocument: PartySheet.#onOpenDocument,
|
||||||
deletePartyMember: Party.#deletePartyMember,
|
deletePartyMember: PartySheet.#onDeletePartyMember,
|
||||||
toggleHope: Party.#toggleHope,
|
toggleHope: PartySheet.#onToggleHope,
|
||||||
toggleHitPoints: Party.#toggleHitPoints,
|
toggleHitPoints: PartySheet.#onToggleHitPoints,
|
||||||
toggleStress: Party.#toggleStress,
|
toggleStress: PartySheet.#onToggleStress,
|
||||||
toggleArmorSlot: Party.#toggleArmorSlot,
|
toggleArmorSlot: PartySheet.#onToggleArmorSlot,
|
||||||
tempBrowser: Party.#tempBrowser,
|
tempBrowser: PartySheet.#onTempBrowser,
|
||||||
refeshActions: Party.#refeshActions,
|
refreshActions: PartySheet.#onRefreshActions,
|
||||||
triggerRest: Party.#triggerRest,
|
triggerRest: PartySheet.#onTriggerRest,
|
||||||
tagTeamRoll: Party.#tagTeamRoll,
|
tagTeamRoll: PartySheet.#onTagTeamRoll,
|
||||||
groupRoll: Party.#groupRoll
|
groupRoll: PartySheet.#onGroupRoll
|
||||||
},
|
},
|
||||||
dragDrop: [{ dragSelector: '[data-item-id]', dropSelector: null }]
|
dragDrop: [{ dragSelector: '[data-item-id]', dropSelector: null }]
|
||||||
};
|
};
|
||||||
|
|
@ -72,6 +74,23 @@ export default class Party extends DHBaseActorSheet {
|
||||||
this._createSearchFilter();
|
this._createSearchFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
_toggleDisabled(disabled) {
|
||||||
|
// Overriden to only disable text inputs by default if the user is a member
|
||||||
|
const isMember = this.actor.system.partyMembers.some(
|
||||||
|
m => m.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
|
||||||
|
);
|
||||||
|
if (!isMember) return super._toggleDisabled(disabled);
|
||||||
|
|
||||||
|
const form = this.form;
|
||||||
|
for (const input of form.querySelectorAll('input:not([type=search]), .editor.prosemirror')) {
|
||||||
|
input.disabled = disabled;
|
||||||
|
}
|
||||||
|
for (const element of form.querySelectorAll('.input[contenteditable]')) {
|
||||||
|
element.classList.toggle('disabled', disabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Prepare Context */
|
/* Prepare Context */
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
@ -198,8 +217,16 @@ export default class Party extends DHBaseActorSheet {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* Event handlers */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
static async #openDocument(_, target) {
|
/**
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
|
*/
|
||||||
|
static async #onOpenDocument(_, target) {
|
||||||
const uuid = target.dataset.uuid;
|
const uuid = target.dataset.uuid;
|
||||||
const document = await foundry.utils.fromUuid(uuid);
|
const document = await foundry.utils.fromUuid(uuid);
|
||||||
document?.sheet?.render(true);
|
document?.sheet?.render(true);
|
||||||
|
|
@ -207,9 +234,10 @@ export default class Party extends DHBaseActorSheet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggles a hope resource value.
|
* Toggles a hope resource value.
|
||||||
|
* @this PartySheet
|
||||||
* @type {ApplicationClickAction}
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #toggleHope(_, target) {
|
static async #onToggleHope(_, target) {
|
||||||
const hopeValue = Number.parseInt(target.dataset.value);
|
const hopeValue = Number.parseInt(target.dataset.value);
|
||||||
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
||||||
const newValue = actor.system.resources.hope.value >= hopeValue ? hopeValue - 1 : hopeValue;
|
const newValue = actor.system.resources.hope.value >= hopeValue ? hopeValue - 1 : hopeValue;
|
||||||
|
|
@ -219,9 +247,10 @@ export default class Party extends DHBaseActorSheet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggles a hp resource value.
|
* Toggles a hp resource value.
|
||||||
|
* @this PartySheet
|
||||||
* @type {ApplicationClickAction}
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #toggleHitPoints(_, target) {
|
static async #onToggleHitPoints(_, target) {
|
||||||
const hitPointsValue = Number.parseInt(target.dataset.value);
|
const hitPointsValue = Number.parseInt(target.dataset.value);
|
||||||
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
||||||
const newValue = actor.system.resources.hitPoints.value >= hitPointsValue ? hitPointsValue - 1 : hitPointsValue;
|
const newValue = actor.system.resources.hitPoints.value >= hitPointsValue ? hitPointsValue - 1 : hitPointsValue;
|
||||||
|
|
@ -231,9 +260,10 @@ export default class Party extends DHBaseActorSheet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggles a stress resource value.
|
* Toggles a stress resource value.
|
||||||
|
* @this PartySheet
|
||||||
* @type {ApplicationClickAction}
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #toggleStress(_, target) {
|
static async #onToggleStress(_, target) {
|
||||||
const stressValue = Number.parseInt(target.dataset.value);
|
const stressValue = Number.parseInt(target.dataset.value);
|
||||||
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
||||||
const newValue = actor.system.resources.stress.value >= stressValue ? stressValue - 1 : stressValue;
|
const newValue = actor.system.resources.stress.value >= stressValue ? stressValue - 1 : stressValue;
|
||||||
|
|
@ -243,9 +273,10 @@ export default class Party extends DHBaseActorSheet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggles a armor slot resource value.
|
* Toggles a armor slot resource value.
|
||||||
|
* @this PartySheet
|
||||||
* @type {ApplicationClickAction}
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #toggleArmorSlot(_, target) {
|
static async #onToggleArmorSlot(_, target) {
|
||||||
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
const actor = await foundry.utils.fromUuid(target.dataset.actorId);
|
||||||
const { value, max } = actor.system.armorScore;
|
const { value, max } = actor.system.armorScore;
|
||||||
const inputValue = Number.parseInt(target.dataset.value);
|
const inputValue = Number.parseInt(target.dataset.value);
|
||||||
|
|
@ -258,12 +289,19 @@ export default class Party extends DHBaseActorSheet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens Compedium Browser
|
* Opens Compedium Browser
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #tempBrowser(_, target) {
|
static async #onTempBrowser(_, target) {
|
||||||
new ItemBrowser().render({ force: true });
|
new ItemBrowser().render({ force: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
static async #refeshActions() {
|
/**
|
||||||
|
* @todo Is this unused?
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
|
*/
|
||||||
|
static async #onRefreshActions() {
|
||||||
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
window: {
|
window: {
|
||||||
title: 'New Section',
|
title: 'New Section',
|
||||||
|
|
@ -281,7 +319,11 @@ export default class Party extends DHBaseActorSheet {
|
||||||
if (!confirmed) return;
|
if (!confirmed) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static async #triggerRest(_, button) {
|
/**
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
|
*/
|
||||||
|
static async #onTriggerRest(_, button) {
|
||||||
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
window: {
|
window: {
|
||||||
title: game.i18n.localize(`DAGGERHEART.APPLICATIONS.Downtime.${button.dataset.type}.title`),
|
title: game.i18n.localize(`DAGGERHEART.APPLICATIONS.Downtime.${button.dataset.type}.title`),
|
||||||
|
|
@ -304,6 +346,30 @@ export default class Party extends DHBaseActorSheet {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
|
*/
|
||||||
|
static async #onDeletePartyMember(event, target) {
|
||||||
|
const doc = await foundry.utils.fromUuid(target.closest('[data-uuid]')?.dataset.uuid);
|
||||||
|
if (!event.shiftKey) {
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.ACTORS.Party.RemoveConfirmation.title', {
|
||||||
|
name: doc.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.ACTORS.Party.RemoveConfirmation.text', { name: doc.name })
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!confirmed) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentMembers = this.document.system.partyMembers.map(x => x.uuid);
|
||||||
|
const newMembersList = currentMembers.filter(uuid => uuid !== doc.uuid);
|
||||||
|
await this.document.update({ 'system.partyMembers': newMembersList });
|
||||||
|
}
|
||||||
|
|
||||||
static async downtimeMoveQuery({ actorId, downtimeType }) {
|
static async downtimeMoveQuery({ actorId, downtimeType }) {
|
||||||
const actor = await foundry.utils.fromUuid(actorId);
|
const actor = await foundry.utils.fromUuid(actorId);
|
||||||
if (!actor || !actor?.isOwner) return;
|
if (!actor || !actor?.isOwner) return;
|
||||||
|
|
@ -312,11 +378,19 @@ export default class Party extends DHBaseActorSheet {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static async #tagTeamRoll() {
|
/**
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
|
*/
|
||||||
|
static async #onTagTeamRoll() {
|
||||||
new game.system.api.applications.dialogs.TagTeamDialog(this.document).render({ force: true });
|
new game.system.api.applications.dialogs.TagTeamDialog(this.document).render({ force: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
static async #groupRoll(_params) {
|
/**
|
||||||
|
* @this PartySheet
|
||||||
|
* @type {ApplicationClickAction}
|
||||||
|
*/
|
||||||
|
static async #onGroupRoll(_params) {
|
||||||
new game.system.api.applications.dialogs.GroupRollDialog(this.document).render({ force: true });
|
new game.system.api.applications.dialogs.GroupRollDialog(this.document).render({ force: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -460,11 +534,10 @@ export default class Party extends DHBaseActorSheet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/** @inheritdoc */
|
||||||
|
|
||||||
async _onDropActor(event, document) {
|
async _onDropActor(event, document) {
|
||||||
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event);
|
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event);
|
||||||
if (document instanceof DhpActor && Party.ALLOWED_ACTOR_TYPES.includes(document.type)) {
|
if (document instanceof DhpActor && PartySheet.ALLOWED_ACTOR_TYPES.includes(document.type)) {
|
||||||
const currentMembers = this.document.system.partyMembers.map(x => x.uuid);
|
const currentMembers = this.document.system.partyMembers.map(x => x.uuid);
|
||||||
if (currentMembers.includes(data.uuid)) {
|
if (currentMembers.includes(data.uuid)) {
|
||||||
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.duplicateCharacter'));
|
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.duplicateCharacter'));
|
||||||
|
|
@ -477,24 +550,4 @@ export default class Party extends DHBaseActorSheet {
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static async #deletePartyMember(event, target) {
|
|
||||||
const doc = await foundry.utils.fromUuid(target.closest('[data-uuid]')?.dataset.uuid);
|
|
||||||
if (!event.shiftKey) {
|
|
||||||
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
|
||||||
window: {
|
|
||||||
title: game.i18n.format('DAGGERHEART.ACTORS.Party.RemoveConfirmation.title', {
|
|
||||||
name: doc.name
|
|
||||||
})
|
|
||||||
},
|
|
||||||
content: game.i18n.format('DAGGERHEART.ACTORS.Party.RemoveConfirmation.text', { name: doc.name })
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!confirmed) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const currentMembers = this.document.system.partyMembers.map(x => x.uuid);
|
|
||||||
const newMembersList = currentMembers.filter(uuid => uuid !== doc.uuid);
|
|
||||||
await this.document.update({ 'system.partyMembers': newMembersList });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,18 +90,20 @@ export const BPModifiers = {
|
||||||
name: 'DAGGERHEART.CONFIG.BPModifiers.increaseDamage.effect.name',
|
name: 'DAGGERHEART.CONFIG.BPModifiers.increaseDamage.effect.name',
|
||||||
description: 'DAGGERHEART.CONFIG.BPModifiers.increaseDamage.effect.description',
|
description: 'DAGGERHEART.CONFIG.BPModifiers.increaseDamage.effect.description',
|
||||||
img: 'icons/magic/control/buff-flight-wings-red.webp',
|
img: 'icons/magic/control/buff-flight-wings-red.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.bonuses.damage.physical.dice',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.damage.physical.dice',
|
||||||
value: '1d4'
|
type: 'add',
|
||||||
},
|
value: '1d4'
|
||||||
{
|
},
|
||||||
key: 'system.bonuses.damage.magical.dice',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.damage.magical.dice',
|
||||||
value: '1d4'
|
type: 'add',
|
||||||
}
|
value: '1d4'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,13 +37,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.channeling.effects.channeling.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.channeling.effects.channeling.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.channeling.effects.channeling.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.channeling.effects.channeling.description',
|
||||||
img: 'icons/magic/symbols/rune-sigil-horned-blue.webp',
|
img: 'icons/magic/symbols/rune-sigil-horned-blue.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.bonuses.roll.spellcast',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.roll.spellcast',
|
||||||
value: '1'
|
type: 'add',
|
||||||
}
|
value: '1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -55,43 +57,45 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.difficult.effects.difficult.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.difficult.effects.difficult.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.difficult.effects.difficult.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.difficult.effects.difficult.description',
|
||||||
img: 'icons/magic/control/buff-flight-wings-red.webp',
|
img: 'icons/magic/control/buff-flight-wings-red.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.traits.agility.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.agility.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.traits.strength.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.strength.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.traits.finesse.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.finesse.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.traits.instinct.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.instinct.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.traits.presence.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.presence.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.traits.knowledge.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.knowledge.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -103,13 +107,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.flexible.effects.flexible.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.flexible.effects.flexible.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.flexible.effects.flexible.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.flexible.effects.flexible.description',
|
||||||
img: 'icons/magic/movement/abstract-ribbons-red-orange.webp',
|
img: 'icons/magic/movement/abstract-ribbons-red-orange.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '1'
|
type: 'add',
|
||||||
}
|
value: '1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -121,13 +127,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.fortified.effects.fortified.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.fortified.effects.fortified.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.fortified.effects.fortified.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.fortified.effects.fortified.description',
|
||||||
img: 'icons/magic/defensive/shield-barrier-glowing-blue.webp',
|
img: 'icons/magic/defensive/shield-barrier-glowing-blue.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.rules.damageReduction.increasePerArmorMark',
|
{
|
||||||
mode: 5,
|
key: 'system.rules.damageReduction.increasePerArmorMark',
|
||||||
value: '2'
|
type: 'override',
|
||||||
}
|
value: '2'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -139,13 +147,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.gilded.effects.gilded.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.gilded.effects.gilded.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.gilded.effects.gilded.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.gilded.effects.gilded.description',
|
||||||
img: 'icons/magic/control/control-influence-crown-gold.webp',
|
img: 'icons/magic/control/control-influence-crown-gold.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.traits.presence.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.presence.value',
|
||||||
value: '1'
|
type: 'add',
|
||||||
}
|
value: '1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -157,13 +167,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.heavy.effects.heavy.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.heavy.effects.heavy.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.heavy.effects.heavy.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.heavy.effects.heavy.description',
|
||||||
img: 'icons/commodities/metal/ingot-worn-iron.webp',
|
img: 'icons/commodities/metal/ingot-worn-iron.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -212,13 +224,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.magical.effects.magical.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.magical.effects.magical.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.magical.effects.magical.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.magical.effects.magical.description',
|
||||||
img: 'icons/magic/defensive/barrier-shield-dome-blue-purple.webp',
|
img: 'icons/magic/defensive/barrier-shield-dome-blue-purple.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.rules.damageReduction.magical',
|
{
|
||||||
mode: 5,
|
key: 'system.rules.damageReduction.magical',
|
||||||
value: 1
|
type: 'override',
|
||||||
}
|
value: 1
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -249,13 +263,15 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.physical.effects.physical.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.physical.effects.physical.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.physical.effects.physical.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.physical.effects.physical.description',
|
||||||
img: 'icons/commodities/stone/ore-pile-tan.webp',
|
img: 'icons/commodities/stone/ore-pile-tan.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.rules.damageReduction.physical',
|
{
|
||||||
mode: 5,
|
key: 'system.rules.damageReduction.physical',
|
||||||
value: 1
|
type: 'override',
|
||||||
}
|
value: 1
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -280,18 +296,20 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.reinforced.effects.reinforced.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.reinforced.effects.reinforced.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.reinforced.effects.reinforced.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.reinforced.effects.reinforced.description',
|
||||||
img: 'icons/magic/defensive/shield-barrier-glowing-triangle-green.webp',
|
img: 'icons/magic/defensive/shield-barrier-glowing-triangle-green.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.bunuses.damageThresholds.major',
|
{
|
||||||
mode: 2,
|
key: 'system.bunuses.damageThresholds.major',
|
||||||
value: '2'
|
type: 'add',
|
||||||
},
|
value: '2'
|
||||||
{
|
},
|
||||||
key: 'system.bunuses.damageThresholds.severe',
|
{
|
||||||
mode: 2,
|
key: 'system.bunuses.damageThresholds.severe',
|
||||||
value: '2'
|
type: 'add',
|
||||||
}
|
value: '2'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -326,18 +344,20 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.sharp.effects.sharp.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.sharp.effects.sharp.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.sharp.effects.sharp.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.sharp.effects.sharp.description',
|
||||||
img: 'icons/magic/defensive/shield-barrier-glowing-triangle-green.webp',
|
img: 'icons/magic/defensive/shield-barrier-glowing-triangle-green.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.bonuses.damage.primaryWeapon.dice',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.damage.primaryWeapon.dice',
|
||||||
value: '1d4'
|
type: 'add',
|
||||||
},
|
value: '1d4'
|
||||||
{
|
},
|
||||||
key: 'system.bonuses.damage.secondaryWeapon.dice',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.damage.secondaryWeapon.dice',
|
||||||
value: '1d4'
|
type: 'add',
|
||||||
}
|
value: '1d4'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -408,18 +428,20 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.veryHeavy.effects.veryHeavy.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.veryHeavy.effects.veryHeavy.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.veryHeavy.effects.veryHeavy.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.veryHeavy.effects.veryHeavy.description',
|
||||||
img: 'icons/commodities/metal/ingot-stamped-steel.webp',
|
img: 'icons/commodities/metal/ingot-stamped-steel.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-2'
|
type: 'add',
|
||||||
},
|
value: '-2'
|
||||||
{
|
},
|
||||||
key: 'system.traits.agility.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.agility.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -431,14 +453,16 @@ export const armorFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.ArmorFeature.warded.effects.warded.name',
|
name: 'DAGGERHEART.CONFIG.ArmorFeature.warded.effects.warded.name',
|
||||||
description: 'DAGGERHEART.CONFIG.ArmorFeature.warded.effects.warded.description',
|
description: 'DAGGERHEART.CONFIG.ArmorFeature.warded.effects.warded.description',
|
||||||
img: 'icons/magic/defensive/barrier-shield-dome-pink.webp',
|
img: 'icons/magic/defensive/barrier-shield-dome-pink.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.resistance.magical.reduction',
|
{
|
||||||
mode: 2,
|
key: 'system.resistance.magical.reduction',
|
||||||
value: '@system.armorScore',
|
type: 'add',
|
||||||
priority: 21
|
value: '@system.armorScore',
|
||||||
}
|
priority: 21
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -488,21 +512,23 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.barrier.effects.barrier.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.barrier.effects.barrier.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.barrier.effects.barrier.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.barrier.effects.barrier.description',
|
||||||
img: 'icons/skills/melee/shield-block-bash-blue.webp',
|
img: 'icons/skills/melee/shield-block-bash-blue.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'Armor',
|
{
|
||||||
type: 'armor',
|
key: 'Armor',
|
||||||
typeData: {
|
|
||||||
type: 'armor',
|
type: 'armor',
|
||||||
max: 'ITEM.@system.tier + 1'
|
typeData: {
|
||||||
|
type: 'armor',
|
||||||
|
max: 'ITEM.@system.tier + 1'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
]
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -514,13 +540,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.bonded.effects.damage.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.bonded.effects.damage.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.bonded.effects.damage.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.bonded.effects.damage.description',
|
||||||
img: 'icons/magic/symbols/chevron-elipse-circle-blue.webp',
|
img: 'icons/magic/symbols/chevron-elipse-circle-blue.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
||||||
value: '@system.levelData.level.current'
|
type: 'add',
|
||||||
}
|
value: '@system.levelData.level.current'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -553,18 +581,20 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.brave.effects.brave.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.brave.effects.brave.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.brave.effects.brave.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.brave.effects.brave.description',
|
||||||
img: 'icons/magic/life/heart-cross-strong-flame-purple-orange.webp',
|
img: 'icons/magic/life/heart-cross-strong-flame-purple-orange.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
},
|
value: '-1'
|
||||||
{
|
},
|
||||||
key: 'system.damageThresholds.severe',
|
{
|
||||||
mode: 2,
|
key: 'system.damageThresholds.severe',
|
||||||
value: 'ITEM.@system.tier'
|
type: 'add',
|
||||||
}
|
value: 'ITEM.@system.tier'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -618,13 +648,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.charged.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.charged.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.charged.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.charged.description',
|
||||||
img: 'icons/magic/lightning/claws-unarmed-strike-teal.webp',
|
img: 'icons/magic/lightning/claws-unarmed-strike-teal.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.proficiency',
|
{
|
||||||
mode: 2,
|
key: 'system.proficiency',
|
||||||
value: '1'
|
type: 'add',
|
||||||
}
|
value: '1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -660,13 +692,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.cumbersome.effects.cumbersome.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.cumbersome.effects.cumbersome.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.cumbersome.effects.cumbersome.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.cumbersome.effects.cumbersome.description',
|
||||||
img: 'icons/commodities/metal/mail-plate-steel.webp',
|
img: 'icons/commodities/metal/mail-plate-steel.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.traits.finesse.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.finesse.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -707,14 +741,16 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.deflecting.effects.deflecting.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.deflecting.effects.deflecting.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.deflecting.effects.deflecting.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.deflecting.effects.deflecting.description',
|
||||||
img: 'icons/skills/melee/hand-grip-sword-strike-orange.webp',
|
img: 'icons/skills/melee/hand-grip-sword-strike-orange.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '@system.armorScore',
|
type: 'add',
|
||||||
priority: 21
|
value: '@system.armorScore',
|
||||||
}
|
priority: 21
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -754,13 +790,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.destructive.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.destructive.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.destructive.effects.agility',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.destructive.effects.agility',
|
||||||
img: 'icons/skills/melee/strike-flail-spiked-pink.webp',
|
img: 'icons/skills/melee/strike-flail-spiked-pink.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.traits.agility.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.agility.value',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -791,14 +829,14 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.doubleDuty.effects.doubleDuty.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.doubleDuty.effects.doubleDuty.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.doubleDuty.effects.doubleDuty.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.doubleDuty.effects.doubleDuty.description',
|
||||||
img: 'icons/skills/melee/sword-shield-stylized-white.webp',
|
img: 'icons/skills/melee/sword-shield-stylized-white.webp',
|
||||||
changes: [
|
|
||||||
{
|
|
||||||
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
|
||||||
mode: 2,
|
|
||||||
value: '1'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
system: {
|
system: {
|
||||||
|
changes: [
|
||||||
|
{
|
||||||
|
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
||||||
|
type: 'add',
|
||||||
|
value: '1'
|
||||||
|
}
|
||||||
|
],
|
||||||
rangeDependence: {
|
rangeDependence: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
range: 'melee',
|
range: 'melee',
|
||||||
|
|
@ -902,13 +940,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.greedy.actions.greed.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.greedy.actions.greed.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.greedy.actions.greed.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.greedy.actions.greed.description',
|
||||||
img: 'icons/commodities/currency/coins-crown-stack-gold.webp',
|
img: 'icons/commodities/currency/coins-crown-stack-gold.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.proficiency',
|
{
|
||||||
mode: 2,
|
key: 'system.proficiency',
|
||||||
value: '1'
|
type: 'add',
|
||||||
}
|
value: '1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -951,13 +991,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.heavy.effects.heavy.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.heavy.effects.heavy.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.heavy.effects.heavy.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.heavy.effects.heavy.description',
|
||||||
img: 'icons/commodities/metal/ingot-worn-iron.webp',
|
img: 'icons/commodities/metal/ingot-worn-iron.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -1066,13 +1108,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.massive.effects.massive.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.massive.effects.massive.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.massive.effects.massive.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.massive.effects.massive.description',
|
||||||
img: 'icons/skills/melee/strike-flail-destructive-yellow.webp',
|
img: 'icons/skills/melee/strike-flail-destructive-yellow.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.evasion',
|
{
|
||||||
mode: 2,
|
key: 'system.evasion',
|
||||||
value: '-1'
|
type: 'add',
|
||||||
}
|
value: '-1'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -1103,14 +1147,14 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.paired.effects.paired.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.paired.effects.paired.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.paired.effects.paired.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.paired.effects.paired.description',
|
||||||
img: 'icons/skills/melee/weapons-crossed-swords-yellow-teal.webp',
|
img: 'icons/skills/melee/weapons-crossed-swords-yellow-teal.webp',
|
||||||
changes: [
|
|
||||||
{
|
|
||||||
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
|
||||||
mode: 2,
|
|
||||||
value: 'ITEM.@system.tier + 1'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
system: {
|
system: {
|
||||||
|
changes: [
|
||||||
|
{
|
||||||
|
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
||||||
|
type: 'add',
|
||||||
|
value: 'ITEM.@system.tier + 1'
|
||||||
|
}
|
||||||
|
],
|
||||||
rangeDependence: {
|
rangeDependence: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
range: 'melee',
|
range: 'melee',
|
||||||
|
|
@ -1158,13 +1202,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.persuasive.effects.persuasive.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.persuasive.effects.persuasive.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.persuasive.effects.persuasive.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.persuasive.effects.persuasive.description',
|
||||||
img: 'icons/magic/control/hypnosis-mesmerism-eye.webp',
|
img: 'icons/magic/control/hypnosis-mesmerism-eye.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.traits.presence.value',
|
{
|
||||||
mode: 2,
|
key: 'system.traits.presence.value',
|
||||||
value: '2'
|
type: 'add',
|
||||||
}
|
value: '2'
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -1203,17 +1249,20 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.protective.effects.protective.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.protective.effects.protective.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.protective.effects.protective.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.protective.effects.protective.description',
|
||||||
img: 'icons/skills/melee/shield-block-gray-orange.webp',
|
img: 'icons/skills/melee/shield-block-gray-orange.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'Armor',
|
{
|
||||||
type: 'armor',
|
key: 'Armor',
|
||||||
value: 0,
|
|
||||||
typeData: {
|
|
||||||
type: 'armor',
|
type: 'armor',
|
||||||
max: 'ITEM.@system.tier'
|
value: 0,
|
||||||
|
typeData: {
|
||||||
|
type: 'armor',
|
||||||
|
max: 'ITEM.@system.tier'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
]
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -1244,13 +1293,15 @@ export const weaponFeatures = {
|
||||||
name: 'DAGGERHEART.CONFIG.WeaponFeature.reliable.effects.reliable.name',
|
name: 'DAGGERHEART.CONFIG.WeaponFeature.reliable.effects.reliable.name',
|
||||||
description: 'DAGGERHEART.CONFIG.WeaponFeature.reliable.effects.reliable.description',
|
description: 'DAGGERHEART.CONFIG.WeaponFeature.reliable.effects.reliable.description',
|
||||||
img: 'icons/skills/melee/strike-sword-slashing-red.webp',
|
img: 'icons/skills/melee/strike-sword-slashing-red.webp',
|
||||||
changes: [
|
system: {
|
||||||
{
|
changes: [
|
||||||
key: 'system.bonuses.roll.primaryWeapon.bonus',
|
{
|
||||||
mode: 2,
|
key: 'system.bonuses.roll.primaryWeapon.bonus',
|
||||||
value: 1
|
type: 'add',
|
||||||
}
|
value: 1
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -1341,7 +1392,7 @@ export const weaponFeatures = {
|
||||||
changes: [
|
changes: [
|
||||||
{
|
{
|
||||||
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
key: 'system.bonuses.damage.primaryWeapon.bonus',
|
||||||
mode: 2,
|
type: 'add',
|
||||||
value: '@system.traits.agility.value',
|
value: '@system.traits.agility.value',
|
||||||
priority: 21
|
priority: 21
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,11 +57,6 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
|
||||||
description: new fields.HTMLField({ label: 'DAGGERHEART.GENERAL.description' })
|
description: new fields.HTMLField({ label: 'DAGGERHEART.GENERAL.description' })
|
||||||
}),
|
}),
|
||||||
rangeDependence: new fields.SchemaField({
|
rangeDependence: new fields.SchemaField({
|
||||||
enabled: new fields.BooleanField({
|
|
||||||
required: true,
|
|
||||||
initial: false,
|
|
||||||
label: 'DAGGERHEART.GENERAL.enabled'
|
|
||||||
}),
|
|
||||||
type: new fields.StringField({
|
type: new fields.StringField({
|
||||||
required: true,
|
required: true,
|
||||||
choices: CONFIG.DH.GENERAL.rangeInclusion,
|
choices: CONFIG.DH.GENERAL.rangeInclusion,
|
||||||
|
|
@ -80,7 +75,7 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
|
||||||
initial: CONFIG.DH.GENERAL.range.melee.id,
|
initial: CONFIG.DH.GENERAL.range.melee.id,
|
||||||
label: 'DAGGERHEART.GENERAL.range'
|
label: 'DAGGERHEART.GENERAL.range'
|
||||||
})
|
})
|
||||||
}),
|
}, { nullable: true, initial: null }),
|
||||||
stacking: new fields.SchemaField(
|
stacking: new fields.SchemaField(
|
||||||
{
|
{
|
||||||
value: new fields.NumberField({
|
value: new fields.NumberField({
|
||||||
|
|
@ -146,14 +141,8 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
|
||||||
description: '',
|
description: '',
|
||||||
transfer: options.transfer,
|
transfer: options.transfer,
|
||||||
statuses: [],
|
statuses: [],
|
||||||
changes: [],
|
|
||||||
system: {
|
system: {
|
||||||
rangeDependence: {
|
changes: []
|
||||||
enabled: false,
|
|
||||||
type: CONFIG.DH.GENERAL.rangeInclusion.withinRange.id,
|
|
||||||
target: CONFIG.DH.GENERAL.otherTargetTypes.hostile.id,
|
|
||||||
range: CONFIG.DH.GENERAL.range.melee.id
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -185,4 +174,12 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
|
||||||
if (this.parent.actor && options.scrollingTextData)
|
if (this.parent.actor && options.scrollingTextData)
|
||||||
this.parent.actor.queueScrollText(options.scrollingTextData);
|
this.parent.actor.queueScrollText(options.scrollingTextData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static migrateData(source) {
|
||||||
|
if (source.rangeDependence?.enabled === false) {
|
||||||
|
source.rangeDependence = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.migrateData(source);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ export default class DHArmor extends AttachableItem {
|
||||||
type: 'armor',
|
type: 'armor',
|
||||||
hasDescription: true,
|
hasDescription: true,
|
||||||
isInventoryItem: true,
|
isInventoryItem: true,
|
||||||
hasActions: true
|
hasActions: true,
|
||||||
|
hasResource: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -185,8 +185,10 @@ export default class D20Roll extends DHRoll {
|
||||||
return changeKeys;
|
return changeKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
static postEvaluate(roll, config = {}) {
|
static async buildEvaluate(roll, config = {}, message = {}) {
|
||||||
const data = super.postEvaluate(roll, config);
|
await super.buildEvaluate(roll, config, message);
|
||||||
|
|
||||||
|
const data = config.roll;
|
||||||
data.type = config.actionType;
|
data.type = config.actionType;
|
||||||
data.difficulty = config.roll.difficulty;
|
data.difficulty = config.roll.difficulty;
|
||||||
if (config.targets?.length) {
|
if (config.targets?.length) {
|
||||||
|
|
@ -222,7 +224,6 @@ export default class D20Roll extends DHRoll {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
data.modifierTotal = roll.modifierTotal;
|
data.modifierTotal = roll.modifierTotal;
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resetFormula() {
|
resetFormula() {
|
||||||
|
|
|
||||||
|
|
@ -13,32 +13,38 @@ export default class DamageRoll extends DHRoll {
|
||||||
|
|
||||||
static DefaultDialog = DamageDialog;
|
static DefaultDialog = DamageDialog;
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
static async buildEvaluate(roll, config = {}, message = {}) {
|
static async buildEvaluate(roll, config = {}, message = {}) {
|
||||||
if (config.dialog.configure === false) roll.constructFormula(config);
|
if (config.dialog.configure === false) roll.constructFormula(config);
|
||||||
if (config.evaluate !== false) for (const roll of config.roll) await roll.roll.evaluate();
|
for (const roll of config.roll) await roll.roll.evaluate();
|
||||||
|
|
||||||
roll._evaluated = true;
|
roll._evaluated = true;
|
||||||
|
|
||||||
const parts = [];
|
const parts = [];
|
||||||
for (const roll of config.roll) {
|
for (const rollData of config.roll) {
|
||||||
parts.push(this.postEvaluate(roll));
|
const roll = rollData.roll;
|
||||||
roll.roll = JSON.stringify(roll.roll.toJSON());
|
parts.push({
|
||||||
|
...rollData,
|
||||||
|
...roll.options.roll,
|
||||||
|
total: roll.total,
|
||||||
|
formula: roll.formula,
|
||||||
|
dice: roll.dice.map(d => ({
|
||||||
|
dice: d.denomination,
|
||||||
|
total: d.total,
|
||||||
|
formula: d.formula,
|
||||||
|
results: d.results
|
||||||
|
})),
|
||||||
|
damageTypes: [...(rollData.damageTypes ?? [])],
|
||||||
|
roll,
|
||||||
|
type: config.type,
|
||||||
|
modifierTotal: this.calculateTotalModifiers(roll)
|
||||||
|
});
|
||||||
|
rollData.roll = JSON.stringify(roll.toJSON());
|
||||||
}
|
}
|
||||||
|
|
||||||
config.damage = this.unifyDamageRoll(parts);
|
config.damage = this.unifyDamageRoll(parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
static postEvaluate(roll, config = {}) {
|
|
||||||
return {
|
|
||||||
...roll,
|
|
||||||
...super.postEvaluate(roll.roll, config),
|
|
||||||
damageTypes: [...(roll.damageTypes ?? [])],
|
|
||||||
roll: roll.roll,
|
|
||||||
type: config.type,
|
|
||||||
modifierTotal: this.calculateTotalModifiers(roll.roll)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static async buildPost(roll, config, message) {
|
static async buildPost(roll, config, message) {
|
||||||
const chatMessage = config.source?.message
|
const chatMessage = config.source?.message
|
||||||
? ui.chat.collection.get(config.source.message)
|
? ui.chat.collection.get(config.source.message)
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,9 @@ export default class DHRoll extends Roll {
|
||||||
|
|
||||||
if (config.skips?.createMessage) config.messageRoll = roll;
|
if (config.skips?.createMessage) config.messageRoll = roll;
|
||||||
|
|
||||||
await this.buildEvaluate(roll, config, (message = {}));
|
if (config.evaluate !== false) {
|
||||||
|
await this.buildEvaluate(roll, config, (message = {}));
|
||||||
|
}
|
||||||
await this.buildPost(roll, config, (message = {}));
|
await this.buildPost(roll, config, (message = {}));
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
@ -72,27 +74,14 @@ export default class DHRoll extends Roll {
|
||||||
return roll;
|
return roll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Evaluates the roll and assigns roll data into the config.
|
||||||
|
* This is only called if config.evaluate is not set to false
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
static async buildEvaluate(roll, config = {}, message = {}) {
|
static async buildEvaluate(roll, config = {}, message = {}) {
|
||||||
if (config.evaluate !== false) {
|
await roll.evaluate();
|
||||||
await roll.evaluate();
|
config.roll = {
|
||||||
config.roll = this.postEvaluate(roll, config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static async buildPost(roll, config, message) {
|
|
||||||
for (const hook of config.hooks) {
|
|
||||||
if (Hooks.call(`${CONFIG.DH.id}.postRoll${hook.capitalize()}`, config, message) === false) return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.skips?.createMessage) {
|
|
||||||
await triggerChatRollFx([roll]);
|
|
||||||
} else if (!config.source?.message) {
|
|
||||||
config.message = await this.toMessage(roll, config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static postEvaluate(roll, config = {}) {
|
|
||||||
return {
|
|
||||||
...roll.options.roll,
|
...roll.options.roll,
|
||||||
total: roll.total,
|
total: roll.total,
|
||||||
formula: roll.formula,
|
formula: roll.formula,
|
||||||
|
|
@ -105,6 +94,22 @@ export default class DHRoll extends Roll {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs any post configuration events that need to happen towards the end, such as hooks and dice so nice
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
static async buildPost(roll, config, message) {
|
||||||
|
for (const hook of config.hooks) {
|
||||||
|
if (Hooks.call(`${CONFIG.DH.id}.postRoll${hook.capitalize()}`, config, message) === false) return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.skips?.createMessage) {
|
||||||
|
await triggerChatRollFx([roll]);
|
||||||
|
} else if (!config.source?.message) {
|
||||||
|
config.message = await this.toMessage(roll, config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static async toMessage(roll, config) {
|
static async toMessage(roll, config) {
|
||||||
const item = config.data.parent?.items?.get?.(config.source.item) ?? null;
|
const item = config.data.parent?.items?.get?.(config.source.item) ?? null;
|
||||||
const action = item ? item.system.actions.get(config.source.action) : null;
|
const action = item ? item.system.actions.get(config.source.action) : null;
|
||||||
|
|
|
||||||
|
|
@ -232,22 +232,10 @@ export default class DualityRoll extends D20Roll {
|
||||||
return changeKeys;
|
return changeKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
static async buildEvaluate(roll, config = {}, message = {}) {
|
static async buildEvaluate(roll, config = {}, message = {}) {
|
||||||
await super.buildEvaluate(roll, config, message);
|
await super.buildEvaluate(roll, config, message);
|
||||||
|
config.roll.hope = {
|
||||||
await setDiceSoNiceForDualityRoll(
|
|
||||||
roll,
|
|
||||||
config.roll.advantage.type,
|
|
||||||
config.roll.hope.dice,
|
|
||||||
config.roll.fear.dice,
|
|
||||||
config.roll.advantage.dice
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static postEvaluate(roll, config = {}) {
|
|
||||||
const data = super.postEvaluate(roll, config);
|
|
||||||
|
|
||||||
data.hope = {
|
|
||||||
dice: roll.dHope.denomination,
|
dice: roll.dHope.denomination,
|
||||||
value: this.guaranteedCritical ? 0 : roll.dHope.total,
|
value: this.guaranteedCritical ? 0 : roll.dHope.total,
|
||||||
rerolled: {
|
rerolled: {
|
||||||
|
|
@ -255,7 +243,7 @@ export default class DualityRoll extends D20Roll {
|
||||||
rerolls: roll.dHope.results.filter(x => x.rerolled)
|
rerolls: roll.dHope.results.filter(x => x.rerolled)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
data.fear = {
|
config.roll.fear = {
|
||||||
dice: roll.dFear.denomination,
|
dice: roll.dFear.denomination,
|
||||||
value: this.guaranteedCritical ? 0 : roll.dFear.total,
|
value: this.guaranteedCritical ? 0 : roll.dFear.total,
|
||||||
rerolled: {
|
rerolled: {
|
||||||
|
|
@ -263,11 +251,11 @@ export default class DualityRoll extends D20Roll {
|
||||||
rerolls: roll.dFear.results.filter(x => x.rerolled)
|
rerolls: roll.dFear.results.filter(x => x.rerolled)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
data.rally = {
|
config.roll.rally = {
|
||||||
dice: roll.dRally?.denomination,
|
dice: roll.dRally?.denomination,
|
||||||
value: roll.dRally?.total
|
value: roll.dRally?.total
|
||||||
};
|
};
|
||||||
data.result = {
|
config.roll.result = {
|
||||||
duality: roll.withHope ? 1 : roll.withFear ? -1 : 0,
|
duality: roll.withHope ? 1 : roll.withFear ? -1 : 0,
|
||||||
total: this.guaranteedCritical ? 0 : roll.dHope.total + roll.dFear.total,
|
total: this.guaranteedCritical ? 0 : roll.dHope.total + roll.dFear.total,
|
||||||
label: roll.totalLabel
|
label: roll.totalLabel
|
||||||
|
|
@ -275,11 +263,18 @@ export default class DualityRoll extends D20Roll {
|
||||||
|
|
||||||
if (roll._rallyIndex && roll.data?.parent)
|
if (roll._rallyIndex && roll.data?.parent)
|
||||||
roll.data.parent.deleteEmbeddedDocuments('ActiveEffect', [roll._rallyIndex]);
|
roll.data.parent.deleteEmbeddedDocuments('ActiveEffect', [roll._rallyIndex]);
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
static async buildPost(roll, config, message) {
|
static async buildPost(roll, config, message) {
|
||||||
|
await setDiceSoNiceForDualityRoll(
|
||||||
|
roll,
|
||||||
|
config.roll.advantage.type,
|
||||||
|
config.roll.hope.dice,
|
||||||
|
config.roll.fear.dice,
|
||||||
|
config.roll.advantage.dice
|
||||||
|
);
|
||||||
|
|
||||||
await super.buildPost(roll, config, message);
|
await super.buildPost(roll, config, message);
|
||||||
|
|
||||||
await DualityRoll.dualityUpdate(config);
|
await DualityRoll.dualityUpdate(config);
|
||||||
|
|
|
||||||
|
|
@ -75,25 +75,23 @@ export default class FateRoll extends D20Roll {
|
||||||
this.terms[0] = new foundry.dice.terms.Die({ faces: 12 });
|
this.terms[0] = new foundry.dice.terms.Die({ faces: 12 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
static async buildEvaluate(roll, config = {}, message = {}) {
|
static async buildEvaluate(roll, config = {}, message = {}) {
|
||||||
await super.buildEvaluate(roll, config, message);
|
await super.buildEvaluate(roll, config, message);
|
||||||
|
config.roll.fate = {
|
||||||
|
dice: roll.fateDie === 'Hope' ? roll.dHope.denomination : roll.dFear.denomination,
|
||||||
|
value: roll.fateDie === 'Hope' ? roll.dHope.total : roll.dFear.total,
|
||||||
|
fateDie: roll.fateDie
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
static async buildPost(roll, config, message) {
|
||||||
if (roll.fateDie === 'Hope') {
|
if (roll.fateDie === 'Hope') {
|
||||||
await setDiceSoNiceForHopeFateRoll(roll, config.roll.fate.dice);
|
await setDiceSoNiceForHopeFateRoll(roll, config.roll.fate.dice);
|
||||||
} else {
|
} else {
|
||||||
await setDiceSoNiceForFearFateRoll(roll, config.roll.fate.dice);
|
await setDiceSoNiceForFearFateRoll(roll, config.roll.fate.dice);
|
||||||
}
|
}
|
||||||
}
|
return super.buildPost(roll, config, message);
|
||||||
|
|
||||||
static postEvaluate(roll, config = {}) {
|
|
||||||
const data = super.postEvaluate(roll, config);
|
|
||||||
|
|
||||||
data.fate = {
|
|
||||||
dice: roll.fateDie === 'Hope' ? roll.dHope.denomination : roll.dFear.denomination,
|
|
||||||
value: roll.fateDie === 'Hope' ? roll.dHope.total : roll.dFear.total,
|
|
||||||
fateDie: roll.fateDie
|
|
||||||
};
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -622,22 +622,30 @@ export default class DhpActor extends Actor {
|
||||||
return rollData;
|
return rollData;
|
||||||
}
|
}
|
||||||
|
|
||||||
#canReduceDamage(hpDamage, type) {
|
#canReduceDamage(hpDamage, types) {
|
||||||
const { stressDamageReduction, disabledArmor } = this.system.rules.damageReduction;
|
const { stressDamageReduction, disabledArmor, reduceSeverity, thresholdImmunities } =
|
||||||
|
this.system.rules.damageReduction;
|
||||||
if (disabledArmor) return false;
|
if (disabledArmor) return false;
|
||||||
|
|
||||||
const availableStress = this.system.resources.stress.max - this.system.resources.stress.value;
|
const availableStress = this.system.resources.stress.max - this.system.resources.stress.value;
|
||||||
|
|
||||||
const canUseArmor =
|
const canUseArmor =
|
||||||
this.system.armorScore.value < this.system.armorScore.max &&
|
this.system.armorScore.value < this.system.armorScore.max &&
|
||||||
type.every(t => this.system.armorApplicableDamageTypes[t] === true);
|
types.every(t => this.system.armorApplicableDamageTypes[t] === true);
|
||||||
|
|
||||||
const canUseStress = Object.keys(stressDamageReduction).reduce((acc, x) => {
|
const canUseStress = Object.keys(stressDamageReduction).reduce((acc, x) => {
|
||||||
const rule = stressDamageReduction[x];
|
const rule = stressDamageReduction[x];
|
||||||
if (damageKeyToNumber(x) <= hpDamage) return acc || (rule.enabled && availableStress >= rule.cost);
|
if (damageKeyToNumber(x) <= hpDamage) return acc || (rule.enabled && availableStress >= rule.cost);
|
||||||
return acc;
|
return acc;
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
return canUseArmor || canUseStress;
|
const hasReduceSeverity = types.some(t => reduceSeverity[t]);
|
||||||
|
|
||||||
|
const hasThresholdImmunity = Object.entries(thresholdImmunities)
|
||||||
|
.filter(([key, value]) => Boolean(value) && damageKeyToNumber(key) === hpDamage)
|
||||||
|
.length;
|
||||||
|
|
||||||
|
return canUseArmor || canUseStress || hasReduceSeverity || hasThresholdImmunity;
|
||||||
}
|
}
|
||||||
|
|
||||||
async takeDamage(damages, isDirect = false) {
|
async takeDamage(damages, isDirect = false) {
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ export const renderMeasuredTemplate = async event => {
|
||||||
if (!type || !range || !game.canvas.scene) return;
|
if (!type || !range || !game.canvas.scene) return;
|
||||||
|
|
||||||
const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({
|
const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({
|
||||||
shapetype: type,
|
shapeType: type,
|
||||||
angle,
|
angle,
|
||||||
range,
|
range,
|
||||||
direction,
|
direction,
|
||||||
|
|
|
||||||
|
|
@ -35,23 +35,24 @@ export const enricherConfig = [
|
||||||
];
|
];
|
||||||
|
|
||||||
export const enricherRenderSetup = element => {
|
export const enricherRenderSetup = element => {
|
||||||
|
const clickWrapper = func => event => {
|
||||||
|
event.stopPropagation();
|
||||||
|
func(event);
|
||||||
|
};
|
||||||
|
|
||||||
element
|
element
|
||||||
.querySelectorAll('.enriched-damage-button')
|
.querySelectorAll('.enriched-damage-button')
|
||||||
.forEach(element => element.addEventListener('click', renderDamageButton));
|
.forEach(element => element.addEventListener('click', clickWrapper(renderDamageButton)));
|
||||||
|
|
||||||
element
|
element
|
||||||
.querySelectorAll('.duality-roll-button')
|
.querySelectorAll('.duality-roll-button')
|
||||||
.forEach(element => element.addEventListener('click', renderDualityButton));
|
.forEach(element => element.addEventListener('click', clickWrapper(renderDualityButton)));
|
||||||
|
|
||||||
element
|
element
|
||||||
.querySelectorAll('.fate-roll-button')
|
.querySelectorAll('.fate-roll-button')
|
||||||
.forEach(element => element.addEventListener('click', renderFateButton));
|
.forEach(element => element.addEventListener('click', clickWrapper(renderFateButton)));
|
||||||
|
|
||||||
element
|
element
|
||||||
.querySelectorAll('.measured-template-button')
|
.querySelectorAll('.measured-template-button')
|
||||||
.forEach(element => element.addEventListener('click', renderMeasuredTemplate));
|
.forEach(element => element.addEventListener('click', clickWrapper(renderMeasuredTemplate)));
|
||||||
|
|
||||||
// element
|
|
||||||
// .querySelectorAll('.enriched-effect')
|
|
||||||
// .forEach(element => element.addEventListener('dragstart', dragEnrichedEffect));
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
38
module/systemRegistration/migration-handlers/2_5_2.mjs
Normal file
38
module/systemRegistration/migration-handlers/2_5_2.mjs
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { MigrationHandlerBase } from './base.mjs';
|
||||||
|
|
||||||
|
export class Migration_2_5_2 extends MigrationHandlerBase {
|
||||||
|
version = '2.5.2';
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
async updateActiveEffectSource(effectSource, item) {
|
||||||
|
let shouldUpdate = false;
|
||||||
|
const newChanges = [];
|
||||||
|
const srdItem = item?._stats.compendiumSource ?
|
||||||
|
await foundry.utils.fromUuid(item?._stats.compendiumSource) :
|
||||||
|
null;
|
||||||
|
for (let i = 0; i < effectSource.system.changes.length; i++) {
|
||||||
|
const change = effectSource.system.changes[i];
|
||||||
|
const srdEffect = srdItem?.effects.find(x => x.name === effectSource.name);
|
||||||
|
if (change.type === 'custom') {
|
||||||
|
const srdChange = srdEffect ? srdEffect.system.changes[i] : null;
|
||||||
|
if (
|
||||||
|
change.key === srdChange.key &&
|
||||||
|
change.value === srdChange.value &&
|
||||||
|
change.type !== srdChange.type
|
||||||
|
) {
|
||||||
|
shouldUpdate = true;
|
||||||
|
newChanges.push(srdChange);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newChanges.push(change);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldUpdate) {
|
||||||
|
return {
|
||||||
|
_id: effectSource._id,
|
||||||
|
system: { changes: newChanges }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
77
module/systemRegistration/migration-handlers/base.mjs
Normal file
77
module/systemRegistration/migration-handlers/base.mjs
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
/**
|
||||||
|
* @import DHItem from "../../documents/item.mjs";
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base class of an async migration.
|
||||||
|
* These are generally run between versions for things that require compendiums or must be done in post.
|
||||||
|
* The migrate() functions calls the various updateXSource() functions.
|
||||||
|
* Generally a subclass will override the version and the updateXSource() functions.
|
||||||
|
*/
|
||||||
|
export class MigrationHandlerBase {
|
||||||
|
version = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets change data for an active effect's source, or null if no changes
|
||||||
|
* @param {object} effectSource
|
||||||
|
* @param {DHItem} item
|
||||||
|
* @returns {Promise<object>}
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
async updateActiveEffectSource(effectSource, item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async migrate() {
|
||||||
|
// todo: handle more than just migrating effects. Right now this can only migrate effects
|
||||||
|
// NOTE: the preload is hardcoded, we should not hardcode it
|
||||||
|
|
||||||
|
const numActors = game.actors.size;
|
||||||
|
const numItems = game.items.size;
|
||||||
|
const finalUpdateProgress = 5;
|
||||||
|
const DhProgress = game.system.api.applications.ui.DhProgress;
|
||||||
|
const preRunProgress = game.packs.size;
|
||||||
|
|
||||||
|
const progress = DhProgress.createMigrationProgress(
|
||||||
|
preRunProgress + numActors + numItems + finalUpdateProgress
|
||||||
|
);
|
||||||
|
|
||||||
|
// Preload. Avoid hardcoding in the future
|
||||||
|
for (const pack of game.packs) {
|
||||||
|
await pack.getDocuments();
|
||||||
|
progress.advance();
|
||||||
|
}
|
||||||
|
|
||||||
|
const batch = [];
|
||||||
|
|
||||||
|
const updateItem = async item => {
|
||||||
|
const itemUpdates = [];
|
||||||
|
for (const effect of item.effects) {
|
||||||
|
const changes = await this.updateActiveEffectSource(effect.toObject(), item);
|
||||||
|
if (changes) itemUpdates.push(changes);
|
||||||
|
}
|
||||||
|
if (itemUpdates.length) {
|
||||||
|
batch.push({
|
||||||
|
action: 'update',
|
||||||
|
documentName: 'ActiveEffect',
|
||||||
|
updates: itemUpdates,
|
||||||
|
parent: item
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const actor of game.actors) {
|
||||||
|
for (const item of actor.items) {
|
||||||
|
await updateItem(item);
|
||||||
|
}
|
||||||
|
progress.advance();
|
||||||
|
}
|
||||||
|
for (const item of game.items) {
|
||||||
|
await updateItem(item);
|
||||||
|
progress.advance();
|
||||||
|
}
|
||||||
|
|
||||||
|
await foundry.documents.modifyBatch(batch);
|
||||||
|
progress.advance({ by: finalUpdateProgress });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { defaultRestOptions } from '../config/generalConfig.mjs';
|
import { defaultRestOptions } from '../config/generalConfig.mjs';
|
||||||
|
import { Migration_2_5_2 } from './migration-handlers/2_5_2.mjs';
|
||||||
|
|
||||||
export async function runMigrations() {
|
export async function runMigrations() {
|
||||||
let lastMigrationVersion = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion);
|
let lastMigrationVersion = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion);
|
||||||
|
|
@ -320,7 +321,19 @@ export async function runMigrations() {
|
||||||
|
|
||||||
lastMigrationVersion = '2.1.0';
|
lastMigrationVersion = '2.1.0';
|
||||||
}
|
}
|
||||||
//#endregion
|
|
||||||
|
|
||||||
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion, lastMigrationVersion);
|
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion, lastMigrationVersion);
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* New Style migrations below this point */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
const migrations = [
|
||||||
|
new Migration_2_5_2()
|
||||||
|
].filter(m => m.version && foundry.utils.isNewerVersion(m.version, lastMigrationVersion));
|
||||||
|
|
||||||
|
for (const handler of migrations) {
|
||||||
|
await handler.migrate();
|
||||||
|
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion, handler.version);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import DamageReductionDialog from '../applications/dialogs/damageReductionDialog.mjs';
|
import DamageReductionDialog from '../applications/dialogs/damageReductionDialog.mjs';
|
||||||
import Party from '../applications/sheets/actors/party.mjs';
|
import PartySheet from '../applications/sheets/actors/party.mjs';
|
||||||
|
|
||||||
export function handleSocketEvent({ action = null, data = {} } = {}) {
|
export function handleSocketEvent({ action = null, data = {} } = {}) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
|
|
@ -16,7 +16,7 @@ export function handleSocketEvent({ action = null, data = {} } = {}) {
|
||||||
Hooks.call(socketEvent.Refresh, data);
|
Hooks.call(socketEvent.Refresh, data);
|
||||||
break;
|
break;
|
||||||
case socketEvent.DowntimeTrigger:
|
case socketEvent.DowntimeTrigger:
|
||||||
Party.downtimeMoveQuery(data);
|
PartySheet.downtimeMoveQuery(data);
|
||||||
break;
|
break;
|
||||||
case socketEvent.TagTeamStart:
|
case socketEvent.TagTeamStart:
|
||||||
Hooks.callAll(CONFIG.DH.HOOKS.hooksConfig.tagTeamStart, data);
|
Hooks.callAll(CONFIG.DH.HOOKS.hooksConfig.tagTeamStart, data);
|
||||||
|
|
|
||||||
|
|
@ -403,12 +403,6 @@
|
||||||
"_id": "9PsnogEPsp1OOK64",
|
"_id": "9PsnogEPsp1OOK64",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "act"
|
"type": "act"
|
||||||
|
|
|
||||||
|
|
@ -322,32 +322,23 @@
|
||||||
"_id": "ia0NUIOxE3RHb45P",
|
"_id": "ia0NUIOxE3RHb45P",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.evasion",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "@system.evasion / 2",
|
||||||
}
|
"priority": 10
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.evasion",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "@system.evasion / 2",
|
|
||||||
"priority": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"value": null,
|
||||||
"combat": null,
|
"units": "seconds",
|
||||||
"seconds": null,
|
"expiry": null,
|
||||||
"rounds": null,
|
"expired": false
|
||||||
"turns": null,
|
|
||||||
"startRound": null,
|
|
||||||
"startTurn": null
|
|
||||||
},
|
},
|
||||||
"description": "<p>When the Flickerfl y makes an attack, the target’s Evasion is halved against the attack.</p>",
|
"disabled": false,
|
||||||
|
"description": "<p>When the Flickerfly makes an attack, the target’s Evasion is halved against the attack.</p>",
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
"statuses": [],
|
"statuses": [],
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
|
|
|
||||||
|
|
@ -491,12 +491,6 @@
|
||||||
"_id": "KGdf2eqcXkdigg0u",
|
"_id": "KGdf2eqcXkdigg0u",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -325,21 +325,15 @@
|
||||||
"_id": "wGuxOLokMqdxVSOo",
|
"_id": "wGuxOLokMqdxVSOo",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.disadvantageSources",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "Agility Rolls",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.disadvantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "Agility Rolls",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -472,14 +472,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "bq8hTzQoCXmA3xad",
|
"_id": "bq8hTzQoCXmA3xad",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -270,12 +270,6 @@
|
||||||
"_id": "2iBVUGHtGW3I9VIj",
|
"_id": "2iBVUGHtGW3I9VIj",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
@ -341,23 +335,17 @@
|
||||||
"name": "Out of Nowhere",
|
"name": "Out of Nowhere",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.advantageSources",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "On attacks if they are Hidden.",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "qT5nh7OcQ6aGdiWS",
|
"_id": "qT5nh7OcQ6aGdiWS",
|
||||||
"img": "icons/magic/perception/shadow-stealth-eyes-purple.webp",
|
"img": "icons/magic/perception/shadow-stealth-eyes-purple.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.advantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "On attacks if they are Hidden.",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -452,12 +440,6 @@
|
||||||
"_id": "yP4ot8VqS56RnxnE",
|
"_id": "yP4ot8VqS56RnxnE",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": []
|
"changes": []
|
||||||
},
|
},
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
|
|
|
||||||
|
|
@ -680,12 +680,6 @@
|
||||||
"_id": "9NQcCXMhjyBReJRd",
|
"_id": "9NQcCXMhjyBReJRd",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
@ -927,12 +921,6 @@
|
||||||
"_id": "S7kJlhnV8Nexzi8l",
|
"_id": "S7kJlhnV8Nexzi8l",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -363,12 +363,6 @@
|
||||||
"_id": "U50Ccm9emMqAxma6",
|
"_id": "U50Ccm9emMqAxma6",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -371,12 +371,6 @@
|
||||||
"_id": "LmzztuktRkwOCy1a",
|
"_id": "LmzztuktRkwOCy1a",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -447,12 +447,6 @@
|
||||||
"_id": "CjMrSdL6kgD8mKRQ",
|
"_id": "CjMrSdL6kgD8mKRQ",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary"
|
"type": "temporary"
|
||||||
|
|
|
||||||
|
|
@ -232,23 +232,17 @@
|
||||||
"name": "Levitation",
|
"name": "Levitation",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.rules.conditionImmunities.restrained",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "k6iaQVfMZhrpwYQj",
|
"_id": "k6iaQVfMZhrpwYQj",
|
||||||
"img": "icons/magic/air/fog-gas-smoke-blue-gray.webp",
|
"img": "icons/magic/air/fog-gas-smoke-blue-gray.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.rules.conditionImmunities.restrained",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -301,23 +295,17 @@
|
||||||
"name": "Wards",
|
"name": "Wards",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.magical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "4rj6PM0AGrrlbxSc",
|
"_id": "4rj6PM0AGrrlbxSc",
|
||||||
"img": "icons/magic/defensive/barrier-shield-dome-blue-purple.webp",
|
"img": "icons/magic/defensive/barrier-shield-dome-blue-purple.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.magical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -459,21 +459,15 @@
|
||||||
"_id": "xkDIZk9u2ipDHvOL",
|
"_id": "xkDIZk9u2ipDHvOL",
|
||||||
"img": "icons/creatures/magical/construct-golem-stone-blue.webp",
|
"img": "icons/creatures/magical/construct-golem-stone-blue.webp",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.bonuses.damage.physical.bonus",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "10",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.bonuses.damage.physical.bonus",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "10",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -315,12 +315,6 @@
|
||||||
"_id": "blcRqns0PHqiuPac",
|
"_id": "blcRqns0PHqiuPac",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -331,12 +331,6 @@
|
||||||
"_id": "YNMhgBZW8ndrCjIp",
|
"_id": "YNMhgBZW8ndrCjIp",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "scene"
|
"type": "scene"
|
||||||
|
|
|
||||||
|
|
@ -415,12 +415,6 @@
|
||||||
"_id": "U9lWz1LgeAiK5L85",
|
"_id": "U9lWz1LgeAiK5L85",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.resistance.magical.resistance",
|
"key": "system.resistance.magical.resistance",
|
||||||
|
|
@ -546,12 +540,6 @@
|
||||||
"_id": "lNH6srSPyEprXZ4o",
|
"_id": "lNH6srSPyEprXZ4o",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -379,12 +379,6 @@
|
||||||
"_id": "LwWxRz7FTMA80VdA",
|
"_id": "LwWxRz7FTMA80VdA",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary"
|
"type": "temporary"
|
||||||
|
|
|
||||||
|
|
@ -410,12 +410,6 @@
|
||||||
"_id": "F3E7fiz01AbF2kr5",
|
"_id": "F3E7fiz01AbF2kr5",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -270,23 +270,17 @@
|
||||||
"name": "Numbers Must Go Up",
|
"name": "Numbers Must Go Up",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.bonuses.roll.attack.bonus",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "ITEM.@system.resource.value",
|
||||||
}
|
"priority": 21
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "iLeiOlUtWvYsgbDQ",
|
"_id": "iLeiOlUtWvYsgbDQ",
|
||||||
"img": "icons/magic/control/fear-fright-monster-grin-red-orange.webp",
|
"img": "icons/magic/control/fear-fright-monster-grin-red-orange.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.bonuses.roll.attack.bonus",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "ITEM.@system.resource.value",
|
|
||||||
"priority": 21
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -238,23 +238,17 @@
|
||||||
"name": "Depths Of Despair",
|
"name": "Depths Of Despair",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "2",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "nofxm1vGZ2TmceA2",
|
"_id": "nofxm1vGZ2TmceA2",
|
||||||
"img": "icons/magic/death/skull-horned-worn-fire-blue.webp",
|
"img": "icons/magic/death/skull-horned-worn-fire-blue.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "2",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -356,12 +350,6 @@
|
||||||
"_id": "6WSx03mFbpbPWnOI",
|
"_id": "6WSx03mFbpbPWnOI",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.rules.dualityRoll.defaultHopeDice",
|
"key": "system.rules.dualityRoll.defaultHopeDice",
|
||||||
|
|
|
||||||
|
|
@ -319,12 +319,6 @@
|
||||||
"_id": "gFeHLGgeRoDdd3VG",
|
"_id": "gFeHLGgeRoDdd3VG",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.rules.dualityRoll.defaultFearDice",
|
"key": "system.rules.dualityRoll.defaultFearDice",
|
||||||
|
|
|
||||||
|
|
@ -440,14 +440,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "dPZ7PwvTERjtG92P",
|
"_id": "dPZ7PwvTERjtG92P",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -238,12 +238,6 @@
|
||||||
"name": "Flying",
|
"name": "Flying",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.difficulty",
|
"key": "system.difficulty",
|
||||||
|
|
|
||||||
|
|
@ -430,12 +430,6 @@
|
||||||
"_id": "YNKHEFQ4ucGr4Rmc",
|
"_id": "YNKHEFQ4ucGr4Rmc",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -358,14 +358,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "xoal60Ed3Ih7saBJ",
|
"_id": "xoal60Ed3Ih7saBJ",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -240,23 +240,17 @@
|
||||||
"name": "Warped Fortitude",
|
"name": "Warped Fortitude",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "3QLH2EEtcUEZolFz",
|
"_id": "3QLH2EEtcUEZolFz",
|
||||||
"img": "icons/creatures/magical/humanoid-silhouette-glowing-pink.webp",
|
"img": "icons/creatures/magical/humanoid-silhouette-glowing-pink.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -309,23 +303,17 @@
|
||||||
"name": "Overwhelm",
|
"name": "Overwhelm",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "2",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "eGB9G0ljYCcdGbOx",
|
"_id": "eGB9G0ljYCcdGbOx",
|
||||||
"img": "icons/skills/melee/strike-slashes-orange.webp",
|
"img": "icons/skills/melee/strike-slashes-orange.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "2",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -388,12 +388,6 @@
|
||||||
"_id": "Q99saHj6NOY2PSXf",
|
"_id": "Q99saHj6NOY2PSXf",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
@ -596,12 +590,6 @@
|
||||||
"_id": "pWDg0MADoohKu40O",
|
"_id": "pWDg0MADoohKu40O",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -656,12 +656,6 @@
|
||||||
"vulnerable"
|
"vulnerable"
|
||||||
],
|
],
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"description": "",
|
"description": "",
|
||||||
|
|
|
||||||
|
|
@ -347,12 +347,6 @@
|
||||||
"_id": "vb1sZCOLwDNLsr3j",
|
"_id": "vb1sZCOLwDNLsr3j",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -265,23 +265,17 @@
|
||||||
"name": "Flying",
|
"name": "Flying",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.difficulty",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "3",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "odAyKY0BSAkcO3Dd",
|
"_id": "odAyKY0BSAkcO3Dd",
|
||||||
"img": "icons/creatures/birds/raptor-hawk-flying.webp",
|
"img": "icons/creatures/birds/raptor-hawk-flying.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.difficulty",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "3",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -425,12 +419,6 @@
|
||||||
"_id": "m6qqQZxukDPVcGdQ",
|
"_id": "m6qqQZxukDPVcGdQ",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "act"
|
"type": "act"
|
||||||
|
|
@ -579,14 +567,8 @@
|
||||||
"_id": "Sd34xywRqiF5w9sX",
|
"_id": "Sd34xywRqiF5w9sX",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -269,21 +269,15 @@
|
||||||
"_id": "aATxfjeOzUYtKuU6",
|
"_id": "aATxfjeOzUYtKuU6",
|
||||||
"img": "icons/commodities/biological/wing-insect-green.webp",
|
"img": "icons/commodities/biological/wing-insect-green.webp",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.difficulty",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "2",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.difficulty",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "2",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -385,14 +379,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "dQgcYTz5vmV25Y6G",
|
"_id": "dQgcYTz5vmV25Y6G",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -433,12 +433,6 @@
|
||||||
"_id": "oILkLJlGNZl7KI1R",
|
"_id": "oILkLJlGNZl7KI1R",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "shortRest"
|
"type": "shortRest"
|
||||||
|
|
|
||||||
|
|
@ -597,12 +597,6 @@
|
||||||
"_id": "Mchd23xNQ4nSWw9X",
|
"_id": "Mchd23xNQ4nSWw9X",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": []
|
"changes": []
|
||||||
},
|
},
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
|
|
|
||||||
|
|
@ -330,12 +330,6 @@
|
||||||
"_id": "bYBrgiSwHwYfQyjn",
|
"_id": "bYBrgiSwHwYfQyjn",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.rules.conditionImmunities.hidden",
|
"key": "system.rules.conditionImmunities.hidden",
|
||||||
|
|
|
||||||
|
|
@ -340,23 +340,17 @@
|
||||||
"name": "Immovable Object",
|
"name": "Immovable Object",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.reduction",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "7",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "7V7qMq9in3AArwiM",
|
"_id": "7V7qMq9in3AArwiM",
|
||||||
"img": "icons/magic/defensive/shield-barrier-glowing-triangle-green.webp",
|
"img": "icons/magic/defensive/shield-barrier-glowing-triangle-green.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.reduction",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "7",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -510,12 +504,6 @@
|
||||||
"_id": "38MUzfbH64EMLVse",
|
"_id": "38MUzfbH64EMLVse",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -323,21 +323,15 @@
|
||||||
"_id": "WYqjt1tVqPEdVV5l",
|
"_id": "WYqjt1tVqPEdVV5l",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.disadvantageSources",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "Your next action",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.disadvantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "Your next action",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -462,12 +456,6 @@
|
||||||
"_id": "X8NF2OB23mSpDvlx",
|
"_id": "X8NF2OB23mSpDvlx",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -460,12 +460,6 @@
|
||||||
"_id": "yk5kR5OVLCgDWfgY",
|
"_id": "yk5kR5OVLCgDWfgY",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -234,23 +234,17 @@
|
||||||
"name": "Punish the Guilty",
|
"name": "Punish the Guilty",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "2",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "ID85zoIa5GfhNMti",
|
"_id": "ID85zoIa5GfhNMti",
|
||||||
"img": "icons/magic/control/buff-flight-wings-runes-red-yellow.webp",
|
"img": "icons/magic/control/buff-flight-wings-runes-red-yellow.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "2",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -386,12 +386,6 @@
|
||||||
"_id": "O8G0oOf9f3qzNOAT",
|
"_id": "O8G0oOf9f3qzNOAT",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -429,12 +429,6 @@
|
||||||
"_id": "EwZ8owroJxFpg81e",
|
"_id": "EwZ8owroJxFpg81e",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -510,12 +510,6 @@
|
||||||
"_id": "iBJ3YhEkVsGKEIVk",
|
"_id": "iBJ3YhEkVsGKEIVk",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.resistance.magical.immunity",
|
"key": "system.resistance.magical.immunity",
|
||||||
|
|
|
||||||
|
|
@ -273,12 +273,6 @@
|
||||||
"_id": "ihy3kvEGSOEKdNfT",
|
"_id": "ihy3kvEGSOEKdNfT",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary"
|
"type": "temporary"
|
||||||
|
|
|
||||||
|
|
@ -329,12 +329,6 @@
|
||||||
"_id": "d7sB1Qa1kJMnglqu",
|
"_id": "d7sB1Qa1kJMnglqu",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.rules.attack.damage.hpDamageTakenMultiplier",
|
"key": "system.rules.attack.damage.hpDamageTakenMultiplier",
|
||||||
|
|
|
||||||
|
|
@ -375,21 +375,15 @@
|
||||||
"_id": "w5VTwlHmUjl8XCQ4",
|
"_id": "w5VTwlHmUjl8XCQ4",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.advantageSources",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "Attacks made while Hidden",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.advantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "Attacks made while Hidden",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -346,21 +346,15 @@
|
||||||
"_id": "pZUEkMkCus4U7h8W",
|
"_id": "pZUEkMkCus4U7h8W",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.evasion",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "@system.evasion / 2",
|
||||||
}
|
"priority": 10
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.evasion",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "@system.evasion / 2",
|
|
||||||
"priority": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -250,23 +250,17 @@
|
||||||
"name": "Chevalier",
|
"name": "Chevalier",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.difficulty",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "2",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "w8wLcSsTiTU3mS7e",
|
"_id": "w8wLcSsTiTU3mS7e",
|
||||||
"img": "icons/environment/people/cavalry-heavy.webp",
|
"img": "icons/environment/people/cavalry-heavy.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.difficulty",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "2",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -319,23 +313,17 @@
|
||||||
"name": "Heavily Armored",
|
"name": "Heavily Armored",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.reduction",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "3",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "xZjvrNRRjskY3n3j",
|
"_id": "xZjvrNRRjskY3n3j",
|
||||||
"img": "icons/equipment/chest/breastplate-cuirass-steel-grey.webp",
|
"img": "icons/equipment/chest/breastplate-cuirass-steel-grey.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.reduction",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "3",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -378,12 +378,6 @@
|
||||||
"_id": "Xes6ZIE01CCN67KF",
|
"_id": "Xes6ZIE01CCN67KF",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -402,12 +402,6 @@
|
||||||
"_id": "zMut1PRphlwE0xOa",
|
"_id": "zMut1PRphlwE0xOa",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -235,21 +235,15 @@
|
||||||
"_id": "vwc93gtzFoFZj4XT",
|
"_id": "vwc93gtzFoFZj4XT",
|
||||||
"img": "icons/magic/defensive/shield-barrier-flaming-diamond-blue.webp",
|
"img": "icons/magic/defensive/shield-barrier-flaming-diamond-blue.webp",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.magical.resistance",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.magical.resistance",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -383,12 +377,6 @@
|
||||||
"_id": "KIyV2eXDmmymXY5y",
|
"_id": "KIyV2eXDmmymXY5y",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "shortRest"
|
"type": "shortRest"
|
||||||
|
|
|
||||||
|
|
@ -447,12 +447,6 @@
|
||||||
"_id": "YznseQP43jNrk07h",
|
"_id": "YznseQP43jNrk07h",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "scene"
|
"type": "scene"
|
||||||
|
|
|
||||||
|
|
@ -394,12 +394,6 @@
|
||||||
"_id": "3PY5KIG6d3dr3dty",
|
"_id": "3PY5KIG6d3dr3dty",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "any",
|
|
||||||
"range": "self"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.resistance.physical.resistance",
|
"key": "system.resistance.physical.resistance",
|
||||||
|
|
|
||||||
|
|
@ -313,21 +313,15 @@
|
||||||
"_id": "rpkjVdlJYI5dB99B",
|
"_id": "rpkjVdlJYI5dB99B",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.disadvantageSources",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "On your next action roll.",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.disadvantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "On your next action roll.",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -445,12 +439,6 @@
|
||||||
"_id": "edEZER9ImWicMwRb",
|
"_id": "edEZER9ImWicMwRb",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "scene"
|
"type": "scene"
|
||||||
|
|
|
||||||
|
|
@ -446,12 +446,6 @@
|
||||||
"_id": "Q5eeh0B6qaXFS1Ck",
|
"_id": "Q5eeh0B6qaXFS1Ck",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "shortRest",
|
"type": "shortRest",
|
||||||
|
|
|
||||||
|
|
@ -337,14 +337,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "OU05YZwFQffawtna",
|
"_id": "OU05YZwFQffawtna",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -404,12 +404,6 @@
|
||||||
"_id": "9UBLk9M87VIUziAQ",
|
"_id": "9UBLk9M87VIUziAQ",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -411,12 +411,6 @@
|
||||||
"_id": "xrm5786ckKbMYHjn",
|
"_id": "xrm5786ckKbMYHjn",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -235,23 +235,17 @@
|
||||||
"name": "Opportunist",
|
"name": "Opportunist",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "2",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "O03vYbyNLO3YPZGo",
|
"_id": "O03vYbyNLO3YPZGo",
|
||||||
"img": "icons/skills/targeting/crosshair-triple-strike-orange.webp",
|
"img": "icons/skills/targeting/crosshair-triple-strike-orange.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.rules.attack.damage.hpDamageMultiplier",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "2",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -237,21 +237,15 @@
|
||||||
"_id": "zTepuF1Z5OObQdSi",
|
"_id": "zTepuF1Z5OObQdSi",
|
||||||
"img": "icons/magic/death/bones-crossed-orange.webp",
|
"img": "icons/magic/death/bones-crossed-orange.webp",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -270,23 +270,17 @@
|
||||||
"name": "Ghost",
|
"name": "Ghost",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "xNkkl7nwKFkiB9Rv",
|
"_id": "xNkkl7nwKFkiB9Rv",
|
||||||
"img": "icons/magic/death/undead-ghost-scream-teal.webp",
|
"img": "icons/magic/death/undead-ghost-scream-teal.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -270,23 +270,17 @@
|
||||||
"name": "Ghost",
|
"name": "Ghost",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "kZhvwDvfcYQ10reO",
|
"_id": "kZhvwDvfcYQ10reO",
|
||||||
"img": "icons/magic/death/undead-ghost-scream-teal.webp",
|
"img": "icons/magic/death/undead-ghost-scream-teal.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -270,23 +270,17 @@
|
||||||
"name": "Ghost",
|
"name": "Ghost",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "QDXyAMk33kJGe6hU",
|
"_id": "QDXyAMk33kJGe6hU",
|
||||||
"img": "icons/magic/death/undead-ghost-scream-teal.webp",
|
"img": "icons/magic/death/undead-ghost-scream-teal.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -352,12 +352,6 @@
|
||||||
"_id": "6UgMuuJ8ZygbCsDh",
|
"_id": "6UgMuuJ8ZygbCsDh",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary"
|
"type": "temporary"
|
||||||
|
|
|
||||||
|
|
@ -278,14 +278,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "FOV6AzngiR0PZyuN",
|
"_id": "FOV6AzngiR0PZyuN",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -489,14 +489,8 @@
|
||||||
"_id": "xyXPmPIOtqXYF1TJ",
|
"_id": "xyXPmPIOtqXYF1TJ",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -421,14 +421,8 @@
|
||||||
"_id": "PdkhaTw2j15KJwBf",
|
"_id": "PdkhaTw2j15KJwBf",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -473,14 +467,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "ki4vrzrFcEYtGeJu",
|
"_id": "ki4vrzrFcEYtGeJu",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
|
|
@ -323,12 +323,6 @@
|
||||||
"_id": "6TZlstmWJPbeoL7i",
|
"_id": "6TZlstmWJPbeoL7i",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -297,21 +297,15 @@
|
||||||
"_id": "Fo5bLYlmYGtQFAGg",
|
"_id": "Fo5bLYlmYGtQFAGg",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.disadvantageSources",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "On attack rolls while you're within Very Close range of the Sentinel",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.disadvantageSources",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "On attack rolls while you're within Very Close range of the Sentinel",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -302,21 +302,15 @@
|
||||||
"_id": "yQ85C0JHRG1pwu8a",
|
"_id": "yQ85C0JHRG1pwu8a",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.evasion",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "@system.evasion / 2",
|
||||||
}
|
"priority": 10
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.evasion",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "@system.evasion / 2",
|
|
||||||
"priority": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
|
||||||
|
|
@ -376,23 +376,17 @@
|
||||||
"name": "Injured Wings",
|
"name": "Injured Wings",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.difficulty",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "zCi90lgFAaA7yrJG",
|
"_id": "zCi90lgFAaA7yrJG",
|
||||||
"img": "icons/commodities/biological/wing-green.webp",
|
"img": "icons/commodities/biological/wing-green.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.difficulty",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -873,12 +867,6 @@
|
||||||
"_id": "YUjdwrEZ4zn7WR9X",
|
"_id": "YUjdwrEZ4zn7WR9X",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -734,12 +734,6 @@
|
||||||
"_id": "xmzA6NC9zrulhzQs",
|
"_id": "xmzA6NC9zrulhzQs",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -321,23 +321,17 @@
|
||||||
"name": "Flying",
|
"name": "Flying",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.difficulty",
|
||||||
"target": "hostile",
|
"type": "add",
|
||||||
"range": "melee"
|
"value": "3",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "8o8yG73ZfrZ3hb5i",
|
"_id": "8o8yG73ZfrZ3hb5i",
|
||||||
"img": "icons/commodities/biological/wing-green.webp",
|
"img": "icons/commodities/biological/wing-green.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.difficulty",
|
|
||||||
"mode": 2,
|
|
||||||
"value": "3",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -390,23 +384,17 @@
|
||||||
"name": "Obsidian Scales",
|
"name": "Obsidian Scales",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "Jr9SlkRnkroulYhy",
|
"_id": "Jr9SlkRnkroulYhy",
|
||||||
"img": "icons/commodities/leather/scale-chitin-grey.webp",
|
"img": "icons/commodities/leather/scale-chitin-grey.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -551,12 +539,6 @@
|
||||||
"_id": "qtIaAZDW8QsjILgb",
|
"_id": "qtIaAZDW8QsjILgb",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": []
|
"changes": []
|
||||||
},
|
},
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
|
|
|
||||||
|
|
@ -319,12 +319,6 @@
|
||||||
"_id": "j2jYmYbtWXvq32yX",
|
"_id": "j2jYmYbtWXvq32yX",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -362,12 +362,6 @@
|
||||||
"_id": "k8LzBWRZo6VPqvpH",
|
"_id": "k8LzBWRZo6VPqvpH",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
|
||||||
|
|
@ -500,12 +500,6 @@
|
||||||
"_id": "g9bUvmw3jet6T99e",
|
"_id": "g9bUvmw3jet6T99e",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": []
|
"changes": []
|
||||||
},
|
},
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
|
|
@ -634,12 +628,6 @@
|
||||||
"_id": "40cFHuNdEvbUZ9rs",
|
"_id": "40cFHuNdEvbUZ9rs",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [],
|
"changes": [],
|
||||||
"duration": {
|
"duration": {
|
||||||
"type": "temporary",
|
"type": "temporary",
|
||||||
|
|
@ -768,12 +756,6 @@
|
||||||
"_id": "1JlRxa07i8T1a9x6",
|
"_id": "1JlRxa07i8T1a9x6",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
},
|
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.disadvantageSources",
|
"key": "system.disadvantageSources",
|
||||||
|
|
|
||||||
|
|
@ -259,23 +259,17 @@
|
||||||
"name": "Unyielding",
|
"name": "Unyielding",
|
||||||
"type": "base",
|
"type": "base",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": [
|
||||||
"enabled": false,
|
{
|
||||||
"type": "withinRange",
|
"key": "system.resistance.physical.resistance",
|
||||||
"target": "hostile",
|
"type": "override",
|
||||||
"range": "melee"
|
"value": "1",
|
||||||
}
|
"priority": null
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"_id": "D1lCoe9WVr6vYuD9",
|
"_id": "D1lCoe9WVr6vYuD9",
|
||||||
"img": "icons/magic/defensive/shield-barrier-blue.webp",
|
"img": "icons/magic/defensive/shield-barrier-blue.webp",
|
||||||
"changes": [
|
|
||||||
{
|
|
||||||
"key": "system.resistance.physical.resistance",
|
|
||||||
"mode": 5,
|
|
||||||
"value": "1",
|
|
||||||
"priority": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
|
|
@ -434,14 +428,8 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"_id": "9D6SteWlhbfMPhvt",
|
"_id": "9D6SteWlhbfMPhvt",
|
||||||
"system": {
|
"system": {
|
||||||
"rangeDependence": {
|
"changes": []
|
||||||
"enabled": false,
|
|
||||||
"type": "withinRange",
|
|
||||||
"target": "hostile",
|
|
||||||
"range": "melee"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"changes": [],
|
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": 0,
|
"startTime": 0,
|
||||||
"combat": null
|
"combat": null
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue