From 1a928e950c79f5870e0f0cd7bc5c82916ea023c2 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 29 Jan 2026 18:46:39 +0100 Subject: [PATCH 01/34] Initial v14 fixes --- .../sheets-configs/activeEffectConfig.mjs | 34 ++++++++ .../sheets/api/application-mixin.mjs | 29 +------ module/applications/ui/countdowns.mjs | 11 +-- module/canvas/placeables/templateLayer.mjs | 2 +- module/config/generalConfig.mjs | 39 ++++++++- module/data/action/beastformAction.mjs | 80 ------------------- module/data/activeEffect/baseEffect.mjs | 35 +++++++- module/data/activeEffect/beastformEffect.mjs | 1 + module/data/fields/actionField.mjs | 14 +++- module/data/item/beastform.mjs | 29 +++---- module/data/item/subclass.mjs | 6 +- module/dice/damageRoll.mjs | 2 +- module/dice/dhRoll.mjs | 4 +- module/dice/dualityRoll.mjs | 4 +- module/documents/activeEffect.mjs | 20 +++-- module/helpers/utils.mjs | 7 +- system.json | 8 +- templates/sheets/activeEffect/change.hbs | 17 ++++ templates/sheets/activeEffect/changes.hbs | 35 +++----- 19 files changed, 197 insertions(+), 180 deletions(-) create mode 100644 templates/sheets/activeEffect/change.hbs diff --git a/module/applications/sheets-configs/activeEffectConfig.mjs b/module/applications/sheets-configs/activeEffectConfig.mjs index d7b1b536..aa6d9d54 100644 --- a/module/applications/sheets-configs/activeEffectConfig.mjs +++ b/module/applications/sheets-configs/activeEffectConfig.mjs @@ -33,6 +33,7 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac settings: { template: 'systems/daggerheart/templates/sheets/activeEffect/settings.hbs' }, changes: { template: 'systems/daggerheart/templates/sheets/activeEffect/changes.hbs', + templates: ['systems/daggerheart/templates/sheets/activeEffect/change.hbs'], scrollable: ['ol[data-changes]'] }, footer: { template: 'systems/daggerheart/templates/sheets/global/tabs/tab-form-footer.hbs' } @@ -121,8 +122,41 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac })); } break; + case 'changes': + const fields = this.document.system.schema.fields.changes.element.fields; + partContext.changes = await Promise.all( + foundry.utils + .deepClone(context.source.changes) + .map((c, i) => this._prepareChangeContext(c, i, fields)) + ); + break; } return partContext; } + + _prepareChangeContext(change, index, fields) { + if (typeof change.value !== 'string') change.value = JSON.stringify(change.value); + const defaultPriority = game.system.api.documents.DhActiveEffect.CHANGE_TYPES[change.type]?.defaultPriority; + Object.assign( + change, + ['key', 'type', 'value', 'priority'].reduce((paths, fieldName) => { + paths[`${fieldName}Path`] = `system.changes.${index}.${fieldName}`; + return paths; + }, {}) + ); + return ( + game.system.api.documents.DhActiveEffect.CHANGE_TYPES[change.type].render?.( + change, + index, + defaultPriority + ) ?? + renderTemplate('systems/daggerheart/templates/sheets/activeEffect/change.hbs', { + change, + index, + defaultPriority, + fields + }) + ); + } } diff --git a/module/applications/sheets/api/application-mixin.mjs b/module/applications/sheets/api/application-mixin.mjs index 3c0444eb..ab6a352d 100644 --- a/module/applications/sheets/api/application-mixin.mjs +++ b/module/applications/sheets/api/application-mixin.mjs @@ -72,18 +72,6 @@ const typeSettingsMap = { */ export default function DHApplicationMixin(Base) { class DHSheetV2 extends HandlebarsApplicationMixin(Base) { - /** - * @param {DHSheetV2Configuration} [options={}] - */ - constructor(options = {}) { - super(options); - /** - * @type {foundry.applications.ux.DragDrop[]} - * @private - */ - this._dragDrop = this._createDragDropHandlers(); - } - #nonHeaderAttribution = ['environment', 'ancestry', 'community', 'domainCard']; /** @@ -177,7 +165,7 @@ export default function DHApplicationMixin(Base) { /**@inheritdoc */ _attachPartListeners(partId, htmlElement, options) { super._attachPartListeners(partId, htmlElement, options); - this._dragDrop.forEach(d => d.bind(htmlElement)); + // this._dragDrop.forEach(d => d.bind(htmlElement)); // Handle delta inputs for (const deltaInput of htmlElement.querySelectorAll('input[data-allow-delta]')) { @@ -350,21 +338,6 @@ export default function DHApplicationMixin(Base) { /* Drag and Drop */ /* -------------------------------------------- */ - /** - * Creates drag-drop handlers from the configured options. - * @returns {foundry.applications.ux.DragDrop[]} - * @private - */ - _createDragDropHandlers() { - return this.options.dragDrop.map(d => { - d.callbacks = { - dragstart: this._onDragStart.bind(this), - drop: this._onDrop.bind(this) - }; - return new foundry.applications.ux.DragDrop.implementation(d); - }); - } - /** * Handle dragStart event. * @param {DragEvent} event diff --git a/module/applications/ui/countdowns.mjs b/module/applications/ui/countdowns.mjs index 42920a4a..0f83a05f 100644 --- a/module/applications/ui/countdowns.mjs +++ b/module/applications/ui/countdowns.mjs @@ -52,10 +52,6 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application } }; - get element() { - return document.body.querySelector('.daggerheart.dh-style.countdowns'); - } - /**@inheritdoc */ async _renderFrame(options) { const frame = await super._renderFrame(options); @@ -68,6 +64,7 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application const header = frame.querySelector('.window-header'); header.querySelector('button[data-action="close"]').remove(); + header.querySelector('button[data-action="toggleControls"]').remove(); if (game.user.isGM) { const editTooltip = game.i18n.localize('DAGGERHEART.APPLICATIONS.CountdownEdit.editTitle'); @@ -278,10 +275,8 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application return acc; }, {}) }; - await emitAsGM(GMUpdateEvent.UpdateCountdowns, - DhCountdowns.gmSetSetting.bind(settings), - settings, null, { - refreshType: RefreshType.Countdown + await emitAsGM(GMUpdateEvent.UpdateCountdowns, DhCountdowns.gmSetSetting.bind(settings), settings, null, { + refreshType: RefreshType.Countdown }); } diff --git a/module/canvas/placeables/templateLayer.mjs b/module/canvas/placeables/templateLayer.mjs index 551a06cc..55bd7eb2 100644 --- a/module/canvas/placeables/templateLayer.mjs +++ b/module/canvas/placeables/templateLayer.mjs @@ -6,7 +6,7 @@ export default class DhTemplateLayer extends foundry.canvas.layers.TemplateLayer order: 2, title: 'CONTROLS.GroupMeasure', icon: 'fa-solid fa-ruler-combined', - visible: game.user.can('TEMPLATE_CREATE'), + visible: game.user.can('REGION_CREATE'), onChange: (event, active) => { if (active) canvas.templates.activate(); }, diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index be1dfce1..677351cd 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -70,8 +70,12 @@ export const range = { } }; +/* circle|cone|rect|ray used to be CONST.MEASURED_TEMPLATE_TYPES. Hardcoded for now */ export const templateTypes = { - ...CONST.MEASURED_TEMPLATE_TYPES, + CIRCLE: 'circle', + CONE: 'cone', + RECTANGLE: 'rect', + RAY: 'ray', EMANATION: 'emanation', INFRONT: 'inFront' }; @@ -737,3 +741,36 @@ export const sceneRangeMeasurementSetting = { label: 'Custom' } }; + +export const activeEffectModes = { + custom: { + id: 'custom', + priority: 0, + label: 'EFFECT.CHANGES.TYPES.custom' + }, + multiply: { + id: 'multiply', + priority: 10, + label: 'EFFECT.CHANGES.TYPES.multiply' + }, + add: { + id: 'add', + priority: 20, + label: 'EFFECT.CHANGES.TYPES.add' + }, + downgrade: { + id: 'downgrade', + priority: 30, + label: 'EFFECT.CHANGES.TYPES.downgrade' + }, + upgrade: { + id: 'upgrade', + priority: 40, + label: 'EFFECT.CHANGES.TYPES.upgrade' + }, + override: { + id: 'override', + priority: 50, + label: 'EFFECT.CHANGES.TYPES.override' + } +}; diff --git a/module/data/action/beastformAction.mjs b/module/data/action/beastformAction.mjs index 657cfde2..8855b122 100644 --- a/module/data/action/beastformAction.mjs +++ b/module/data/action/beastformAction.mjs @@ -2,84 +2,4 @@ import DHBaseAction from './baseAction.mjs'; export default class DhBeastformAction extends DHBaseAction { static extraSchemas = [...super.extraSchemas, 'beastform']; - - /* async use(event, options) { - const beastformConfig = this.prepareBeastformConfig(); - - const abort = await this.handleActiveTransformations(); - if (abort) return; - - const calcCosts = game.system.api.fields.ActionFields.CostField.calcCosts.call(this, this.cost); - const hasCost = game.system.api.fields.ActionFields.CostField.hasCost.call(this, calcCosts); - if (!hasCost) { - ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.insufficientResources')); - return; - } - - const { selected, evolved, hybrid } = await BeastformDialog.configure(beastformConfig, this.item); - if (!selected) return; - - const result = await super.use(event, options); - if (!result) return; - - await this.transform(selected, evolved, hybrid); - } - - prepareBeastformConfig(config) { - const settingsTiers = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers).tiers; - const actorLevel = this.actor.system.levelData.level.current; - const actorTier = - Object.values(settingsTiers).find( - tier => actorLevel >= tier.levels.start && actorLevel <= tier.levels.end - ) ?? 1; - - return { - tierLimit: this.beastform.tierAccess.exact ?? actorTier - }; - } - - async transform(selectedForm, evolvedData, hybridData) { - const formData = evolvedData?.form ? evolvedData.form.toObject() : selectedForm.toObject(); - const beastformEffect = formData.effects.find(x => x.type === 'beastform'); - if (!beastformEffect) { - ui.notifications.error('DAGGERHEART.UI.Notifications.beastformMissingEffect'); - return; - } - - if (evolvedData?.form) { - const evolvedForm = selectedForm.effects.find(x => x.type === 'beastform'); - if (!evolvedForm) { - ui.notifications.error('DAGGERHEART.UI.Notifications.beastformMissingEffect'); - return; - } - - beastformEffect.changes = [...beastformEffect.changes, ...evolvedForm.changes]; - formData.system.features = [...formData.system.features, ...selectedForm.system.features.map(x => x.uuid)]; - } - - if (selectedForm.system.beastformType === CONFIG.DH.ITEM.beastformTypes.hybrid.id) { - formData.system.advantageOn = Object.values(hybridData.advantages).reduce((advantages, formCategory) => { - Object.keys(formCategory).forEach(advantageKey => { - advantages[advantageKey] = formCategory[advantageKey]; - }); - return advantages; - }, {}); - formData.system.features = [ - ...formData.system.features, - ...Object.values(hybridData.features).flatMap(x => Object.keys(x)) - ]; - } - - this.actor.createEmbeddedDocuments('Item', [formData]); - } - - async handleActiveTransformations() { - const beastformEffects = this.actor.effects.filter(x => x.type === 'beastform'); - const existingEffects = beastformEffects.length > 0; - await this.actor.deleteEmbeddedDocuments( - 'ActiveEffect', - beastformEffects.map(x => x.id) - ); - return existingEffects; - } */ } diff --git a/module/data/activeEffect/baseEffect.mjs b/module/data/activeEffect/baseEffect.mjs index ea74531d..b8f2c65f 100644 --- a/module/data/activeEffect/baseEffect.mjs +++ b/module/data/activeEffect/baseEffect.mjs @@ -12,11 +12,27 @@ * "Anything that uses another data model value as its value": +1 - Effects that increase traits have to be calculated first at Base priority. (EX: Raise evasion by half your agility) */ -export default class BaseEffect extends foundry.abstract.TypeDataModel { +export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { static defineSchema() { const fields = foundry.data.fields; return { + ...super.defineSchema(), + changes: new fields.ArrayField( + new fields.SchemaField({ + key: new fields.StringField({ required: true }), + type: new fields.StringField({ + required: true, + blank: false, + choices: CONFIG.DH.GENERAL.activeEffectModes, + initial: CONFIG.DH.GENERAL.activeEffectModes.add.id, + validate: BaseEffect.#validateType + }), + value: new fields.AnyField({ required: true, nullable: true, serializable: true, initial: '' }), + phase: new fields.StringField({ required: true, blank: false, initial: 'initial' }), + priority: new fields.NumberField() + }) + ), rangeDependence: new fields.SchemaField({ enabled: new fields.BooleanField({ required: true, @@ -45,6 +61,23 @@ export default class BaseEffect extends foundry.abstract.TypeDataModel { }; } + /** + * Validate that an {@link EffectChangeData#type} string is well-formed. + * @param {string} type The string to be validated + * @returns {true} + * @throws {Error} An error if the type string is malformed + */ + static #validateType(type) { + if (type.length < 3) throw new Error('must be at least three characters long'); + if (!/^custom\.-?\d+$/.test(type) && !type.split('.').every(s => /^[a-z0-9]+$/i.test(s))) { + throw new Error( + 'A change type must either be a sequence of dot-delimited, alpha-numeric substrings or of the form' + + ' "custom.{number}"' + ); + } + return true; + } + static getDefaultObject() { return { name: 'New Effect', diff --git a/module/data/activeEffect/beastformEffect.mjs b/module/data/activeEffect/beastformEffect.mjs index 65e36606..53430ba3 100644 --- a/module/data/activeEffect/beastformEffect.mjs +++ b/module/data/activeEffect/beastformEffect.mjs @@ -5,6 +5,7 @@ export default class BeastformEffect extends BaseEffect { static defineSchema() { const fields = foundry.data.fields; return { + ...super.defineSchema(), characterTokenData: new fields.SchemaField({ usesDynamicToken: new fields.BooleanField({ initial: false }), tokenImg: new fields.FilePathField({ diff --git a/module/data/fields/actionField.mjs b/module/data/fields/actionField.mjs index 0d71ab86..a6d0abbe 100644 --- a/module/data/fields/actionField.mjs +++ b/module/data/fields/actionField.mjs @@ -111,9 +111,17 @@ export class ActionField extends foundry.data.fields.ObjectField { * @param {object} sourceData Candidate source data of the root model. * @param {any} fieldData The value of this field within the source data. */ - migrateSource(sourceData, fieldData) { - const cls = this.getModel(fieldData); - if (cls) cls.migrateDataSafe(fieldData); + _migrate(sourceData, _fieldData) { + const source = sourceData ?? this.options.initial; + if (!source) return sourceData; + + const cls = this.getModel(source); + if (cls) { + cls.migrateDataSafe(source); + return source; + } + + return sourceData; } } diff --git a/module/data/item/beastform.mjs b/module/data/item/beastform.mjs index dd491169..9c8df9ea 100644 --- a/module/data/item/beastform.mjs +++ b/module/data/item/beastform.mjs @@ -101,12 +101,13 @@ export default class DHBeastform extends BaseDataItem { const effect = this.parent.effects.find(x => x.type === 'beastform'); if (!effect) return null; - const traitBonus = effect.changes.find(x => x.key === `system.traits.${this.mainTrait}.value`)?.value ?? 0; - const evasionBonus = effect.changes.find(x => x.key === 'system.evasion')?.value ?? 0; + const traitBonus = + effect.system.changes.find(x => x.key === `system.traits.${this.mainTrait}.value`)?.value ?? 0; + const evasionBonus = effect.system.changes.find(x => x.key === 'system.evasion')?.value ?? 0; - const damageDiceIndex = effect.changes.find(x => x.key === 'system.rules.attack.damage.diceIndex'); + const damageDiceIndex = effect.system.changes.find(x => x.key === 'system.rules.attack.damage.diceIndex'); const damageDice = damageDiceIndex ? Object.keys(CONFIG.DH.GENERAL.diceTypes)[damageDiceIndex.value] : null; - const damageBonus = effect.changes.find(x => x.key === 'system.rules.attack.damage.bonus')?.value ?? 0; + const damageBonus = effect.system.changes.find(x => x.key === 'system.rules.attack.damage.bonus')?.value ?? 0; return { trait: game.i18n.localize(CONFIG.DH.ACTOR.abilities[this.mainTrait].label), @@ -169,17 +170,17 @@ export default class DHBeastform extends BaseDataItem { const beastformEffect = this.parent.effects.find(x => x.type === 'beastform'); await beastformEffect.updateSource({ - changes: [ - ...beastformEffect.changes, - { - key: 'system.advantageSources', - mode: 2, - value: Object.values(this.advantageOn) - .map(x => x.value) - .join(', ') - } - ], system: { + changes: [ + ...beastformEffect.system.changes, + { + key: 'system.advantageSources', + mode: 2, + value: Object.values(this.advantageOn) + .map(x => x.value) + .join(', ') + } + ], characterTokenData: { usesDynamicToken: this.parent.parent.prototypeToken.ring.enabled, tokenImg: this.parent.parent.prototypeToken.texture.src, diff --git a/module/data/item/subclass.mjs b/module/data/item/subclass.mjs index 375588fb..33acb311 100644 --- a/module/data/item/subclass.mjs +++ b/module/data/item/subclass.mjs @@ -51,6 +51,9 @@ export default class DHSubclass extends BaseDataItem { } async _preCreate(data, options, user) { + const allowed = await super._preCreate(data, options, user); + if (allowed === false) return; + if (this.actor?.type === 'character') { const dataUuid = data.uuid ?? data._stats.compendiumSource ?? `Item.${data._id}`; if (this.actor.system.class.subclass) { @@ -85,8 +88,5 @@ export default class DHSubclass extends BaseDataItem { } } } - - const allowed = await super._preCreate(data, options, user); - if (allowed === false) return; } } diff --git a/module/dice/damageRoll.mjs b/module/dice/damageRoll.mjs index cd26eb21..e1acaf40 100644 --- a/module/dice/damageRoll.mjs +++ b/module/dice/damageRoll.mjs @@ -191,7 +191,7 @@ export default class DamageRoll extends DHRoll { if (config.data.parent.appliedEffects) { // Bardic Rally const rallyChoices = config.data?.parent?.appliedEffects.reduce((a, c) => { - const change = c.changes.find(ch => ch.key === 'system.bonuses.rally'); + const change = c.system.changes.find(ch => ch.key === 'system.bonuses.rally'); if (change) a.push({ value: c.id, label: change.value }); return a; }, []); diff --git a/module/dice/dhRoll.mjs b/module/dice/dhRoll.mjs index 1977c7ea..317536a0 100644 --- a/module/dice/dhRoll.mjs +++ b/module/dice/dhRoll.mjs @@ -249,12 +249,12 @@ export default class DHRoll extends Roll { const changeKeys = this.getActionChangeKeys(); return ( this.options.effects?.reduce((acc, effect) => { - if (effect.changes.some(x => changeKeys.some(key => x.key.includes(key)))) { + if (effect.system.changes.some(x => changeKeys.some(key => x.key.includes(key)))) { acc[effect.id] = { id: effect.id, name: effect.name, description: effect.description, - changes: effect.changes, + changes: effect.system.changes, origEffect: effect, selected: !effect.disabled }; diff --git a/module/dice/dualityRoll.mjs b/module/dice/dualityRoll.mjs index e65d0ff5..a19c7441 100644 --- a/module/dice/dualityRoll.mjs +++ b/module/dice/dualityRoll.mjs @@ -67,7 +67,7 @@ export default class DualityRoll extends D20Roll { setRallyChoices() { return this.data?.parent?.appliedEffects.reduce((a, c) => { - const change = c.changes.find(ch => ch.key === 'system.bonuses.rally'); + const change = c.system.changes.find(ch => ch.key === 'system.bonuses.rally'); if (change) a.push({ value: c.id, label: change.value }); return a; }, []); @@ -179,7 +179,7 @@ export default class DualityRoll extends D20Roll { static async buildConfigure(config = {}, message = {}) { config.dialog ??= {}; config.guaranteedCritical = config.data?.parent?.appliedEffects.reduce((a, c) => { - const change = c.changes.find(ch => ch.key === 'system.rules.roll.guaranteedCritical'); + const change = c.system.changes.find(ch => ch.key === 'system.rules.roll.guaranteedCritical'); if (change) a = true; return a; }, false); diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index 5e9b0c3b..330bd838 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -109,17 +109,25 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { /**@inheritdoc*/ static applyField(model, change, field) { - change.value = DhActiveEffect.getChangeValue(model, change, change.effect); + change.key = DhActiveEffect.getChangeKey(model, change, change.effect); super.applyField(model, change, field); } /** */ + static getChangeKey(model, change, effect) { + return DhActiveEffect.parseValue(change.key, model, change, effect); + } + static getChangeValue(model, change, effect) { - let value = change.value; - const isOriginTarget = value.toLowerCase().includes('origin.@'); + return DhActiveEffect.parseValue(change.value, model, change, effect); + } + + static parseValue(value, model, change, effect) { + let key = value; + const isOriginTarget = key.toLowerCase().includes('origin.@'); let parseModel = model; if (isOriginTarget && effect.origin) { - value = change.value.replaceAll(/origin\.@/gi, '@'); + key = change.key.replaceAll(/origin\.@/gi, '@'); try { const originEffect = foundry.utils.fromUuidSync(effect.origin); const doc = @@ -130,8 +138,8 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { } catch (_) {} } - const evalValue = this.effectSafeEval(itemAbleRollParse(value, parseModel, effect.parent)); - return evalValue ?? value; + const evalValue = this.effectSafeEval(itemAbleRollParse(key, parseModel, effect.parent)); + return evalValue ?? key; } /** diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index c0dd45bd..bb9a0cfa 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -415,7 +415,12 @@ export async function createEmbeddedItemWithEffects(actor, baseData, update) { ...baseData, id: data.id, uuid: data.uuid, - effects: data.effects?.map(effect => effect.toObject()) + _uuid: data.uuid, + effects: data.effects?.map(effect => effect.toObject()), + _stats: { + ...data._stats, + compendiumSource: data.pack ? `Compendium.${data.pack}.Item.${data.id}` : null + } } ]); diff --git a/system.json b/system.json index 4a5eee0f..bd650096 100644 --- a/system.json +++ b/system.json @@ -2,11 +2,11 @@ "id": "daggerheart", "title": "Daggerheart", "description": "An unofficial implementation of the Daggerheart system", - "version": "1.6.1", + "version": "2.0.0", "compatibility": { - "minimum": "13.346", - "verified": "13.351", - "maximum": "13" + "minimum": "14.353", + "verified": "14.353", + "maximum": "14" }, "authors": [ { diff --git a/templates/sheets/activeEffect/change.hbs b/templates/sheets/activeEffect/change.hbs new file mode 100644 index 00000000..60cb0d85 --- /dev/null +++ b/templates/sheets/activeEffect/change.hbs @@ -0,0 +1,17 @@ +
  • +
    + {{formInput fields.key name=change.keyPath value=change.key}} +
    +
    + {{formInput fields.type name=change.typePath value=change.type localize=true}} +
    +
    + {{formInput fields.value name=change.valuePath value=change.value elementType="input"}} +
    +
    + {{formInput fields.priority name=change.priorityPath value=change.priority placeholder=defaultPriority}} +
    +
    + +
    +
  • diff --git a/templates/sheets/activeEffect/changes.hbs b/templates/sheets/activeEffect/changes.hbs index 75f49e4a..8604daf6 100644 --- a/templates/sheets/activeEffect/changes.hbs +++ b/templates/sheets/activeEffect/changes.hbs @@ -1,31 +1,16 @@
    -
    {{localize "EFFECT.ChangeKey"}}
    -
    {{localize "EFFECT.ChangeMode"}}
    -
    {{localize "EFFECT.ChangeValue"}}
    -
    {{localize "EFFECT.ChangePriority"}}
    -
    +
    {{localize "EFFECT.FIELDS.changes.element.key.label"}}
    +
    {{localize "EFFECT.FIELDS.changes.element.type.label"}}
    +
    {{localize "EFFECT.FIELDS.changes.element.value.label"}}
    +
    {{localize "EFFECT.FIELDS.changes.element.priority.label"}}
    +
    + +
      - {{#each source.changes as |change i|}} - {{#with ../fields.changes.element.fields as |changeFields|}} -
    1. -
      - -
      -
      - {{formInput changeFields.mode name=(concat "changes." i ".mode") value=change.mode choices=@root.modes}} -
      -
      - {{formInput changeFields.value name=(concat "changes." i ".value") value=change.value}} -
      -
      - {{formInput changeFields.priority name=(concat "changes." i ".priority") value=change.priority - placeholder=(lookup ../../priorities change.mode)}} -
      -
      -
    2. - {{/with}} + {{#each changes as |change|}} + {{{change}}} {{/each}}
    -
    \ No newline at end of file + From 6e2d70094540f4750a56e0857d1cefedc685aca8 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 29 Jan 2026 18:51:13 +0100 Subject: [PATCH 02/34] . --- templates/sheets/activeEffect/details.hbs | 3 +- templates/sheets/activeEffect/settings.hbs | 67 +++++++++++++--------- 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/templates/sheets/activeEffect/details.hbs b/templates/sheets/activeEffect/details.hbs index 22c95a1e..72e77d5e 100644 --- a/templates/sheets/activeEffect/details.hbs +++ b/templates/sheets/activeEffect/details.hbs @@ -12,4 +12,5 @@ {{/if}} {{formGroup fields.statuses value=source.statuses options=statuses rootId=rootId classes="statuses"}} - + {{formGroup fields.showIcon value=source.showIcon options=showIconOptions rootId=rootId}} + \ No newline at end of file diff --git a/templates/sheets/activeEffect/settings.hbs b/templates/sheets/activeEffect/settings.hbs index cf98c786..6ccd9ee9 100644 --- a/templates/sheets/activeEffect/settings.hbs +++ b/templates/sheets/activeEffect/settings.hbs @@ -7,34 +7,47 @@ {{formGroup systemFields.rangeDependence.fields.target value=source.system.rangeDependence.target localize=true }} {{formGroup systemFields.rangeDependence.fields.range value=source.system.rangeDependence.range localize=true }} +{{!-- + {{#if start}} +
    + {{localize "EFFECT.START.Header"}} +
    + {{localize "EFFECT.FIELDS.start.time.label"}} +
    {{start.time}}
    +
    + {{#if start.combat}} +
    + {{localize "DOCUMENT.Combat"}} +
    + {{localize "EFFECT.START.Combat" round=start.round turn=start.turn}} +
    +
    + {{#if start.combatant}} +
    + {{localize "DOCUMENT.Combatant"}} +
    + {{localize "EFFECT.START.Combatant" combatant=start.combatantName initiative=start.combatantInitiative}} +
    +
    + {{/if}} + {{/if}} +
    + {{/if}} --}} -
    - {{formGroup fields.duration.fields.seconds value=source.duration.seconds rootId=rootId}} - {{formGroup fields.duration.fields.startTime value=source.duration.startTime rootId=rootId}} -
    - -
    -
    - + {{!--
    + {{localize "EFFECT.DURATION.Header"}} +
    +
    - - {{formInput fields.duration.fields.rounds value=source.duration.rounds - id=(concat rootId "-duration.rounds")}} - - {{formInput fields.duration.fields.turns value=source.duration.turns - id=(concat rootId "-duration.turns")}} + {{formInput fields.duration.fields.value value=source.duration.value id=(concat rootId "-duration.value") + aria=(object label=(localize "EFFECT.FIELDS.duration.value.label"))}} + {{formInput fields.duration.fields.units value=source.duration.units id=(concat rootId "-duration.units") + options=durationUnits aria=(object label=(localize "EFFECT.FIELDS.duration.units.label"))}}
    -
    - -
    - - {{formInput fields.duration.fields.startRound value=source.duration.startRound - id=(concat rootId "-duration.startRound")}} - - {{formInput fields.duration.fields.startTurn value=source.duration.startTurn - id=(concat rootId "-duration.startTurn")}} -
    -
    -
    - + {{formGroup fields.duration.fields.expiry choices=expiryEvents value=source.duration.expiry rootId=rootId}} +
    --}} + \ No newline at end of file From 2c36da84334e7a7b924d6932623e7e239a3b82b4 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 31 Jan 2026 01:46:24 +0100 Subject: [PATCH 03/34] Raised v14 version and fixed startup warnings --- module/documents/activeEffect.mjs | 19 ++++++------------- system.json | 4 ++-- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index 330bd838..c34ec62f 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -108,22 +108,15 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { /* -------------------------------------------- */ /**@inheritdoc*/ - static applyField(model, change, field) { - change.key = DhActiveEffect.getChangeKey(model, change, change.effect); - super.applyField(model, change, field); - } - - /** */ - static getChangeKey(model, change, effect) { - return DhActiveEffect.parseValue(change.key, model, change, effect); + static applyChangeField(model, change, field) { + change.value = Number.isNumeric(change.value) + ? change.value + : DhActiveEffect.getChangeValue(model, change, change.effect); + super.applyChangeField(model, change, field); } static getChangeValue(model, change, effect) { - return DhActiveEffect.parseValue(change.value, model, change, effect); - } - - static parseValue(value, model, change, effect) { - let key = value; + let key = change.value; const isOriginTarget = key.toLowerCase().includes('origin.@'); let parseModel = model; if (isOriginTarget && effect.origin) { diff --git a/system.json b/system.json index bd650096..48a2319a 100644 --- a/system.json +++ b/system.json @@ -4,8 +4,8 @@ "description": "An unofficial implementation of the Daggerheart system", "version": "2.0.0", "compatibility": { - "minimum": "14.353", - "verified": "14.353", + "minimum": "14.354", + "verified": "14.354", "maximum": "14" }, "authors": [ From 4c51bb589996b4b643c5b9aac11781a26946e780 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 31 Jan 2026 15:08:07 +0100 Subject: [PATCH 04/34] 1613-Rolltable-delete-formula-buttons --- module/applications/sheets/rollTables/rollTable.mjs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index 9ead6814..edb0a734 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -108,14 +108,16 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa getSystemFlagUpdate() { const deleteUpdate = Object.keys(this.document._source.flags.daggerheart?.altFormula ?? {}).reduce( (acc, formulaKey) => { - if (!this.daggerheartFlag.altFormula[formulaKey]) acc.altFormula[`-=${formulaKey}`] = null; + if (!this.daggerheartFlag.altFormula[formulaKey]) + acc.altFormula[formulaKey] = foundry.data.operators.ForcedDeletion.create(); return acc; }, { altFormula: {} } ); - return { ['flags.daggerheart']: foundry.utils.mergeObject(this.daggerheartFlag.toObject(), deleteUpdate) }; + const flagData = this.daggerheartFlag.toObject(); + return { ...flagData, altFormula: { ...flagData.altFormula, ...deleteUpdate.altFormula } }; } static async #addFormula() { @@ -127,7 +129,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa static async #removeFormula(_event, target) { await this.daggerheartFlag.updateSource({ - [`altFormula.-=${target.dataset.key}`]: null + [`altFormula.${target.dataset.key}`]: foundry.data.operators.ForcedDeletion.create() }); this.render({ internalRefresh: true }); } From 9553f3387f3987cca55a16c9f1b8b4f78e89a358 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sat, 31 Jan 2026 15:09:07 +0100 Subject: [PATCH 05/34] Fixed sceneConfig, sceneNavigation and SceneEnvironments (#1616) --- .../scene/sceneConfigSettings.mjs | 8 +++ module/applications/ui/sceneNavigation.mjs | 5 +- styles/less/ui/scene-config/scene-config.less | 2 + .../ui/sceneNavigation/scene-navigation.hbs | 52 ++++++++++++++++++- 4 files changed, 64 insertions(+), 3 deletions(-) diff --git a/module/applications/scene/sceneConfigSettings.mjs b/module/applications/scene/sceneConfigSettings.mjs index 98e18f09..dda4330a 100644 --- a/module/applications/scene/sceneConfigSettings.mjs +++ b/module/applications/scene/sceneConfigSettings.mjs @@ -62,7 +62,15 @@ export default class DhSceneConfigSettings extends foundry.applications.sheets.S } async _onDrop(event) { + event.stopPropagation(); const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event); + if (data.type === 'Level') { + const level = await foundry.documents.Level.fromDropData(data); + if (level?.parent === this.document) return this._onSortLevel(event, level); + + return; + } + const item = await foundry.utils.fromUuid(data.uuid); if (item instanceof game.system.api.documents.DhpActor && item.type === 'environment') { let sceneUuid = data.uuid; diff --git a/module/applications/ui/sceneNavigation.mjs b/module/applications/ui/sceneNavigation.mjs index 0a3e08a5..bc906dac 100644 --- a/module/applications/ui/sceneNavigation.mjs +++ b/module/applications/ui/sceneNavigation.mjs @@ -31,7 +31,7 @@ export default class DhSceneNavigation extends foundry.applications.ui.SceneNavi const environments = daggerheartInfo.sceneEnvironments.filter( x => x && x.testUserPermission(game.user, 'LIMITED') ); - const hasEnvironments = environments.length > 0 && x.isView; + const hasEnvironments = environments.length > 0 && x.active; return { ...x, hasEnvironments, @@ -39,9 +39,10 @@ export default class DhSceneNavigation extends foundry.applications.ui.SceneNavi environments: environments }; }); + context.scenes.active = extendScenes(context.scenes.active); context.scenes.inactive = extendScenes(context.scenes.inactive); - + context.scenes.viewed = context.scenes.viewed ? extendScenes([context.scenes.viewed])[0] : null; return context; } diff --git a/styles/less/ui/scene-config/scene-config.less b/styles/less/ui/scene-config/scene-config.less index 664e7526..ba1afb0b 100644 --- a/styles/less/ui/scene-config/scene-config.less +++ b/styles/less/ui/scene-config/scene-config.less @@ -13,6 +13,8 @@ .application.sheet.scene-config { .sheet-tabs.tabs { + font-size: 12px; + a[data-tab='dh'] { display: flex; align-items: center; diff --git a/templates/ui/sceneNavigation/scene-navigation.hbs b/templates/ui/sceneNavigation/scene-navigation.hbs index 41e9e3e8..933d2074 100644 --- a/templates/ui/sceneNavigation/scene-navigation.hbs +++ b/templates/ui/sceneNavigation/scene-navigation.hbs @@ -1,10 +1,40 @@ + + + +{{#*inline ".scene"}} +
  • +
    + {{ name }} + {{#if users}} +
      + {{#each users}} +
    • {{ letter }}
    • + {{/each}} +
    + {{/if}} +
    + {{#if hasEnvironments}} + + {{/if}} +
  • +{{/inline}} + From cd52aa8f9ceab205263a1f5037b6342609c65e6c Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 31 Jan 2026 18:31:10 +0100 Subject: [PATCH 06/34] Updated from special database update syntax to DataFieldOperators --- .../characterCreation/characterCreation.mjs | 2 +- module/applications/dialogs/characterResetDialog.mjs | 6 +++--- module/applications/dialogs/tagTeamDialog.mjs | 2 +- module/applications/levelup/levelup.mjs | 6 +++--- module/applications/scene/sceneConfigSettings.mjs | 2 +- module/applications/settings/homebrewSettings.mjs | 12 ++++++------ .../sheets-configs/adversary-settings.mjs | 2 +- .../sheets-configs/character-settings.mjs | 6 +++--- .../sheets-configs/companion-settings.mjs | 2 +- .../sheets-configs/environment-settings.mjs | 2 +- .../sheets-configs/setting-feature-config.mjs | 2 +- .../sheets-configs/token-config-mixin.mjs | 2 +- module/applications/sheets/items/beastform.mjs | 2 +- module/applications/sheets/rollTables/rollTable.mjs | 5 ++--- module/applications/ui/countdownEdit.mjs | 2 +- module/data/activeEffect/beastformEffect.mjs | 2 +- module/data/actor/base.mjs | 4 +--- module/data/actor/party.mjs | 2 +- module/data/fields/actionField.mjs | 4 ++-- module/data/item/armor.mjs | 2 +- module/data/item/base.mjs | 6 +++--- module/data/item/weapon.mjs | 2 +- module/documents/actor.mjs | 4 ++-- module/helpers/utils.mjs | 4 ++-- module/systemRegistration/migrations.mjs | 2 +- 25 files changed, 42 insertions(+), 45 deletions(-) diff --git a/module/applications/characterCreation/characterCreation.mjs b/module/applications/characterCreation/characterCreation.mjs index aa764c56..e6c0f299 100644 --- a/module/applications/characterCreation/characterCreation.mjs +++ b/module/applications/characterCreation/characterCreation.mjs @@ -554,7 +554,7 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl experiences: { ...this.setup.experiences, ...Object.keys(this.character.system.experiences).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[`${key}`] = _del; return acc; }, {}) } diff --git a/module/applications/dialogs/characterResetDialog.mjs b/module/applications/dialogs/characterResetDialog.mjs index 0836af9c..aecebc7c 100644 --- a/module/applications/dialogs/characterResetDialog.mjs +++ b/module/applications/dialogs/characterResetDialog.mjs @@ -77,8 +77,8 @@ export default class CharacterResetDialog extends HandlebarsApplicationMixin(App if (!this.data.optional.portrait.keep) { foundry.utils.setProperty(update, 'img', this.actor.schema.fields.img.initial(this.actor)); - foundry.utils.setProperty(update, 'prototypeToken.==texture', {}); - foundry.utils.setProperty(update, 'prototypeToken.==ring', {}); + foundry.utils.setProperty(update, 'prototypeToken.texture', _replace({})); + foundry.utils.setProperty(update, 'prototypeToken.ring', _replace({})); } if (this.data.optional.biography.keep) @@ -89,7 +89,7 @@ export default class CharacterResetDialog extends HandlebarsApplicationMixin(App const { system, ...rest } = update; await this.actor.update({ ...rest, - '==system': system ?? {} + system: _replace(system ?? {}) }); const inventoryItemTypes = ['weapon', 'armor', 'consumable', 'loot']; diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index d1a1e123..c28b773c 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -168,7 +168,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } static async #removeMember(_, button) { - const update = { [`members.-=${button.dataset.characterId}`]: null }; + const update = { [`members.${button.dataset.characterId}`]: _del }; if (this.data.initiator.id === button.dataset.characterId) { update.iniator = { id: null }; } diff --git a/module/applications/levelup/levelup.mjs b/module/applications/levelup/levelup.mjs index ba6110cc..c4616d9a 100644 --- a/module/applications/levelup/levelup.mjs +++ b/module/applications/levelup/levelup.mjs @@ -477,7 +477,7 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2) const secondaryData = Object.keys( foundry.utils.getProperty(this.levelup, `${target.dataset.path}.secondaryData`) ).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}); await this.levelup.updateSource({ @@ -511,9 +511,9 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2) const current = foundry.utils.getProperty(this.levelup, `${basePath}.${button.dataset.option}`); if (Number(button.dataset.cost) > 1 || Object.keys(current).length === 1) { // Simple handling that doesn't cover potential Custom LevelTiers. - update[`${basePath}.-=${button.dataset.option}`] = null; + update[`${basePath}.${button.dataset.option}`] = _del; } else { - update[`${basePath}.${button.dataset.option}.-=${button.dataset.checkboxNr}`] = null; + update[`${basePath}.${button.dataset.option}.${button.dataset.checkboxNr}`] = _del; } } else { if (this.levelup.levels[this.levelup.currentLevel].nrSelections.available < Number(button.dataset.cost)) { diff --git a/module/applications/scene/sceneConfigSettings.mjs b/module/applications/scene/sceneConfigSettings.mjs index dda4330a..ceb403cf 100644 --- a/module/applications/scene/sceneConfigSettings.mjs +++ b/module/applications/scene/sceneConfigSettings.mjs @@ -118,7 +118,7 @@ export default class DhSceneConfigSettings extends foundry.applications.sheets.S for (const key of Object.keys(this.document._source.flags.daggerheart?.sceneEnvironments ?? {})) { if (!submitData.flags.daggerheart.sceneEnvironments[key]) { - submitData.flags.daggerheart.sceneEnvironments[`-=${key}`] = null; + submitData.flags.daggerheart.sceneEnvironments[key] = _del; } } diff --git a/module/applications/settings/homebrewSettings.mjs b/module/applications/settings/homebrewSettings.mjs index 6e2e665d..cecd12d7 100644 --- a/module/applications/settings/homebrewSettings.mjs +++ b/module/applications/settings/homebrewSettings.mjs @@ -228,7 +228,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli const isDowntime = ['shortRest', 'longRest'].includes(type); const path = isDowntime ? `restMoves.${type}.moves` : `itemFeatures.${type}`; await this.settings.updateSource({ - [`${path}.-=${id}`]: null + [`${path}.${id}`]: _del }); this.render(); } @@ -250,7 +250,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli const fields = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).schema.fields; const removeUpdate = Object.keys(this.settings.restMoves[target.dataset.type].moves).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}); @@ -310,7 +310,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli [`itemFeatures.${target.dataset.type}`]: Object.keys( this.settings.itemFeatures[target.dataset.type] ).reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}) @@ -383,12 +383,12 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli if (!confirmed) return; await this.settings.updateSource({ - [`domains.-=${this.selected.domain}`]: null + [`domains.${this.selected.domain}`]: _del }); const currentSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew); if (currentSettings.domains[this.selected.domain]) { - await currentSettings.updateSource({ [`domains.-=${this.selected.domain}`]: null }); + await currentSettings.updateSource({ [`domains.${this.selected.domain}`]: _del }); await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew, currentSettings); } @@ -435,7 +435,7 @@ export default class DhHomebrewSettings extends HandlebarsApplicationMixin(Appli static async deleteAdversaryType(_, target) { const { key } = target.dataset; - await this.settings.updateSource({ [`adversaryTypes.-=${key}`]: null }); + await this.settings.updateSource({ [`adversaryTypes.${key}`]: _del }); this.selected.adversaryType = this.selected.adversaryType === key ? null : this.selected.adversaryType; this.render(); diff --git a/module/applications/sheets-configs/adversary-settings.mjs b/module/applications/sheets-configs/adversary-settings.mjs index d3d215be..6593f23d 100644 --- a/module/applications/sheets-configs/adversary-settings.mjs +++ b/module/applications/sheets-configs/adversary-settings.mjs @@ -95,7 +95,7 @@ export default class DHAdversarySettings extends DHBaseActorSettings { }); if (!confirmed) return; - await this.actor.update({ [`system.experiences.-=${target.dataset.experience}`]: null }); + await this.actor.update({ [`system.experiences.${target.dataset.experience}`]: _del }); } async _onDragStart(event) { diff --git a/module/applications/sheets-configs/character-settings.mjs b/module/applications/sheets-configs/character-settings.mjs index 20a09cfc..c655b23f 100644 --- a/module/applications/sheets-configs/character-settings.mjs +++ b/module/applications/sheets-configs/character-settings.mjs @@ -101,8 +101,8 @@ export default class DHCharacterSettings extends DHBaseActorSettings { if (relinkAchievementData.length > 0) { relinkAchievementData.forEach(data => { - updates[`system.levelData.levelups.${data.levelKey}.achievements.experiences.-=${data.experience}`] = - null; + updates[`system.levelData.levelups.${data.levelKey}.achievements.experiences.${data.experience}`] = + _del; }); } else if (relinkSelectionData.length > 0) { relinkSelectionData.forEach(data => { @@ -137,7 +137,7 @@ export default class DHCharacterSettings extends DHBaseActorSettings { await this.actor.update({ ...updates, - [`system.experiences.-=${target.dataset.experience}`]: null + [`system.experiences.${target.dataset.experience}`]: _del }); } } diff --git a/module/applications/sheets-configs/companion-settings.mjs b/module/applications/sheets-configs/companion-settings.mjs index 8aa21479..6c1265af 100644 --- a/module/applications/sheets-configs/companion-settings.mjs +++ b/module/applications/sheets-configs/companion-settings.mjs @@ -117,6 +117,6 @@ export default class DHCompanionSettings extends DHBaseActorSettings { }); if (!confirmed) return; - await this.actor.update({ [`system.experiences.-=${target.dataset.experience}`]: null }); + await this.actor.update({ [`system.experiences.${target.dataset.experience}`]: _del }); } } diff --git a/module/applications/sheets-configs/environment-settings.mjs b/module/applications/sheets-configs/environment-settings.mjs index 15f5701d..5c039f85 100644 --- a/module/applications/sheets-configs/environment-settings.mjs +++ b/module/applications/sheets-configs/environment-settings.mjs @@ -79,7 +79,7 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings { * @type {ApplicationClickAction} */ static async #removeCategory(_, target) { - await this.actor.update({ [`system.potentialAdversaries.-=${target.dataset.categoryId}`]: null }); + await this.actor.update({ [`system.potentialAdversaries.${target.dataset.categoryId}`]: _del }); } /** diff --git a/module/applications/sheets-configs/setting-feature-config.mjs b/module/applications/sheets-configs/setting-feature-config.mjs index e8bf6109..e8ff7818 100644 --- a/module/applications/sheets-configs/setting-feature-config.mjs +++ b/module/applications/sheets-configs/setting-feature-config.mjs @@ -206,7 +206,7 @@ export default class SettingFeatureConfig extends HandlebarsApplicationMixin(App } }); } else { - await this.settings.updateSource({ [`${this.actionsPath}.-=${target.dataset.id}`]: null }); + await this.settings.updateSource({ [`${this.actionsPath}.${target.dataset.id}`]: _del }); } this.move = foundry.utils.getProperty(this.settings, this.movePath); diff --git a/module/applications/sheets-configs/token-config-mixin.mjs b/module/applications/sheets-configs/token-config-mixin.mjs index c29b54ff..a23aa7f4 100644 --- a/module/applications/sheets-configs/token-config-mixin.mjs +++ b/module/applications/sheets-configs/token-config-mixin.mjs @@ -67,7 +67,7 @@ export default function DHTokenConfigMixin(Base) { changes.height = tokenSize; } - const deletions = { '-=actorId': null, '-=actorLink': null }; + const deletions = { actorId: _del, actorLink: _del }; const mergeOptions = { inplace: false, performDeletions: true }; this._preview.updateSource(mergeObject(changes, deletions, mergeOptions)); diff --git a/module/applications/sheets/items/beastform.mjs b/module/applications/sheets/items/beastform.mjs index 880c0796..0c9991c4 100644 --- a/module/applications/sheets/items/beastform.mjs +++ b/module/applications/sheets/items/beastform.mjs @@ -102,7 +102,7 @@ export default class BeastformSheet extends DHBaseItemSheet { async advantageOnRemove(event) { await this.document.update({ - [`system.advantageOn.-=${event.detail.data.value}`]: null + [`system.advantageOn.${event.detail.data.value}`]: _del }); } } diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index edb0a734..d7498e80 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -108,8 +108,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa getSystemFlagUpdate() { const deleteUpdate = Object.keys(this.document._source.flags.daggerheart?.altFormula ?? {}).reduce( (acc, formulaKey) => { - if (!this.daggerheartFlag.altFormula[formulaKey]) - acc.altFormula[formulaKey] = foundry.data.operators.ForcedDeletion.create(); + if (!this.daggerheartFlag.altFormula[formulaKey]) acc.altFormula[formulaKey] = _del; return acc; }, @@ -129,7 +128,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa static async #removeFormula(_event, target) { await this.daggerheartFlag.updateSource({ - [`altFormula.${target.dataset.key}`]: foundry.data.operators.ForcedDeletion.create() + [`altFormula.${target.dataset.key}`]: _del }); this.render({ internalRefresh: true }); } diff --git a/module/applications/ui/countdownEdit.mjs b/module/applications/ui/countdownEdit.mjs index 7f1deea3..8bb9fc1d 100644 --- a/module/applications/ui/countdownEdit.mjs +++ b/module/applications/ui/countdownEdit.mjs @@ -233,6 +233,6 @@ export default class CountdownEdit extends HandlebarsApplicationMixin(Applicatio } if (this.editingCountdowns.has(countdownId)) this.editingCountdowns.delete(countdownId); - this.updateSetting({ [`countdowns.-=${countdownId}`]: null }); + this.updateSetting({ [`countdowns.${countdownId}`]: _del }); } } diff --git a/module/data/activeEffect/beastformEffect.mjs b/module/data/activeEffect/beastformEffect.mjs index 53430ba3..47e28b4c 100644 --- a/module/data/activeEffect/beastformEffect.mjs +++ b/module/data/activeEffect/beastformEffect.mjs @@ -100,7 +100,7 @@ export default class BeastformEffect extends BaseEffect { token.flags.daggerheart?.beastformSubjectTexture ?? this.characterTokenData.tokenRingImg } }, - 'flags.daggerheart': { '-=beastformTokenImg': null, '-=beastformSubjectTexture': null } + 'flags.daggerheart': { beastformTokenImg: _del, beastformSubjectTexture: _del } }; }; diff --git a/module/data/actor/base.mjs b/module/data/actor/base.mjs index 08308eab..833f1222 100644 --- a/module/data/actor/base.mjs +++ b/module/data/actor/base.mjs @@ -169,9 +169,7 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel { const tagTeam = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll); await tagTeam.updateSource({ initiator: this.parent.id === tagTeam.initiator ? null : tagTeam.initiator, - members: Object.keys(tagTeam.members).find(x => x === this.parent.id) - ? { [`-=${this.parent.id}`]: null } - : {} + members: Object.keys(tagTeam.members).find(x => x === this.parent.id) ? { [this.parent.id]: _del } : {} }); await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll, tagTeam); } diff --git a/module/data/actor/party.mjs b/module/data/actor/party.mjs index 236d65db..3eddf235 100644 --- a/module/data/actor/party.mjs +++ b/module/data/actor/party.mjs @@ -48,7 +48,7 @@ export default class DhParty extends BaseDataActor { initiator: this.partyMembers.some(x => x.id === tagTeam.initiator) ? null : tagTeam.initiator, members: Object.keys(tagTeam.members).reduce((acc, key) => { if (this.partyMembers.find(x => x.id === key)) { - acc[`-=${key}`] = null; + acc[key] = _del; } return acc; diff --git a/module/data/fields/actionField.mjs b/module/data/fields/actionField.mjs index a6d0abbe..1305a6d8 100644 --- a/module/data/fields/actionField.mjs +++ b/module/data/fields/actionField.mjs @@ -243,11 +243,11 @@ export function ActionMixin(Base) { : foundry.utils.getProperty(result, basePath); } - delete() { + async delete() { if (!this.inCollection) return this.item; const action = foundry.utils.getProperty(this.item, `system.${this.systemPath}`)?.get(this.id); if (!action) return this.item; - this.item.update({ [`system.${this.systemPath}.-=${this.id}`]: null }); + await this.item.update({ [`system.${this.systemPath}.${this.id}`]: _del }); // Does not work. Unsure why. It worked in v13 <_<' this.constructor._sheets.get(this.uuid)?.close(); } diff --git a/module/data/item/armor.mjs b/module/data/item/armor.mjs index 3d4a62fa..050b66d4 100644 --- a/module/data/item/armor.mjs +++ b/module/data/item/armor.mjs @@ -87,7 +87,7 @@ export default class DHArmor extends AttachableItem { } await this.parent.deleteEmbeddedDocuments('ActiveEffect', effectIds); changes.system.actions = actionIds.reduce((acc, id) => { - acc[`-=${id}`] = null; + acc[id] = _del; return acc; }, {}); diff --git a/module/data/item/base.mjs b/module/data/item/base.mjs index 84f39103..447da3bf 100644 --- a/module/data/item/base.mjs +++ b/module/data/item/base.mjs @@ -230,9 +230,9 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel { if (changed.system?.actions) { const triggersToRemove = Object.keys(changed.system.actions).reduce((acc, key) => { - if (!changed.system.actions[key]) { - const strippedKey = key.replace('-=', ''); - acc.push(...this.actions.get(strippedKey).triggers.map(x => x.trigger)); + const action = changed.system.actions[key]; + if (action && Object.keys(action).length === 0) { + acc.push(...this.actions.get(key).triggers.map(x => x.trigger)); } return acc; diff --git a/module/data/item/weapon.mjs b/module/data/item/weapon.mjs index f333e5f3..85849a83 100644 --- a/module/data/item/weapon.mjs +++ b/module/data/item/weapon.mjs @@ -147,7 +147,7 @@ export default class DHWeapon extends AttachableItem { await this.parent.deleteEmbeddedDocuments('ActiveEffect', removedEffectsUpdate); changes.system.actions = removedActionsUpdate.reduce((acc, id) => { - acc[`-=${id}`] = null; + acc[id] = _del; return acc; }, {}); diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index e8bea0bf..cb51a255 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -142,7 +142,7 @@ export default class DhpActor extends Actor { } const updatedLevelups = Object.keys(this.system.levelData.levelups).reduce((acc, level) => { - if (Number(level) > usedLevel) acc[`-=${level}`] = null; + if (Number(level) > usedLevel) acc[level] = _del; return acc; }, {}); @@ -187,7 +187,7 @@ export default class DhpActor extends Actor { if (experiences.length > 0) { const getUpdate = () => ({ 'system.experiences': experiences.reduce((acc, key) => { - acc[`-=${key}`] = null; + acc[key] = _del; return acc; }, {}) }); diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index bb9a0cfa..7ca2c41c 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -171,10 +171,10 @@ export const getDeleteKeys = (property, innerProperty, innerPropertyDefaultValue [innerProperty]: innerPropertyDefaultValue }; } else { - acc[`${key}.-=${innerProperty}`] = null; + acc[`${key}.${innerProperty}`] = _del; } } else { - acc[`-=${key}`] = null; + acc[`${key}`] = _del; } return acc; diff --git a/module/systemRegistration/migrations.mjs b/module/systemRegistration/migrations.mjs index 743d42a4..4216c38f 100644 --- a/module/systemRegistration/migrations.mjs +++ b/module/systemRegistration/migrations.mjs @@ -197,7 +197,7 @@ export async function runMigrations() { const initatorMissing = tagTeam.initiator && !game.actors.some(actor => actor.id === tagTeam.initiator); const missingMembers = Object.keys(tagTeam.members).reduce((acc, id) => { if (!game.actors.some(actor => actor.id === id)) { - acc[`-=${id}`] = null; + acc[id] = _del; } return acc; }, {}); From ae91d6786f85686420a8c5f828de67f2800cd3cc Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 31 Jan 2026 19:32:51 +0100 Subject: [PATCH 07/34] Fixed actions not being delete:able --- module/data/fields/_module.mjs | 1 - module/data/fields/actionField.mjs | 11 ++- module/data/fields/mappingField.mjs | 128 ---------------------------- 3 files changed, 5 insertions(+), 135 deletions(-) delete mode 100644 module/data/fields/mappingField.mjs diff --git a/module/data/fields/_module.mjs b/module/data/fields/_module.mjs index 2a8ba454..58423979 100644 --- a/module/data/fields/_module.mjs +++ b/module/data/fields/_module.mjs @@ -3,5 +3,4 @@ export { default as FormulaField } from './formulaField.mjs'; export { default as ForeignDocumentUUIDField } from './foreignDocumentUUIDField.mjs'; export { default as ForeignDocumentUUIDArrayField } from './foreignDocumentUUIDArrayField.mjs'; export { default as TriggerField } from './triggerField.mjs'; -export { default as MappingField } from './mappingField.mjs'; export * as ActionFields from './action/_module.mjs'; diff --git a/module/data/fields/actionField.mjs b/module/data/fields/actionField.mjs index 1305a6d8..d0cc808b 100644 --- a/module/data/fields/actionField.mjs +++ b/module/data/fields/actionField.mjs @@ -1,6 +1,5 @@ import DHActionConfig from '../../applications/sheets-configs/action-config.mjs'; import { itemAbleRollParse } from '../../helpers/utils.mjs'; -import MappingField from './mappingField.mjs'; /** * Specialized collection type for stored actions. @@ -11,9 +10,9 @@ export class ActionCollection extends Collection { constructor(model, entries) { super(); this.#model = model; - for (const entry of entries) { - if (!(entry instanceof game.system.api.models.actions.actionsTypes.base)) continue; - this.set(entry._id, entry); + for (const [key, value] of entries) { + if (!(value instanceof game.system.api.models.actions.actionsTypes.base)) continue; + this.set(key, value); } } @@ -61,7 +60,7 @@ export class ActionCollection extends Collection { /** * Field that stores actions. */ -export class ActionsField extends MappingField { +export class ActionsField extends foundry.data.fields.TypedObjectField { constructor(options) { super(new ActionField(), options); } @@ -70,7 +69,7 @@ export class ActionsField extends MappingField { /** @inheritDoc */ initialize(value, model, options) { - const actions = Object.values(super.initialize(value, model, options)); + const actions = Object.entries(super.initialize(value, model, options)); return new ActionCollection(model, actions); } } diff --git a/module/data/fields/mappingField.mjs b/module/data/fields/mappingField.mjs deleted file mode 100644 index 31d91c76..00000000 --- a/module/data/fields/mappingField.mjs +++ /dev/null @@ -1,128 +0,0 @@ -/** - * A subclass of ObjectField that represents a mapping of keys to the provided DataField type. - * - * @param {DataField} model The class of DataField which should be embedded in this field. - * @param {MappingFieldOptions} [options={}] Options which configure the behavior of the field. - * @property {string[]} [initialKeys] Keys that will be created if no data is provided. - * @property {MappingFieldInitialValueBuilder} [initialValue] Function to calculate the initial value for a key. - * @property {boolean} [initialKeysOnly=false] Should the keys in the initialized data be limited to the keys provided - * by `options.initialKeys`? - */ -export default class MappingField extends foundry.data.fields.ObjectField { - constructor(model, options) { - if (!(model instanceof foundry.data.fields.DataField)) { - throw new Error('MappingField must have a DataField as its contained element'); - } - super(options); - - /** - * The embedded DataField definition which is contained in this field. - * @type {DataField} - */ - this.model = model; - model.parent = this; - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - static get _defaults() { - return foundry.utils.mergeObject(super._defaults, { - initialKeys: null, - initialValue: null, - initialKeysOnly: false - }); - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - _cleanType(value, options) { - Object.entries(value).forEach(([k, v]) => { - if (k.startsWith('-=')) return; - value[k] = this.model.clean(v, options); - }); - return value; - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - getInitialValue(data) { - let keys = this.initialKeys; - const initial = super.getInitialValue(data); - if (!keys || !foundry.utils.isEmpty(initial)) return initial; - if (!(keys instanceof Array)) keys = Object.keys(keys); - for (const key of keys) initial[key] = this._getInitialValueForKey(key); - return initial; - } - - /* -------------------------------------------- */ - - /** - * Get the initial value for the provided key. - * @param {string} key Key within the object being built. - * @param {object} [object] Any existing mapping data. - * @returns {*} Initial value based on provided field type. - */ - _getInitialValueForKey(key, object) { - const initial = this.model.getInitialValue(); - return this.initialValue?.(key, initial, object) ?? initial; - } - - /* -------------------------------------------- */ - - /** @override */ - _validateType(value, options = {}) { - if (foundry.utils.getType(value) !== 'Object') throw new Error('must be an Object'); - const errors = this._validateValues(value, options); - if (!foundry.utils.isEmpty(errors)) { - const failure = new foundry.data.validation.DataModelValidationFailure(); - failure.elements = Object.entries(errors).map(([id, failure]) => ({ id, failure })); - throw failure.asError(); - } - } - - /* -------------------------------------------- */ - - /** - * Validate each value of the object. - * @param {object} value The object to validate. - * @param {object} options Validation options. - * @returns {Record} An object of value-specific errors by key. - */ - _validateValues(value, options) { - const errors = {}; - for (const [k, v] of Object.entries(value)) { - if (k.startsWith('-=')) continue; - const error = this.model.validate(v, options); - if (error) errors[k] = error; - } - return errors; - } - - /* -------------------------------------------- */ - - /** @override */ - initialize(value, model, options = {}) { - if (!value) return value; - const obj = {}; - const initialKeys = this.initialKeys instanceof Array ? this.initialKeys : Object.keys(this.initialKeys ?? {}); - const keys = this.initialKeysOnly ? initialKeys : Object.keys(value); - for (const key of keys) { - const data = value[key] ?? this._getInitialValueForKey(key, value); - obj[key] = this.model.initialize(data, model, options); - } - return obj; - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - _getField(path) { - if (path.length === 0) return this; - else if (path.length === 1) return this.model; - path.shift(); - return this.model._getField(path); - } -} From 57e51ee8411d390f181526ac71ef9c01352acf20 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sun, 1 Feb 2026 00:25:40 +0100 Subject: [PATCH 08/34] Added in comments about Beastform failing --- .../sheets-configs/token-config-mixin.mjs | 2 +- module/documents/token.mjs | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/module/applications/sheets-configs/token-config-mixin.mjs b/module/applications/sheets-configs/token-config-mixin.mjs index a23aa7f4..5242d797 100644 --- a/module/applications/sheets-configs/token-config-mixin.mjs +++ b/module/applications/sheets-configs/token-config-mixin.mjs @@ -69,7 +69,7 @@ export default function DHTokenConfigMixin(Base) { const deletions = { actorId: _del, actorLink: _del }; const mergeOptions = { inplace: false, performDeletions: true }; - this._preview.updateSource(mergeObject(changes, deletions, mergeOptions)); + this._preview.updateSource(foundry.utils.mergeObject(changes, deletions, mergeOptions)); if (this._preview?.object?.destroyed === false) { this._preview.object.initializeSources(); diff --git a/module/documents/token.mjs b/module/documents/token.mjs index b9507c2f..b70d7834 100644 --- a/module/documents/token.mjs +++ b/module/documents/token.mjs @@ -542,4 +542,62 @@ export default class DHToken extends CONFIG.Token.documentClass { game.system.registeredTriggers.unregisterItemTriggers(this.actor.items); } } + + /* V14 TEMP until foundry fixes: https://discord.com/channels/170995199584108546/1421197211194228907/1467296028700049566 */ + _onRelatedUpdate(update = {}, operation = {}) { + this.#refreshOverrides(operation); + this._prepareBars(); + + // Update tracked Combat resource + const combatant = this.combatant; + if (combatant) { + const isActorUpdate = [this, null, undefined].includes(operation.parent); + const resource = game.combat.settings.resource; + const updates = Array.isArray(update) ? update : [update]; + if (isActorUpdate && resource && updates.some(u => foundry.utils.hasProperty(u.system ?? {}, resource))) { + combatant.updateResource(); + } + ui.combat.render(); + } + + // Trigger redraws on the token + if (this.parent.isView) { + if (this.object?.hasActiveHUD) canvas.tokens.hud.render(); + this.object?.renderFlags.set({ redrawEffects: true }); + for (const key of ['bar1', 'bar2']) { + const name = `${this.object?.objectId}.animate${key.capitalize()}`; + const easing = foundry.canvas.animation.CanvasAnimation.easeInOutCosine; + this.object?.animate({ [key]: this[key] }, { name, easing }); + } + for (const app of foundry.applications.sheets.TokenConfig.instances()) { + app._preview?.updateSource({ delta: this.toObject().delta }, { diff: false, recursive: false }); + app._preview?.object?.renderFlags.set({ refreshBars: true, redrawEffects: true }); + } + } + } + + /* V14 TEMP until foundry fixes: https://discord.com/channels/170995199584108546/1421197211194228907/1467296028700049566 */ + #refreshOverrides(operation) { + if (!this.actor) return; + + const { deepClone, mergeObject, equals, isEmpty } = foundry.utils; + const oldOverrides = deepClone(this._overrides) ?? {}; + const newOverrides = deepClone(this.actor?.tokenOverrides ?? {}, { prune: true }); + if (!equals(oldOverrides, newOverrides)) { + this._overrides = newOverrides; + this.reset(); + + // Send emulated update data to the PlaceableObject + if (!canvas.ready || canvas.scene !== this.scene) return; + const { width, height, depth, ...changes } = mergeObject( + mergeObject(oldOverrides, this, { insertKeys: false, insertValues: false }), + this._overrides + ); + this.object?._onUpdate(changes, {}, game.user.id); + + // Hand off size changes to a secondary handler requiring downstream implementation. + const sizeChanges = deepClone({ width, height, depth }, { prune: true }); + if (!isEmpty(sizeChanges)) this._onOverrideSize(sizeChanges, operation); + } + } } From 578b090f088d90dd01428f613cc64b2cef2e1734 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:21:56 +0100 Subject: [PATCH 09/34] [V14] 1605 - Template Migration (#1621) * Fixed so that our templates make use of SceneRegions instead * Fixed visibility --- daggerheart.mjs | 4 +- module/canvas/placeables/_module.mjs | 2 +- module/canvas/placeables/regionLayer.mjs | 48 +++++++++++ module/documents/_module.mjs | 1 - module/documents/templateManager.mjs | 105 ----------------------- module/enrichers/TemplateEnricher.mjs | 25 ++++-- 6 files changed, 70 insertions(+), 115 deletions(-) create mode 100644 module/canvas/placeables/regionLayer.mjs delete mode 100644 module/documents/templateManager.mjs diff --git a/daggerheart.mjs b/daggerheart.mjs index f75ff1da..8c817327 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -20,7 +20,6 @@ import { } from './module/systemRegistration/_module.mjs'; import { placeables, DhTokenLayer } from './module/canvas/_module.mjs'; import './node_modules/@yaireo/tagify/dist/tagify.css'; -import TemplateManager from './module/documents/templateManager.mjs'; import TokenManager from './module/documents/tokenManager.mjs'; CONFIG.DH = SYSTEM; @@ -55,7 +54,7 @@ CONFIG.ChatMessage.documentClass = documents.DhChatMessage; CONFIG.ChatMessage.template = 'systems/daggerheart/templates/ui/chat/chat-message.hbs'; CONFIG.Canvas.rulerClass = placeables.DhRuler; -CONFIG.Canvas.layers.templates.layerClass = placeables.DhTemplateLayer; +CONFIG.Canvas.layers.regions.layerClass = placeables.DhRegionLayer; CONFIG.Canvas.layers.tokens.layerClass = DhTokenLayer; CONFIG.MeasuredTemplate.objectClass = placeables.DhMeasuredTemplate; @@ -83,7 +82,6 @@ CONFIG.ui.resources = applications.ui.DhFearTracker; CONFIG.ui.countdowns = applications.ui.DhCountdowns; CONFIG.ux.ContextMenu = applications.ux.DHContextMenu; CONFIG.ux.TooltipManager = documents.DhTooltipManager; -CONFIG.ux.TemplateManager = new TemplateManager(); CONFIG.ux.TokenManager = new TokenManager(); CONFIG.debug.triggers = false; diff --git a/module/canvas/placeables/_module.mjs b/module/canvas/placeables/_module.mjs index 78242839..6ba047fb 100644 --- a/module/canvas/placeables/_module.mjs +++ b/module/canvas/placeables/_module.mjs @@ -1,5 +1,5 @@ export { default as DhMeasuredTemplate } from './measuredTemplate.mjs'; export { default as DhRuler } from './ruler.mjs'; -export { default as DhTemplateLayer } from './templateLayer.mjs'; +export { default as DhRegionLayer } from './regionLayer.mjs'; export { default as DhTokenPlaceable } from './token.mjs'; export { default as DhTokenRuler } from './tokenRuler.mjs'; diff --git a/module/canvas/placeables/regionLayer.mjs b/module/canvas/placeables/regionLayer.mjs new file mode 100644 index 00000000..d50845b7 --- /dev/null +++ b/module/canvas/placeables/regionLayer.mjs @@ -0,0 +1,48 @@ +export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer { + static prepareSceneControls() { + const sc = foundry.applications.ui.SceneControls; + const { tools, ...rest } = super.prepareSceneControls(); + + return { + ...rest, + tools: { + select: tools.select, + templateMode: tools.templateMode, + rectangle: tools.rectangle, + circle: tools.circle, + ellipse: tools.ellipse, + cone: tools.cone, + inFront: { + name: 'inFront', + order: 7, + title: 'CONTROLS.inFront', + icon: 'fa-solid fa-eye', + toolclip: { + src: 'toolclips/tools/measure-cone.webm', + heading: 'CONTROLS.inFront', + items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) + } + }, + ring: { ...tools.ring, order: 8 }, + line: { ...tools.line, order: 9 }, + emanation: { ...tools.emanation, order: 10 }, + polygon: { ...tools.polygon, order: 11 }, + hole: { ...tools.hole, order: 12 }, + snap: { ...tools.snap, order: 13 }, + clear: { ...tools.clear, order: 14 } + } + }; + } + + /** @inheritDoc */ + _isCreationToolActive() { + return this.active && (game.activeTool === 'inFront' || game.activeTool in foundry.data.BaseShapeData.TYPES); + } + + _createDragShapeData(event) { + const hole = ui.controls.controls[this.options.name].tools.hole?.active ?? false; + if (game.activeTool === 'inFront') return { type: 'cone', x: 0, y: 0, radius: 0, angle: 180, hole }; + + return super._createDragShapeData(event); + } +} diff --git a/module/documents/_module.mjs b/module/documents/_module.mjs index b9cfd3f2..aa08f0f4 100644 --- a/module/documents/_module.mjs +++ b/module/documents/_module.mjs @@ -8,5 +8,4 @@ export { default as DhRollTable } from './rollTable.mjs'; export { default as DhScene } from './scene.mjs'; export { default as DhToken } from './token.mjs'; export { default as DhTooltipManager } from './tooltipManager.mjs'; -export { default as DhTemplateManager } from './templateManager.mjs'; export { default as DhTokenManager } from './tokenManager.mjs'; diff --git a/module/documents/templateManager.mjs b/module/documents/templateManager.mjs deleted file mode 100644 index cf15c2e3..00000000 --- a/module/documents/templateManager.mjs +++ /dev/null @@ -1,105 +0,0 @@ -/** - * A singleton class that handles preview templates. - */ - -export default class DhTemplateManager { - #activePreview; - - /** - * Create a template preview, deactivating any existing ones. - * @param {object} data - */ - async createPreview(data) { - const template = await canvas.templates._createPreview(data, { renderSheet: false }); - - this.#activePreview = { - document: template.document, - object: template, - origin: { x: template.document.x, y: template.document.y } - }; - - this.#activePreview.events = { - contextmenu: this.#cancelTemplate.bind(this), - mousedown: this.#confirmTemplate.bind(this), - mousemove: this.#onDragMouseMove.bind(this), - wheel: this.#onMouseWheel.bind(this) - }; - canvas.stage.on('mousemove', this.#activePreview.events.mousemove); - canvas.stage.on('mousedown', this.#activePreview.events.mousedown); - - canvas.app.view.addEventListener('wheel', this.#activePreview.events.wheel, true); - canvas.app.view.addEventListener('contextmenu', this.#activePreview.events.contextmenu); - } - - /** - * Handles the movement of the temlate preview on mousedrag. - * @param {mousemove Event} event - */ - #onDragMouseMove(event) { - event.stopPropagation(); - const { moveTime, object } = this.#activePreview; - const update = {}; - - const now = Date.now(); - if (now - (moveTime || 0) <= 16) return; - this.#activePreview.moveTime = now; - - let cursor = event.getLocalPosition(canvas.templates); - - Object.assign(update, canvas.grid.getCenterPoint(cursor)); - - object.document.updateSource(update); - object.renderFlags.set({ refresh: true }); - } - - /** - * Handles the rotation of the preview template on scrolling. - * @param {wheel Event} event - */ - #onMouseWheel(event) { - if (!this.#activePreview) { - return; - } - if (!event.shiftKey && !event.ctrlKey) return; - event.stopPropagation(); - event.preventDefault(); - const { moveTime, object } = this.#activePreview; - - const now = Date.now(); - if (now - (moveTime || 0) <= 16) return; - this.#activePreview.moveTime = now; - - const multiplier = event.shiftKey ? 0.2 : 0.1; - - object.document.updateSource({ - direction: object.document.direction + event.deltaY * multiplier - }); - object.renderFlags.set({ refresh: true }); - } - - /** - * Cancels the preview template on right-click. - * @param {contextmenu Event} event - */ - #cancelTemplate(event) { - const { mousemove, mousedown, contextmenu, wheel } = this.#activePreview.events; - canvas.templates._onDragLeftCancel(event); - - canvas.stage.off('mousemove', mousemove); - canvas.stage.off('mousedown', mousedown); - canvas.app.view.removeEventListener('contextmenu', contextmenu); - canvas.app.view.removeEventListener('wheel', wheel); - } - - /** - * Creates a real MeasuredTemplate at the preview location and cancels the preview. - * @param {click Event} event - */ - #confirmTemplate(event) { - event.stopPropagation(); - this.#cancelTemplate(event); - - canvas.scene.createEmbeddedDocuments('MeasuredTemplate', [this.#activePreview.document.toObject()]); - this.#activePreview = undefined; - } -} diff --git a/module/enrichers/TemplateEnricher.mjs b/module/enrichers/TemplateEnricher.mjs index 4b9b052e..0683a4bb 100644 --- a/module/enrichers/TemplateEnricher.mjs +++ b/module/enrichers/TemplateEnricher.mjs @@ -58,7 +58,7 @@ export const renderMeasuredTemplate = async event => { const usedType = type === 'inFront' ? 'cone' : type === 'emanation' ? 'circle' : type; const usedAngle = - type === CONST.MEASURED_TEMPLATE_TYPES.CONE + type === CONFIG.DH.GENERAL.templateTypes.CONE ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) : type === CONFIG.DH.GENERAL.templateTypes.INFRONT ? '180' @@ -71,17 +71,32 @@ export const renderMeasuredTemplate = async event => { ]; } const distance = type === CONFIG.DH.GENERAL.templateTypes.EMANATION ? baseDistance + 2.5 : baseDistance; + const radius = (distance / game.scenes.active.grid.distance) * game.scenes.active.grid.size; const { width, height } = game.canvas.scene.dimensions; - const data = { + const shapeData = { x: width / 2, y: height / 2, t: usedType, distance: distance, - width: type === CONST.MEASURED_TEMPLATE_TYPES.RAY ? 5 : undefined, + width: type === CONFIG.DH.GENERAL.templateTypes.RAY ? 5 : undefined, angle: usedAngle, - direction: direction + radius: radius, + direction: direction, + type: usedType }; - CONFIG.ux.TemplateManager.createPreview(data); + await canvas.regions.placeRegion( + { + name: usedType.capitalize(), + shapes: [shapeData], + restriction: { enabled: false, type: 'move', priority: 0 }, + behaviors: [], + displayMeasurements: true, + locked: false, + ownership: { default: CONST.DOCUMENT_OWNERSHIP_LEVELS.NONE }, + visibility: CONST.REGION_VISIBILITY.ALWAYS + }, + { create: true } + ); }; From c17020c2c81ae8de13a13bf76ec1327ae6ae7c4d Mon Sep 17 00:00:00 2001 From: WBHarry Date: Mon, 2 Feb 2026 20:00:15 +0100 Subject: [PATCH 10/34] Fixed ActiveEffect.getChangeValue not expecting a number as change.value --- module/documents/activeEffect.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index c34ec62f..c36ed97e 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -116,7 +116,7 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { } static getChangeValue(model, change, effect) { - let key = change.value; + let key = change.value.toString(); const isOriginTarget = key.toLowerCase().includes('origin.@'); let parseModel = model; if (isOriginTarget && effect.origin) { From 6a0a8d8d6eba248be7c60815852f2c7416042eb8 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Mon, 2 Feb 2026 23:56:57 +0100 Subject: [PATCH 11/34] Updated the sidebar so the new Placeables tab coems in --- module/applications/sidebar/sidebar.mjs | 61 ++++++------------------- 1 file changed, 14 insertions(+), 47 deletions(-) diff --git a/module/applications/sidebar/sidebar.mjs b/module/applications/sidebar/sidebar.mjs index ab6b0cdb..64f7473d 100644 --- a/module/applications/sidebar/sidebar.mjs +++ b/module/applications/sidebar/sidebar.mjs @@ -1,52 +1,19 @@ export default class DhSidebar extends foundry.applications.sidebar.Sidebar { + static buildTabs() { + const { settings, ...tabs } = super.TABS; + return { + ...tabs, + daggerheartMenu: { + tooltip: 'DAGGERHEART.UI.Sidebar.daggerheartMenu.title', + img: 'systems/daggerheart/assets/logos/FoundryBorneLogoWhite.svg', + gmOnly: true + }, + settings + }; + } + /** @override */ - static TABS = { - chat: { - documentName: 'ChatMessage' - }, - combat: { - documentName: 'Combat' - }, - scenes: { - documentName: 'Scene', - gmOnly: true - }, - actors: { - documentName: 'Actor' - }, - items: { - documentName: 'Item' - }, - journal: { - documentName: 'JournalEntry', - tooltip: 'SIDEBAR.TabJournal' - }, - tables: { - documentName: 'RollTable' - }, - cards: { - documentName: 'Cards' - }, - macros: { - documentName: 'Macro' - }, - playlists: { - documentName: 'Playlist' - }, - compendium: { - tooltip: 'SIDEBAR.TabCompendium', - icon: 'fa-solid fa-book-atlas' - }, - daggerheartMenu: { - tooltip: 'DAGGERHEART.UI.Sidebar.daggerheartMenu.title', - img: 'systems/daggerheart/assets/logos/FoundryBorneLogoWhite.svg', - gmOnly: true - }, - settings: { - tooltip: 'SIDEBAR.TabSettings', - icon: 'fa-solid fa-gears' - } - }; + static TABS = DhSidebar.buildTabs(); /** @override */ static PARTS = { From 115a31423e4b358619c47027ca845ada550c7381 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 4 Feb 2026 10:15:42 +0100 Subject: [PATCH 12/34] Corrected ActiveEffect template styling and added useage of the new 'showIcon' property --- .../sheets-configs/activeEffectConfig.mjs | 15 +++++++++------ module/applications/ui/effectsDisplay.mjs | 3 ++- module/canvas/placeables/token.mjs | 3 ++- module/helpers/utils.mjs | 9 +++++++++ .../less/sheets/activeEffects/activeEffects.less | 11 +++++++++++ styles/less/sheets/index.less | 2 ++ templates/sheets/activeEffect/change.hbs | 4 ++-- templates/sheets/activeEffect/changes.hbs | 2 +- templates/sheets/activeEffect/details.hbs | 7 ++++++- 9 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 styles/less/sheets/activeEffects/activeEffects.less diff --git a/module/applications/sheets-configs/activeEffectConfig.mjs b/module/applications/sheets-configs/activeEffectConfig.mjs index aa6d9d54..d6dcd499 100644 --- a/module/applications/sheets-configs/activeEffectConfig.mjs +++ b/module/applications/sheets-configs/activeEffectConfig.mjs @@ -151,12 +151,15 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac index, defaultPriority ) ?? - renderTemplate('systems/daggerheart/templates/sheets/activeEffect/change.hbs', { - change, - index, - defaultPriority, - fields - }) + foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/sheets/activeEffect/change.hbs', + { + change, + index, + defaultPriority, + fields + } + ) ); } } diff --git a/module/applications/ui/effectsDisplay.mjs b/module/applications/ui/effectsDisplay.mjs index 8c0c939c..3bc5e716 100644 --- a/module/applications/ui/effectsDisplay.mjs +++ b/module/applications/ui/effectsDisplay.mjs @@ -1,3 +1,4 @@ +import { getIconVisibleActiveEffects } from '../../helpers/utils.mjs'; import { RefreshType } from '../../systemRegistration/socket.mjs'; const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; @@ -72,7 +73,7 @@ export default class DhEffectsDisplay extends HandlebarsApplicationMixin(Applica ? game.user.character : null : canvas.tokens.controlled[0].actor; - return actor?.getActiveEffects() ?? []; + return getIconVisibleActiveEffects(actor?.getActiveEffects() ?? []); }; toggleHidden(token, focused) { diff --git a/module/canvas/placeables/token.mjs b/module/canvas/placeables/token.mjs index 7bd92226..05140d76 100644 --- a/module/canvas/placeables/token.mjs +++ b/module/canvas/placeables/token.mjs @@ -1,3 +1,4 @@ +import { getIconVisibleActiveEffects } from '../../helpers/utils.mjs'; import DhMeasuredTemplate from './measuredTemplate.mjs'; export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { @@ -20,7 +21,7 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { this.effects.overlay = null; // Categorize effects - const activeEffects = this.actor?.getActiveEffects() ?? []; + const activeEffects = getIconVisibleActiveEffects(Array.from(this.actor?.allApplicableEffects() ?? [])); const overlayEffect = activeEffects.findLast(e => e.img && e.getFlag?.('core', 'overlay')); // Draw effects diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 7ca2c41c..980349ba 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -500,3 +500,12 @@ export function htmlToText(html) { return tempDivElement.textContent || tempDivElement.innerText || ''; } + +export function getIconVisibleActiveEffects(effects) { + return effects.filter(effect => { + const alwaysShown = effect.showIcon === CONST.ACTIVE_EFFECT_SHOW_ICON.ALWAYS; + const conditionalShown = effect.showIcon === CONST.ACTIVE_EFFECT_SHOW_ICON.CONDITIONAL && !effect.transfer; // TODO: system specific logic + + return !effect.disabled && (alwaysShown || conditionalShown); + }); +} diff --git a/styles/less/sheets/activeEffects/activeEffects.less b/styles/less/sheets/activeEffects/activeEffects.less new file mode 100644 index 00000000..f1879463 --- /dev/null +++ b/styles/less/sheets/activeEffects/activeEffects.less @@ -0,0 +1,11 @@ +.application.sheet.daggerheart.dh-style.active-effect-config { + .tab.changes { + gap: 0; + + header { + div { + text-align: center; + } + } + } +} diff --git a/styles/less/sheets/index.less b/styles/less/sheets/index.less index 1bdb451a..e5ffbf3e 100644 --- a/styles/less/sheets/index.less +++ b/styles/less/sheets/index.less @@ -42,3 +42,5 @@ @import './rollTables/sheet.less'; @import './actions/actions.less'; + +@import './activeEffects/activeEffects.less'; diff --git a/templates/sheets/activeEffect/change.hbs b/templates/sheets/activeEffect/change.hbs index 60cb0d85..30f643b8 100644 --- a/templates/sheets/activeEffect/change.hbs +++ b/templates/sheets/activeEffect/change.hbs @@ -1,6 +1,6 @@
  • - {{formInput fields.key name=change.keyPath value=change.key}} +
    {{formInput fields.type name=change.typePath value=change.type localize=true}} @@ -12,6 +12,6 @@ {{formInput fields.priority name=change.priorityPath value=change.priority placeholder=defaultPriority}}
    - +
  • diff --git a/templates/sheets/activeEffect/changes.hbs b/templates/sheets/activeEffect/changes.hbs index 8604daf6..026ffd90 100644 --- a/templates/sheets/activeEffect/changes.hbs +++ b/templates/sheets/activeEffect/changes.hbs @@ -5,7 +5,7 @@
    {{localize "EFFECT.FIELDS.changes.element.value.label"}}
    {{localize "EFFECT.FIELDS.changes.element.priority.label"}}
    - +
      diff --git a/templates/sheets/activeEffect/details.hbs b/templates/sheets/activeEffect/details.hbs index 72e77d5e..f7e465bd 100644 --- a/templates/sheets/activeEffect/details.hbs +++ b/templates/sheets/activeEffect/details.hbs @@ -4,7 +4,12 @@ {{formGroup fields.disabled value=source.disabled rootId=rootId}} {{#if isActorEffect}} - {{formGroup fields.origin value=source.origin rootId=rootId disabled=true}} +
      + +
      + +
      +
      {{/if}} {{#if isItemEffect}} From 593105b163afeb1fdce7bf0e2d9212284950dc24 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 4 Feb 2026 20:08:52 +0100 Subject: [PATCH 13/34] Fixed ActiveEffect create dialog options --- lang/en.json | 4 +++- module/documents/activeEffect.mjs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lang/en.json b/lang/en.json index 0186ae3e..c4b611d0 100755 --- a/lang/en.json +++ b/lang/en.json @@ -14,7 +14,9 @@ "beastform": "Beastform" }, "ActiveEffect": { - "beastform": "Beastform" + "base": "Standard", + "beastform": "Beastform", + "horde": "Horde" }, "Actor": { "character": "Character", diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index c36ed97e..9a326282 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -54,6 +54,37 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { /* Event Handlers */ /* -------------------------------------------- */ + /** @inheritdoc */ + static async createDialog(data = {}, createOptions = {}, options = {}) { + const { folders, types, template, context = {}, ...dialogOptions } = options; + + if (types?.length === 0) { + throw new Error('The array of sub-types to restrict to must not be empty.'); + } + + const creatableEffects = ['base']; + const documentTypes = this.TYPES.filter(type => creatableEffects.includes(type)).map(type => { + const labelKey = `TYPES.ActiveEffect.${type}`; + const label = game.i18n.has(labelKey) ? game.i18n.localize(labelKey) : type; + + return { value: type, label }; + }); + + if (!documentTypes.length) { + throw new Error('No document types were permitted to be created.'); + } + + const sortedTypes = documentTypes.sort((a, b) => a.label.localeCompare(b.label, game.i18n.lang)); + + return await super.createDialog(data, createOptions, { + folders, + types, + template, + context: { types: sortedTypes, ...context }, + ...dialogOptions + }); + } + /**@inheritdoc*/ async _preCreate(data, options, user) { const update = {}; From 4aab5d315a47e110861109420b5a9b30423f0790 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:57:03 +0100 Subject: [PATCH 14/34] [V14] 1604 - ActiveEffect Durations (#1634) * Added daggerheart durations and auto expiration of them * Added duration to all tier1 adversaries * Finished all adversaries and environments * Remaining compendiums updated * Improved styling of duration in tooltips * . --- lang/en.json | 13 +++ module/applications/dialogs/downtime.mjs | 4 +- .../sheets-configs/activeEffectConfig.mjs | 33 ++++++ .../sidebar/tabs/daggerheartMenu.mjs | 4 +- module/applications/ui/combatTracker.mjs | 3 + module/config/generalConfig.mjs | 31 ++++++ module/data/activeEffect/baseEffect.mjs | 8 ++ module/data/settings/Automation.mjs | 5 + module/documents/activeEffect.mjs | 14 +++ module/helpers/utils.mjs | 32 ++++++ ...ersary_Acid_Burrower_89yAh30vaNQOALlz.json | 26 +++-- ...ary_Arch_Necromancer_WPEOIGfclNJxWb87.json | 27 +++-- ...ry_Assassin_Poisoner_h5RuhzGL17dW5FBT.json | 29 +++-- ...adversary_Battle_Box_dgH3fW9FTYLaIDvS.json | 58 ++++++---- .../adversary_Bear_71qKDLKO3CsrNkdy.json | 27 +++-- ...versary_Bladed_Guard_B4LZcGuBAHzyVdzy.json | 27 +++-- ...ersary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json | 26 +++-- .../adversary_Courtesan_ZxWaWPdzFIUPNC62.json | 27 +++-- .../adversary_Courtier_CBBuEXAlLKFMJdjg.json | 26 +++-- ...adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json | 80 +++++++++----- .../adversary_Cult_Fang_tyBOpLfigAhI9bU3.json | 26 +++-- ...ry_Deeproot_Defender_9x2xY9zwc3xzbXo5.json | 27 +++-- ...ary_Demon_of_Despair_kE4dfhqmIQpNd44e.json | 40 ++++--- ...rsary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json | 40 ++++--- .../adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json | 27 +++-- ...sary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json | 58 ++++++---- ...ry_Giant_Beastmaster_8VZIgU12cB3cvlyH.json | 27 +++-- ...dversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json | 26 +++-- ...rsary_Giant_Scorpion_fmfntuJ8mHRCAktP.json | 26 +++-- .../adversary_Gorgon_8mJYMpbLTb8qIOrr.json | 40 ++++--- ...ater_Earth_Elemental_dsfB3YhoL5SudvS2.json | 27 +++-- ...ater_Water_Elemental_xIICT6tEdnA7dKDV.json | 31 ++++-- ...adversary_Green_Ooze_SHXedd9zZPVfUgUa.json | 27 +++-- ...dversary_High_Seraph_r1mbfSSwKWdcFdAU.json | 29 +++-- ...sary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json | 27 +++-- .../adversary_Hydra_MI126iMOOobQ1Obn.json | 41 ++++--- ...y_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json | 26 +++-- ...ed_Knife_Kneebreaker_CBKixLH3yhivZZuL.json | 41 ++++--- .../adversary_Kraken_4nqv3ZwJGjnmic8j.json | 31 ++++-- ...versary_Masked_Thief_niBpVU7yeo5ccskE.json | 31 ++++-- ...inor_Chaos_Elemental_sRn4bqerfARvhgSV.json | 26 +++-- ...ersary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json | 26 +++-- ...adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json | 41 ++++--- ...r_Realms_Abomination_A0SeeDzwjvqOsyof.json | 28 +++-- ...ary_Perfected_Zombie_CP6iRfHdyFWniTHY.json | 27 +++-- .../adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json | 27 +++-- .../adversary_Siren_BK4jwyXSRx7IOQiO.json | 29 +++-- ...dversary_Stonewraith_3aAS2Qm3R6cgaYfE.json | 26 +++-- ...sary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json | 10 +- ...ault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json | 29 +++-- ...lt_Guardian_Sentinel_FVgYb28fhxlVcGwA.json | 10 +- ...Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json | 27 +++-- ...agon__Molten_Scourge_eArAPuB38CNR0ZIM.json | 27 +++-- ...versary_Weaponmaster_ZNbQ2jg35LG4t9eH.json | 27 +++-- ...dversary_Young_Dryad_8yUj2Mzvnifhxegm.json | 29 +++-- ...ary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json | 68 ++++++++---- ...ure_Retracting_Claws_Zj69cAeb3NjIa8Hn.json | 26 +++-- .../feature_Demolish_DfBXO8jTchwFG8dZ.json | 29 +++-- ...ture_Hobbling_Strike_8u0HkK3WgtU9lWYs.json | 29 +++-- ...feature_Ocean_Master_tGDdEH40wyOCsFmH.json | 29 +++-- ...ture_Snapping_Strike_Ky3rZD3sJMXYZOBC.json | 29 +++-- .../feature_Trample_A0lgd6eVEfX6oqSB.json | 29 +++-- ...eature_Venomous_Bite_2KlTnfzO03vneVS8.json | 29 +++-- ...ture_Venomous_Strike_uW3853pViM9VAfHb.json | 29 +++-- ...feature_Vicious_Maul_jYUBi7yLHap5ljpa.json | 29 +++-- .../feature_Webslinger_D73fS1iM4SZPFimu.json | 29 +++-- ...feature_Make_a_Scene_N9E5skDDK2VgvohR.json | 44 +++++--- .../feature_No_Mercy_njj2C3tMDeCHHOoh.json | 40 ++++--- ...eature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json | 41 ++++--- ...mainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json | 28 +++-- ...mainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json | 40 ++++--- ...nCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json | 53 ++++++--- ...inCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json | 26 +++-- ...nCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json | 40 ++++--- ...ainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json | 26 +++-- ...nCard_Cloaking_Blast_Zhw7PtK8nMPlsOqD.json | 27 +++-- ...omainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json | 28 +++-- ...domainCard_Enrapture_a8lFiKX1o8T924ze.json | 26 +++-- ...inCard_Forceful_Push_z8FFPhDh2SdFkFfS.json | 26 +++-- .../domainCard_Frenzy_MMl7abdGRLl7TJLO.json | 77 +++++++------ ...omainCard_Full_Surge_SgvjJfMyubZowPxS.json | 102 ++++++++++-------- ...d_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json | 95 ++++++---------- ...inCard_Hold_the_Line_kdFoLo3KXwn4LqTG.json | 26 +++-- .../domainCard_Hush_gwmYasmfgXZ7tFS6.json | 69 ++++-------- ...ard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json | 28 +++-- ...domainCard_Life_Ward_OszbCj0jTqq2ADx9.json | 26 +++-- ...nCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json | 28 +++-- ...ainCard_Night_Terror_zcldCuqOg3dphUVI.json | 28 +++-- ...rd_Overwhelming_Aura_iEBLySZD9z8CLdz7.json | 40 ++++--- .../domainCard_Redirect_faU0XkJCbar69PiN.json | 2 +- ...omainCard_Shadowbind_kguhWlidhxe2GbT0.json | 26 +++-- ...rd_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json | 28 +++-- .../domainCard_Tempest_X7YaZgFieBlqaPdZ.json | 26 +++-- ...rd_Through_Your_Eyes_7b0mzV5QMPjVPT4o.json | 28 +++-- ...d_Transcendent_Union_kVkoCLBXLAIifqpz.json | 26 +++-- ...ard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json | 52 ++++++--- ...ment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json | 27 +++-- ...g_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json | 33 ++++-- ...Bustling_Marketplace_HZKA7hkej7JJY503.json | 10 +- ...ronment_Raging_River_t4cdqTfzcqP3H1vJ.json | 27 +++-- ...sumable_Blinding_Orb_eAXHdzA5qNPldOpn.json | 32 ++++-- ...mable_Growing_Potion_fl2f3ees8RFMze9t.json | 53 +++++---- ..._Major_Stride_Potion_yK6eEDUrsPbZA8G0.json | 41 ++++--- ...umable_Morphing_Clay_f1NHVSIHJJCIOaBl.json | 28 +++-- ...consumable_Ogre_Musk_qr1bosjFcUfuwq4B.json | 28 +++-- ...ble_Shrinking_Potion_HGixKenQwhyRAYNk.json | 53 +++++---- ...ble_Vial_of_Moondrip_VqEX5YwK5oL3r1t6.json | 28 +++-- ...ture_Act_of_Reprisal_k7vvMJtEcxMWUUrW.json | 22 +++- ...eature_Battle_Bonded_hWsKyed1vfILg0I8.json | 41 ++++--- ...e_Elemental_Dominion_EFUJHrkTuyv8uA9l.json | 26 +++-- ...ure_Elusive_Predator_Cjtc43V3IzAmfIFG.json | 41 ++++--- ...ure_Gifted_Performer_99U7YWNCxFZHCiT0.json | 28 +++-- ...eature_Transcendence_th6HZwEFnVBjUtqm.json | 42 +++++--- .../sheets/activeEffects/activeEffects.less | 24 +++++ styles/less/ux/tooltip/bordered-tooltip.less | 32 ++++++ styles/less/ux/tooltip/tooltip.less | 27 +++++ .../settings/automation-settings/general.hbs | 1 + templates/sheets/activeEffect/settings.hbs | 64 +++++------ templates/ui/tooltip/effect-display.hbs | 10 ++ templates/ui/tooltip/effect.hbs | 8 ++ 120 files changed, 2514 insertions(+), 1256 deletions(-) diff --git a/lang/en.json b/lang/en.json index 651a661e..24d6168a 100755 --- a/lang/en.json +++ b/lang/en.json @@ -684,6 +684,15 @@ } }, "CONFIG": { + "ActiveEffectDuration": { + "temporary": "Temporary", + "act": "Next Spotlight", + "scene": "Next Scene", + "shortRest": "Next Rest", + "longRest": "Next Long Rest", + "session": "Next Session", + "custom": "Custom" + }, "AdversaryTrait": { "relentless": { "name": "Relentless", @@ -2523,6 +2532,10 @@ "hint": "Automatically increase the GM's fear pool on a fear duality roll result." }, "FIELDS": { + "autoExpireActiveEffects": { + "label": "Auto Expire Active Effects", + "hint": "Active Effects with set durations will automatically be removed when their durations are up" + }, "damageReductionRulesDefault": { "label": "Damage Reduction Rules Default", "hint": "Wether using armor and reductions has rules on by default" diff --git a/module/applications/dialogs/downtime.mjs b/module/applications/dialogs/downtime.mjs index 4c01c2a9..52cced3e 100644 --- a/module/applications/dialogs/downtime.mjs +++ b/module/applications/dialogs/downtime.mjs @@ -1,4 +1,4 @@ -import { refreshIsAllowed } from '../../helpers/utils.mjs'; +import { expireActiveEffects, refreshIsAllowed } from '../../helpers/utils.mjs'; const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; @@ -264,6 +264,8 @@ export default class DhpDowntime extends HandlebarsApplicationMixin(ApplicationV await feature.update({ 'system.resource.value': resetValue }); } + expireActiveEffects(this.actor, [this.shortRest ? 'shortRest' : 'longRest']); + this.close(); } else { this.render(); diff --git a/module/applications/sheets-configs/activeEffectConfig.mjs b/module/applications/sheets-configs/activeEffectConfig.mjs index 27a94736..75173f8d 100644 --- a/module/applications/sheets-configs/activeEffectConfig.mjs +++ b/module/applications/sheets-configs/activeEffectConfig.mjs @@ -166,6 +166,17 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac })); } break; + case 'settings': + const groups = { + time: _loc('EFFECT.DURATION.UNITS.GROUPS.time'), + combat: _loc('EFFECT.DURATION.UNITS.GROUPS.combat') + }; + partContext.durationUnits = CONST.ACTIVE_EFFECT_DURATION_UNITS.map(value => ({ + value, + label: _loc(`EFFECT.DURATION.UNITS.${value}`), + group: CONST.ACTIVE_EFFECT_TIME_DURATION_UNITS.includes(value) ? groups.time : groups.combat + })); + break; case 'changes': const fields = this.document.system.schema.fields.changes.element.fields; partContext.changes = await Promise.all( @@ -206,4 +217,26 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac ) ); } + + /** @inheritDoc */ + _onChangeForm(_formConfig, event) { + if (foundry.utils.isElementInstanceOf(event.target, 'select') && event.target.name === 'system.duration.type') { + const durationSection = this.element.querySelector('.custom-duration-section'); + if (event.target.value === 'custom') durationSection.classList.add('visible'); + else durationSection.classList.remove('visible'); + + const durationDescription = this.element.querySelector('.duration-description'); + if (event.target.value === 'temporary') durationDescription.classList.add('visible'); + else durationDescription.classList.remove('visible'); + } + } + + /** @inheritDoc */ + _processFormData(event, form, formData) { + const submitData = super._processFormData(event, form, formData); + if (submitData.start && !submitData.start.time) submitData.start.time = '0'; + else if (!submitData) submitData.start = null; + + return submitData; + } } diff --git a/module/applications/sidebar/tabs/daggerheartMenu.mjs b/module/applications/sidebar/tabs/daggerheartMenu.mjs index b29437bf..a16a1490 100644 --- a/module/applications/sidebar/tabs/daggerheartMenu.mjs +++ b/module/applications/sidebar/tabs/daggerheartMenu.mjs @@ -1,4 +1,4 @@ -import { refreshIsAllowed } from '../../../helpers/utils.mjs'; +import { expireActiveEffects, refreshIsAllowed } from '../../../helpers/utils.mjs'; const { HandlebarsApplicationMixin } = foundry.applications.api; const { AbstractSidebarTab } = foundry.applications.sidebar; @@ -58,6 +58,8 @@ export default class DaggerheartMenu extends HandlebarsApplicationMixin(Abstract const refreshedActors = {}; for (let actor of game.actors) { if (['character', 'adversary'].includes(actor.type) && actor.prototypeToken.actorLink) { + expireActiveEffects(actor, types); + const updates = {}; for (let item of actor.items) { if (item.system.metadata?.hasResource && refreshIsAllowed(types, item.system.resource?.recovery)) { diff --git a/module/applications/ui/combatTracker.mjs b/module/applications/ui/combatTracker.mjs index fc47f085..345c6fcd 100644 --- a/module/applications/ui/combatTracker.mjs +++ b/module/applications/ui/combatTracker.mjs @@ -1,4 +1,5 @@ import { AdversaryBPPerEncounter } from '../../config/encounterConfig.mjs'; +import { expireActiveEffects } from '../../helpers/utils.mjs'; export default class DhCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker { static DEFAULT_OPTIONS = { @@ -177,6 +178,8 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C if (autoPoints) { update.system.actionTokens = Math.max(combatant.system.actionTokens - 1, 0); } + + if (combatant.actor) expireActiveEffects(combatant.actor, [CONFIG.DH.GENERAL.activeEffectDurations.act.id]); } await this.viewed.update({ diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 1d9f8126..165342b4 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -885,3 +885,34 @@ export const activeEffectModes = { label: 'EFFECT.CHANGES.TYPES.override' } }; + +export const activeEffectDurations = { + temporary: { + id: 'temporary', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.temporary' + }, + act: { + id: 'act', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.act' + }, + scene: { + id: 'scene', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.scene' + }, + shortRest: { + id: 'shortRest', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.shortRest' + }, + longRest: { + id: 'longRest', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.longRest' + }, + session: { + id: 'session', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.session' + }, + custom: { + id: 'custom', + label: 'DAGGERHEART.CONFIG.ActiveEffectDuration.custom' + } +}; diff --git a/module/data/activeEffect/baseEffect.mjs b/module/data/activeEffect/baseEffect.mjs index b8f2c65f..98a961d7 100644 --- a/module/data/activeEffect/baseEffect.mjs +++ b/module/data/activeEffect/baseEffect.mjs @@ -33,6 +33,14 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { priority: new fields.NumberField() }) ), + duration: new fields.SchemaField({ + type: new fields.StringField({ + choices: CONFIG.DH.GENERAL.activeEffectDurations, + blank: true, + label: 'DAGGERHEART.GENERAL.type' + }), + description: new fields.HTMLField({ label: 'DAGGERHEART.GENERAL.description' }) + }), rangeDependence: new fields.SchemaField({ enabled: new fields.BooleanField({ required: true, diff --git a/module/data/settings/Automation.mjs b/module/data/settings/Automation.mjs index e9952b1c..edc4eb28 100644 --- a/module/data/settings/Automation.mjs +++ b/module/data/settings/Automation.mjs @@ -192,6 +192,11 @@ export default class DhAutomation extends foundry.abstract.DataModel { }) }) }), + autoExpireActiveEffects: new fields.BooleanField({ + required: true, + initial: true, + label: 'DAGGERHEART.SETTINGS.Automation.FIELDS.autoExpireActiveEffects.label' + }), triggers: new fields.SchemaField({ enabled: new fields.BooleanField({ nullable: false, diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index 9ebbb386..f8b19a3a 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -50,6 +50,20 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { }); } + /** + * Whether this Active Effect is eligible to be registered with the {@link ActiveEffectRegistry} + */ + get isExpiryTrackable() { + return ( + this.persisted && + !this.inCompendium && + this.modifiesActor && + this.start && + this.isTemporary && + !this.isExpired + ); + } + /* -------------------------------------------- */ /* Event Handlers */ /* -------------------------------------------- */ diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 2fc18a63..b1b74d9f 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -473,6 +473,8 @@ export async function waitForDiceSoNice(message) { } export function refreshIsAllowed(allowedTypes, typeToCheck) { + if (!allowedTypes) return true; + switch (typeToCheck) { case CONFIG.DH.GENERAL.refreshTypes.scene.id: case CONFIG.DH.GENERAL.refreshTypes.session.id: @@ -489,6 +491,34 @@ export function refreshIsAllowed(allowedTypes, typeToCheck) { } } +function expireActiveEffectIsAllowed(allowedTypes, typeToCheck) { + if (typeToCheck === CONFIG.DH.GENERAL.activeEffectDurations.act.id) return true; + + return refreshIsAllowed(allowedTypes, typeToCheck); +} + +export function expireActiveEffects(actor, allowedTypes = null) { + const shouldExpireEffects = game.settings.get( + CONFIG.DH.id, + CONFIG.DH.SETTINGS.gameSettings.Automation + ).autoExpireActiveEffects; + if (!shouldExpireEffects) return; + + const effectsToExpire = actor + .getActiveEffects() + .filter(effect => { + if (!effect.system?.duration.type) return false; + + const { temporary, custom } = CONFIG.DH.GENERAL.activeEffectDurations; + if ([temporary.id, custom.id].includes(effect.system.duration.type)) return false; + + return expireActiveEffectIsAllowed(allowedTypes, effect.system.duration.type); + }) + .map(x => x.id); + + actor.deleteEmbeddedDocuments('ActiveEffect', effectsToExpire); +} + export async function getCritDamageBonus(formula) { const critRoll = new Roll(formula); return critRoll.dice.reduce((acc, dice) => acc + dice.faces * dice.number, 0); @@ -503,6 +533,8 @@ export function htmlToText(html) { export function getIconVisibleActiveEffects(effects) { return effects.filter(effect => { + if (!(effect instanceof game.system.api.documents.DhActiveEffect)) return true; + const alwaysShown = effect.showIcon === CONST.ACTIVE_EFFECT_SHOW_ICON.ALWAYS; const conditionalShown = effect.showIcon === CONST.ACTIVE_EFFECT_SHOW_ICON.CONDITIONAL && !effect.transfer; // TODO: system specific logic diff --git a/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json b/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json index e2b3a444..70d0072b 100644 --- a/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json +++ b/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json @@ -400,18 +400,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "act" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -423,6 +423,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!89yAh30vaNQOALlz.ctXYwil2D1zfsekT.9PsnogEPsp1OOK64" } ], diff --git a/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json b/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json index d4e506cb..3b1f3535 100644 --- a/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json +++ b/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json @@ -488,18 +488,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you roll with Hope.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until you roll with Hope.

      ", "tint": "#ffffff", @@ -511,6 +512,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!WPEOIGfclNJxWb87.4EECsXzHFG0RoIg0.KGdf2eqcXkdigg0u" } ], diff --git a/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json b/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json index 8b553c83..324fc25e 100644 --- a/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json +++ b/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json @@ -277,20 +277,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you clear a HP.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Vulnerable until you clear a HP.

      ", + "description": "

      Vulnerable until you clear a HP.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -300,6 +301,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!h5RuhzGL17dW5FBT.Fz2lnUEeBxsDpx0G.2iBVUGHtGW3I9VIj" } ], diff --git a/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json b/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json index 96a1b752..02553014 100644 --- a/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json +++ b/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json @@ -667,20 +667,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until their next roll with Hope.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Vulnerable until your next roll with Hope.

      ", + "description": "

      Vulnerable until your next roll with Hope.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -690,6 +691,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!dgH3fW9FTYLaIDvS.XtnByqUr9AuYU9Ip.9NQcCXMhjyBReJRd" } ], @@ -883,20 +894,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until the cube is defeated.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Vulnerable until the cube is defeated.

      ", + "description": "

      Vulnerable until the cube is defeated.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -906,6 +918,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!dgH3fW9FTYLaIDvS.ijIaKjroxq3xZd9Z.S7kJlhnV8Nexzi8l" } ], diff --git a/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json b/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json index da5de611..959ef9dd 100644 --- a/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json +++ b/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json @@ -368,18 +368,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Strength Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained until you break free with a successful Strength Roll.

      ", "tint": "#ffffff", @@ -391,6 +392,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!71qKDLKO3CsrNkdy.zgR0MEqyobKp2yXr.U50Ccm9emMqAxma6" } ], diff --git a/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json b/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json index 8ee7c56c..0a332575 100644 --- a/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json +++ b/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json @@ -376,18 +376,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful attack, Finesse Roll, or Strength Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained until you break free with a successful attack, Finesse Roll, or Strength Roll.

      ", "tint": "#ffffff", @@ -399,6 +400,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!B4LZcGuBAHzyVdzy.9gizFt9ovKL05DXu.LmzztuktRkwOCy1a" } ], diff --git a/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json b/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json index c829c3f9..a169bf61 100644 --- a/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json +++ b/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json @@ -452,18 +452,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -475,6 +475,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!2UeZ0tEe7AzgSJNd.69reUZ5tv3splqyO.CjMrSdL6kgD8mKRQ" } ], diff --git a/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json b/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json index 668cd943..24572103 100644 --- a/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json +++ b/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json @@ -320,18 +320,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until the scene ends or they succeed on a social action against the Courtesan.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until the scene ends or they succeed on a social action against the Courtesan.

      ", "tint": "#ffffff", @@ -343,6 +344,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!ZxWaWPdzFIUPNC62.rSMUPC5GhR982ifg.blcRqns0PHqiuPac" } ], diff --git a/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json b/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json index 6721666f..1ffc7ece 100644 --- a/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json +++ b/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json @@ -336,18 +336,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "scene" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -359,6 +359,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!CBBuEXAlLKFMJdjg.LYNaKEYcYMgvF4Rf.YNMhgBZW8ndrCjIp" } ], diff --git a/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json b/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json index 14eb579b..e428d05d 100644 --- a/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json +++ b/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json @@ -422,31 +422,32 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.resistance.magical.resistance", + "value": 1, + "priority": null, + "type": "override" + }, + { + "key": "system.resistance.physical.resistance", + "value": 1, + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "temporary", + "description": "

      Until the Cult Adept marks their last HP.

      " } }, - "changes": [ - { - "key": "system.resistance.magical.resistance", - "mode": 5, - "value": "1", - "priority": null - }, - { - "key": "system.resistance.physical.resistance", - "mode": 5, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Resistance to all damage until the Adept marks their last HP

      ", "tint": "#ffffff", @@ -456,6 +457,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!0NxCSugvKQ4W8OYZ.IHWDn097sRgjlZXO.U9lWz1LgeAiK5L85" } ], @@ -533,18 +544,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Strength or Instinct Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained in smoky chains until you break free with a successful Strength or Instinct Roll. A target Restrained by this feature must spend a Hope to make an action roll.

      ", "tint": "#ffffff", @@ -556,6 +568,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!0NxCSugvKQ4W8OYZ.JpSrduK3vjd9h098.lNH6srSPyEprXZ4o" } ], diff --git a/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json b/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json index 57e7a7c7..d3b341f0 100644 --- a/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json +++ b/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json @@ -384,18 +384,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -407,6 +407,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!tyBOpLfigAhI9bU3.ohASSruBxcvuItIK.LwWxRz7FTMA80VdA" } ], diff --git a/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json b/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json index cd745eb6..f66ce7f0 100644 --- a/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json +++ b/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json @@ -407,18 +407,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until the Deeproot Defender takes Severe damage.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained until the Defender takes Severe damage.

      ", "tint": "#ffffff", @@ -430,6 +431,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!9x2xY9zwc3xzbXo5.rreGFW5TbhUoZf2T.F3E7fiz01AbF2kr5" } ], diff --git a/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json b/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json index 830848c3..27c6bac2 100644 --- a/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json +++ b/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json @@ -354,25 +354,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.rules.dualityRoll.defaultHopeDice", + "value": "d8", + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "shortRest" } }, - "changes": [ - { - "key": "system.rules.dualityRoll.defaultHopeDice", - "mode": 5, - "value": "d8", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      All targets affected replace their Hope Die with a d8 until they roll a success with Hope or their next rest.

      ", "tint": "#ffffff", @@ -382,6 +382,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!kE4dfhqmIQpNd44e.FC8PIf4BVkhmoJX8.6WSx03mFbpbPWnOI" } ], diff --git a/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json b/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json index 2341ee8a..33ded6b9 100644 --- a/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json +++ b/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json @@ -317,25 +317,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.rules.dualityRoll.defaultFearDice", + "value": "d20", + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "scene" } }, - "changes": [ - { - "key": "system.rules.dualityRoll.defaultFearDice", - "mode": 5, - "value": "d20", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You use a d20 as your Fear Die until the end of the scene.

      ", "tint": "#ffffff", @@ -345,6 +345,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!5lphJAgzoqZI3VoG.a33PW8UkziliowlR.gFeHLGgeRoDdd3VG" } ], diff --git a/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json b/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json index e3ecda4e..69301cb2 100644 --- a/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json +++ b/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json @@ -435,18 +435,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until they clear at least 1 HP.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -458,6 +459,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!wNzeuQLfLUMvgHlQ.85XrqDvLP30YOO43.YNKHEFQ4ucGr4Rmc" } ], diff --git a/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json b/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json index fc064958..bfad5cf6 100644 --- a/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json +++ b/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json @@ -385,30 +385,41 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until youbreak free with a successful Instinct Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Restrained and Vulnerable until you break free, ending both conditions, with a successful Instinct Roll.

      ", "tint": "#ffffff", "statuses": [ - "restrained", - "vulnerable" + "vulnerable", + "restrained" ], "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!PELRry1vqjBzSAlr.ecp9o8t1dQFXGsse.Q99saHj6NOY2PSXf" } ], @@ -572,18 +583,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      A target can break free from their regret with a successful Presence or Strength Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until you break free from your regret with a successful Presence or Strength Roll. If you fail to break free, you lose a Hope.

      ", "tint": "#ffffff", @@ -595,6 +607,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!PELRry1vqjBzSAlr.gwSgBhkcekCGvXxz.pWDg0MADoohKu40O" } ], diff --git a/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json b/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json index 6d09a490..e576e1e0 100644 --- a/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json +++ b/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json @@ -352,18 +352,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Finesse or Strength Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained until you break free with a successful Finesse or Strength Roll.

      ", "tint": "#ffffff", @@ -375,6 +376,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!8VZIgU12cB3cvlyH.6ZrDjgnWufJohkp1.vb1sZCOLwDNLsr3j" } ], diff --git a/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json b/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json index b0ba4170..ea578762 100644 --- a/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json +++ b/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json @@ -430,18 +430,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "act" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until the next time you act.

      ", "tint": "#ffffff", @@ -453,6 +453,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!OMQ0v6PE8s1mSU0K.MabIQE1Kjn60j08J.m6qqQZxukDPVcGdQ" } ], diff --git a/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json b/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json index 99b5ed46..fda3e656 100644 --- a/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json +++ b/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json @@ -438,18 +438,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Poisoned until your next rest or until you succeed on a Knowledge Roll (16). While Poisoned, you must roll a d6 before you make an action roll. On a result of 4 or lower, you must mark a Stress.

      [[/dr trait=knowledge difficulty=16]]

      ", "tint": "#ffffff", @@ -459,6 +459,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!fmfntuJ8mHRCAktP.lANiDkxxth2sGacT.oILkLJlGNZl7KI1R" } ], diff --git a/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json b/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json index deeafa37..2753d958 100644 --- a/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json +++ b/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json @@ -335,25 +335,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.rules.conditionImmunities.hidden", + "value": 1, + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "scene" } }, - "changes": [ - { - "key": "system.rules.conditionImmunities.hidden", - "mode": 5, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You Glow until the end of the scene and can’t become Hidden. Attack rolls made against you have advantage.

      ", "tint": "#ffffff", @@ -363,6 +363,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!8mJYMpbLTb8qIOrr.NepVGKOo1lHYjA1F.bYBrgiSwHwYfQyjn" } ], diff --git a/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json b/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json index a20d80e6..fe968ff3 100644 --- a/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json +++ b/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json @@ -507,18 +507,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until your next roll with Hope.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until your next roll with Hope.

      ", "tint": "#ffffff", @@ -530,6 +531,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!dsfB3YhoL5SudvS2.q45DiEFlXqcXZ5hv.38MUzfbH64EMLVse" } ], diff --git a/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json b/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json index be037b10..5d17f025 100644 --- a/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json +++ b/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json @@ -459,30 +459,41 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      You can break free with a successful Strength or Instinct Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained and Vulnerable as you are drowning. You can break free, ending both conditions, with a successful Strength or Instinct Roll.

      ", "tint": "#ffffff", "statuses": [ - "restrained", - "vulnerable" + "vulnerable", + "restrained" ], "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!xIICT6tEdnA7dKDV.bcwFQeuU6ZfIGjau.X8NF2OB23mSpDvlx" } ], diff --git a/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json b/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json index b03b5495..5f3f52c2 100644 --- a/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json +++ b/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json @@ -465,18 +465,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      If the Green Ooze takes Severe damage, the target is freed.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You must mark an additional Stress when you make an action roll. If the Ooze takes Severe damage, you are freed.

      ", "tint": "#ffffff", @@ -486,6 +487,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!SHXedd9zZPVfUgUa.Sm9Sk4mSvcq6PkmR.yk5kR5OVLCgDWfgY" } ], diff --git a/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json b/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json index 0a952540..60fe1917 100644 --- a/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json +++ b/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json @@ -391,20 +391,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until the High Seraph is defeated. The High Seraph can only mark one target at a time.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      While Guilty, you don’t gain Hope on a result with Hope.

      ", + "description": "

      While Guilty, you don’t gain Hope on a result with Hope.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -412,6 +413,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!r1mbfSSwKWdcFdAU.FilEB21L5q9XxKE1.O8G0oOf9f3qzNOAT" } ], diff --git a/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json b/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json index 3bb8ae96..db00c5e6 100644 --- a/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json +++ b/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json @@ -436,18 +436,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      When the Huge Green Ooze takes Severe damage, all Enveloped targets are freed and the condition is cleared.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      While Enveloped, you must mark an additional Stress every time you make an action roll. When the Ooze takes Severe damage, all Enveloped targets are freed and the condition is cleared.

      ", "tint": "#ffffff", @@ -457,6 +458,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!6hbqmxDXFOzZJDk4.pfXYuH7rtsyVjSXh.EwZ8owroJxFpg81e" } ], diff --git a/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json b/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json index 4c6fd61f..a12aaad8 100644 --- a/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json +++ b/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json @@ -507,25 +507,26 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.resistance.magical.immunity", + "value": 1, + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "temporary", + "description": "

      Until the next roll with Fear.

      " } }, - "changes": [ - { - "key": "system.resistance.magical.immunity", - "mode": 5, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      While Dazed, they can’t use their Regeneration action but are immune to magic damage.

      ", "tint": "#ffffff", @@ -535,6 +536,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!MI126iMOOobQ1Obn.sJzjcRBgYRp5f53E.iBJ3YhEkVsGKEIVk" } ], diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json b/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json index 6ca9749c..e56f7af5 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json @@ -278,18 +278,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Whenever you roll with Hope, the hexer can mark a stress to make the roll be with Fear instead.

      ", "tint": "#ffffff", @@ -299,6 +299,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!MbBPIOxaxXYNApXz.Bl8L0RCGOgVUzuXo.ihy3kvEGSOEKdNfT" } ], diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json b/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json index c38260e9..d8115fd9 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json @@ -334,25 +334,26 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.rules.attack.damage.hpDamageTakenMultiplier", + "value": 2, + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "temporary", + "description": "

      The target can break free, clearing both conditions, with a successful Strength Roll or is freed automatically if the Jagged Knife Kneebreaker takes Major or greater damage.

      " } }, - "changes": [ - { - "key": "system.rules.attack.damage.hpDamageTakenMultiplier", - "mode": 5, - "value": "2", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -365,6 +366,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!CBKixLH3yhivZZuL.Sa4Nt0eoDjirBKGf.d7sB1Qa1kJMnglqu" } ], diff --git a/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json b/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json index 3b84774e..6f6f6edc 100644 --- a/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json +++ b/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json @@ -385,30 +385,41 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Strength Roll or the Kraken takes Major or greater damage.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained and Vulnerable until you break free with a successful Strength Roll or the Kraken takes Major or greater damage. While Restrained and Vulnerable in this way, you must mark a Stress when you make an action roll.

      ", "tint": "#ffffff", "statuses": [ - "restrained", - "vulnerable" + "vulnerable", + "restrained" ], "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!4nqv3ZwJGjnmic8j.vz2BWhispgR7mSWF.Xes6ZIE01CCN67KF" } ], diff --git a/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json b/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json index 528df6a9..3143fbe3 100644 --- a/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json +++ b/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json @@ -400,30 +400,41 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Finesse or Strength Roll (13).

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Restrained and Vulnerable until you break free, ending both conditions, with a successful Finesse or Strength Roll (13).

      [[/dr trait=finesse difficulty=13]]
      [[/dr trait=strength difficulty=13]]

      ", "tint": "#ffffff", "statuses": [ - "restrained", - "vulnerable" + "vulnerable", + "restrained" ], "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!niBpVU7yeo5ccskE.tP2DD751nOLxFVps.zMut1PRphlwE0xOa" } ], diff --git a/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json b/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json index b1732c71..57dc2980 100644 --- a/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json +++ b/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json @@ -380,18 +380,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until your next rest or you clear a HP.

      ", "tint": "#ffffff", @@ -403,6 +403,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!sRn4bqerfARvhgSV.oAxhAawgcK7DAdpa.KIyV2eXDmmymXY5y" } ], diff --git a/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json b/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json index 8bc7fe10..01218718 100644 --- a/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json +++ b/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json @@ -444,18 +444,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "scene" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Attacks made by the Hunter against a Deathlocked target deal direct damage.

      ", "tint": "#ffffff", @@ -465,6 +465,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!mVV7a7KQAORoPMgZ.r1T70u9n3bRfUTX5.YznseQP43jNrk07h" } ], diff --git a/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json b/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json index c0999e70..82321fb6 100644 --- a/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json +++ b/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json @@ -399,25 +399,26 @@ "type": "withinRange", "target": "any", "range": "self" + }, + "changes": [ + { + "key": "system.resistance.physical.resistance", + "value": 1, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "temporary", + "description": "

      Can end this effect instead of moving while they are spotlighted.

      " } }, - "changes": [ - { - "key": "system.resistance.physical.resistance", - "mode": 2, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Mark a Stress to Root the Treant in place. The Treant is Restrained while Rooted and can end this effect instead of moving while they are spotlighted. While Rooted the Treant has resistance to physical damage.

      ", "tint": "#ffffff", @@ -427,6 +428,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!XK78QUfY8c8Go8Uv.sqkgw26P2KiQVtXT.3PY5KIG6d3dr3dty" } ], diff --git a/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json b/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json index 5b565b8c..83edda8a 100644 --- a/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json +++ b/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json @@ -442,20 +442,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "scene" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Unstuck from reality until the end of the scene. When you spend Hope or mark Armor Slots, HP, or Stress, you must double the amount spent or marked.

      ", + "description": "

      Unstuck from reality until the end of the scene. When you spend Hope or mark Armor Slots, HP, or Stress, you must double the amount spent or marked.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -463,6 +463,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!A0SeeDzwjvqOsyof.K3MQO1I42nmfM2F2.edEZER9ImWicMwRb" } ], diff --git a/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json b/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json index e3da56b6..8174e9fd 100644 --- a/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json +++ b/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json @@ -433,18 +433,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest", + "description": "" } }, - "changes": [], "disabled": true, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until your next rest.

      ", "tint": "#ffffff", @@ -456,6 +457,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!CP6iRfHdyFWniTHY.CKy2r6FguyTSO9Fm.Q5eeh0B6qaXFS1Ck" } ], diff --git a/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json b/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json index 2c10ae3f..cd8a44b6 100644 --- a/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json +++ b/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json @@ -409,18 +409,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until they’re extinguished with a successful Finesse Roll (14)

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      You are Ignited until you are extinguished with a successful Finesse Roll (14). While Ignited, you take 1d4 magic damage whenever you make an action roll.

      [[/dr trait=finesse difficulty=14]]

      ", "tint": "#ffffff", @@ -430,6 +431,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!9rVlbJVrDNn1x7PS.JU9uVwZSM0ItnZRq.9UBLk9M87VIUziAQ" } ], diff --git a/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json b/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json index a72c6d46..05ca67a9 100644 --- a/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json +++ b/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json @@ -408,20 +408,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you mark 2 Stress.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      While Entranced, you can’t act and are Vulnerable.

      ", + "description": "

      While Entranced, you can’t act and are Vulnerable.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -431,6 +432,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!BK4jwyXSRx7IOQiO.Ks3HpB4W1l5FqR7p.xrm5786ckKbMYHjn" } ], diff --git a/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json b/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json index de3ef9f2..d04f41fd 100644 --- a/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json +++ b/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json @@ -359,18 +359,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -382,6 +382,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!3aAS2Qm3R6cgaYfE.tQgxiSS48TJ3X1Dl.6UgMuuJ8ZygbCsDh" } ], diff --git a/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json b/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json index 6a984b3c..2b3867aa 100644 --- a/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json +++ b/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json @@ -128,12 +128,9 @@ "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "anchorX": 0.5, "anchorY": 0.5, - "offsetX": 0, - "offsetY": 0, "fit": "contain", "scaleX": 1, "scaleY": 1, - "rotation": 0, "tint": "#ffffff", "alphaThreshold": 0.75 }, @@ -184,7 +181,7 @@ "saturation": 0, "contrast": 0 }, - "detectionModes": [], + "detectionModes": {}, "occludable": { "radius": 0 }, @@ -210,7 +207,8 @@ "flags": {}, "randomImg": false, "appendNumber": false, - "prependAdjective": false + "prependAdjective": false, + "depth": 1 }, "items": [ { @@ -219,7 +217,7 @@ "_id": "WpOh5kHHx7lcTvEY", "img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp", "system": { - "description": "

      When the @Lookup[@name] makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.

      ", + "description": "

      When the @Lookup[@name] makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.

      ", "resource": null, "actions": { "HfK0u0c7NRppuF1Q": { diff --git a/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json b/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json index d1cca592..24db9c55 100644 --- a/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json +++ b/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json @@ -328,20 +328,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until freed with a successful Strength Roll (18).

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      You are Restrained within the Gaoler until freed with a successful Strength Roll (18). While Restrained, you can only attack the Gaoler.

      ", + "description": "

      You are Restrained within the Gaoler until freed with a successful Strength Roll (18). While Restrained, you can only attack the Gaoler.

      ", "tint": "#ffffff", "statuses": [ "restrained" @@ -351,6 +352,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!JqYraOqNmmhHk4Yy.VlHp8RjHy7MK8rqC.6TZlstmWJPbeoL7i" } ], diff --git a/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json b/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json index 67139669..e4098e93 100644 --- a/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json +++ b/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json @@ -132,12 +132,9 @@ "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "anchorX": 0.5, "anchorY": 0.5, - "offsetX": 0, - "offsetY": 0, "fit": "contain", "scaleX": 1, "scaleY": 1, - "rotation": 0, "tint": "#ffffff", "alphaThreshold": 0.75 }, @@ -188,7 +185,7 @@ "saturation": 0, "contrast": 0 }, - "detectionModes": [], + "detectionModes": {}, "occludable": { "radius": 0 }, @@ -214,7 +211,8 @@ "flags": {}, "randomImg": false, "appendNumber": false, - "prependAdjective": false + "prependAdjective": false, + "depth": 1 }, "items": [ { @@ -246,7 +244,7 @@ "name": "Box In", "type": "feature", "system": { - "description": "

      Mark a Stress to choose a target within Very Close range to focus on. That target has disadvantage on attack rolls when they’re within Very Close range of the @Lookup[@name]. The @Lookup[@name]Sentinel can only focus on one target at a time.

      ", + "description": "

      Mark a Stress to choose a target within Very Close range to focus on. That target has disadvantage on attack rolls when they’re within Very Close range of the @Lookup[@name]. The @Lookup[@name] can only focus on one target at a time.

      ", "resource": null, "actions": { "4RQnBu4kcUs3PcPH": { diff --git a/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json b/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json index 82bdd810..baf84c14 100644 --- a/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json +++ b/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json @@ -841,18 +841,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Strength Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Restrained by the rubble until you break free with a successful Strength Roll.

      ", "tint": "#ffffff", @@ -864,6 +865,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!pMuXGCSOQaxpi5tb.uWiyaJPXcoW06pOM.YUjdwrEZ4zn7WR9X" } ], diff --git a/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json b/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json index b23da064..c73b0dda 100644 --- a/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json +++ b/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json @@ -721,18 +721,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you clear a Stress.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until you clear a Stress.

      ", "tint": "#ffffff", @@ -744,6 +745,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!eArAPuB38CNR0ZIM.2mK8kxfp2WBUeBri.xmzA6NC9zrulhzQs" } ], diff --git a/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json b/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json index 2989468b..55c7cb23 100644 --- a/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json +++ b/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json @@ -324,18 +324,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until your next successful attack

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      The next time the Taunted target attacks, they have disadvantage against targets other than the Weaponmaster.

      ", "tint": "#ffffff", @@ -345,6 +346,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!ZNbQ2jg35LG4t9eH.tyGgOqQzDSIypoMz.j2jYmYbtWXvq32yX" } ], diff --git a/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json b/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json index 446a4af3..d097f765 100644 --- a/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json +++ b/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json @@ -367,20 +367,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until they’re freed with a successful Strength Roll.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      You are Restrained until you're freed with a successful Strength Roll. When a creature makes an action roll against the cage, they must mark a Stress.

      ", + "description": "

      You are Restrained until you're freed with a successful Strength Roll. When a creature makes an action roll against the cage, they must mark a Stress.

      ", "tint": "#ffffff", "statuses": [ "restrained" @@ -390,6 +391,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!8yUj2Mzvnifhxegm.i8NoUGUTNY2C5NhC.k8LzBWRZo6VPqvpH" } ], diff --git a/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json b/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json index b0a3bded..a40f57f0 100644 --- a/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json +++ b/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json @@ -621,18 +621,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until they dig themselves out from the debris.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until you dig yourself out from the debris.

      ", "tint": "#ffffff", @@ -644,6 +645,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!UGPiPLJsPvMTSKEF.CcRTxCDCJskiu3fI.40cFHuNdEvbUZ9rs" } ], @@ -744,25 +755,26 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.disadvantageSources", + "value": "On attack rolls.", + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "temporary", + "description": "

      Until your next rest or you clear a Stress.

      " } }, - "changes": [ - { - "key": "system.disadvantageSources", - "mode": 2, - "value": "On attack rolls.", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Chilled until your next rest or you clear a Stress. While you are Chilled, you have disadvantage on attack rolls.

      ", "tint": "#ffffff", @@ -772,6 +784,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!UGPiPLJsPvMTSKEF.nXZHOfcYvjg3YMNU.1JlRxa07i8T1a9x6" } ], diff --git a/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json b/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json index 8e408ec6..6338548e 100644 --- a/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json +++ b/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json @@ -83,18 +83,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -106,6 +106,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!Zj69cAeb3NjIa8Hn.pO76svFkmWmZ6LjC" } ], diff --git a/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json b/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json index b7d85ef1..acc7df36 100644 --- a/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json +++ b/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json @@ -107,17 +107,18 @@ "transfer": false, "_id": "FXdFgEgqVl5gIWJS", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -129,6 +130,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!DfBXO8jTchwFG8dZ.FXdFgEgqVl5gIWJS" } ], diff --git a/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json b/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json index 6a16f864..a1d80e5d 100644 --- a/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json +++ b/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json @@ -58,17 +58,18 @@ "transfer": false, "_id": "2kKkV9zhfvqA2vlt", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -80,6 +81,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!8u0HkK3WgtU9lWYs.2kKkV9zhfvqA2vlt" } ], diff --git a/src/packs/beastforms/feature_Ocean_Master_tGDdEH40wyOCsFmH.json b/src/packs/beastforms/feature_Ocean_Master_tGDdEH40wyOCsFmH.json index a4431417..aa0baa31 100644 --- a/src/packs/beastforms/feature_Ocean_Master_tGDdEH40wyOCsFmH.json +++ b/src/packs/beastforms/feature_Ocean_Master_tGDdEH40wyOCsFmH.json @@ -51,17 +51,18 @@ "transfer": false, "_id": "6GBczj8REkDmgX2Q", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -73,6 +74,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!tGDdEH40wyOCsFmH.6GBczj8REkDmgX2Q" } ], diff --git a/src/packs/beastforms/feature_Snapping_Strike_Ky3rZD3sJMXYZOBC.json b/src/packs/beastforms/feature_Snapping_Strike_Ky3rZD3sJMXYZOBC.json index d79c9018..581bdcf5 100644 --- a/src/packs/beastforms/feature_Snapping_Strike_Ky3rZD3sJMXYZOBC.json +++ b/src/packs/beastforms/feature_Snapping_Strike_Ky3rZD3sJMXYZOBC.json @@ -58,17 +58,18 @@ "transfer": false, "_id": "y3EsJuInxE7juNXT", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -81,6 +82,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!Ky3rZD3sJMXYZOBC.y3EsJuInxE7juNXT" } ], diff --git a/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json b/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json index e9878f02..230f6470 100644 --- a/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json +++ b/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json @@ -107,17 +107,18 @@ "transfer": false, "_id": "LkekG4IngVW9rFjI", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -129,6 +130,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!A0lgd6eVEfX6oqSB.LkekG4IngVW9rFjI" } ], diff --git a/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json b/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json index 00870086..30ace68f 100644 --- a/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json +++ b/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json @@ -51,17 +51,18 @@ "transfer": false, "_id": "TTyAKKoUCoYXSMs4", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      A Poisoned creature takes 1d10 direct physical damage each time they act.

      ", "tint": "#ffffff", @@ -71,6 +72,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!2KlTnfzO03vneVS8.TTyAKKoUCoYXSMs4" } ], diff --git a/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json b/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json index 57d5bb56..3b39707d 100644 --- a/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json +++ b/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json @@ -75,17 +75,18 @@ "transfer": false, "_id": "1iQPj96LqUNkRaxE", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      A Poisoned creature takes 1d10 physical direct damage each time they act.

      ", "tint": "#ffffff", @@ -95,6 +96,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!uW3853pViM9VAfHb.1iQPj96LqUNkRaxE" } ], diff --git a/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json b/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json index 2bdad760..28095ea9 100644 --- a/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json +++ b/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json @@ -88,17 +88,18 @@ "transfer": false, "_id": "MIAh9XNwDXGDktCm", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -110,6 +111,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!jYUBi7yLHap5ljpa.MIAh9XNwDXGDktCm" } ], diff --git a/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json b/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json index 40adb28b..9e3a3d93 100644 --- a/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json +++ b/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json @@ -75,17 +75,18 @@ "transfer": false, "_id": "cBJueH89gNvvDKfQ", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary" + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -97,6 +98,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!D73fS1iM4SZPFimu.cBJueH89gNvvDKfQ" } ], diff --git a/src/packs/classes/feature_Make_a_Scene_N9E5skDDK2VgvohR.json b/src/packs/classes/feature_Make_a_Scene_N9E5skDDK2VgvohR.json index 1a444728..5f28c048 100644 --- a/src/packs/classes/feature_Make_a_Scene_N9E5skDDK2VgvohR.json +++ b/src/packs/classes/feature_Make_a_Scene_N9E5skDDK2VgvohR.json @@ -53,7 +53,7 @@ "effects": [ { "name": "Make a Scene", - "img": "icons/svg/daze.svg", + "img": "icons/magic/sonic/scream-wail-shout-teal.webp", "origin": "Compendium.daggerheart.classes.Item.OxmucTHHfuBSv2dn", "transfer": false, "_id": "8G9zDv1gac6dEHmS", @@ -64,27 +64,27 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.difficulty", + "value": -2, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "temporary" } }, - "changes": [ - { - "key": "system.difficulty", - "mode": 2, - "value": "-2", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "", + "description": "

      Giving them a -2 penalty to their Difficulty.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -92,6 +92,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!N9E5skDDK2VgvohR.8G9zDv1gac6dEHmS" } ], diff --git a/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json b/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json index 4d10c3b9..b5239242 100644 --- a/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json +++ b/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json @@ -67,25 +67,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.bonuses.roll.attack.bonus", + "value": 1, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "shortRest" } }, - "changes": [ - { - "key": "system.bonuses.roll.attack.bonus", - "mode": 2, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Gain a +1 bonus to your attack rolls until your next rest.

      ", "tint": "#ffffff", @@ -95,6 +95,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!njj2C3tMDeCHHOoh.XK4cCcz9sRGDJr0q" } ], diff --git a/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json b/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json index 231295fc..0f31f491 100644 --- a/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json +++ b/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json @@ -65,25 +65,26 @@ "type": "withinRange", "target": "any", "range": "self" + }, + "changes": [ + { + "key": "system.evasion", + "value": 2, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "temporary", + "description": "

      Until the next time an attack succeeds against you.

      " } }, - "changes": [ - { - "key": "system.evasion", - "mode": 2, - "value": "2", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Spend 3 Hope to gain a +2 bonus to your Evasion until the next time an attack succeeds against you. Otherwise, this bonus lasts until your next rest.

      ", "tint": "#ffffff", @@ -93,6 +94,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!hVaaPIjxoextIgSL.hhVjBro2osGDTT5g" } ], diff --git a/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json b/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json index eb053b27..c1964896 100644 --- a/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json +++ b/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json @@ -119,20 +119,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Temporarily Vulnerable and glows brightly until this condition is cleared.

      ", + "description": "

      Temporarily Vulnerable and glows brightly until this condition is cleared.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -142,6 +142,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!BNevJyGk7hmN7XOY.veZpnhnF8NRRhKG4" } ], diff --git a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json index 4ed5bd63..8c531bcd 100644 --- a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json +++ b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json @@ -260,25 +260,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.armorScore", + "value": 1, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "shortRest" } }, - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      +1 bonus to your Armor Score until your next rest, or the caster cast's Tava’s Armor again.

      ", "tint": "#ffffff", @@ -288,6 +288,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!YtZzYBtR0yLPPA93.LdcT1nrkd5ORCU4n" } ], diff --git a/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json b/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json index 5acec2fd..71ce49f6 100644 --- a/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json +++ b/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json @@ -177,18 +177,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Lasts until your next rest or the caster casts Telepathy again.

      ", "tint": "#ffffff", @@ -198,6 +198,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!df4iRqQzRntrF6Qw.zAEaETYSOE2fmcyB" }, { @@ -213,18 +223,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until they take damage or the GM spends a Fear on their turn to clear this condition.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Asleep until they take damage or the GM spends a Fear on their turn to clear this condition.

      ", "tint": "#ffffff", @@ -234,6 +245,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!df4iRqQzRntrF6Qw.gfZTHSgwYSDKsePW" } ], diff --git a/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json b/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json index 6581cd52..05d0a219 100644 --- a/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json +++ b/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json @@ -184,18 +184,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -207,6 +207,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!WtwSWXTRZa7QVvmo.iPnT02apql16Zhjf" } ], diff --git a/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json b/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json index 2a48b31e..4e08fb0e 100644 --- a/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json +++ b/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json @@ -114,25 +114,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.resistance.magical.immunity", + "value": 1, + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "shortRest" } }, - "changes": [ - { - "key": "system.resistance.magical.immunity", - "mode": 5, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Immune to magic damage until your next rest.

      ", "tint": "#ffffff", @@ -142,6 +142,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!J1ovx2FpNDvPq1o6.HWJYhSegVLeAa3dE" } ], diff --git a/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json b/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json index 8ea51d7f..5ffab1e2 100644 --- a/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json +++ b/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json @@ -167,18 +167,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      When a creature acts while On Fire, they must take an extra 2d6 magic damage if they are still On Fire at the end of their action.

      ", "tint": "#ffffff", @@ -190,6 +190,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!5EP2Lgf7ojfrc0Is.HNKkaWi507whJuYN" } ], diff --git a/src/packs/domains/domainCard_Cloaking_Blast_Zhw7PtK8nMPlsOqD.json b/src/packs/domains/domainCard_Cloaking_Blast_Zhw7PtK8nMPlsOqD.json index 67817fc1..a2a06889 100644 --- a/src/packs/domains/domainCard_Cloaking_Blast_Zhw7PtK8nMPlsOqD.json +++ b/src/packs/domains/domainCard_Cloaking_Blast_Zhw7PtK8nMPlsOqD.json @@ -70,18 +70,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      When you move into or within an adversary’s line of sight or make an attack, you are no longer Cloaked.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      While Cloaked, you remain unseen if you are stationary when an adversary moves to where they would normally see you. When you move into or within an adversary’s line of sight or make an attack, you are no longer Cloaked.

      ", "tint": "#ffffff", @@ -91,6 +92,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!Zhw7PtK8nMPlsOqD.twCBqXytmRkMz0kV" } ], diff --git a/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json b/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json index 57fc72db..614f7e32 100644 --- a/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json +++ b/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json @@ -123,20 +123,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Temporarily Vulnerable.

      ", + "description": "

      Temporarily Vulnerable.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -144,6 +144,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!C0qLOwSSvZ6PG3Ws.Z31XqmGUKWYcZdMY" } ], diff --git a/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json b/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json index fd27c8ce..dc574dec 100644 --- a/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json +++ b/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json @@ -144,18 +144,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      While Enraptured, a target’s attention is fixed on you, narrowing their field of view and drowning out any sound but your voice.

      ", "tint": "#ffffff", @@ -165,6 +165,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!a8lFiKX1o8T924ze.EYG5dLImk6GkmfRd" } ], diff --git a/src/packs/domains/domainCard_Forceful_Push_z8FFPhDh2SdFkFfS.json b/src/packs/domains/domainCard_Forceful_Push_z8FFPhDh2SdFkFfS.json index d77c8777..3d17ab5d 100644 --- a/src/packs/domains/domainCard_Forceful_Push_z8FFPhDh2SdFkFfS.json +++ b/src/packs/domains/domainCard_Forceful_Push_z8FFPhDh2SdFkFfS.json @@ -69,18 +69,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -92,6 +92,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!z8FFPhDh2SdFkFfS.95oX6QYPySdyyh2v" } ], diff --git a/src/packs/domains/domainCard_Frenzy_MMl7abdGRLl7TJLO.json b/src/packs/domains/domainCard_Frenzy_MMl7abdGRLl7TJLO.json index 2de4be7e..6666bc28 100644 --- a/src/packs/domains/domainCard_Frenzy_MMl7abdGRLl7TJLO.json +++ b/src/packs/domains/domainCard_Frenzy_MMl7abdGRLl7TJLO.json @@ -62,43 +62,44 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.bonuses.damage.physical.bonus", + "value": 10, + "priority": null, + "type": "add" + }, + { + "key": "system.bonuses.damage.magical.bonus", + "value": 10, + "priority": null, + "type": "add" + }, + { + "key": "system.damageThresholds.severe", + "value": 8, + "priority": null, + "type": "add" + }, + { + "key": "system.rules.damageReduction.disabledArmor", + "value": 1, + "priority": null, + "type": "override" + } + ], + "duration": { + "type": "temporary", + "description": "

      Until there are no more adversaries within sight.

      " } }, - "changes": [ - { - "key": "system.bonuses.damage.physical.bonus", - "mode": 2, - "value": "10", - "priority": null - }, - { - "key": "system.bonuses.damage.magical.bonus", - "mode": 2, - "value": "10", - "priority": null - }, - { - "key": "system.damageThresholds.severe", - "mode": 2, - "value": "8", - "priority": null - }, - { - "key": "system.rules.damageReduction.disabledArmor", - "mode": 5, - "value": "1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Once per long rest, you can go into a Frenzy until there are no more adversaries within sight.

      While Frenzied, you can’t use Armor Slots, and you gain a +10 bonus to your damage rolls and a +8 bonus to your Severe damage threshold.

      ", "tint": "#ffffff", @@ -108,6 +109,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!MMl7abdGRLl7TJLO.1POoAgObPOWDpUco" } ], diff --git a/src/packs/domains/domainCard_Full_Surge_SgvjJfMyubZowPxS.json b/src/packs/domains/domainCard_Full_Surge_SgvjJfMyubZowPxS.json index 43b4baf4..fb0bd16d 100644 --- a/src/packs/domains/domainCard_Full_Surge_SgvjJfMyubZowPxS.json +++ b/src/packs/domains/domainCard_Full_Surge_SgvjJfMyubZowPxS.json @@ -68,57 +68,57 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.traits.strength.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.traits.agility.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.traits.finesse.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.traits.instinct.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.traits.presence.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.traits.knowledge.value", + "value": 2, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "shortRest" } }, - "changes": [ - { - "key": "system.traits.strength.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.traits.agility.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.traits.finesse.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.traits.instinct.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.traits.presence.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.traits.knowledge.value", - "mode": 2, - "value": "2", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Gain a +2 bonus to all of your character traits until your next rest.

      ", + "description": "

      Gain a +2 bonus to all of your character traits until your next rest.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -126,6 +126,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!SgvjJfMyubZowPxS.H5q5iYImr69TfZcp" } ], diff --git a/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json b/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json index ef2b6df9..3c17d4ee 100644 --- a/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json +++ b/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json @@ -41,7 +41,7 @@ }, "effects": [ { - "_id": "X2w3kRHaETs8YWLO", + "_id": "9avDhppIdTqAR56f", "onSave": false } ], @@ -82,12 +82,25 @@ "effects": [ { "name": "Glyph of Nightfall", - "img": "icons/magic/symbols/runes-triangle-magenta.webp", + "img": "systems/daggerheart/assets/icons/domains/domain-card/midnight.png", "origin": "Compendium.daggerheart.domains.Item.B5HXqYRJiL3xMNKT", "transfer": false, - "_id": "st8Ji9ZNexvw64xM", + "_id": "9avDhppIdTqAR56f", "type": "base", "system": { + "changes": [ + { + "key": "system.difficulty", + "type": "add", + "value": "-max(ORIGIN.@system.traits.knowledge.value,1)", + "priority": null, + "phase": "initial" + } + ], + "duration": { + "description": "", + "type": "temporary" + }, "rangeDependence": { "enabled": false, "type": "withinRange", @@ -95,76 +108,32 @@ "range": "melee" } }, - "changes": [ - { - "key": "system.difficulty", - "mode": 2, - "value": "-max(ORIGIN.@system.traits.knowledge.value,1)", - "priority": null - } - ], "disabled": false, - "duration": { - "startTime": null, + "start": { + "time": 0, "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "combatant": null, + "initiative": null, + "round": null, + "turn": null }, - "description": "

      Conjure a dark glyph upon their body that exposes their weak points, temporarily reducing the target’s Difficulty by a value equal to your Knowledge (minimum 1).

      ", + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "description": "

      Conjure a dark glyph upon their body that exposes their weak points, temporarily reducing the target’s Difficulty by a value equal to your Knowledge (minimum 1).

      ", "tint": "#ffffff", "statuses": [], + "showIcon": 1, + "folder": null, "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, - "_key": "!items.effects!B5HXqYRJiL3xMNKT.st8Ji9ZNexvw64xM" - }, - { - "name": "Glyph of Nightfall", - "img": "icons/magic/symbols/runes-triangle-magenta.webp", - "origin": "Compendium.daggerheart.domains.Item.B5HXqYRJiL3xMNKT", - "transfer": false, - "_id": "X2w3kRHaETs8YWLO", - "type": "base", - "system": { - "rangeDependence": { - "enabled": false, - "type": "withinRange", - "target": "hostile", - "range": "melee" - } - }, - "changes": [ - { - "key": "system.difficulty", - "mode": 2, - "value": "-max(ORIGIN.@system.traits.knowledge.value,1)", - "priority": null - } - ], - "disabled": false, - "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null - }, - "description": "

      Conjure a dark glyph upon their body that exposes their weak points, temporarily reducing the target’s Difficulty by a value equal to your Knowledge (minimum 1).

      ", - "tint": "#ffffff", - "statuses": [], - "sort": 0, - "flags": {}, - "_stats": { - "compendiumSource": null - }, - "_key": "!items.effects!B5HXqYRJiL3xMNKT.X2w3kRHaETs8YWLO" + "_key": "!items.effects!B5HXqYRJiL3xMNKT.9avDhppIdTqAR56f" } ], "ownership": { diff --git a/src/packs/domains/domainCard_Hold_the_Line_kdFoLo3KXwn4LqTG.json b/src/packs/domains/domainCard_Hold_the_Line_kdFoLo3KXwn4LqTG.json index 5b3c95d3..263220e4 100644 --- a/src/packs/domains/domainCard_Hold_the_Line_kdFoLo3KXwn4LqTG.json +++ b/src/packs/domains/domainCard_Hold_the_Line_kdFoLo3KXwn4LqTG.json @@ -132,18 +132,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      If an adversary moves within Very Close range, they’re pulled into Melee range and Restrained.

      ", "tint": "#ffffff", @@ -155,6 +155,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!kdFoLo3KXwn4LqTG.WTYg0b8nE1XbnMiA" } ], diff --git a/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json b/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json index f49c4a83..23b9588d 100644 --- a/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json +++ b/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json @@ -82,45 +82,7 @@ "effects": [ { "name": "Silenced", - "img": "icons/svg/sound-off.svg", - "origin": "Compendium.daggerheart.domains.Item.gwmYasmfgXZ7tFS6", - "transfer": false, - "_id": "5hzzPTFccUSSNHgp", - "type": "base", - "system": { - "rangeDependence": { - "enabled": false, - "type": "withinRange", - "target": "hostile", - "range": "melee" - } - }, - "changes": [], - "disabled": false, - "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null - }, - "description": "

      Auppressive magic around the target that encompasses everything within Very Close range of them and follows them as they move. The target and anything within the area is Silenced until the GM spends a Fear on their turn to clear this condition, you cast Hush again, or you take Major damage. While Silenced, they can’t make noise and can’t cast spells.

      ", - "tint": "#ffffff", - "statuses": [ - "silence" - ], - "sort": 0, - "flags": {}, - "_stats": { - "compendiumSource": null - }, - "_key": "!items.effects!gwmYasmfgXZ7tFS6.5hzzPTFccUSSNHgp" - }, - { - "name": "Silenced", - "img": "icons/svg/sound-off.svg", + "img": "systems/daggerheart/assets/icons/domains/domain-card/midnight.png", "origin": "Compendium.daggerheart.domains.Item.gwmYasmfgXZ7tFS6", "transfer": false, "_id": "pZ5YpjKidaj48IYF", @@ -131,20 +93,21 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until the GM spends a Fear on their turn to clear this condition, you cast Hush again, or you take Major damage.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Suppressive magic around the target that encompasses everything within Very Close range of them and follows them as they move. The target and anything within the area is Silenced until the GM spends a Fear on their turn to clear this condition, you cast Hush again, or you take Major damage. While Silenced, they can’t make noise and can’t cast spells.

      ", + "description": "

      Suppressive magic around the target that encompasses everything within Very Close range of them and follows them as they move. The target and anything within the area is Silenced until the GM spends a Fear on their turn to clear this condition, you cast Hush again, or you take Major damage. While Silenced, they can’t make noise and can’t cast spells.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -152,6 +115,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!gwmYasmfgXZ7tFS6.pZ5YpjKidaj48IYF" } ], diff --git a/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json b/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json index 67310781..ffa0226d 100644 --- a/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json +++ b/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json @@ -112,20 +112,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      An illusion of flashing colors and lights that temporarily Stuns targets. While Stunned, they can’t use reactions and can’t take any other actions until they clear this condition.

      ", + "description": "

      An illusion of flashing colors and lights that temporarily Stuns targets. While Stunned, they can’t use reactions and can’t take any other actions until they clear this condition.

      ", "tint": "#ffffff", "statuses": [ "stun" @@ -135,6 +135,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!2ZeuCGVatQdPOVC6.xAG75UWUz3aDZH3m" } ], diff --git a/src/packs/domains/domainCard_Life_Ward_OszbCj0jTqq2ADx9.json b/src/packs/domains/domainCard_Life_Ward_OszbCj0jTqq2ADx9.json index 19a6fda6..de841ffe 100644 --- a/src/packs/domains/domainCard_Life_Ward_OszbCj0jTqq2ADx9.json +++ b/src/packs/domains/domainCard_Life_Ward_OszbCj0jTqq2ADx9.json @@ -70,18 +70,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "longRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Marked with a glowing sigil of protection. When this ally would make a death move, they clear a Hit Point instead.

      This effect ends when it saves the target from a death move, you cast Life Ward on another target, or you take a long rest.

      ", "tint": "#ffffff", @@ -91,6 +91,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!OszbCj0jTqq2ADx9.E7Ou4OMEy3TeK1Gf" } ], diff --git a/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json b/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json index da64f16e..d4df379e 100644 --- a/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json +++ b/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json @@ -144,20 +144,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      While Enraptured, a target’s attention is fixed on you, narrowing their field of view and drowning out any sound but your voice.

      ", + "description": "

      While Enraptured, a target’s attention is fixed on you, narrowing their field of view and drowning out any sound but your voice.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -165,6 +165,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!ubpixIgZrJXKyM3b.QNbnelRylVB0yCm0" } ], diff --git a/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json b/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json index 6ffddbe7..59a0c924 100644 --- a/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json +++ b/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json @@ -146,20 +146,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      While Horrified, they’re Vulnerable.

      ", + "description": "

      While Horrified, they’re Vulnerable.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -169,6 +169,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!zcldCuqOg3dphUVI.32j3ZeNMMCk1QLlM" } ], diff --git a/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json b/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json index cc04c9c9..1b0173d7 100644 --- a/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json +++ b/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json @@ -94,25 +94,25 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.traits.presence.value", + "value": "@cast", + "priority": 51, + "type": "override" + } + ], + "duration": { + "type": "longRest" } }, - "changes": [ - { - "key": "system.traits.presence.value", - "mode": 5, - "value": "@cast", - "priority": 51 - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Your Presence is equal to your Spellcast trait until your next long rest.
      While this spell is active, an adversary must mark a Stress when they target you with an attack.

      ", "tint": "#ffffff", @@ -122,6 +122,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!iEBLySZD9z8CLdz7.ba9GO4NtQHYkaRR9" } ], diff --git a/src/packs/domains/domainCard_Redirect_faU0XkJCbar69PiN.json b/src/packs/domains/domainCard_Redirect_faU0XkJCbar69PiN.json index 4adb8240..aeb20f1d 100644 --- a/src/packs/domains/domainCard_Redirect_faU0XkJCbar69PiN.json +++ b/src/packs/domains/domainCard_Redirect_faU0XkJCbar69PiN.json @@ -50,7 +50,7 @@ }, "flags": {}, "_id": "faU0XkJCbar69PiN", - "sort": 3400000, + "sort": 3500000, "effects": [], "ownership": { "default": 0 diff --git a/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json b/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json index cd906eaa..39139dfa 100644 --- a/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json +++ b/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json @@ -85,18 +85,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -108,6 +108,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!kguhWlidhxe2GbT0.RFB4V0V4bDJ6vCL2" } ], diff --git a/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json b/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json index 6fde5d18..f9b86bd0 100644 --- a/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json +++ b/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json @@ -175,20 +175,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Temporarily Stunned. While Stunned, they can’t use reactions and can’t take any other actions until they clear this condition.

      ", + "description": "

      Temporarily Stunned. While Stunned, they can’t use reactions and can’t take any other actions until they clear this condition.

      ", "tint": "#ffffff", "statuses": [ "stun" @@ -198,6 +198,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!lRHo6ZkK1zybeEoG.kSLuGSI6FLhOJaGp" } ], diff --git a/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json b/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json index d82dd9fa..7d587b02 100644 --- a/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json +++ b/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json @@ -268,18 +268,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -291,6 +291,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!X7YaZgFieBlqaPdZ.oqPY3I9oO9J6l5Aj" }, { diff --git a/src/packs/domains/domainCard_Through_Your_Eyes_7b0mzV5QMPjVPT4o.json b/src/packs/domains/domainCard_Through_Your_Eyes_7b0mzV5QMPjVPT4o.json index ed01392d..529950b5 100644 --- a/src/packs/domains/domainCard_Through_Your_Eyes_7b0mzV5QMPjVPT4o.json +++ b/src/packs/domains/domainCard_Through_Your_Eyes_7b0mzV5QMPjVPT4o.json @@ -61,20 +61,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Can see through their eyes and hear through their ears.

      ", + "description": "

      Can see through their eyes and hear through their ears.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -82,6 +82,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!7b0mzV5QMPjVPT4o.TCOHV7tWpunCZDxn" } ], diff --git a/src/packs/domains/domainCard_Transcendent_Union_kVkoCLBXLAIifqpz.json b/src/packs/domains/domainCard_Transcendent_Union_kVkoCLBXLAIifqpz.json index 7d8d9bbe..4460a5db 100644 --- a/src/packs/domains/domainCard_Transcendent_Union_kVkoCLBXLAIifqpz.json +++ b/src/packs/domains/domainCard_Transcendent_Union_kVkoCLBXLAIifqpz.json @@ -70,18 +70,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Until your next rest, when a creature connected by this union would mark Stress or Hit Points, the connected creatures can choose who marks it.

      ", "tint": "#ffffff", @@ -91,6 +91,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!kVkoCLBXLAIifqpz.kMcvp2QKmBP4uinB" } ], diff --git a/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json b/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json index dae448e9..85935876 100644 --- a/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json +++ b/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json @@ -146,18 +146,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -169,6 +169,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!qvpvTnkAoRn9vYO4.Xh0wrgRUuYpwChBU" }, { @@ -184,18 +194,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -207,6 +217,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!qvpvTnkAoRn9vYO4.2xzOqTaPJQzGqFJv" } ], diff --git a/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json b/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json index c1006da4..0fa0a09e 100644 --- a/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json +++ b/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json @@ -268,18 +268,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you’re freed with a successful Finesse or Strength roll or by dealing at least 6 damage to the vines.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Restrained lasts until you’re freed with a successful Finesse or Strength roll or by dealing at least 6 damage to the vines.

      ", "tint": "#ffffff", @@ -291,6 +292,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!pGEdzdLkqYtBhxnG.maK5OyfrOxcjCoPt.LSeftEwgBbXXkLw3" } ], diff --git a/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json b/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json index ea4f1951..a48d9b83 100644 --- a/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json +++ b/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json @@ -271,30 +271,41 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you break free with a successful Finesse or Strength Roll or by dealing 10 damage to the vines.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Restrained and Vulnerable until you break free, clearing both conditions, with a successful Finesse or Strength Roll or by dealing 10 damage to the vines. When the target makes a roll to escape, they take 1d8+4 physical damage and lose a Hope.

      What painful memories do the vines bring to the surface as they pierce flesh?

      ", + "description": "

      Restrained and Vulnerable until you break free, clearing both conditions, with a successful Finesse or Strength Roll or by dealing 10 damage to the vines. When the target makes a roll to escape, they take 1d8+4 physical damage and lose a Hope.

      What painful memories do the vines bring to the surface as they pierce flesh?

      ", "tint": "#ffffff", "statuses": [ - "restrained", - "vulnerable" + "vulnerable", + "restrained" ], "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!oY69NN4rYxoRE4hl.1aOeMMX0XuDtZbbB.gCkqvBUljsOsYacB" } ], diff --git a/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json b/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json index ad96108b..af0b3a70 100644 --- a/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json +++ b/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json @@ -50,12 +50,9 @@ "src": "systems/daggerheart/assets/icons/documents/actors/forest.svg", "anchorX": 0.5, "anchorY": 0.5, - "offsetX": 0, - "offsetY": 0, "fit": "contain", "scaleX": 1, "scaleY": 1, - "rotation": 0, "tint": "#ffffff", "alphaThreshold": 0.75 }, @@ -106,7 +103,7 @@ "saturation": 0, "contrast": 0 }, - "detectionModes": [], + "detectionModes": {}, "occludable": { "radius": 0 }, @@ -132,14 +129,15 @@ "flags": {}, "randomImg": false, "appendNumber": false, - "prependAdjective": false + "prependAdjective": false, + "depth": 1 }, "items": [ { "name": "Tip the Scales", "type": "feature", "system": { - "description": "

      PCs can gain advantage on a Presence Roll by off ering a handful of gold as part of the interaction.

      Will any coin be accepted or only local currency? How overt are the PCs in offering this bribe?

      ", + "description": "

      PCs can gain advantage on a Presence Roll by offering a handful of gold as part of the interaction.

      Will any coin be accepted or only local currency? How overt are the PCs in offering this bribe?

      ", "resource": null, "actions": {}, "originItemType": null, diff --git a/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json b/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json index 6c34c296..03dd72e3 100644 --- a/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json +++ b/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json @@ -315,18 +315,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until you get out of the river.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Vulnerable until you get out of the river.

      ", "tint": "#ffffff", @@ -338,6 +339,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!actors.items.effects!t4cdqTfzcqP3H1vJ.WsNoSwwtv0r80BMj.T0ouSQyR8cVpAn79" } ], diff --git a/src/packs/items/consumables/consumable_Blinding_Orb_eAXHdzA5qNPldOpn.json b/src/packs/items/consumables/consumable_Blinding_Orb_eAXHdzA5qNPldOpn.json index 94a6671b..9c6403e1 100644 --- a/src/packs/items/consumables/consumable_Blinding_Orb_eAXHdzA5qNPldOpn.json +++ b/src/packs/items/consumables/consumable_Blinding_Orb_eAXHdzA5qNPldOpn.json @@ -60,19 +60,21 @@ "transfer": false, "_id": "nryJhrF26hyFQUxH", "type": "base", - "system": {}, - "changes": [], + "system": { + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until they mark HP.

      " + } + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      You are Vulnerable until you mark a Hit Point.

      ", + "description": "

      You are Vulnerable until you mark a Hit Point.

      ", "tint": "#ffffff", "statuses": [ "vulnerable" @@ -82,6 +84,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!eAXHdzA5qNPldOpn.nryJhrF26hyFQUxH" } ], diff --git a/src/packs/items/consumables/consumable_Growing_Potion_fl2f3ees8RFMze9t.json b/src/packs/items/consumables/consumable_Growing_Potion_fl2f3ees8RFMze9t.json index e4493348..44114455 100644 --- a/src/packs/items/consumables/consumable_Growing_Potion_fl2f3ees8RFMze9t.json +++ b/src/packs/items/consumables/consumable_Growing_Potion_fl2f3ees8RFMze9t.json @@ -60,30 +60,31 @@ "transfer": false, "_id": "YEGd74Lssj7rCmpF", "type": "base", - "system": {}, - "changes": [ - { - "key": "system.traits.strength.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.proficiency", - "mode": 2, - "value": "1", - "priority": null + "system": { + "changes": [ + { + "key": "system.traits.strength.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.proficiency", + "value": 1, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "shortRest" } - ], + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -93,6 +94,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!fl2f3ees8RFMze9t.YEGd74Lssj7rCmpF" } ], diff --git a/src/packs/items/consumables/consumable_Major_Stride_Potion_yK6eEDUrsPbZA8G0.json b/src/packs/items/consumables/consumable_Major_Stride_Potion_yK6eEDUrsPbZA8G0.json index 320a77a3..cfcee96b 100644 --- a/src/packs/items/consumables/consumable_Major_Stride_Potion_yK6eEDUrsPbZA8G0.json +++ b/src/packs/items/consumables/consumable_Major_Stride_Potion_yK6eEDUrsPbZA8G0.json @@ -60,24 +60,25 @@ "transfer": false, "_id": "L9dAw8pws1o02XkE", "type": "base", - "system": {}, - "changes": [ - { - "key": "system.traits.agility.value", - "mode": 2, - "value": "1", - "priority": null + "system": { + "changes": [ + { + "key": "system.traits.agility.value", + "value": 1, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "shortRest" } - ], + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -87,6 +88,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!yK6eEDUrsPbZA8G0.L9dAw8pws1o02XkE" } ], diff --git a/src/packs/items/consumables/consumable_Morphing_Clay_f1NHVSIHJJCIOaBl.json b/src/packs/items/consumables/consumable_Morphing_Clay_f1NHVSIHJJCIOaBl.json index 970cabd4..68965de6 100644 --- a/src/packs/items/consumables/consumable_Morphing_Clay_f1NHVSIHJJCIOaBl.json +++ b/src/packs/items/consumables/consumable_Morphing_Clay_f1NHVSIHJJCIOaBl.json @@ -66,20 +66,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      Your face is unrecognizable until your next rest.

      ", + "description": "

      Your face is unrecognizable until your next rest.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -87,6 +87,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!f1NHVSIHJJCIOaBl.rMno0zO5Cbwlu4zn" } ], diff --git a/src/packs/items/consumables/consumable_Ogre_Musk_qr1bosjFcUfuwq4B.json b/src/packs/items/consumables/consumable_Ogre_Musk_qr1bosjFcUfuwq4B.json index 874072cc..fdd98249 100644 --- a/src/packs/items/consumables/consumable_Ogre_Musk_qr1bosjFcUfuwq4B.json +++ b/src/packs/items/consumables/consumable_Ogre_Musk_qr1bosjFcUfuwq4B.json @@ -66,20 +66,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      You cannot be tracked by mundane or magical means until your next rest.

      ", + "description": "

      You cannot be tracked by mundane or magical means until your next rest.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -87,6 +87,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!qr1bosjFcUfuwq4B.n73d0J4oMCBIPWHN" } ], diff --git a/src/packs/items/consumables/consumable_Shrinking_Potion_HGixKenQwhyRAYNk.json b/src/packs/items/consumables/consumable_Shrinking_Potion_HGixKenQwhyRAYNk.json index 7bf8c686..ed0e233e 100644 --- a/src/packs/items/consumables/consumable_Shrinking_Potion_HGixKenQwhyRAYNk.json +++ b/src/packs/items/consumables/consumable_Shrinking_Potion_HGixKenQwhyRAYNk.json @@ -60,30 +60,31 @@ "transfer": false, "_id": "yaRLd7eHWYm2MHRM", "type": "base", - "system": {}, - "changes": [ - { - "key": "system.traits.agility.value", - "mode": 2, - "value": "2", - "priority": null - }, - { - "key": "system.proficiency", - "mode": 2, - "value": "-1", - "priority": null + "system": { + "changes": [ + { + "key": "system.traits.agility.value", + "value": 2, + "priority": null, + "type": "add" + }, + { + "key": "system.proficiency", + "value": -1, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "shortRest" } - ], + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -93,6 +94,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!HGixKenQwhyRAYNk.yaRLd7eHWYm2MHRM" } ], diff --git a/src/packs/items/consumables/consumable_Vial_of_Moondrip_VqEX5YwK5oL3r1t6.json b/src/packs/items/consumables/consumable_Vial_of_Moondrip_VqEX5YwK5oL3r1t6.json index 42359fe8..195a46de 100644 --- a/src/packs/items/consumables/consumable_Vial_of_Moondrip_VqEX5YwK5oL3r1t6.json +++ b/src/packs/items/consumables/consumable_Vial_of_Moondrip_VqEX5YwK5oL3r1t6.json @@ -66,20 +66,20 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "shortRest" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      You can see in total darkness until your next rest.

      ", + "description": "

      You can see in total darkness until your next rest.

      ", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -87,6 +87,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!VqEX5YwK5oL3r1t6.548KAUPcSbQLsivh" } ], diff --git a/src/packs/subclasses/feature_Act_of_Reprisal_k7vvMJtEcxMWUUrW.json b/src/packs/subclasses/feature_Act_of_Reprisal_k7vvMJtEcxMWUUrW.json index 304bd29c..5dee0c1c 100644 --- a/src/packs/subclasses/feature_Act_of_Reprisal_k7vvMJtEcxMWUUrW.json +++ b/src/packs/subclasses/feature_Act_of_Reprisal_k7vvMJtEcxMWUUrW.json @@ -59,13 +59,19 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [], + "duration": { + "type": "temporary", + "description": "

      Until the next successful attack you make against that adversary.

      " } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -75,6 +81,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!k7vvMJtEcxMWUUrW.9Uo0yOYGn3vandPp" } ], diff --git a/src/packs/subclasses/feature_Battle_Bonded_hWsKyed1vfILg0I8.json b/src/packs/subclasses/feature_Battle_Bonded_hWsKyed1vfILg0I8.json index 106b0057..578be0a3 100644 --- a/src/packs/subclasses/feature_Battle_Bonded_hWsKyed1vfILg0I8.json +++ b/src/packs/subclasses/feature_Battle_Bonded_hWsKyed1vfILg0I8.json @@ -26,27 +26,28 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.evasion", + "value": 2, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "", + "description": "

      Against the attack.

      " } }, "_id": "IZhakv6EuG8DO4a3", "img": "icons/creatures/mammals/humanoid-wolf-dog-blue.webp", - "changes": [ - { - "key": "system.evasion", - "mode": 2, - "value": "2", - "priority": null - } - ], "disabled": true, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      When an adversary attacks you while they’re within your companion’s Melee range, you gain a +2 bonus to your Evasion against the attack.

      ", "origin": null, @@ -58,6 +59,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!hWsKyed1vfILg0I8.IZhakv6EuG8DO4a3" } ], diff --git a/src/packs/subclasses/feature_Elemental_Dominion_EFUJHrkTuyv8uA9l.json b/src/packs/subclasses/feature_Elemental_Dominion_EFUJHrkTuyv8uA9l.json index 4297173f..2476046c 100644 --- a/src/packs/subclasses/feature_Elemental_Dominion_EFUJHrkTuyv8uA9l.json +++ b/src/packs/subclasses/feature_Elemental_Dominion_EFUJHrkTuyv8uA9l.json @@ -189,18 +189,18 @@ "type": "withinRange", "target": "hostile", "range": "veryFar" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      When an attack against you succeeds, you can mark a Stress to make the attacker temporarily Vulnerable.

      ", "tint": "#ffffff", @@ -212,6 +212,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!EFUJHrkTuyv8uA9l.bGwFZZT4juuaIRmZ" }, { diff --git a/src/packs/subclasses/feature_Elusive_Predator_Cjtc43V3IzAmfIFG.json b/src/packs/subclasses/feature_Elusive_Predator_Cjtc43V3IzAmfIFG.json index 18f80cdb..82cd55a0 100644 --- a/src/packs/subclasses/feature_Elusive_Predator_Cjtc43V3IzAmfIFG.json +++ b/src/packs/subclasses/feature_Elusive_Predator_Cjtc43V3IzAmfIFG.json @@ -26,27 +26,28 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.evasion", + "value": 2, + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "", + "description": "

      Against the attack.

      " } }, "_id": "X4llFOcAcdJLbear", "img": "icons/creatures/mammals/beast-horned-scaled-glowing-orange.webp", - "changes": [ - { - "key": "system.evasion", - "mode": 2, - "value": "2", - "priority": null - } - ], "disabled": true, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      When your Focus makes an attack against you, you gain a +2 bonus to your Evasion against the attack.

      ", "origin": null, @@ -58,6 +59,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!Cjtc43V3IzAmfIFG.X4llFOcAcdJLbear" } ], diff --git a/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json b/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json index f53f7c31..33d5af92 100644 --- a/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json +++ b/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json @@ -180,7 +180,7 @@ "effects": [ { "name": "Epic Song", - "img": "icons/svg/ice-aura.svg", + "img": "icons/tools/instruments/harp-yellow-teal.webp", "origin": "Compendium.daggerheart.subclasses.Item.6j1RP4fz3BwSfoli", "transfer": false, "_id": "FK4IdbxluRErfYor", @@ -191,18 +191,18 @@ "type": "withinRange", "target": "hostile", "range": "close" + }, + "changes": [], + "duration": { + "type": "temporary" } }, - "changes": [], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "

      Make a target within Close range temporarily Vulnerable.

      ", "tint": "#ffffff", @@ -214,6 +214,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!99U7YWNCxFZHCiT0.FK4IdbxluRErfYor" } ], diff --git a/src/packs/subclasses/feature_Transcendence_th6HZwEFnVBjUtqm.json b/src/packs/subclasses/feature_Transcendence_th6HZwEFnVBjUtqm.json index 5f2df7cb..c03c10b5 100644 --- a/src/packs/subclasses/feature_Transcendence_th6HZwEFnVBjUtqm.json +++ b/src/packs/subclasses/feature_Transcendence_th6HZwEFnVBjUtqm.json @@ -58,29 +58,29 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.damageThresholds.severe", + "value": "+4", + "priority": null, + "type": "add" + } + ], + "duration": { + "type": "" } }, "_id": "zFOpzO3tBJPcZcRc", "img": "icons/magic/fire/elemental-fire-flying.webp", - "changes": [ - { - "key": "system.damageThresholds.severe", - "mode": 2, - "value": "+4", - "priority": null - } - ], "disabled": true, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

      +4 bonus to your Severe threshold

      ", + "description": "

      +4 bonus to your Severe threshold

      ", "origin": null, "tint": "#ffffff", "transfer": true, @@ -90,6 +90,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!th6HZwEFnVBjUtqm.zFOpzO3tBJPcZcRc" }, { diff --git a/styles/less/sheets/activeEffects/activeEffects.less b/styles/less/sheets/activeEffects/activeEffects.less index f1879463..ba3ff43f 100644 --- a/styles/less/sheets/activeEffects/activeEffects.less +++ b/styles/less/sheets/activeEffects/activeEffects.less @@ -1,4 +1,28 @@ .application.sheet.daggerheart.dh-style.active-effect-config { + .custom-duration-section { + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; + overflow: hidden; + height: 0; + transition: height ease-in-out 0.3s; + + &.visible { + height: auto; + } + } + + .duration-description { + height: 0; + overflow: hidden; + transition: height ease-in-out 0.3s; + + &.visible { + height: 100px; + } + } + .tab.changes { gap: 0; diff --git a/styles/less/ux/tooltip/bordered-tooltip.less b/styles/less/ux/tooltip/bordered-tooltip.less index 78622377..b3a5ed29 100644 --- a/styles/less/ux/tooltip/bordered-tooltip.less +++ b/styles/less/ux/tooltip/bordered-tooltip.less @@ -42,5 +42,37 @@ color: @golden; font-size: 12px; } + + .duration-container { + display: flex; + flex-direction: column; + text-align: center; + margin-top: 0.5rem; + width: 100%; + + &::before, + &::after { + content: ''; + background: var(--golden, #f3c267); + mask-image: linear-gradient(270deg, transparent 0%, black 50%, transparent 100%); + height: 2px; + width: calc(100% - 10px); + } + + &::before { + margin-bottom: 8px; + } + + &::after { + margin-top: 8px; + } + + .duration-inner-container { + display: flex; + justify-content: center; + gap: 2px; + width: 100%; + } + } } } diff --git a/styles/less/ux/tooltip/tooltip.less b/styles/less/ux/tooltip/tooltip.less index 8e6f638d..ac09afc0 100644 --- a/styles/less/ux/tooltip/tooltip.less +++ b/styles/less/ux/tooltip/tooltip.less @@ -53,6 +53,33 @@ aside[role='tooltip']:has(div.daggerheart.dh-style.tooltip.card-style) { } } + .tooltip-duration { + font-style: italic; + text-align: start; + position: relative; + width: 100%; + padding: 5px 10px; + margin: 5px 0px; + + &::before { + content: ''; + background: @golden; + mask-image: linear-gradient(270deg, transparent 0%, black 50%, transparent 100%); + height: 2px; + width: calc(100% - 10px); + position: absolute; + top: -5px; + font-size: 14px; + } + + .duration-inner-container { + display: flex; + justify-content: center; + gap: 2px; + width: 100%; + } + } + .tooltip-tags { display: flex; flex-direction: column; diff --git a/templates/settings/automation-settings/general.hbs b/templates/settings/automation-settings/general.hbs index c5f4d871..a10e50c6 100644 --- a/templates/settings/automation-settings/general.hbs +++ b/templates/settings/automation-settings/general.hbs @@ -14,6 +14,7 @@ {{formGroup settingFields.schema.fields.summaryMessages.fields.effects value=settingFields._source.summaryMessages.effects localize=true}} + {{formGroup settingFields.schema.fields.autoExpireActiveEffects value=settingFields._source.autoExpireActiveEffects localize=true}} {{formGroup settingFields.schema.fields.countdownAutomation value=settingFields._source.countdownAutomation localize=true}} {{formGroup settingFields.schema.fields.actionPoints value=settingFields._source.actionPoints localize=true}} {{formGroup settingFields.schema.fields.hordeDamage value=settingFields._source.hordeDamage localize=true}} diff --git a/templates/sheets/activeEffect/settings.hbs b/templates/sheets/activeEffect/settings.hbs index 6ccd9ee9..9443edfb 100644 --- a/templates/sheets/activeEffect/settings.hbs +++ b/templates/sheets/activeEffect/settings.hbs @@ -7,47 +7,31 @@ {{formGroup systemFields.rangeDependence.fields.target value=source.system.rangeDependence.target localize=true }} {{formGroup systemFields.rangeDependence.fields.range value=source.system.rangeDependence.range localize=true }} -{{!-- - {{#if start}} -
      - {{localize "EFFECT.START.Header"}} -
      - {{localize "EFFECT.FIELDS.start.time.label"}} -
      {{start.time}}
      -
      - {{#if start.combat}} -
      - {{localize "DOCUMENT.Combat"}} -
      - {{localize "EFFECT.START.Combat" round=start.round turn=start.turn}} -
      -
      - {{#if start.combatant}} -
      - {{localize "DOCUMENT.Combatant"}} -
      - {{localize "EFFECT.START.Combatant" combatant=start.combatantName initiative=start.combatantInitiative}} -
      -
      - {{/if}} - {{/if}} -
      - {{/if}} --}} +
      + {{localize "EFFECT.DURATION.Label"}} - {{!--
      - {{localize "EFFECT.DURATION.Header"}} -
      - -
      - {{formInput fields.duration.fields.value value=source.duration.value id=(concat rootId "-duration.value") - aria=(object label=(localize "EFFECT.FIELDS.duration.value.label"))}} - {{formInput fields.duration.fields.units value=source.duration.units id=(concat rootId "-duration.units") - options=durationUnits aria=(object label=(localize "EFFECT.FIELDS.duration.units.label"))}} + {{formGroup systemFields.duration.fields.type value=source.system.duration.type localize=true }} + +
      +
      + {{formInput systemFields.duration.fields.description value=source.system.duration.description localize=true }} +
      +
      + +
      + {{formGroup fields.start.fields.time value=source.start.time localize=true }} +
      + +
      + {{formInput fields.duration.fields.value value=source.duration.value id=(concat rootId "-duration.value") + aria=(object label=(localize "EFFECT.FIELDS.duration.value.label"))}} + {{formInput fields.duration.fields.units value=source.duration.units id=(concat rootId "-duration.units") + options=durationUnits aria=(object label=(localize "EFFECT.FIELDS.duration.units.label")) localize=true }} +
      - {{formGroup fields.duration.fields.expiry choices=expiryEvents value=source.duration.expiry rootId=rootId}} -
      --}} +
      \ No newline at end of file diff --git a/templates/ui/tooltip/effect-display.hbs b/templates/ui/tooltip/effect-display.hbs index 5ca4fec2..d37b5147 100644 --- a/templates/ui/tooltip/effect-display.hbs +++ b/templates/ui/tooltip/effect-display.hbs @@ -16,6 +16,16 @@ {{/if}} + {{#if effect.system.duration.type}} + +
      +
      + {{localize "EFFECT.DURATION.Label"}}: + {{localize (concat "DAGGERHEART.CONFIG.ActiveEffectDuration." effect.system.duration.type )}} +
      +
      + {{/if}} + {{#unless effect.isLockedCondition}}

      {{localize "DAGGERHEART.UI.EffectsDisplay.removeThing" thing=(localize "DAGGERHEART.GENERAL.Effect.single")}} diff --git a/templates/ui/tooltip/effect.hbs b/templates/ui/tooltip/effect.hbs index 4430b91d..c5004a86 100644 --- a/templates/ui/tooltip/effect.hbs +++ b/templates/ui/tooltip/effect.hbs @@ -4,4 +4,12 @@ {{#if description}}

      {{{description}}}
      {{/if}} + {{#if item.system.duration.type}} +
      +
      + {{localize "EFFECT.DURATION.Label"}}: + {{localize (concat "DAGGERHEART.CONFIG.ActiveEffectDuration." item.system.duration.type )}} +
      +
      + {{/if}} \ No newline at end of file From bcb30a6ff7b300c7d3dad1c69015aba1e6bb8c20 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 25 Feb 2026 21:57:28 +0100 Subject: [PATCH 15/34] Fixed environment potentialAdversaries --- .../sheets-configs/environment-settings.mjs | 10 +++++++--- module/data/actor/environment.mjs | 2 +- module/data/fields/foreignDocumentUUIDArrayField.mjs | 2 +- system.json | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/module/applications/sheets-configs/environment-settings.mjs b/module/applications/sheets-configs/environment-settings.mjs index 5c039f85..bc0efef2 100644 --- a/module/applications/sheets-configs/environment-settings.mjs +++ b/module/applications/sheets-configs/environment-settings.mjs @@ -68,9 +68,9 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings { */ static async #addCategory() { await this.actor.update({ - [`system.potentialAdversaries.${foundry.utils.randomID()}.label`]: game.i18n.localize( - 'DAGGERHEART.ACTORS.Environment.newAdversary' - ) + [`system.potentialAdversaries.${foundry.utils.randomID()}`]: { + label: game.i18n.localize('DAGGERHEART.ACTORS.Environment.newAdversary') + } }); } @@ -138,4 +138,8 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings { this.render(); } } + + async _onDropItem(event, item) { + console.log(item); + } } diff --git a/module/data/actor/environment.mjs b/module/data/actor/environment.mjs index 0aaf8eb0..c4a3f747 100644 --- a/module/data/actor/environment.mjs +++ b/module/data/actor/environment.mjs @@ -37,7 +37,7 @@ export default class DhEnvironment extends BaseDataActor { potentialAdversaries: new fields.TypedObjectField( new fields.SchemaField({ label: new fields.StringField(), - adversaries: new ForeignDocumentUUIDArrayField({ type: 'Actor' }) + adversaries: new ForeignDocumentUUIDArrayField({ type: 'Actor' }, { required: false, initial: [] }) }) ), notes: new fields.HTMLField() diff --git a/module/data/fields/foreignDocumentUUIDArrayField.mjs b/module/data/fields/foreignDocumentUUIDArrayField.mjs index 0ddd126c..456c0593 100644 --- a/module/data/fields/foreignDocumentUUIDArrayField.mjs +++ b/module/data/fields/foreignDocumentUUIDArrayField.mjs @@ -14,7 +14,7 @@ export default class ForeignDocumentUUIDArrayField extends foundry.data.fields.A /** @inheritdoc */ initialize(value, model, options = {}) { - const v = super.initialize(value, model, options); + const v = super.initialize(value ?? [], model, options); return () => { const data = v.map(entry => (typeof entry === 'function' ? entry() : entry)); return this.options.prune ? data.filter(d => !!d) : data; diff --git a/system.json b/system.json index 48a2319a..14d61851 100644 --- a/system.json +++ b/system.json @@ -4,8 +4,8 @@ "description": "An unofficial implementation of the Daggerheart system", "version": "2.0.0", "compatibility": { - "minimum": "14.354", - "verified": "14.354", + "minimum": "14.355", + "verified": "14.355", "maximum": "14" }, "authors": [ From 37c53ad74e2ae7cdc746fc35148308cb07f05b5d Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 25 Feb 2026 22:45:55 +0100 Subject: [PATCH 16/34] Fixed Template range texts --- daggerheart.mjs | 2 ++ lang/en.json | 4 ++-- module/canvas/placeables/_module.mjs | 1 + module/canvas/placeables/region.mjs | 12 ++++++++++ module/config/generalConfig.mjs | 4 ++-- module/enrichers/TemplateEnricher.mjs | 34 +++++++++++++++++++-------- 6 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 module/canvas/placeables/region.mjs diff --git a/daggerheart.mjs b/daggerheart.mjs index b5da2c3e..89c74e00 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -59,6 +59,8 @@ CONFIG.Canvas.layers.tokens.layerClass = DhTokenLayer; CONFIG.MeasuredTemplate.objectClass = placeables.DhMeasuredTemplate; +CONFIG.Region.objectClass = placeables.DhRegion; + CONFIG.RollTable.documentClass = documents.DhRollTable; CONFIG.RollTable.resultTemplate = 'systems/daggerheart/templates/ui/chat/table-result.hbs'; diff --git a/lang/en.json b/lang/en.json index 24d6168a..cc5c778d 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1222,8 +1222,8 @@ "cone": "Cone", "emanation": "Emanation", "inFront": "In Front", - "rect": "Rectangle", - "ray": "Ray" + "rectangle": "Rectangle", + "line": "Line" }, "TokenSize": { "tiny": "Tiny", diff --git a/module/canvas/placeables/_module.mjs b/module/canvas/placeables/_module.mjs index 6ba047fb..8746aabd 100644 --- a/module/canvas/placeables/_module.mjs +++ b/module/canvas/placeables/_module.mjs @@ -1,5 +1,6 @@ export { default as DhMeasuredTemplate } from './measuredTemplate.mjs'; export { default as DhRuler } from './ruler.mjs'; +export { default as DhRegion } from './region.mjs'; export { default as DhRegionLayer } from './regionLayer.mjs'; export { default as DhTokenPlaceable } from './token.mjs'; export { default as DhTokenRuler } from './tokenRuler.mjs'; diff --git a/module/canvas/placeables/region.mjs b/module/canvas/placeables/region.mjs new file mode 100644 index 00000000..7ad94b2f --- /dev/null +++ b/module/canvas/placeables/region.mjs @@ -0,0 +1,12 @@ +import DhMeasuredTemplate from './measuredTemplate.mjs'; + +export default class DhRegion extends foundry.canvas.placeables.Region { + /**@inheritdoc */ + _formatMeasuredDistance(distance) { + const range = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement; + if (!range.enabled) return super._formatMeasuredDistance(distance); + + const { distance: resultDistance, units } = DhMeasuredTemplate.getRangeLabels(distance, range); + return `${resultDistance} ${units}`; + } +} diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 165342b4..685b725f 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -74,8 +74,8 @@ export const range = { export const templateTypes = { CIRCLE: 'circle', CONE: 'cone', - RECTANGLE: 'rect', - RAY: 'ray', + RECTANGLE: 'rectangle', + LINE: 'line', EMANATION: 'emanation', INFRONT: 'inFront' }; diff --git a/module/enrichers/TemplateEnricher.mjs b/module/enrichers/TemplateEnricher.mjs index ab3d406f..fd0e78eb 100644 --- a/module/enrichers/TemplateEnricher.mjs +++ b/module/enrichers/TemplateEnricher.mjs @@ -49,6 +49,8 @@ export default function DhTemplateEnricher(match, _options) { } export const renderMeasuredTemplate = async event => { + const { LINE, RECTANGLE, INFRONT, CONE } = CONFIG.DH.GENERAL.templateTypes; + const button = event.currentTarget, type = button.dataset.type, range = button.dataset.range, @@ -57,13 +59,9 @@ export const renderMeasuredTemplate = async event => { if (!type || !range || !game.canvas.scene) return; - const usedType = type === 'inFront' ? 'cone' : type === 'emanation' ? 'circle' : type; + const usedType = type === 'inFront' ? 'cone' : type; const usedAngle = - type === CONFIG.DH.GENERAL.templateTypes.CONE - ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) - : type === CONFIG.DH.GENERAL.templateTypes.INFRONT - ? '180' - : undefined; + type === CONE ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) : type === INFRONT ? '180' : undefined; let baseDistance = range; if (Number.isNaN(Number(range))) { @@ -71,16 +69,32 @@ export const renderMeasuredTemplate = async event => { range ]; } - const distance = type === CONFIG.DH.GENERAL.templateTypes.EMANATION ? baseDistance + 2.5 : baseDistance; - const radius = (distance / game.scenes.active.grid.distance) * game.scenes.active.grid.size; + + const dimensionConstant = game.scenes.active.grid.size / game.scenes.active.grid.distance; + + baseDistance *= dimensionConstant; + + const length = baseDistance; + const radius = length; + + const shapeWidth = type === LINE ? 5 * dimensionConstant : type === RECTANGLE ? length : undefined; const { width, height } = game.canvas.scene.dimensions; const shapeData = { x: width / 2, y: height / 2, + base: { + type: 'token', + x: 0, + y: 0, + width: 1, + height: 1, + shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1 + }, t: usedType, - distance: distance, - width: type === CONFIG.DH.GENERAL.templateTypes.RAY ? 5 : undefined, + length: length, + width: shapeWidth, + height: length, angle: usedAngle, radius: radius, direction: direction, From c2807e0676027bc13fe6aa4fc89cff8b8083d880 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 7 Mar 2026 18:02:01 +0100 Subject: [PATCH 17/34] Added in the new v14 subtract changeMode type for ActiveEffects --- module/config/generalConfig.mjs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 8ec7034a..3b87c15d 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -870,6 +870,11 @@ export const activeEffectModes = { priority: 20, label: 'EFFECT.CHANGES.TYPES.add' }, + subtract: { + id: 'subtract', + priority: 20, + label: 'EFFECT.CHANGES.TYPES.subtract' + }, downgrade: { id: 'downgrade', priority: 30, From d3ebd30e59b9678469f05f6c31ed28b0c8835977 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 7 Mar 2026 22:26:54 +0100 Subject: [PATCH 18/34] . --- module/applications/ux/contextMenu.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/applications/ux/contextMenu.mjs b/module/applications/ux/contextMenu.mjs index 081e6ba0..6e70da0c 100644 --- a/module/applications/ux/contextMenu.mjs +++ b/module/applications/ux/contextMenu.mjs @@ -86,7 +86,7 @@ export default class DHContextMenu extends foundry.applications.ux.ContextMenu { const element = event.target.closest('.context-item'); if (!element) return; const item = this.menuItems.find(i => i.element === element); - item?.callback(this.#jQuery ? $(this.target) : this.target, event); + item?.onClick(event, this.#jQuery ? $(this.target) : this.target); this.close(); } From 5a4bbc91f554c0aac57110ebf95e2300fc2c035f Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sun, 8 Mar 2026 00:58:24 +0100 Subject: [PATCH 19/34] [Feature] Damage Iterrable Rework (#1685) * Initial * More * Fixed current actionConfig damage * Reworked ActionConfig damage ui * . * Updated all Adversary compendium damage entries * more * The rest * Fixed misses * . * . * Also migrate sub fields of MappingField * Removed MappingField * Fix regression with re-tiering adversaries when dealing non-hp damage * Allow iterable object to be detected as an object by foundry --------- Co-authored-by: Carlos Fernandez --- .../applications/levelup/companionLevelup.mjs | 2 +- .../sheets-configs/action-base-config.mjs | 63 +++++++++++++++--- .../sheets/api/application-mixin.mjs | 5 +- module/config/generalConfig.mjs | 60 ++++++++--------- module/config/itemConfig.mjs | 18 ++--- module/data/action/attackAction.mjs | 10 +-- module/data/action/baseAction.mjs | 13 +++- module/data/actor/adversary.mjs | 20 +++--- module/data/actor/character.mjs | 8 +-- module/data/actor/companion.mjs | 10 +-- module/data/fields/_module.mjs | 1 + module/data/fields/action/damageField.mjs | 3 +- .../data/fields/iterableTypedObjectField.mjs | 32 +++++++++ module/data/item/weapon.mjs | 6 +- module/helpers/handlebarsHelper.mjs | 4 +- module/helpers/utils.mjs | 13 ++++ ...ersary_Acid_Burrower_89yAh30vaNQOALlz.json | 28 ++++---- ...ary_Adult_Flickerfly_G7jiltRjgvVhZewm.json | 22 +++---- ..._Apprentice_Assassin_vNIbYQ4YSzNf0WPE.json | 6 +- ...ary_Arch_Necromancer_WPEOIGfclNJxWb87.json | 28 ++++---- ...versary_Archer_Guard_JRhrrEg5UroURiAD.json | 12 ++-- ...sary_Archer_Squadron_0ts6CGd93lLqGZI5.json | 18 ++--- ...ry_Assassin_Poisoner_h5RuhzGL17dW5FBT.json | 6 +- ...adversary_Battle_Box_dgH3fW9FTYLaIDvS.json | 52 +++++++-------- .../adversary_Bear_71qKDLKO3CsrNkdy.json | 18 ++--- ...versary_Bladed_Guard_B4LZcGuBAHzyVdzy.json | 10 +-- ...ersary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json | 18 ++--- .../adversary_Cave_Ogre_8Zkqk1jU09nKL2fy.json | 24 +++---- ...dversary_Chaos_Skull_jDmHqGvzg5wjgmxE.json | 18 ++--- .../adversary_Conscript_99TqczuQipBmaB8i.json | 6 +- .../adversary_Construct_uOP5oT9QzXPlnf3p.json | 18 ++--- .../adversary_Courtesan_ZxWaWPdzFIUPNC62.json | 12 ++-- .../adversary_Courtier_CBBuEXAlLKFMJdjg.json | 12 ++-- ...adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json | 20 +++--- .../adversary_Cult_Fang_tyBOpLfigAhI9bU3.json | 12 ++-- ...ersary_Cult_Initiate_zx99sOGTXicP4SSD.json | 6 +- ...ry_Deeproot_Defender_9x2xY9zwc3xzbXo5.json | 18 ++--- ...ary_Demon_of_Avarice_pnyjIGxxvurcWmTv.json | 6 +- ...ary_Demon_of_Despair_kE4dfhqmIQpNd44e.json | 18 ++--- ...sary_Demon_of_Hubris_2VN3BftageoTTIzu.json | 30 ++++----- ...ry_Demon_of_Jealousy_SxSOkM4bcVOFyjbo.json | 8 +-- ...rsary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json | 12 ++-- ...y_Demonic_Hound_Pack_NoRZ1PqB8N5wcIw0.json | 18 ++--- .../adversary_Dire_Bat_tBWHW00epmMnkawe.json | 18 ++--- .../adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json | 18 ++--- .../adversary_Dryad_wR7cFKrHvRzbzhBT.json | 22 +++---- ...ersary_Electric_Eels_TLzY1nDw0Bu9Ud40.json | 12 ++-- ...sary_Elemental_Spark_P7h54ZePFPHpYwvB.json | 6 +- ...ersary_Elite_Soldier_bfhVWMBUh61b9J6n.json | 12 ++-- ...ry_Failed_Experiment_ChwwVqowFw8hJQwT.json | 6 +- ...y_Fallen_Shock_Troop_OsLG2BjaEdTZUJU9.json | 12 ++-- ...sary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json | 18 ++--- ...rlord__Realm_Breaker_hxZ0sgoFJubh5aj6.json | 26 ++++---- ..._Undefeated_Champion_RXkZTwBRi4dJ3JE5.json | 26 ++++---- ...ry_Giant_Beastmaster_8VZIgU12cB3cvlyH.json | 12 ++-- ...ersary_Giant_Brawler_YnObCleGjPT7yqEc.json | 24 +++---- ...dversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json | 24 +++---- ...ary_Giant_Mosquitoes_IIWV4ysJPFPnTP7W.json | 6 +- .../adversary_Giant_Rat_4PfLnaCrOcMdb4dK.json | 8 +-- ...ersary_Giant_Recruit_5s8wSvpyC5rxY5aD.json | 6 +- ...rsary_Giant_Scorpion_fmfntuJ8mHRCAktP.json | 24 +++---- ...dversary_Glass_Snake_8KWVLWXFhlY2kYx0.json | 26 ++++---- .../adversary_Gorgon_8mJYMpbLTb8qIOrr.json | 22 +++---- ...ater_Earth_Elemental_dsfB3YhoL5SudvS2.json | 24 +++---- ...ater_Water_Elemental_xIICT6tEdnA7dKDV.json | 14 ++-- ...adversary_Green_Ooze_SHXedd9zZPVfUgUa.json | 20 +++--- ...sary_Hallowed_Archer_kabueAo6BALApWqp.json | 12 ++-- ...ary_Hallowed_Soldier_VENwg7xEFcYObjmT.json | 6 +- .../adversary_Harrier_uRtghKE9mHlII4rs.json | 12 ++-- ...adversary_Head_Guard_mK3A5FTx6k8iPU3F.json | 14 ++-- ...versary_Head_Vampire_i2UNbRvgyoSs07M6.json | 26 ++++---- ...dversary_High_Seraph_r1mbfSSwKWdcFdAU.json | 12 ++-- ...sary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json | 18 ++--- .../adversary_Hydra_MI126iMOOobQ1Obn.json | 18 ++--- ..._Jagged_Knife_Bandit_5Lh1T0zaT8Pkr2U2.json | 12 ++-- ...y_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json | 12 ++-- ...ed_Knife_Kneebreaker_CBKixLH3yhivZZuL.json | 8 +-- ..._Jagged_Knife_Lackey_C0OMQqV7pN6t7ouR.json | 6 +- ...ged_Knife_Lieutenant_aTljstqteGoLpCBq.json | 20 +++--- ..._Jagged_Knife_Shadow_XF4tYTq9nPJAy2ox.json | 12 ++-- ..._Jagged_Knife_Sniper_1zuyof1XuIfi3aMG.json | 12 ++-- ..._Juvenile_Flickerfly_MYXmTx2FHcIjdfYZ.json | 18 ++--- ..._Knight_of_the_Realm_7ai2opemrclQe3VF.json | 14 ++-- .../adversary_Kraken_4nqv3ZwJGjnmic8j.json | 20 +++--- ...versary_Masked_Thief_niBpVU7yeo5ccskE.json | 14 ++-- ...sary_Master_Assassin_dNta0cUzr96xcFhf.json | 18 ++--- .../adversary_Merchant_Al3w2CgjfdT3p9ma.json | 12 ++-- ...rsary_Merchant_Baron_Vy02IhGhkJLuezu4.json | 12 ++-- ...inor_Chaos_Elemental_sRn4bqerfARvhgSV.json | 24 +++---- ...dversary_Minor_Demon_3tqCjDwJAQ7JKqMb.json | 24 +++---- ...Minor_Fire_Elemental_DscWkNVoHak6P4hh.json | 36 +++++----- ...versary_Minor_Treant_G62k4oSkhkoXEs2D.json | 6 +- ...ary_Minotaur_Wrecker_rM9qCIYeWg9I0B4l.json | 24 +++---- .../adversary_Monarch_yx0vK2yfNVZKWUUi.json | 12 ++-- ...ersary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json | 26 ++++---- ...adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json | 12 ++-- ...rsary_Oracle_of_Doom_befIqd5IYKg6eUz2.json | 32 ++++----- ...r_Realms_Abomination_A0SeeDzwjvqOsyof.json | 12 ++-- ...ter_Realms_Corrupter_ms6nuOl3NFkhPj1k.json | 18 ++--- ..._Outer_Realms_Thrall_moJhHgKqTKPS2WYS.json | 6 +- ...atchwork_Zombie_Hulk_EQTOAOUrkIvS2z88.json | 26 ++++---- ...ary_Perfected_Zombie_CP6iRfHdyFWniTHY.json | 18 ++--- ...dversary_Petty_Noble_wycLpvebWdUqRhpP.json | 6 +- ...rsary_Pirate_Captain_OROJbjsqagVh7ECV.json | 24 +++---- ...rsary_Pirate_Raiders_5YgEajn0wa4i85kC.json | 12 ++-- ...versary_Pirate_Tough_mhcVkVFrzIJ18FDm.json | 18 ++--- .../adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json | 18 ++--- ...ersary_Rotted_Zombie_gP3fWTLzSFnpA8EJ.json | 6 +- ...ersary_Royal_Advisor_EtLJiTsilPPZvLUX.json | 12 ++-- ...ersary_Secret_Keeper_sLAccjvCWfeedbpI.json | 14 ++-- .../adversary_Sellsword_bgreCaQ6ap2DVpCr.json | 6 +- ...ary_Shambling_Zombie_2nXz4ilAY4xuhKLm.json | 12 ++-- .../adversary_Shark_YmVAkdNsyuXWTtYp.json | 20 +++--- .../adversary_Siren_BK4jwyXSRx7IOQiO.json | 14 ++-- ...sary_Skeleton_Archer_7X5q7a6ueeHs5oA9.json | 12 ++-- ...sary_Skeleton_Dredge_6l1a3Fazq8BoKIcc.json | 6 +- ...sary_Skeleton_Knight_Q9LaVTyXF9NF12C7.json | 26 ++++---- ...ary_Skeleton_Warrior_10YIQl0lvCJXZLfX.json | 8 +-- ...sary_Spectral_Archer_5tCkhnBByUIN5UdG.json | 12 ++-- ...ary_Spectral_Captain_65cSO3EQEh6ZH6Xk.json | 12 ++-- ...ry_Spectral_Guardian_UFVGl1osOsJTneLf.json | 14 ++-- ...adversary_Spellblade_ldbWEL7uZs84vyrR.json | 18 ++--- .../adversary_Spy_8zlynOhnVA59KpKT.json | 12 ++-- ...dversary_Stag_Knight_KGVwnLq85ywP9xvB.json | 20 +++--- ...dversary_Stonewraith_3aAS2Qm3R6cgaYfE.json | 24 +++---- ...ersary_Swarm_of_Rats_qNgs3AbLyJrY19nt.json | 6 +- ...rsary_Sylvan_Soldier_VtFBt9XBE0WrGGxP.json | 18 ++--- ...Tangle_Bramble_Swarm_PKSXFuaIHUCoH63A.json | 12 ++-- ...rsary_Tangle_Bramble_XcAGOSmtCFLT1unN.json | 6 +- ...sary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json | 12 ++-- ...ersary_Tiny_Red_Ooze_1fkLQXVtmILqfJ44.json | 12 ++-- ...rsary_Treant_Sapling_o63nS0k3wHu6EgKP.json | 6 +- .../adversary_Vampire_WWyUp6Mxl1S3KYUG.json | 16 ++--- ...ault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json | 8 +-- ...lt_Guardian_Sentinel_FVgYb28fhxlVcGwA.json | 18 ++--- ...ault_Guardian_Turret_c5hGdvY5UnSjlHws.json | 12 ++-- ...Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json | 26 ++++---- ...agon__Molten_Scourge_eArAPuB38CNR0ZIM.json | 34 +++++----- ...n__Obsidian_Predator_ladm7wykhZczYzrQ.json | 22 +++---- ...adversary_War_Wizard_noDdT0tsN6FXSmC8.json | 24 +++---- ...versary_Weaponmaster_ZNbQ2jg35LG4t9eH.json | 26 ++++---- ...dversary_Young_Dryad_8yUj2Mzvnifhxegm.json | 14 ++-- ...ary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json | 32 ++++----- ...ersary_Zombie_Legion_YhJrP7rTBiRdX5Fp.json | 6 +- ...dversary_Zombie_Pack_Nf0v43rtflV56V2T.json | 6 +- .../feature_Charge_AA2CZlJSWW8GPhrR.json | 6 +- ...ure_Elemental_Breath_sRaE3CgkgjBF1UpV.json | 6 +- ...ture_Fungril_Network_9tmeXm623hl4Qnws.json | 2 +- .../feature_Kick_gpW19TfJk0WWFh1S.json | 6 +- .../feature_Long_Tongue_oWbdlh51ajn1Q5kL.json | 6 +- .../feature_Luckbringer_8O6SQQMxKWr430QA.json | 6 +- ...ure_Retracting_Claws_Zj69cAeb3NjIa8Hn.json | 2 +- .../feature_Tusks_YhxD1ujZpftPu19w.json | 6 +- .../feature_Unshakeable_G5pE8FW94V1W9jJx.json | 2 +- .../feature_Demolish_DfBXO8jTchwFG8dZ.json | 6 +- ...feature_Elusive_Prey_a7Qvmm14nx9BCysA.json | 2 +- .../feature_Takedown_0ey4kM9ssj2otHvb.json | 6 +- .../feature_Trample_A0lgd6eVEfX6oqSB.json | 6 +- .../feature_Unyielding_vEAQ4cfsoPmOv2Gg.json | 2 +- ...ture_Venomous_Strike_uW3853pViM9VAfHb.json | 2 +- ...feature_Vicious_Maul_jYUBi7yLHap5ljpa.json | 6 +- .../feature_Webslinger_D73fS1iM4SZPFimu.json | 2 +- ...ature_Frontline_Tank_YS1g7YdWwOaS629x.json | 6 +- ...feature_Life_Support_lSlvSUHbOoX36q2j.json | 6 +- ...ature_Minor_Illusion_cshTYdtz9yoXYYB3.json | 2 +- ...ure_Strange_Patterns_6YsfFjmCGuFYVhT4.json | 6 +- ...ard_A_Soldier_s_Bond_Y08dLFuPXsgeRrHi.json | 6 +- ...rd_Arcane_Reflection_JzSvxy9Mu3RJp1jV.json | 2 +- .../domainCard_Armorer_cy8GjBPGc9w9RaGO.json | 6 +- .../domainCard_Banish_AIbHfryMA2Rvs1ut.json | 2 +- ...omainCard_Battle_Cry_Ef1JsUG50LIoKx2F.json | 8 +-- ...Card_Battle_Hardened_NeEOghgfyDUBTwBG.json | 6 +- ...domainCard_Blink_Out_Qu0iA4s3Xov10Erd.json | 2 +- ...mainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json | 6 +- ...mainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json | 14 ++-- ...inCard_Book_of_Exota_oVs2MSC6Uf5GbgEG.json | 8 +-- ...inCard_Book_of_Grynn_R0LNheiZycZlZzV3.json | 6 +- ...inCard_Book_of_Homet_gFMx08ogQ8hS2Obi.json | 4 +- ...nCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json | 8 +-- ...nCard_Book_of_Korvax_cWRFHJdxEZ0M1dAg.json | 10 +-- ...inCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json | 12 ++-- ...inCard_Book_of_Ronin_SZMNR3uGNinJcN4N.json | 4 +- ...inCard_Book_of_Sitil_eq8VNqYMRHhF9xw9.json | 2 +- ...inCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json | 10 +-- ...nCard_Book_of_Vagras_aknDDYtN7EObv94t.json | 6 +- ...inCard_Book_of_Vyola_VOIgm2j2Ijszwc5m.json | 2 +- ...nCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json | 2 +- ...Card_Chain_Lightning_0kAVO6rordCfZqYP.json | 12 ++-- ...Card_Champion_s_Edge_rnejRbUQsNGX1GMC.json | 18 ++--- ...domainCard_Chokehold_R5GYUalYXLLFRlNl.json | 2 +- ...ainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json | 12 ++-- ...nCard_Confusing_Aura_R8NDiJXJWmC48WSr.json | 4 +- ...inCard_Conjure_Swarm_rZPH0BY8Sznc9sFG.json | 8 +-- ...Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json | 6 +- ...ainCard_Counterspell_6dhqo1kzGxejCjHa.json | 2 +- ...Critical_Inspiration_ABp9pUfBS69NomTD.json | 2 +- ...inCard_Dark_Whispers_yL2qrSWmTwXVOySH.json | 2 +- ...omainCard_Death_Grip_x0FVGE1YbfXalJiw.json | 14 ++-- ..._Disintegration_Wave_kja5qvh4rdeDBB96.json | 2 +- ...omainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json | 6 +- .../domainCard_Eclipse_62Sj67PdPFzwWVe3.json | 8 +-- .../domainCard_Encore_klahWDFwihqqEhXP.json | 2 +- ...domainCard_Enrapture_a8lFiKX1o8T924ze.json | 8 +-- ...mainCard_Falling_Sky_hZJp9mdkMnqKDROe.json | 6 +- ...mainCard_Final_Words_Nbw6Jnh1vRZzwHQI.json | 2 +- .../domainCard_Flight_54GUjNuBEy7xdzMz.json | 2 +- .../domainCard_Forager_06UapZuaA5S6fAKl.json | 18 ++--- ...nCard_Forest_Sprites_JrkUMTzaFmQNBHVm.json | 2 +- ...inCard_Glancing_Blow_nCNCqSH7UgW4O3To.json | 2 +- ...d_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json | 2 +- ...ainCard_Goad_Them_On_HufF5KzuNfEb9RTi.json | 6 +- ...nCard_Gore_and_Glory_3zvjgZ5Od343wHzx.json | 12 ++-- ...inCard_Grace_Touched_KAuNb51AwhD8KEXk.json | 6 +- ...ainCard_Ground_Pound_WnGldYhJPDhx8v9X.json | 6 +- ...inCard_Healing_Field_GlRm1Dxlc0Z1b04o.json | 12 ++-- ...inCard_Healing_Hands_WTlhnQMajc1r8i50.json | 26 ++++---- ...nCard_Healing_Strike_XtSc0jIJLOoMTMYS.json | 6 +- .../domainCard_Hush_gwmYasmfgXZ7tFS6.json | 2 +- ...ard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json | 6 +- ...Card_I_See_It_Coming_Kp6RejHGimnuoBom.json | 2 +- ..._Inspirational_Words_cWu1o82ZF7GvnbXc.json | 18 ++--- ...ainCard_Invigoration_X8OfkEoI5gLTRf1B.json | 2 +- ...ainCard_Invisibility_KHkzA4Zrw8EWN1CH.json | 2 +- ...nCard_Know_Thy_Enemy_O38MQMhJWdZnXi6b.json | 2 +- ...omainCard_Lean_on_Me_BdePs1ZWpZTZvY1Z.json | 6 +- ...inCard_Manifest_Wall_TtGOtWkbr23VhHfH.json | 2 +- ...nCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json | 8 +-- ...inCard_Mending_Touch_TGjR4vJVNbQRV8zr.json | 24 +++---- ...Card_Midnight_Spirit_FXLsB3QbQvTtqX5B.json | 6 +- ...ard_Midnight_Touched_uSyGKVxOJcnp28po.json | 6 +- ...ard_Natural_Familiar_Tag303LoRNC5zGgl.json | 2 +- ...Card_Nature_s_Tongue_atWLorlCOxcrq8WB.json | 2 +- ...ainCard_Night_Terror_zcldCuqOg3dphUVI.json | 8 +-- ...domainCard_Onslaught_I7pNsQ9Yx6mRJX4V.json | 2 +- ...rd_Overwhelming_Aura_iEBLySZD9z8CLdz7.json | 2 +- ...nCard_Plant_Dominion_9a6xP5pxhVvdugk9.json | 2 +- ...d_Preservation_Blast_1p1cOmbnRd5CoKBp.json | 6 +- ...nCard_Rain_of_Blades_Ucenef6JpjQxwXni.json | 12 ++-- ...Card_Reaper_s_Strike_MCgNRlh0s5XUPCfl.json | 2 +- ...Rejuvenation_Barrier_HtWx5IIemCoorMj2.json | 6 +- ...mainCard_Restoration_wUQFsRtww18naYaq.json | 12 ++-- ...ainCard_Resurrection_z30ciOwQI7g3tHla.json | 4 +- ...mainCard_Rift_Walker_vd5STqX29RpYbGxa.json | 2 +- .../domainCard_Rise_Up_oDIZoC4l19Nli0Fj.json | 6 +- ...domainCard_Rune_Ward_GEhBUmv9Bj7oJfHk.json | 2 +- ...nCard_Salvation_Beam_4uAFGp3LxiC07woC.json | 6 +- ...mainCard_Second_Wind_ffPbSEvLuFrFsMxl.json | 12 ++-- ...d_Sensory_Projection_gZOMzskSOfeiXn54.json | 2 +- ...omainCard_Shadowbind_kguhWlidhxe2GbT0.json | 2 +- ...ainCard_Shrug_It_Off_JwfhtgmmuRxg4zhI.json | 2 +- ...Card_Soothing_Speech_QED2PDYePOSTbLtC.json | 12 ++-- ...d_Splintering_Strike_TYKfM3H9vBXyWiH4.json | 2 +- ...rd_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json | 12 ++-- ...omainCard_Swift_Step_H6TqCJBaa1eWEQ1z.json | 12 ++-- ...mainCard_Telekinesis_FgzBppvLjXr0UbUI.json | 8 +-- .../domainCard_Teleport_HnPwVrWblYa9hwSt.json | 2 +- ...ainCard_Tell_No_Lies_HTv9QEPS466WsstP.json | 6 +- .../domainCard_Tempest_X7YaZgFieBlqaPdZ.json | 18 ++--- ...nCard_Thought_Delver_B4choj481tqajWb9.json | 2 +- ...nCard_Towering_Stalk_n0P3VS1WfxvmXbB6.json | 6 +- ...ainCard_Troublemaker_JrdZedm1BFKeV7Yb.json | 6 +- ...inCard_Twilight_Toll_SDjjV61TC1NceV1m.json | 6 +- ...mainCard_Unbreakable_CUIQmrPjf9VCHmwJ.json | 2 +- ...ard_Uncanny_Disguise_TV56wSysbU5xAlOa.json | 2 +- ...inCard_Unleash_Chaos_o62i0QdbUDIiAhSq.json | 6 +- ...inCard_Valor_Touched_k1AtYd3lSchIymBr.json | 6 +- ...inCard_Veil_of_Night_gV4L5ZZmfPrEbIDh.json | 2 +- ...ard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json | 6 +- ...inCard_Wild_Fortress_9dFvcM1i3bxG3BSA.json | 2 +- ...ard_Words_of_Discord_ZjAdi1FSNCDDHI3X.json | 6 +- .../domainCard_Wrangle_9DwSxHoUwl8Kxj3n.json | 2 +- ...d_Zone_of_Protection_lOZaRb4fCVgQsWB5.json | 2 +- ...ment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json | 6 +- ...environment_Ambushed_uGEdNYERCTJBEjc5.json | 6 +- ...g_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json | 14 ++-- ...Bustling_Marketplace_HZKA7hkej7JJY503.json | 2 +- ...ronment_Castle_Siege_1eZ32Esq7rfZOjlu.json | 12 ++-- ...ironment_Chaos_Realm_2Z1mKc65LxNk2PqR.json | 20 +++--- ...ent_Cliffside_Ascent_LPpfdlNKqiZIl04w.json | 24 +++---- ...nt_Divine_Usurpation_4DLYez7VbMCFDAuZ.json | 12 ++-- ...ment_Hallowed_Temple_dsA6j69AnaJhUyqH.json | 12 ++-- ...nment_Imperial_Court_jr1xAoXzVwVblzxI.json | 10 +-- ...ronment_Local_Tavern_cM4X81DOyvxNIi52.json | 6 +- ...onment_Mountain_Pass_acMu9wJrMZZzLSTJ.json | 12 ++-- ...ecromancer_s_Ossuary_h3KyRL7AshhLAmcH.json | 14 ++-- ...nment_Pitched_Battle_EWD3ZsLoK6VMVOf7.json | 6 +- ...ronment_Raging_River_t4cdqTfzcqP3H1vJ.json | 6 +- ...or_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json | 2 +- ...mor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json | 6 +- ...mor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json | 2 +- ...able_Dragonbloom_Tea_wM18PWWW2Ami4fBG.json | 6 +- ...able_Dripfang_Poison_eU8VpbWB2NHIL47n.json | 6 +- ...mable_Feast_of_Xuria_aX6NyxkNzu0LcJpt.json | 10 +-- ...umable_Health_Potion_Aruc2NLutWuVIjP1.json | 6 +- ...mproved_Arcane_Shard_nQTo6mNoPTEVBtkm.json | 6 +- ...e_Jar_of_Lost_Voices_yUol6M5b8jsbk9za.json | 6 +- ...e_Major_Arcane_Shard_AA7bmiwv00lshPrC.json | 6 +- ..._Major_Health_Potion_cM7pHe8bBAxSZ2xR.json | 6 +- ...Major_Stamina_Potion_I4cQ03xbxnc81EGa.json | 6 +- ..._Minor_Health_Potion_tPfKtKRRjv8qdSqy.json | 6 +- ...Minor_Stamina_Potion_b6vGSPFWOlzZZDLO.json | 6 +- ...sumable_Sleeping_Sap_XZavUVlHEvE2srEt.json | 6 +- ...nsumable_Snap_Powder_cg6VtQ0eVZjDdcK0.json | 6 +- ...mable_Stamina_Potion_hf3k1POoVSooJyN2.json | 6 +- .../consumable_Stardrop_y4c1jrlHrf0wBWOq.json | 6 +- ...sumable_Sun_Tree_Sap_kwexUzdM9wm1Qums.json | 2 +- ...onsumable_Sweet_Moss_GrDrRqWgv7gvl9vn.json | 12 ++-- ...nstable_Arcane_Shard_mUepnLbkvFk0ha4Z.json | 6 +- ...sumable_Varik_Leaves_hvy5BkG3F6iOIXTx.json | 6 +- ...ot_Bag_of_Ficklesand_v758j4FwNVAurhYK.json | 2 +- ...ot_Box_of_Many_Goods_bZyT7Qw7iafswlTY.json | 2 +- ...loot_Calming_Pendant_tgFFMxpuRSiRrrEB.json | 2 +- .../loot_Skeleton_Key_edkNgwy4xghZreBa.json | 2 +- .../loot/loot_Woven_Net_ARuv48PWUGJGBC4n.json | 2 +- .../weapon_Aantari_Bow_ijodu5yNBoMxpkHV.json | 6 +- ...ane_Frame_Wheelchair_la3sAWgnvadc4NvP.json | 6 +- ...ced_Arcane_Gauntlets_hXR56fTKwZ6s1obs.json | 6 +- ...n_Advanced_Battleaxe_FcbvY1ydbNVMjKvk.json | 6 +- ..._Advanced_Broadsword_WtQAGz0TUgz8Xg70.json | 6 +- ...on_Advanced_Crossbow_3HGs0AgVrdIBTaKG.json | 6 +- ...pon_Advanced_Cutlass_bw9WO9lxkM9bWZxQ.json | 6 +- ...apon_Advanced_Dagger_mrioysDjNQEIE8hN.json | 6 +- ...n_Advanced_Dualstaff_X5x3sC7v2f3L9sjL.json | 6 +- ...vanced_Glowing_Rings_InQoh8mZPnwarQkX.json | 6 +- ...on_Advanced_Grappler_7vvhVl4TDJHtjpFK.json | 6 +- ..._Advanced_Greatstaff_4UzxqfkwF8gDSdu7.json | 6 +- ..._Advanced_Greatsword_MAC6YWTo4lzSotQc.json | 6 +- ...pon_Advanced_Halberd_C8gQn7onAc9wsrCs.json | 6 +- ...dvanced_Hallowed_Axe_BiyXKX2Mo1TQbKgk.json | 6 +- ...vanced_Hand_Crossbow_Lsvocst8aGqkBj7g.json | 6 +- ..._Advanced_Hand_Runes_PQACczSghZIVTdgZ.json | 6 +- ...avy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json | 6 +- ...ght_Frame_Wheelchair_BuMfupnCzHbziQ8o.json | 6 +- ...pon_Advanced_Longbow_M5CywMAyPKGgebsJ.json | 6 +- ...n_Advanced_Longsword_9xkB3MWXahrsVP4N.json | 6 +- ...weapon_Advanced_Mace_WreMYiH5uhVDaoVw.json | 6 +- ...dvanced_Quarterstaff_zJtm2f9ZFKZRtCRg.json | 6 +- ...apon_Advanced_Rapier_KxFne76d7cak15dO.json | 6 +- ...nced_Returning_Blade_sIGXA4KMeYBUjcEO.json | 6 +- ...dvanced_Round_Shield_hiEOGF2reabGLUoi.json | 6 +- ...pon_Advanced_Scepter_2Khzuj768yoWN9QK.json | 12 ++-- ...on_Advanced_Shortbow_JpSlJvDR0X8VFDns.json | 6 +- ..._Advanced_Shortstaff_T5exRCqOXhrjSYnI.json | 6 +- ..._Advanced_Shortsword_p3nz5CaGUoyuGVg0.json | 6 +- ...dvanced_Small_Dagger_0thN0BpN05KT8Avx.json | 6 +- ...eapon_Advanced_Spear_pK6dsNABKKp1CIGN.json | 6 +- ...dvanced_Tower_Shield_OfOzQbs4hg6QbfTG.json | 6 +- ...weapon_Advanced_Wand_jU9jWIardjtdAQcs.json | 6 +- ...n_Advanced_Warhammer_8Lipw3RRKDgBVP0p.json | 6 +- ...weapon_Advanced_Whip_01izMUSJcAUo79IX.json | 6 +- ...ane_Frame_Wheelchair_XRChepscgr75Uug7.json | 6 +- ...pon_Arcane_Gauntlets_PC5EyEIq7NWBV0n5.json | 6 +- ...apon_Axe_of_Fortunis_YcS1rHgfnSlla8Xf.json | 6 +- .../weapon_Battleaxe_fbDYUja3ll9vCtrB.json | 6 +- ...lack_Powder_Revolver_AokqTusPzn0hghkE.json | 6 +- .../weapon_Bladed_Whip_5faflfNz20cFW1EM.json | 6 +- ...eapon_Blessed_Anlace_n1oPTk5czTIGTkVj.json | 12 ++-- .../weapon_Bloodstaff_IoMVDz92WVvfGGdc.json | 6 +- .../weapon_Blunderbuss_SLFrK0WmldPo0shz.json | 6 +- .../weapon_Braveshield_QEvgVoz9xKBSKsGi.json | 6 +- .../weapon_Bravesword_QZrWAkprA2tL2MOI.json | 6 +- .../weapon_Broadsword_1cwWNt4sqlgA8gCT.json | 6 +- .../weapon_Buckler_EmFTp9wzT6MHSaNz.json | 6 +- ...weapon_Casting_Sword_2Fbf2cxLfbdGkU4I.json | 12 ++-- .../weapon_Crossbow_cw7HG1Z7hp7OOLD0.json | 6 +- ...weapon_Curved_Dagger_Fk69R40svV0kanZD.json | 6 +- .../weapon_Cutlass_CWrbnethuILXrEpA.json | 6 +- .../weapon_Dagger_iStO0BbeMTTR0rQi.json | 6 +- ...pon_Devouring_Dagger_C5wSGglR8e0euQnY.json | 6 +- .../weapon_Double_Flail_xm1yU7k58fMgXxRR.json | 6 +- ...pon_Dual_Ended_Sword_nXjuBa215H1sTUK3.json | 6 +- .../weapon_Dualstaff_j8cdNeIUYxxzFVji.json | 6 +- .../weapon_Ego_Blade_G7rH31KQ5eEZXcv0.json | 6 +- .../weapon_Elder_Bow_JdWcn9W1edhAEInL.json | 6 +- ...pon_Extended_Polearm_fJHKMxZokVP34MCi.json | 6 +- .../weapon_Finehair_Bow_ykF3jouxHZ6YR8Bg.json | 6 +- .../weapon_Firestaff_BtCm2RhWEfs00g38.json | 6 +- ...pon_Flickerfly_Blade_xLJ5RRpUoTRmAC3G.json | 6 +- ...Floating_Bladeshards_3vti3xfo0wJND7ew.json | 6 +- ...weapon_Fusion_Gloves_uK1RhtYAsDeoPNGx.json | 6 +- .../weapon_Ghostblade_6gFvOFTE97QZ74Zr.json | 6 +- .../weapon_Gilded_Bow_ctTgFfMbM3YtmsYU.json | 6 +- ...apon_Gilded_Falchion_VwcOgqnzjf9LBj2S.json | 6 +- ...weapon_Glowing_Rings_wG9f5NpCwSbaLy8t.json | 6 +- .../weapon_Grappler_iEzPscUc18GuFoB6.json | 6 +- .../weapon_Greatbow_MXBpbqQsZFln4rZk.json | 6 +- .../weapon_Greatstaff_Yk8pTEmyLLi4095S.json | 6 +- .../weapon_Greatsword_70ysaFJDREwTgvZa.json | 6 +- .../weapon_Halberd_qT7FfmauAumOjJoq.json | 6 +- .../weapon_Hallowed_Axe_Vayg7CnRTFBrunjM.json | 6 +- ...apon_Hammer_of_Exota_0lAkBEUvbM9Osmqb.json | 6 +- ...apon_Hammer_of_Wrath_1R4uzOpWD8bkYRUm.json | 6 +- .../weapon_Hand_Cannon_MyGz8nd5sieRQ7zl.json | 6 +- ...weapon_Hand_Crossbow_zxKt6qXe7uZB6ljm.json | 6 +- .../weapon_Hand_Runes_3whiedn0jBMNRdIb.json | 6 +- .../weapon_Hand_Sling_RAIaoMi6iO1PKIlK.json | 12 ++-- ...avy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json | 6 +- ...eapon_Ilmari_s_Rifle_TMrUzVC3KvcHmdt8.json | 6 +- ...apon_Impact_Gauntlet_Zg6IutksQVOqAg8K.json | 6 +- ...ane_Frame_Wheelchair_N9P695V5KKlJbAY5.json | 6 +- ...ved_Arcane_Gauntlets_kENTDpa1hr5LDhIT.json | 6 +- ...n_Improved_Battleaxe_nxGUpuHLmuKdKsDC.json | 6 +- ..._Improved_Broadsword_OcKeLJxvmdT81VBc.json | 6 +- ...on_Improved_Crossbow_55NwHIIZHUeKSE3M.json | 6 +- ...pon_Improved_Cutlass_ddRjXnp2vbohu7rJ.json | 6 +- ...apon_Improved_Dagger_ScjTkb9qrndhlk9S.json | 6 +- ...n_Improved_Dualstaff_f7hhHlZ5nL3AhYEM.json | 6 +- ...proved_Glowing_Rings_N5amhkxR1xn3B7r2.json | 6 +- ...on_Improved_Grappler_3T3o9zfe61t22L1H.json | 6 +- ..._Improved_Greatstaff_LCuTrYXi4lhg6LqW.json | 6 +- ..._Improved_Greatsword_FPX4ouDrxXiQ5MDf.json | 6 +- ...pon_Improved_Halberd_F9PETfCQGwczBPif.json | 6 +- ...mproved_Hallowed_Axe_wFOXMN2uiX4j6Gd9.json | 6 +- ...proved_Hand_Crossbow_XEDRkuw3BhMoVBn9.json | 6 +- ..._Improved_Hand_Runes_jMEukC3VpNDz5AOD.json | 6 +- ...avy_Frame_Wheelchair_L5KeCtrs768PmYWW.json | 6 +- ...ght_Frame_Wheelchair_ZJsetdHKV77ygtCE.json | 6 +- ...pon_Improved_Longbow_NacNonjbzyoVMNhI.json | 6 +- ...n_Improved_Longsword_QyBZ5NxM8F9nCL9s.json | 6 +- ...weapon_Improved_Mace_zSLx52U4Yltqx8F1.json | 6 +- ...mproved_Quarterstaff_BEmAR60PM3ZaiNXa.json | 6 +- ...apon_Improved_Rapier_LFPH8nD2f4Blv3AM.json | 6 +- ...oved_Returning_Blade_SKNwkW23eVQjN4Zy.json | 6 +- ...mproved_Round_Shield_DlinEBGZfIlvreO3.json | 6 +- ...pon_Improved_Scepter_tj26lbNkwy8bORF4.json | 12 ++-- ...on_Improved_Shortbow_6ZWl6ARfvYBaAMwY.json | 6 +- ..._Improved_Shortstaff_Mn8ja5Oi1sXvvPSk.json | 6 +- ..._Improved_Shortsword_rSyBNRwemBVuTo3H.json | 6 +- ...mproved_Small_Dagger_nMuF8ZDZ2aXZVTg6.json | 6 +- ...eapon_Improved_Spear_j5Pt1thLfcvopBij.json | 6 +- ...mproved_Tower_Shield_bxt3NsbMqTSdI5ab.json | 6 +- ...weapon_Improved_Wand_6d9B2b5X2d2U56jt.json | 6 +- ...n_Improved_Warhammer_pxaN4ZK4eqKrjtWj.json | 6 +- ...weapon_Improved_Whip_ftTp8VlsBQ1r4LFD.json | 6 +- ...eapon_Keeper_s_Staff_q382JqMkqLaaFLIr.json | 6 +- ...eapon_Knuckle_Blades_U8gfyvxoHm024inM.json | 6 +- ...weapon_Knuckle_Claws_SFqganS8Du4aEKjQ.json | 6 +- .../weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json | 6 +- ...ane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json | 6 +- ...ary_Arcane_Gauntlets_umADDPYCaykXDc1v.json | 6 +- ..._Legendary_Battleaxe_1nztpLzoHGfbKf5x.json | 6 +- ...Legendary_Broadsword_y3hfTPfZhMognyaJ.json | 6 +- ...n_Legendary_Crossbow_1G6xX2QL9O0Rsgz7.json | 6 +- ...on_Legendary_Cutlass_Rpyz0jbFJ1SwqfyD.json | 6 +- ...pon_Legendary_Dagger_GmTg3Fdne1UPNs8t.json | 6 +- ..._Legendary_Dualstaff_o3rsLvImcLAx5TvD.json | 6 +- ...endary_Glowing_Rings_PReWrfuPjoNQuieo.json | 6 +- ...n_Legendary_Grappler_IrtUj0UntBMNn49G.json | 6 +- ...Legendary_Greatstaff_jDtvEabkHY1GFgfc.json | 6 +- ...Legendary_Greatsword_zMZ46F9VR7zdTxb9.json | 6 +- ...on_Legendary_Halberd_1AuMNiJz96Ez9fur.json | 6 +- ...gendary_Hallowed_Axe_0HmhnZnv1I6uX69c.json | 6 +- ...endary_Hand_Crossbow_32nYyMaeDWaakSxz.json | 6 +- ...Legendary_Hand_Runes_DWLkswhluXuMy3bB.json | 6 +- ...avy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json | 6 +- ...ght_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json | 6 +- ...on_Legendary_Longbow_Utt1GpoH1fhaTOtN.json | 6 +- ..._Legendary_Longsword_14abPqQcROJfDChR.json | 6 +- ...eapon_Legendary_Mace_RsDsy7tIhrhaAQQc.json | 6 +- ...gendary_Quarterstaff_1ZciqG7vIKLYpKsP.json | 6 +- ...pon_Legendary_Rapier_BakN97v4jTePcXiZ.json | 6 +- ...dary_Returning_Blade_mcj3CPkcSSDdAcBB.json | 6 +- ...gendary_Round_Shield_A28WL9E2lJ3iLZHW.json | 6 +- ...on_Legendary_Scepter_IZ4CWNxfuM46JeCN.json | 12 ++-- ...n_Legendary_Shortbow_j7kp36jaetfn5jb3.json | 6 +- ...Legendary_Shortstaff_D3SbNvNJZAFuzfhg.json | 6 +- ...Legendary_Shortsword_dEumq3BIZBk5xYTk.json | 6 +- ...gendary_Small_Dagger_Px3Rh3kIvAqyISxJ.json | 6 +- ...apon_Legendary_Spear_4e5pWxi2qohuGsWh.json | 6 +- ...gendary_Tower_Shield_MaJIROht7A9LxIZx.json | 6 +- ...eapon_Legendary_Wand_wPjg0LufJH9vUfVM.json | 6 +- ..._Legendary_Warhammer_W9ymfEDck2icfvla.json | 6 +- ...eapon_Legendary_Whip_Wcdbf6yS3LEt7nsg.json | 6 +- ...ght_Frame_Wheelchair_iaGnlUkShBgdeMo0.json | 6 +- .../weapon_Longbow_YfVs6Se903az4Yet.json | 6 +- .../weapon_Longsword_Iv8BZM1R24QMT72M.json | 6 +- .../weapons/weapon_Mace_cKQCDyM2UopDL9zF.json | 6 +- .../weapon_Mage_Orb_XKBmBUEoGLdLcuqQ.json | 6 +- ...eapon_Magus_Revolver_jGykNGQiKm63tCiE.json | 6 +- ...pon_Meridian_Cutlass_Gi26Zk9VqlAAgx3E.json | 6 +- .../weapon_Midas_Scythe_BdLfy5i488VZgkjP.json | 6 +- ...apon_Parrying_Dagger_taAZDkDCpeNgxhnn.json | 6 +- ...pon_Powered_Gauntlet_bW3xw5S9DbaLCN3E.json | 6 +- .../weapon_Primer_Shard_SxcblanBvqaest3A.json | 6 +- .../weapon_Quarterstaff_mlIj88p1wcQNjEDG.json | 6 +- .../weapon_Rapier_zkAgEW6zMkRZalEm.json | 6 +- ...on_Retractable_Saber_i8CqVTzqoRoCewNe.json | 6 +- ...weapon_Returning_Axe_FtsQGwOg3r8uUCST.json | 6 +- ...apon_Returning_Blade_4fQpVfQ3NVwTHStA.json | 6 +- ...weapon_Ricochet_Axes_E9QDh5o9eQ1Qx0kH.json | 6 +- .../weapon_Round_Shield_mxwWKDujgsRcZWPT.json | 6 +- ...n_Runes_of_Ruination_EG6mZhr3ib56r974.json | 6 +- .../weapon_Scepter_GZh345N8fmuS4Jeh.json | 12 ++-- ...pon_Scepter_of_Elias_acPGwIaUhx3R0mTq.json | 6 +- .../weapon_Shortbow_p9tdjQr2AZP19RYm.json | 6 +- .../weapon_Shortstaff_vHDHG3STcxTEfYAM.json | 6 +- .../weapon_Shortsword_cjGZpXCoshEqi1FI.json | 6 +- ..._Siphoning_Gauntlets_1N1jggda5DfdzdMj.json | 6 +- .../weapon_Sledge_Axe_OxsEmffWriiQmqJK.json | 12 ++-- .../weapon_Small_Dagger_wKklDxs5nkzILNp4.json | 6 +- .../weapon_Spear_TF85tKJetUjLwh54.json | 6 +- .../weapon_Spiked_Bow_O1w8KPYH85ZS8X64.json | 12 ++-- ...weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json | 6 +- ..._Steelforged_Halberd_6bkbw4Ap644KZGvJ.json | 6 +- ...n_Swinging_Ropeblade_1jOJHHKdtk3s2jaY.json | 6 +- ...ord_of_Light___Flame_TVPCWnSELOVBv6G1.json | 6 +- .../weapon_Talon_Blades_jlLtgK468rO5IssR.json | 6 +- .../weapon_Thistlebow_I1nDGpulg29GpWOW.json | 6 +- .../weapon_Tower_Shield_C9aWpK1shVMWP4m5.json | 6 +- ...apon_Urok_Broadsword_zGm6Wa1fGF6cECY5.json | 6 +- .../weapons/weapon_Wand_ItWisJFNGMNWeaCV.json | 6 +- ...Wand_of_Enthrallment_tP6vmnrmTq2h5sj7.json | 6 +- ...weapon_Wand_of_Essek_ZrRGNjGCgZTTfgDG.json | 6 +- .../weapon_War_Scythe_z6yEdFYQJ5IzgTX3.json | 6 +- .../weapon_Warhammer_ZXh1GQahBiODfSTC.json | 6 +- .../weapons/weapon_Whip_CmtWqw6DwoePnX7W.json | 6 +- ...pon_Widogast_Pendant_8Z5QrThfwkYPXNco.json | 6 +- ...apon_Yutari_Bloodbow_0XpSBYXxtywvBFQi.json | 6 +- ...eature_Battle_Ritual_qqb5acyUSl1sCpWW.json | 8 +-- ...re_Clarity_of_Nature_etaQ01yGJhBLDUqZ.json | 6 +- .../feature_Dark_Cloud_frBTtNMX9Y2gkuPz.json | 2 +- ...ature_Elemental_Aura_2JH9NaOh69yN80Gw.json | 8 +-- ...lemental_Incarnation_f37TTgCc0Q3Ih1A1.json | 12 ++-- ...ure_Gifted_Performer_99U7YWNCxFZHCiT0.json | 12 ++-- ...ture_Honed_Expertise_w1BwNKxbQOSizLmZ.json | 2 +- ...ture_Natural_Evasion_TnuLBtHQGbqyzn82.json | 2 +- ...feature_Regeneration_KRyrbSLVGreIOTZe.json | 6 +- .../feature_Revenge_oNfA5F9cKwNR7joq.json | 6 +- ...ature_Rousing_Speech_PCmYTX02JLzBpgml.json | 6 +- ...eature_Sparing_Touch_GfOSgVJW8bS1OjNq.json | 12 ++-- ...ture_Thrive_in_Chaos_1nmFmkNXY6OYyyju.json | 2 +- ..._Warden_s_Protection_2F1bUFY80oce97C9.json | 6 +- styles/less/global/elements.less | 9 +++ templates/actionTypes/damage.hbs | 65 +++++++++---------- templates/sheets/items/weapon/header.hbs | 6 +- templates/sheets/items/weapon/settings.hbs | 14 ++-- 536 files changed, 2476 insertions(+), 2368 deletions(-) create mode 100644 module/data/fields/iterableTypedObjectField.mjs diff --git a/module/applications/levelup/companionLevelup.mjs b/module/applications/levelup/companionLevelup.mjs index 7f11ccff..d6bf2d78 100644 --- a/module/applications/levelup/companionLevelup.mjs +++ b/module/applications/levelup/companionLevelup.mjs @@ -67,7 +67,7 @@ export default class DhCompanionLevelUp extends BaseLevelUp { break; case 'summary': const levelKeys = Object.keys(this.levelup.levels); - const actorDamageDice = this.actor.system.attack.damage.parts[0].value.dice; + const actorDamageDice = this.actor.system.attack.damage.parts.hitPoints.value.dice; const actorRange = this.actor.system.attack.range; let achievementExperiences = []; diff --git a/module/applications/sheets-configs/action-base-config.mjs b/module/applications/sheets-configs/action-base-config.mjs index 34543086..c7e8e758 100644 --- a/module/applications/sheets-configs/action-base-config.mjs +++ b/module/applications/sheets-configs/action-base-config.mjs @@ -1,3 +1,4 @@ +import { getUnusedDamageTypes } from '../../helpers/utils.mjs'; import DaggerheartSheet from '../sheets/daggerheart-sheet.mjs'; const { ApplicationV2 } = foundry.applications.api; @@ -103,7 +104,7 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) } }; - static CLEAN_ARRAYS = ['damage.parts', 'cost', 'effects', 'summon']; + static CLEAN_ARRAYS = ['cost', 'effects', 'summon']; _getTabs(tabs) { for (const v of Object.values(tabs)) { @@ -155,6 +156,7 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) revealed: this.openTrigger === index }; }); + context.allDamageTypesUsed = !getUnusedDamageTypes(this.action.damage.parts).length; const settingsTiers = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers).tiers; context.tierOptions = [ @@ -268,18 +270,61 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) static addDamage(_event) { if (!this.action.damage.parts) return; - const data = this.action.toObject(), - part = {}; - if (this.action.actor?.isNPC) part.value = { multiplier: 'flat' }; - data.damage.parts.push(part); - this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) }); + + const choices = getUnusedDamageTypes(this.action.damage.parts); + const content = new foundry.data.fields.StringField({ + label: game.i18n.localize('Damage Type'), + choices, + required: true + }).toFormGroup( + {}, + { + name: 'type', + localize: true, + nameAttr: 'value', + labelAttr: 'label' + } + ).outerHTML; + + const callback = (_, button) => { + const data = this.action.toObject(); + const type = choices[button.form.elements.type.value].value; + const part = { applyTo: type }; + if (this.action.actor?.isNPC) part.value = { multiplier: 'flat' }; + data.damage.parts[type] = part; + this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) }); + }; + + const typeDialog = new foundry.applications.api.DialogV2({ + buttons: [ + foundry.utils.mergeObject( + { + action: 'ok', + label: 'Confirm', + icon: 'fas fa-check', + default: true + }, + { callback: callback } + ) + ], + content: content, + rejectClose: false, + modal: false, + window: { + title: game.i18n.localize('Add Damage') + }, + position: { width: 300 } + }); + + typeDialog.render(true); } static removeDamage(_event, button) { if (!this.action.damage.parts) return; - const data = this.action.toObject(), - index = button.dataset.index; - data.damage.parts.splice(index, 1); + const data = this.action.toObject(); + const key = button.dataset.key; + delete data.damage.parts[key]; + data.damage.parts[`-=${key}`] = null; this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) }); } diff --git a/module/applications/sheets/api/application-mixin.mjs b/module/applications/sheets/api/application-mixin.mjs index eb53f073..8c96e0bd 100644 --- a/module/applications/sheets/api/application-mixin.mjs +++ b/module/applications/sheets/api/application-mixin.mjs @@ -472,7 +472,10 @@ export default function DHApplicationMixin(Base) { icon: 'fa-solid fa-explosion', condition: target => { const doc = getDocFromElementSync(target); - return doc?.system?.attack?.damage.parts.length || doc?.damage?.parts.length; + return ( + !foundry.utils.isEmpty(doc?.system?.attack?.damage.parts) || + !foundry.utils.isEmpty(doc?.damage?.parts) + ); }, callback: async (target, event) => { const doc = await getDocFromElement(target), diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 3b87c15d..d0d4c69f 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -245,8 +245,8 @@ export const defaultRestOptions = { type: 'friendly' }, damage: { - parts: [ - { + parts: { + hitPoints: { applyTo: healingTypes.hitPoints.id, value: { custom: { @@ -255,7 +255,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -279,8 +279,8 @@ export const defaultRestOptions = { type: 'self' }, damage: { - parts: [ - { + parts: { + stress: { applyTo: healingTypes.stress.id, value: { custom: { @@ -289,7 +289,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -314,8 +314,8 @@ export const defaultRestOptions = { type: 'friendly' }, damage: { - parts: [ - { + parts: { + armor: { applyTo: healingTypes.armor.id, value: { custom: { @@ -324,7 +324,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -348,8 +348,8 @@ export const defaultRestOptions = { type: 'self' }, damage: { - parts: [ - { + parts: { + hope: { applyTo: healingTypes.hope.id, value: { custom: { @@ -358,7 +358,7 @@ export const defaultRestOptions = { } } } - ] + } } }, prepareWithFriends: { @@ -372,8 +372,8 @@ export const defaultRestOptions = { type: 'self' }, damage: { - parts: [ - { + parts: { + hope: { applyTo: healingTypes.hope.id, value: { custom: { @@ -382,7 +382,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -409,8 +409,8 @@ export const defaultRestOptions = { type: 'friendly' }, damage: { - parts: [ - { + parts: { + hitPoints: { applyTo: healingTypes.hitPoints.id, value: { custom: { @@ -419,7 +419,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -443,8 +443,8 @@ export const defaultRestOptions = { type: 'self' }, damage: { - parts: [ - { + parts: { + stress: { applyTo: healingTypes.stress.id, value: { custom: { @@ -453,7 +453,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -478,8 +478,8 @@ export const defaultRestOptions = { type: 'friendly' }, damage: { - parts: [ - { + parts: { + armor: { applyTo: healingTypes.armor.id, value: { custom: { @@ -488,7 +488,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, @@ -512,8 +512,8 @@ export const defaultRestOptions = { type: 'self' }, damage: { - parts: [ - { + parts: { + hope: { applyTo: healingTypes.hope.id, value: { custom: { @@ -522,7 +522,7 @@ export const defaultRestOptions = { } } } - ] + } } }, prepareWithFriends: { @@ -536,8 +536,8 @@ export const defaultRestOptions = { type: 'self' }, damage: { - parts: [ - { + parts: { + hope: { applyTo: healingTypes.hope.id, value: { custom: { @@ -546,7 +546,7 @@ export const defaultRestOptions = { } } } - ] + } } } }, diff --git a/module/config/itemConfig.mjs b/module/config/itemConfig.mjs index 77328987..b424c707 100644 --- a/module/config/itemConfig.mjs +++ b/module/config/itemConfig.mjs @@ -14,8 +14,8 @@ export const armorFeatures = { type: 'hostile' }, damage: { - parts: [ - { + parts: { + stress: { applyTo: 'stress', value: { custom: { @@ -24,7 +24,7 @@ export const armorFeatures = { } } } - ] + } } } ] @@ -732,8 +732,8 @@ export const weaponFeatures = { type: 'hostile' }, damage: { - parts: [ - { + parts: { + stress: { applyTo: 'stress', value: { custom: { @@ -742,7 +742,7 @@ export const weaponFeatures = { } } } - ] + } } } ], @@ -914,8 +914,8 @@ export const weaponFeatures = { type: 'self' }, damage: { - parts: [ - { + parts: { + hitPoints: { applyTo: 'hitPoints', value: { custom: { @@ -924,7 +924,7 @@ export const weaponFeatures = { } } } - ] + } } } ] diff --git a/module/data/action/attackAction.mjs b/module/data/action/attackAction.mjs index 60112c40..3671613d 100644 --- a/module/data/action/attackAction.mjs +++ b/module/data/action/attackAction.mjs @@ -26,23 +26,23 @@ export default class DHAttackAction extends DHDamageAction { return { value: { multiplier: 'prof', - dice: this.item?.system?.attack.damage.parts[0].value.dice, - bonus: this.item?.system?.attack.damage.parts[0].value.bonus ?? 0 + dice: this.item?.system?.attack.damage.parts.hitPoints.value.dice, + bonus: this.item?.system?.attack.damage.parts.hitPoints.value.bonus ?? 0 }, - type: this.item?.system?.attack.damage.parts[0].type, + type: this.item?.system?.attack.damage.parts.hitPoints.type, base: true }; } get damageFormula() { - const hitPointsPart = this.damage.parts.find(x => x.applyTo === CONFIG.DH.GENERAL.healingTypes.hitPoints.id); + const hitPointsPart = this.damage.parts.hitPoints; if (!hitPointsPart) return '0'; return hitPointsPart.value.getFormula(); } get altDamageFormula() { - const hitPointsPart = this.damage.parts.find(x => x.applyTo === CONFIG.DH.GENERAL.healingTypes.hitPoints.id); + const hitPointsPart = this.damage.parts.hitPoints; if (!hitPointsPart) return '0'; return hitPointsPart.valueAlt.getFormula(); diff --git a/module/data/action/baseAction.mjs b/module/data/action/baseAction.mjs index f6ffe75f..5cc57ad7 100644 --- a/module/data/action/baseAction.mjs +++ b/module/data/action/baseAction.mjs @@ -352,11 +352,11 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel } get hasDamage() { - return this.damage?.parts?.length && this.type !== 'healing'; + return !foundry.utils.isEmpty(this.damage.parts) && this.type !== 'healing'; } get hasHealing() { - return this.damage?.parts?.length && this.type === 'healing'; + return !foundry.utils.isEmpty(this.damage.parts) && this.type === 'healing'; } get hasSave() { @@ -376,6 +376,15 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel return tags; } + + static migrateData(source) { + if (source.damage?.parts && Array.isArray(source.damage.parts)) { + source.damage.parts = source.damage.parts.reduce((acc, part) => { + acc[part.applyTo] = part; + return acc; + }, {}); + } + } } export class ResourceUpdateMap extends Map { diff --git a/module/data/actor/adversary.mjs b/module/data/actor/adversary.mjs index 0a446c15..2288c548 100644 --- a/module/data/actor/adversary.mjs +++ b/module/data/actor/adversary.mjs @@ -89,14 +89,14 @@ export default class DhpAdversary extends DhCreature { type: 'attack' }, damage: { - parts: [ - { + parts: { + hitPoints: { type: ['physical'], value: { multiplier: 'flat' } } - ] + } } } }), @@ -268,12 +268,12 @@ export default class DhpAdversary extends DhCreature { } // Update damage in item actions + // Parse damage, and convert all formula matches in the descriptions to the new damage for (const action of Object.values(item.system.actions)) { - if (!action.damage) continue; - - // Parse damage, and convert all formula matches in the descriptions to the new damage try { const result = this.#adjustActionDamage(action, { ...damageMeta, type: 'action' }); + if (!result) continue; + for (const { previousFormula, formula } of Object.values(result)) { const oldFormulaRegexp = new RegExp( previousFormula.replace(' ', '').replace('+', '(?:\\s)?\\+(?:\\s)?') @@ -375,16 +375,14 @@ export default class DhpAdversary extends DhCreature { /** * Updates damage to reflect a specific value. * @throws if damage structure is invalid for conversion - * @returns the converted formula and value as a simplified term + * @returns the converted formula and value as a simplified term, or null if it doesn't deal HP damage */ #adjustActionDamage(action, damageMeta) { - // The current algorithm only returns a value if there is a single damage part - const hpDamageParts = action.damage.parts.filter(d => d.applyTo === 'hitPoints'); - if (hpDamageParts.length !== 1) throw new Error('incorrect number of hp parts'); + if (!action.damage?.parts.hitPoints) return null; const result = {}; for (const property of ['value', 'valueAlt']) { - const data = hpDamageParts[0][property]; + const data = action.damage.parts.hitPoints[property]; const previousFormula = data.custom.enabled ? data.custom.formula : [data.flatMultiplier ? `${data.flatMultiplier}${data.dice}` : 0, data.bonus ?? 0] diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index 10fba63c..414a9299 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -118,8 +118,8 @@ export default class DhCharacter extends DhCreature { trait: 'strength' }, damage: { - parts: [ - { + parts: { + hitPoints: { type: ['physical'], value: { custom: { @@ -128,7 +128,7 @@ export default class DhCharacter extends DhCreature { } } } - ] + } } } }), @@ -704,7 +704,7 @@ export default class DhCharacter extends DhCreature { isReversed: true }; - this.attack.damage.parts[0].value.custom.formula = `@prof${this.basicAttackDamageDice}${this.rules.attack.damage.bonus ? ` + ${this.rules.attack.damage.bonus}` : ''}`; + this.attack.damage.parts.hitPoints.value.custom.formula = `@prof${this.basicAttackDamageDice}${this.rules.attack.damage.bonus ? ` + ${this.rules.attack.damage.bonus}` : ''}`; } getRollData() { diff --git a/module/data/actor/companion.mjs b/module/data/actor/companion.mjs index 6f51b593..32ae661d 100644 --- a/module/data/actor/companion.mjs +++ b/module/data/actor/companion.mjs @@ -85,15 +85,15 @@ export default class DhCompanion extends DhCreature { bonus: 0 }, damage: { - parts: [ - { + parts: { + hitPoints: { type: ['physical'], value: { dice: 'd6', multiplier: 'prof' } } - ] + } } } }), @@ -138,7 +138,9 @@ export default class DhCompanion extends DhCreature { break; case 'vicious': if (selection.data[0] === 'damage') { - this.attack.damage.parts[0].value.dice = adjustDice(this.attack.damage.parts[0].value.dice); + this.attack.damage.parts.hitPoints.value.dice = adjustDice( + this.attack.damage.parts.hitPoints.value.dice + ); } else { this.attack.range = adjustRange(this.attack.range).id; } diff --git a/module/data/fields/_module.mjs b/module/data/fields/_module.mjs index 58423979..930814e2 100644 --- a/module/data/fields/_module.mjs +++ b/module/data/fields/_module.mjs @@ -1,4 +1,5 @@ export { ActionCollection } from './actionField.mjs'; +export { default as IterableTypedObjectField } from './iterableTypedObjectField.mjs'; export { default as FormulaField } from './formulaField.mjs'; export { default as ForeignDocumentUUIDField } from './foreignDocumentUUIDField.mjs'; export { default as ForeignDocumentUUIDArrayField } from './foreignDocumentUUIDArrayField.mjs'; diff --git a/module/data/fields/action/damageField.mjs b/module/data/fields/action/damageField.mjs index 6439344b..e79a91a2 100644 --- a/module/data/fields/action/damageField.mjs +++ b/module/data/fields/action/damageField.mjs @@ -1,5 +1,6 @@ import FormulaField from '../formulaField.mjs'; import { setsEqual } from '../../../helpers/utils.mjs'; +import IterableTypedObjectField from '../iterableTypedObjectField.mjs'; const fields = foundry.data.fields; @@ -12,7 +13,7 @@ export default class DamageField extends fields.SchemaField { /** @inheritDoc */ constructor(options, context = {}) { const damageFields = { - parts: new fields.ArrayField(new fields.EmbeddedDataField(DHDamageData)), + parts: new IterableTypedObjectField(DHDamageData), includeBase: new fields.BooleanField({ initial: false, label: 'DAGGERHEART.ACTIONS.Settings.includeBase.label' diff --git a/module/data/fields/iterableTypedObjectField.mjs b/module/data/fields/iterableTypedObjectField.mjs new file mode 100644 index 00000000..d50d7dbf --- /dev/null +++ b/module/data/fields/iterableTypedObjectField.mjs @@ -0,0 +1,32 @@ +export default class IterableTypedObjectField extends foundry.data.fields.TypedObjectField { + constructor(model, options = { collectionClass: foundry.utils.Collection }, context = {}) { + super(new foundry.data.fields.EmbeddedDataField(model), options, context); + this.#elementClass = model; + } + + #elementClass; + + /** Initializes an object with an iterator. This modifies the prototype instead of */ + initialize(values) { + const object = Object.create(IterableObjectPrototype); + for (const [key, value] of Object.entries(values)) { + object[key] = new this.#elementClass(value); + } + return object; + } +} + +/** + * The prototype of an iterable object. + * This allows the functionality of a class but also allows foundry.utils.getType() to return "Object" instead of "Unknown". + */ +const IterableObjectPrototype = { + [Symbol.iterator]: function*() { + for (const value of Object.values(this)) { + yield value; + } + }, + map: function (func) { + return Array.from(this, func); + } +}; \ No newline at end of file diff --git a/module/data/item/weapon.mjs b/module/data/item/weapon.mjs index bb2e10d5..18660ab5 100644 --- a/module/data/item/weapon.mjs +++ b/module/data/item/weapon.mjs @@ -63,15 +63,15 @@ export default class DHWeapon extends AttachableItem { type: 'attack' }, damage: { - parts: [ - { + parts: { + hitPoints: { type: ['physical'], value: { multiplier: 'prof', dice: 'd8' } } - ] + } } } }), diff --git a/module/helpers/handlebarsHelper.mjs b/module/helpers/handlebarsHelper.mjs index 2faea830..1c47f8dc 100644 --- a/module/helpers/handlebarsHelper.mjs +++ b/module/helpers/handlebarsHelper.mjs @@ -49,9 +49,7 @@ export default class RegisterHandlebarsHelpers { } static damageSymbols(damageParts) { - const symbols = [...new Set(damageParts.reduce((a, c) => a.concat([...c.type]), []))].map( - p => CONFIG.DH.GENERAL.damageTypes[p].icon - ); + const symbols = [...new Set(damageParts.map(x => x.type))].map(p => CONFIG.DH.GENERAL.damageTypes[p].icon); return new Handlebars.SafeString(Array.from(symbols).map(symbol => ``)); } diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 7e4d794b..5f9af9c9 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -722,3 +722,16 @@ export async function RefreshFeatures( return refreshedActors; } + +export function getUnusedDamageTypes(parts) { + const usedKeys = Object.keys(parts); + return Object.keys(CONFIG.DH.GENERAL.healingTypes).reduce((acc, key) => { + if (!usedKeys.includes(key)) + acc.push({ + value: key, + label: game.i18n.localize(CONFIG.DH.GENERAL.healingTypes[key].label) + }); + + return acc; + }, []); +} diff --git a/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json b/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json index 70d0072b..0dd182fa 100644 --- a/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json +++ b/src/packs/adversaries/adversary_Acid_Burrower_89yAh30vaNQOALlz.json @@ -91,8 +91,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -118,7 +118,7 @@ }, "base": false } - ], + }, "includeBase": false }, "_id": "TCKVaVweyJzhEArX", @@ -343,7 +343,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -471,8 +471,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -499,7 +499,7 @@ } } }, - { + "armor": { "value": { "custom": { "enabled": true, @@ -524,7 +524,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -598,8 +598,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -626,7 +626,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -652,8 +652,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -680,7 +680,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Adult_Flickerfly_G7jiltRjgvVhZewm.json b/src/packs/adversaries/adversary_Adult_Flickerfly_G7jiltRjgvVhZewm.json index 16fb61d8..c4b4eb2a 100644 --- a/src/packs/adversaries/adversary_Adult_Flickerfly_G7jiltRjgvVhZewm.json +++ b/src/packs/adversaries/adversary_Adult_Flickerfly_G7jiltRjgvVhZewm.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -400,8 +400,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -427,7 +427,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, @@ -508,7 +508,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -581,8 +581,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -608,7 +608,7 @@ } } }, - { + "hope": { "value": { "custom": { "enabled": true, @@ -633,7 +633,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Apprentice_Assassin_vNIbYQ4YSzNf0WPE.json b/src/packs/adversaries/adversary_Apprentice_Assassin_vNIbYQ4YSzNf0WPE.json index 23f1f339..4c63297d 100644 --- a/src/packs/adversaries/adversary_Apprentice_Assassin_vNIbYQ4YSzNf0WPE.json +++ b/src/packs/adversaries/adversary_Apprentice_Assassin_vNIbYQ4YSzNf0WPE.json @@ -72,8 +72,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -100,7 +100,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/daggers/dagger-bone-black.webp", "type": "attack", diff --git a/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json b/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json index 3b1f3535..dfae0598 100644 --- a/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json +++ b/src/packs/adversaries/adversary_Arch_Necromancer_WPEOIGfclNJxWb87.json @@ -85,8 +85,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "img": "icons/magic/unholy/beam-ringed-impact-purple.webp", "type": "attack", @@ -256,7 +256,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -336,8 +336,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -363,7 +363,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -414,8 +414,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -440,7 +440,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -619,7 +619,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -692,8 +692,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -719,7 +719,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Archer_Guard_JRhrrEg5UroURiAD.json b/src/packs/adversaries/adversary_Archer_Guard_JRhrrEg5UroURiAD.json index 5a13b3d9..965c5168 100644 --- a/src/packs/adversaries/adversary_Archer_Guard_JRhrrEg5UroURiAD.json +++ b/src/packs/adversaries/adversary_Archer_Guard_JRhrrEg5UroURiAD.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/bows/longbow-recurve-leather-brown.webp", "type": "attack", @@ -246,8 +246,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -273,7 +273,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Archer_Squadron_0ts6CGd93lLqGZI5.json b/src/packs/adversaries/adversary_Archer_Squadron_0ts6CGd93lLqGZI5.json index 5b15bc09..67e10c53 100644 --- a/src/packs/adversaries/adversary_Archer_Squadron_0ts6CGd93lLqGZI5.json +++ b/src/packs/adversaries/adversary_Archer_Squadron_0ts6CGd93lLqGZI5.json @@ -68,8 +68,8 @@ "description": "

      A group of trained archers bearing massive bows.

      ", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -95,7 +95,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Longbow", "img": "icons/weapons/bows/longbow-recurve-leather-brown.webp", @@ -270,8 +270,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -295,7 +295,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -368,8 +368,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -393,7 +393,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json b/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json index 324fc25e..4b3a872a 100644 --- a/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json +++ b/src/packs/adversaries/adversary_Assassin_Poisoner_h5RuhzGL17dW5FBT.json @@ -81,8 +81,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false diff --git a/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json b/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json index 02553014..74ed8dfd 100644 --- a/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json +++ b/src/packs/adversaries/adversary_Battle_Box_dgH3fW9FTYLaIDvS.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "range": "melee", "type": "attack", @@ -309,7 +309,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -382,8 +382,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -409,7 +409,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -482,8 +482,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -509,7 +509,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -582,8 +582,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -609,7 +609,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -737,8 +737,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -763,7 +763,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -836,7 +836,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -964,8 +964,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -991,7 +991,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -1071,8 +1071,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -1097,7 +1097,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -1165,8 +1165,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -1192,7 +1192,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json b/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json index 959ef9dd..cfc71120 100644 --- a/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json +++ b/src/packs/adversaries/adversary_Bear_71qKDLKO3CsrNkdy.json @@ -84,8 +84,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -111,7 +111,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/claws/claw-straight-brown.webp", "type": "attack", @@ -284,8 +284,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -311,7 +311,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -441,8 +441,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -468,7 +468,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json b/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json index 0a332575..a315f91a 100644 --- a/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json +++ b/src/packs/adversaries/adversary_Bladed_Guard_B4LZcGuBAHzyVdzy.json @@ -80,8 +80,8 @@ "name": "Longsword", "img": "icons/weapons/swords/sword-guard.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -246,7 +246,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -319,7 +319,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json b/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json index a169bf61..8863641d 100644 --- a/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json +++ b/src/packs/adversaries/adversary_Brawny_Zombie_2UeZ0tEe7AzgSJNd.json @@ -83,8 +83,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -110,7 +110,7 @@ }, "base": false } - ] + } }, "img": "icons/skills/melee/unarmed-punch-fist-yellow-red.webp", "type": "attack", @@ -280,8 +280,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -307,7 +307,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, @@ -389,8 +389,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -415,7 +415,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Cave_Ogre_8Zkqk1jU09nKL2fy.json b/src/packs/adversaries/adversary_Cave_Ogre_8Zkqk1jU09nKL2fy.json index 5b2d2e41..cb081441 100644 --- a/src/packs/adversaries/adversary_Cave_Ogre_8Zkqk1jU09nKL2fy.json +++ b/src/packs/adversaries/adversary_Cave_Ogre_8Zkqk1jU09nKL2fy.json @@ -79,8 +79,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ], + }, "direct": true }, "name": "Club", @@ -336,8 +336,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -365,7 +365,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, @@ -412,8 +412,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -438,7 +438,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -507,8 +507,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -534,7 +534,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/adversaries/adversary_Chaos_Skull_jDmHqGvzg5wjgmxE.json b/src/packs/adversaries/adversary_Chaos_Skull_jDmHqGvzg5wjgmxE.json index f548870a..a95db1b7 100644 --- a/src/packs/adversaries/adversary_Chaos_Skull_jDmHqGvzg5wjgmxE.json +++ b/src/packs/adversaries/adversary_Chaos_Skull_jDmHqGvzg5wjgmxE.json @@ -74,8 +74,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "img": "icons/magic/light/beam-rays-magenta.webp", "type": "attack", @@ -383,8 +383,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -410,7 +410,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -483,8 +483,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -508,7 +508,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Conscript_99TqczuQipBmaB8i.json b/src/packs/adversaries/adversary_Conscript_99TqczuQipBmaB8i.json index 35c43a3b..5cbc1f82 100644 --- a/src/packs/adversaries/adversary_Conscript_99TqczuQipBmaB8i.json +++ b/src/packs/adversaries/adversary_Conscript_99TqczuQipBmaB8i.json @@ -67,8 +67,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -95,7 +95,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false diff --git a/src/packs/adversaries/adversary_Construct_uOP5oT9QzXPlnf3p.json b/src/packs/adversaries/adversary_Construct_uOP5oT9QzXPlnf3p.json index 310eefce..067248c9 100644 --- a/src/packs/adversaries/adversary_Construct_uOP5oT9QzXPlnf3p.json +++ b/src/packs/adversaries/adversary_Construct_uOP5oT9QzXPlnf3p.json @@ -72,8 +72,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -99,7 +99,7 @@ }, "base": false } - ] + } }, "name": "Fist Slam", "img": "icons/skills/melee/unarmed-punch-fist-yellow-red.webp", @@ -332,8 +332,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -359,7 +359,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -534,8 +534,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -561,7 +561,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json b/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json index 24572103..aba9ea46 100644 --- a/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json +++ b/src/packs/adversaries/adversary_Courtesan_ZxWaWPdzFIUPNC62.json @@ -84,8 +84,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -111,7 +111,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/daggers/dagger-straight-cracked.webp", "type": "attack", @@ -256,8 +256,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -282,7 +282,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json b/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json index 1ffc7ece..8777ee06 100644 --- a/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json +++ b/src/packs/adversaries/adversary_Courtier_CBBuEXAlLKFMJdjg.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/daggers/dagger-twin-green.webp", "type": "attack", @@ -253,8 +253,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -279,7 +279,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json b/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json index e428d05d..cbb48681 100644 --- a/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json +++ b/src/packs/adversaries/adversary_Cult_Adept_0NxCSugvKQ4W8OYZ.json @@ -84,8 +84,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -111,7 +111,7 @@ }, "base": false } - ] + } }, "range": "far", "img": "icons/weapons/staves/staff-ornate-purple.webp", @@ -256,8 +256,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -283,7 +283,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -308,7 +308,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -614,8 +614,8 @@ "recovery": "scene" }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -640,7 +640,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json b/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json index d3b341f0..e65f3202 100644 --- a/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json +++ b/src/packs/adversaries/adversary_Cult_Fang_tyBOpLfigAhI9bU3.json @@ -74,8 +74,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "range": "melee", "type": "attack", @@ -300,8 +300,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -326,7 +326,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Cult_Initiate_zx99sOGTXicP4SSD.json b/src/packs/adversaries/adversary_Cult_Initiate_zx99sOGTXicP4SSD.json index a0c0713d..4f04a85a 100644 --- a/src/packs/adversaries/adversary_Cult_Initiate_zx99sOGTXicP4SSD.json +++ b/src/packs/adversaries/adversary_Cult_Initiate_zx99sOGTXicP4SSD.json @@ -66,8 +66,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -94,7 +94,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json b/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json index f66ce7f0..aed2e08a 100644 --- a/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json +++ b/src/packs/adversaries/adversary_Deeproot_Defender_9x2xY9zwc3xzbXo5.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/magic/nature/root-vines-grow-brown.webp", "type": "attack", @@ -245,8 +245,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -271,7 +271,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -325,8 +325,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -350,7 +350,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Demon_of_Avarice_pnyjIGxxvurcWmTv.json b/src/packs/adversaries/adversary_Demon_of_Avarice_pnyjIGxxvurcWmTv.json index e4ba41fb..1a3538da 100644 --- a/src/packs/adversaries/adversary_Demon_of_Avarice_pnyjIGxxvurcWmTv.json +++ b/src/packs/adversaries/adversary_Demon_of_Avarice_pnyjIGxxvurcWmTv.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json b/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json index 27c6bac2..e2f58709 100644 --- a/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json +++ b/src/packs/adversaries/adversary_Demon_of_Despair_kE4dfhqmIQpNd44e.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "far", @@ -435,8 +435,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -461,7 +461,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -515,8 +515,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -542,7 +542,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Demon_of_Hubris_2VN3BftageoTTIzu.json b/src/packs/adversaries/adversary_Demon_of_Hubris_2VN3BftageoTTIzu.json index 16bc1d1f..9f954437 100644 --- a/src/packs/adversaries/adversary_Demon_of_Hubris_2VN3BftageoTTIzu.json +++ b/src/packs/adversaries/adversary_Demon_of_Hubris_2VN3BftageoTTIzu.json @@ -81,8 +81,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -251,8 +251,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -277,7 +277,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -329,8 +329,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -355,7 +355,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -414,8 +414,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -441,7 +441,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -550,8 +550,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -576,7 +576,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Demon_of_Jealousy_SxSOkM4bcVOFyjbo.json b/src/packs/adversaries/adversary_Demon_of_Jealousy_SxSOkM4bcVOFyjbo.json index 31f9b942..c083b183 100644 --- a/src/packs/adversaries/adversary_Demon_of_Jealousy_SxSOkM4bcVOFyjbo.json +++ b/src/packs/adversaries/adversary_Demon_of_Jealousy_SxSOkM4bcVOFyjbo.json @@ -80,8 +80,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ], + }, "direct": true }, "img": "icons/magic/symbols/rune-sigil-rough-white-teal.webp", @@ -352,7 +352,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json b/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json index 33ded6b9..201b17fd 100644 --- a/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json +++ b/src/packs/adversaries/adversary_Demon_of_Wrath_5lphJAgzoqZI3VoG.json @@ -81,8 +81,8 @@ }, "img": "icons/skills/melee/unarmed-punch-fist-yellow-red.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ], + }, "direct": true }, "type": "attack", @@ -398,8 +398,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -425,7 +425,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/adversaries/adversary_Demonic_Hound_Pack_NoRZ1PqB8N5wcIw0.json b/src/packs/adversaries/adversary_Demonic_Hound_Pack_NoRZ1PqB8N5wcIw0.json index 7482c734..2043d960 100644 --- a/src/packs/adversaries/adversary_Demonic_Hound_Pack_NoRZ1PqB8N5wcIw0.json +++ b/src/packs/adversaries/adversary_Demonic_Hound_Pack_NoRZ1PqB8N5wcIw0.json @@ -74,8 +74,8 @@ "motivesAndTactics": "Cause fear, consume fl esh, please masters", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Claws and Fangs", "img": "icons/creatures/abilities/mouth-teeth-rows-red.webp", @@ -269,8 +269,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -295,7 +295,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -349,8 +349,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -376,7 +376,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Dire_Bat_tBWHW00epmMnkawe.json b/src/packs/adversaries/adversary_Dire_Bat_tBWHW00epmMnkawe.json index 16ec7643..23d5550e 100644 --- a/src/packs/adversaries/adversary_Dire_Bat_tBWHW00epmMnkawe.json +++ b/src/packs/adversaries/adversary_Dire_Bat_tBWHW00epmMnkawe.json @@ -78,8 +78,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -105,7 +105,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/claws/claw-hooked-curved.webp", "type": "attack", @@ -312,8 +312,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -337,7 +337,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -397,8 +397,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -424,7 +424,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json b/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json index 69301cb2..939a5307 100644 --- a/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json +++ b/src/packs/adversaries/adversary_Dire_Wolf_wNzeuQLfLUMvgHlQ.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/claws/claw-straight-brown.webp", "type": "attack", @@ -247,8 +247,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -272,7 +272,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -352,8 +352,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -377,7 +377,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/adversaries/adversary_Dryad_wR7cFKrHvRzbzhBT.json b/src/packs/adversaries/adversary_Dryad_wR7cFKrHvRzbzhBT.json index ca9ce647..c69ee84e 100644 --- a/src/packs/adversaries/adversary_Dryad_wR7cFKrHvRzbzhBT.json +++ b/src/packs/adversaries/adversary_Dryad_wR7cFKrHvRzbzhBT.json @@ -81,8 +81,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -251,7 +251,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -297,8 +297,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -324,7 +324,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -438,8 +438,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -464,7 +464,7 @@ }, "type": [] }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -489,7 +489,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Electric_Eels_TLzY1nDw0Bu9Ud40.json b/src/packs/adversaries/adversary_Electric_Eels_TLzY1nDw0Bu9Ud40.json index 9386944f..1909a74a 100644 --- a/src/packs/adversaries/adversary_Electric_Eels_TLzY1nDw0Bu9Ud40.json +++ b/src/packs/adversaries/adversary_Electric_Eels_TLzY1nDw0Bu9Ud40.json @@ -68,8 +68,8 @@ "motivesAndTactics": "Avoid larger predators, shock prey, tear apart", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -95,7 +95,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Shocking Bite", "img": "icons/creatures/abilities/mouth-teeth-sharp.webp", @@ -270,8 +270,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -297,7 +297,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Elemental_Spark_P7h54ZePFPHpYwvB.json b/src/packs/adversaries/adversary_Elemental_Spark_P7h54ZePFPHpYwvB.json index 5c25f63e..2c2633ea 100644 --- a/src/packs/adversaries/adversary_Elemental_Spark_P7h54ZePFPHpYwvB.json +++ b/src/packs/adversaries/adversary_Elemental_Spark_P7h54ZePFPHpYwvB.json @@ -67,8 +67,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -95,7 +95,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false diff --git a/src/packs/adversaries/adversary_Elite_Soldier_bfhVWMBUh61b9J6n.json b/src/packs/adversaries/adversary_Elite_Soldier_bfhVWMBUh61b9J6n.json index de5db0b2..df3e6d12 100644 --- a/src/packs/adversaries/adversary_Elite_Soldier_bfhVWMBUh61b9J6n.json +++ b/src/packs/adversaries/adversary_Elite_Soldier_bfhVWMBUh61b9J6n.json @@ -98,8 +98,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -125,7 +125,7 @@ }, "base": false } - ], + }, "includeBase": false }, "target": { @@ -276,8 +276,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -303,7 +303,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Failed_Experiment_ChwwVqowFw8hJQwT.json b/src/packs/adversaries/adversary_Failed_Experiment_ChwwVqowFw8hJQwT.json index 408d5102..70e56980 100644 --- a/src/packs/adversaries/adversary_Failed_Experiment_ChwwVqowFw8hJQwT.json +++ b/src/packs/adversaries/adversary_Failed_Experiment_ChwwVqowFw8hJQwT.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/claws/claw-hooked-barbed.webp", "range": "melee", diff --git a/src/packs/adversaries/adversary_Fallen_Shock_Troop_OsLG2BjaEdTZUJU9.json b/src/packs/adversaries/adversary_Fallen_Shock_Troop_OsLG2BjaEdTZUJU9.json index 931e4c0a..8c0d7b95 100644 --- a/src/packs/adversaries/adversary_Fallen_Shock_Troop_OsLG2BjaEdTZUJU9.json +++ b/src/packs/adversaries/adversary_Fallen_Shock_Troop_OsLG2BjaEdTZUJU9.json @@ -67,8 +67,8 @@ "img": "icons/weapons/axes/axe-battle-skull-black.webp", "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -95,7 +95,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -256,8 +256,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -282,7 +282,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json b/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json index bfad5cf6..06db1453 100644 --- a/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json +++ b/src/packs/adversaries/adversary_Fallen_Sorcerer_PELRry1vqjBzSAlr.json @@ -80,8 +80,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/staves/staff-animal-skull-bull.webp", "type": "attack", @@ -251,8 +251,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -278,7 +278,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -482,8 +482,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -508,7 +508,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Fallen_Warlord__Realm_Breaker_hxZ0sgoFJubh5aj6.json b/src/packs/adversaries/adversary_Fallen_Warlord__Realm_Breaker_hxZ0sgoFJubh5aj6.json index b2cdc489..8864e76d 100644 --- a/src/packs/adversaries/adversary_Fallen_Warlord__Realm_Breaker_hxZ0sgoFJubh5aj6.json +++ b/src/packs/adversaries/adversary_Fallen_Warlord__Realm_Breaker_hxZ0sgoFJubh5aj6.json @@ -67,8 +67,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -94,7 +94,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -337,7 +337,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -416,8 +416,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -443,7 +443,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -516,8 +516,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -543,7 +543,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -653,8 +653,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -679,7 +679,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Fallen_Warlord__Undefeated_Champion_RXkZTwBRi4dJ3JE5.json b/src/packs/adversaries/adversary_Fallen_Warlord__Undefeated_Champion_RXkZTwBRi4dJ3JE5.json index 89d61c1c..5ad77ab0 100644 --- a/src/packs/adversaries/adversary_Fallen_Warlord__Undefeated_Champion_RXkZTwBRi4dJ3JE5.json +++ b/src/packs/adversaries/adversary_Fallen_Warlord__Undefeated_Champion_RXkZTwBRi4dJ3JE5.json @@ -67,8 +67,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -94,7 +94,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -338,7 +338,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -410,8 +410,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -437,7 +437,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -697,8 +697,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -724,7 +724,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -792,8 +792,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -818,7 +818,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json b/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json index e576e1e0..c6a482dd 100644 --- a/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json +++ b/src/packs/adversaries/adversary_Giant_Beastmaster_8VZIgU12cB3cvlyH.json @@ -81,8 +81,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -269,8 +269,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -294,7 +294,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Giant_Brawler_YnObCleGjPT7yqEc.json b/src/packs/adversaries/adversary_Giant_Brawler_YnObCleGjPT7yqEc.json index 4f76b706..8948c8b6 100644 --- a/src/packs/adversaries/adversary_Giant_Brawler_YnObCleGjPT7yqEc.json +++ b/src/packs/adversaries/adversary_Giant_Brawler_YnObCleGjPT7yqEc.json @@ -81,8 +81,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -251,8 +251,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -278,7 +278,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -351,8 +351,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -378,7 +378,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -452,8 +452,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -479,7 +479,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json b/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json index ea578762..a8a33586 100644 --- a/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json +++ b/src/packs/adversaries/adversary_Giant_Eagle_OMQ0v6PE8s1mSU0K.json @@ -98,8 +98,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -125,7 +125,7 @@ }, "base": false } - ], + }, "includeBase": false }, "target": { @@ -345,8 +345,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -372,7 +372,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -499,8 +499,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -526,7 +526,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -643,8 +643,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -670,7 +670,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Giant_Mosquitoes_IIWV4ysJPFPnTP7W.json b/src/packs/adversaries/adversary_Giant_Mosquitoes_IIWV4ysJPFPnTP7W.json index fbb30d40..a74cb88d 100644 --- a/src/packs/adversaries/adversary_Giant_Mosquitoes_IIWV4ysJPFPnTP7W.json +++ b/src/packs/adversaries/adversary_Giant_Mosquitoes_IIWV4ysJPFPnTP7W.json @@ -74,8 +74,8 @@ "motivesAndTactics": "Fly away, harass, steal blood", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Proboscis", "img": "icons/skills/wounds/blood-cells-vessel-red.webp", diff --git a/src/packs/adversaries/adversary_Giant_Rat_4PfLnaCrOcMdb4dK.json b/src/packs/adversaries/adversary_Giant_Rat_4PfLnaCrOcMdb4dK.json index d1df6b57..822ee035 100644 --- a/src/packs/adversaries/adversary_Giant_Rat_4PfLnaCrOcMdb4dK.json +++ b/src/packs/adversaries/adversary_Giant_Rat_4PfLnaCrOcMdb4dK.json @@ -72,8 +72,8 @@ "name": "Claws", "img": "icons/creatures/claws/claw-straight-brown.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -100,7 +100,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -272,7 +272,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Giant_Recruit_5s8wSvpyC5rxY5aD.json b/src/packs/adversaries/adversary_Giant_Recruit_5s8wSvpyC5rxY5aD.json index adcdf015..376ebace 100644 --- a/src/packs/adversaries/adversary_Giant_Recruit_5s8wSvpyC5rxY5aD.json +++ b/src/packs/adversaries/adversary_Giant_Recruit_5s8wSvpyC5rxY5aD.json @@ -62,8 +62,8 @@ "name": "Warhammer", "img": "icons/weapons/hammers/hammer-double-stone-worn.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -90,7 +90,7 @@ }, "base": false } - ] + } }, "range": "veryClose", "roll": { diff --git a/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json b/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json index fda3e656..03a0272d 100644 --- a/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json +++ b/src/packs/adversaries/adversary_Giant_Scorpion_fmfntuJ8mHRCAktP.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -253,8 +253,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -280,7 +280,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -354,8 +354,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -381,7 +381,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -508,8 +508,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -535,7 +535,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Glass_Snake_8KWVLWXFhlY2kYx0.json b/src/packs/adversaries/adversary_Glass_Snake_8KWVLWXFhlY2kYx0.json index f02a1c52..5876f55c 100644 --- a/src/packs/adversaries/adversary_Glass_Snake_8KWVLWXFhlY2kYx0.json +++ b/src/packs/adversaries/adversary_Glass_Snake_8KWVLWXFhlY2kYx0.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -240,8 +240,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -266,7 +266,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -326,8 +326,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -351,7 +351,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -459,8 +459,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -486,7 +486,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -532,7 +532,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json b/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json index 2753d958..1fcfcce4 100644 --- a/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json +++ b/src/packs/adversaries/adversary_Gorgon_8mJYMpbLTb8qIOrr.json @@ -80,8 +80,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/bows/shortbow-recurve-yellow.webp", "type": "attack", @@ -409,8 +409,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -436,7 +436,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -461,7 +461,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -541,7 +541,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -652,8 +652,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -679,7 +679,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json b/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json index fe968ff3..077373b2 100644 --- a/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json +++ b/src/packs/adversaries/adversary_Greater_Earth_Elemental_dsfB3YhoL5SudvS2.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -268,8 +268,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -294,7 +294,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -422,8 +422,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -449,7 +449,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -578,8 +578,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -605,7 +605,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json b/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json index 5d17f025..b44bb9cc 100644 --- a/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json +++ b/src/packs/adversaries/adversary_Greater_Water_Elemental_xIICT6tEdnA7dKDV.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -245,8 +245,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -272,7 +272,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -401,7 +401,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json b/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json index 5f3f52c2..a3a76d7a 100644 --- a/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json +++ b/src/packs/adversaries/adversary_Green_Ooze_SHXedd9zZPVfUgUa.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/slimes/slime-movement-dripping-pseudopods-green.webp", "type": "attack", @@ -277,8 +277,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -303,7 +303,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -356,8 +356,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -383,7 +383,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -408,7 +408,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Hallowed_Archer_kabueAo6BALApWqp.json b/src/packs/adversaries/adversary_Hallowed_Archer_kabueAo6BALApWqp.json index 8cce1b94..eb7eafc1 100644 --- a/src/packs/adversaries/adversary_Hallowed_Archer_kabueAo6BALApWqp.json +++ b/src/packs/adversaries/adversary_Hallowed_Archer_kabueAo6BALApWqp.json @@ -75,8 +75,8 @@ "name": "Sanctified Longbow", "img": "icons/weapons/bows/shortbow-recurve-yellow.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -314,8 +314,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -341,7 +341,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Hallowed_Soldier_VENwg7xEFcYObjmT.json b/src/packs/adversaries/adversary_Hallowed_Soldier_VENwg7xEFcYObjmT.json index 95a2ecd0..6a131c86 100644 --- a/src/packs/adversaries/adversary_Hallowed_Soldier_VENwg7xEFcYObjmT.json +++ b/src/packs/adversaries/adversary_Hallowed_Soldier_VENwg7xEFcYObjmT.json @@ -65,8 +65,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -93,7 +93,7 @@ }, "base": false } - ] + } }, "img": "icons/skills/melee/sword-shield-stylized-white.webp", "type": "attack", diff --git a/src/packs/adversaries/adversary_Harrier_uRtghKE9mHlII4rs.json b/src/packs/adversaries/adversary_Harrier_uRtghKE9mHlII4rs.json index 89d82a0b..84034a7e 100644 --- a/src/packs/adversaries/adversary_Harrier_uRtghKE9mHlII4rs.json +++ b/src/packs/adversaries/adversary_Harrier_uRtghKE9mHlII4rs.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/polearms/spear-hooked-rounded.webp", "type": "attack", @@ -278,8 +278,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -305,7 +305,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Head_Guard_mK3A5FTx6k8iPU3F.json b/src/packs/adversaries/adversary_Head_Guard_mK3A5FTx6k8iPU3F.json index 75afed49..f0c050a9 100644 --- a/src/packs/adversaries/adversary_Head_Guard_mK3A5FTx6k8iPU3F.json +++ b/src/packs/adversaries/adversary_Head_Guard_mK3A5FTx6k8iPU3F.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -258,7 +258,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -398,8 +398,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -425,7 +425,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Head_Vampire_i2UNbRvgyoSs07M6.json b/src/packs/adversaries/adversary_Head_Vampire_i2UNbRvgyoSs07M6.json index d5891359..322e4658 100644 --- a/src/packs/adversaries/adversary_Head_Vampire_i2UNbRvgyoSs07M6.json +++ b/src/packs/adversaries/adversary_Head_Vampire_i2UNbRvgyoSs07M6.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -270,7 +270,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -322,7 +322,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -394,8 +394,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -420,7 +420,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -542,8 +542,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -568,7 +568,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json b/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json index 60fe1917..3dc96fd5 100644 --- a/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json +++ b/src/packs/adversaries/adversary_High_Seraph_r1mbfSSwKWdcFdAU.json @@ -80,8 +80,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "img": "icons/skills/melee/strike-blade-hooked-orange-blue.webp", "type": "attack", @@ -466,8 +466,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -493,7 +493,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json b/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json index db00c5e6..1615dec8 100644 --- a/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json +++ b/src/packs/adversaries/adversary_Huge_Green_Ooze_6hbqmxDXFOzZJDk4.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -274,8 +274,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -300,7 +300,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -352,8 +352,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -378,7 +378,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json b/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json index a12aaad8..7e71af98 100644 --- a/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json +++ b/src/packs/adversaries/adversary_Hydra_MI126iMOOobQ1Obn.json @@ -75,8 +75,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -300,8 +300,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -326,7 +326,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -394,8 +394,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -420,7 +420,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Bandit_5Lh1T0zaT8Pkr2U2.json b/src/packs/adversaries/adversary_Jagged_Knife_Bandit_5Lh1T0zaT8Pkr2U2.json index ae359eaf..bfbff494 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Bandit_5Lh1T0zaT8Pkr2U2.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Bandit_5Lh1T0zaT8Pkr2U2.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/daggers/dagger-twin-green.webp", "type": "attack", @@ -272,8 +272,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -299,7 +299,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json b/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json index e56f7af5..c6b2554e 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Hexer_MbBPIOxaxXYNApXz.json @@ -80,8 +80,8 @@ }, "img": "icons/weapons/staves/staff-blue-jewel.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -347,8 +347,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -374,7 +374,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json b/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json index d8115fd9..3ce6a165 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Kneebreaker_CBKixLH3yhivZZuL.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -277,7 +277,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Lackey_C0OMQqV7pN6t7ouR.json b/src/packs/adversaries/adversary_Jagged_Knife_Lackey_C0OMQqV7pN6t7ouR.json index a52ec1c9..cfcdea8b 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Lackey_C0OMQqV7pN6t7ouR.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Lackey_C0OMQqV7pN6t7ouR.json @@ -64,8 +64,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -92,7 +92,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Lieutenant_aTljstqteGoLpCBq.json b/src/packs/adversaries/adversary_Jagged_Knife_Lieutenant_aTljstqteGoLpCBq.json index c139d76f..8820f30c 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Lieutenant_aTljstqteGoLpCBq.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Lieutenant_aTljstqteGoLpCBq.json @@ -80,8 +80,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -364,8 +364,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -391,7 +391,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -416,7 +416,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -491,8 +491,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -518,7 +518,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Shadow_XF4tYTq9nPJAy2ox.json b/src/packs/adversaries/adversary_Jagged_Knife_Shadow_XF4tYTq9nPJAy2ox.json index bca035c1..81b95d8b 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Shadow_XF4tYTq9nPJAy2ox.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Shadow_XF4tYTq9nPJAy2ox.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -246,8 +246,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -273,7 +273,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Jagged_Knife_Sniper_1zuyof1XuIfi3aMG.json b/src/packs/adversaries/adversary_Jagged_Knife_Sniper_1zuyof1XuIfi3aMG.json index 6fd02cb5..62253d69 100644 --- a/src/packs/adversaries/adversary_Jagged_Knife_Sniper_1zuyof1XuIfi3aMG.json +++ b/src/packs/adversaries/adversary_Jagged_Knife_Sniper_1zuyof1XuIfi3aMG.json @@ -81,8 +81,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -246,8 +246,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -273,7 +273,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Juvenile_Flickerfly_MYXmTx2FHcIjdfYZ.json b/src/packs/adversaries/adversary_Juvenile_Flickerfly_MYXmTx2FHcIjdfYZ.json index 86d69c37..562b42b8 100644 --- a/src/packs/adversaries/adversary_Juvenile_Flickerfly_MYXmTx2FHcIjdfYZ.json +++ b/src/packs/adversaries/adversary_Juvenile_Flickerfly_MYXmTx2FHcIjdfYZ.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -296,7 +296,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -417,7 +417,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -490,8 +490,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -516,7 +516,7 @@ }, "type": [] }, - { + "hope": { "value": { "custom": { "enabled": true, @@ -541,7 +541,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Knight_of_the_Realm_7ai2opemrclQe3VF.json b/src/packs/adversaries/adversary_Knight_of_the_Realm_7ai2opemrclQe3VF.json index 71cb7a8d..01435922 100644 --- a/src/packs/adversaries/adversary_Knight_of_the_Realm_7ai2opemrclQe3VF.json +++ b/src/packs/adversaries/adversary_Knight_of_the_Realm_7ai2opemrclQe3VF.json @@ -90,8 +90,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -117,7 +117,7 @@ }, "base": false } - ] + } }, "range": "melee", "type": "attack", @@ -392,8 +392,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -417,7 +417,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -442,7 +442,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json b/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json index 6f6f6edc..4494e0e8 100644 --- a/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json +++ b/src/packs/adversaries/adversary_Kraken_4nqv3ZwJGjnmic8j.json @@ -80,8 +80,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/tentacles/tentacles-octopus-black-pink.webp", "type": "attack", @@ -327,7 +327,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -456,8 +456,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -483,7 +483,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -557,8 +557,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -584,7 +584,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json b/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json index 3143fbe3..25740e52 100644 --- a/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json +++ b/src/packs/adversaries/adversary_Masked_Thief_niBpVU7yeo5ccskE.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "range": "melee", "type": "attack", @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -269,7 +269,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -342,7 +342,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Master_Assassin_dNta0cUzr96xcFhf.json b/src/packs/adversaries/adversary_Master_Assassin_dNta0cUzr96xcFhf.json index 3cec6e0b..2131023a 100644 --- a/src/packs/adversaries/adversary_Master_Assassin_dNta0cUzr96xcFhf.json +++ b/src/packs/adversaries/adversary_Master_Assassin_dNta0cUzr96xcFhf.json @@ -86,8 +86,8 @@ }, "range": "close", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -113,7 +113,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -254,8 +254,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -283,7 +283,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, @@ -469,8 +469,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -496,7 +496,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Merchant_Al3w2CgjfdT3p9ma.json b/src/packs/adversaries/adversary_Merchant_Al3w2CgjfdT3p9ma.json index 880b1a6e..482ba727 100644 --- a/src/packs/adversaries/adversary_Merchant_Al3w2CgjfdT3p9ma.json +++ b/src/packs/adversaries/adversary_Merchant_Al3w2CgjfdT3p9ma.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/clubs/club-baton-blue.webp", "type": "attack", @@ -272,8 +272,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -298,7 +298,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Merchant_Baron_Vy02IhGhkJLuezu4.json b/src/packs/adversaries/adversary_Merchant_Baron_Vy02IhGhkJLuezu4.json index 15c0aeb9..7ace67ac 100644 --- a/src/packs/adversaries/adversary_Merchant_Baron_Vy02IhGhkJLuezu4.json +++ b/src/packs/adversaries/adversary_Merchant_Baron_Vy02IhGhkJLuezu4.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -249,8 +249,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -275,7 +275,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json b/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json index 57dc2980..21564421 100644 --- a/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json +++ b/src/packs/adversaries/adversary_Minor_Chaos_Elemental_sRn4bqerfARvhgSV.json @@ -74,8 +74,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "range": "close", "type": "attack", @@ -317,8 +317,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -343,7 +343,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -458,8 +458,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -485,7 +485,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -567,8 +567,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -594,7 +594,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Minor_Demon_3tqCjDwJAQ7JKqMb.json b/src/packs/adversaries/adversary_Minor_Demon_3tqCjDwJAQ7JKqMb.json index 0fceeba1..8f5f51f3 100644 --- a/src/packs/adversaries/adversary_Minor_Demon_3tqCjDwJAQ7JKqMb.json +++ b/src/packs/adversaries/adversary_Minor_Demon_3tqCjDwJAQ7JKqMb.json @@ -74,8 +74,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -299,8 +299,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -325,7 +325,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -385,8 +385,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -412,7 +412,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -544,8 +544,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -571,7 +571,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Minor_Fire_Elemental_DscWkNVoHak6P4hh.json b/src/packs/adversaries/adversary_Minor_Fire_Elemental_DscWkNVoHak6P4hh.json index 2980a141..0cc9703c 100644 --- a/src/packs/adversaries/adversary_Minor_Fire_Elemental_DscWkNVoHak6P4hh.json +++ b/src/packs/adversaries/adversary_Minor_Fire_Elemental_DscWkNVoHak6P4hh.json @@ -75,8 +75,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -297,8 +297,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -324,7 +324,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -405,8 +405,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -432,7 +432,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -511,8 +511,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -537,7 +537,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -578,8 +578,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -604,7 +604,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -674,8 +674,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -701,7 +701,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Minor_Treant_G62k4oSkhkoXEs2D.json b/src/packs/adversaries/adversary_Minor_Treant_G62k4oSkhkoXEs2D.json index f05ba5fc..b2217e66 100644 --- a/src/packs/adversaries/adversary_Minor_Treant_G62k4oSkhkoXEs2D.json +++ b/src/packs/adversaries/adversary_Minor_Treant_G62k4oSkhkoXEs2D.json @@ -66,8 +66,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -94,7 +94,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Minotaur_Wrecker_rM9qCIYeWg9I0B4l.json b/src/packs/adversaries/adversary_Minotaur_Wrecker_rM9qCIYeWg9I0B4l.json index 85981374..b4734967 100644 --- a/src/packs/adversaries/adversary_Minotaur_Wrecker_rM9qCIYeWg9I0B4l.json +++ b/src/packs/adversaries/adversary_Minotaur_Wrecker_rM9qCIYeWg9I0B4l.json @@ -74,8 +74,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/axes/axe-double.webp", "type": "attack", @@ -300,8 +300,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -327,7 +327,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -373,8 +373,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -401,7 +401,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -454,8 +454,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -479,7 +479,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/adversaries/adversary_Monarch_yx0vK2yfNVZKWUUi.json b/src/packs/adversaries/adversary_Monarch_yx0vK2yfNVZKWUUi.json index 5320a0ed..8d5845a9 100644 --- a/src/packs/adversaries/adversary_Monarch_yx0vK2yfNVZKWUUi.json +++ b/src/packs/adversaries/adversary_Monarch_yx0vK2yfNVZKWUUi.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -381,8 +381,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": false, @@ -408,7 +408,7 @@ }, "type": [] } - ], + }, "includeBase": false, "direct": false }, diff --git a/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json b/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json index 01218718..2eaa9619 100644 --- a/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json +++ b/src/packs/adversaries/adversary_Mortal_Hunter_mVV7a7KQAORoPMgZ.json @@ -81,8 +81,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -270,7 +270,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -361,8 +361,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -390,7 +390,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, @@ -518,7 +518,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -591,8 +591,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -618,7 +618,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json b/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json index 1a109aa4..c5feed37 100644 --- a/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json +++ b/src/packs/adversaries/adversary_Oak_Treant_XK78QUfY8c8Go8Uv.json @@ -73,8 +73,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "multiplier": "flat", "flatMultiplier": 3, @@ -100,7 +100,7 @@ }, "base": false } - ] + } }, "img": "icons/skills/melee/blood-slash-foam-red.webp", "type": "attack", @@ -273,8 +273,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -302,7 +302,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Oracle_of_Doom_befIqd5IYKg6eUz2.json b/src/packs/adversaries/adversary_Oracle_of_Doom_befIqd5IYKg6eUz2.json index 66fa5ba1..343cfdc1 100644 --- a/src/packs/adversaries/adversary_Oracle_of_Doom_befIqd5IYKg6eUz2.json +++ b/src/packs/adversaries/adversary_Oracle_of_Doom_befIqd5IYKg6eUz2.json @@ -80,8 +80,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "img": "icons/magic/symbols/rune-sigil-rough-white-teal.webp", "type": "attack", @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -270,7 +270,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -322,8 +322,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -348,7 +348,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -407,8 +407,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -434,7 +434,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -514,7 +514,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -620,8 +620,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -647,7 +647,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json b/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json index 83edda8a..0f73354e 100644 --- a/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json +++ b/src/packs/adversaries/adversary_Outer_Realms_Abomination_A0SeeDzwjvqOsyof.json @@ -74,8 +74,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/tentacles/tentacle-earth-green.webp", "type": "attack", @@ -263,7 +263,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -384,7 +384,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -509,7 +509,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Outer_Realms_Corrupter_ms6nuOl3NFkhPj1k.json b/src/packs/adversaries/adversary_Outer_Realms_Corrupter_ms6nuOl3NFkhPj1k.json index 83fbf4fa..6c78dced 100644 --- a/src/packs/adversaries/adversary_Outer_Realms_Corrupter_ms6nuOl3NFkhPj1k.json +++ b/src/packs/adversaries/adversary_Outer_Realms_Corrupter_ms6nuOl3NFkhPj1k.json @@ -75,8 +75,8 @@ }, "img": "icons/creatures/tentacles/tentacles-thing-green.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -238,8 +238,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -264,7 +264,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -316,8 +316,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -342,7 +342,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Outer_Realms_Thrall_moJhHgKqTKPS2WYS.json b/src/packs/adversaries/adversary_Outer_Realms_Thrall_moJhHgKqTKPS2WYS.json index 5347bf49..5a7a605a 100644 --- a/src/packs/adversaries/adversary_Outer_Realms_Thrall_moJhHgKqTKPS2WYS.json +++ b/src/packs/adversaries/adversary_Outer_Realms_Thrall_moJhHgKqTKPS2WYS.json @@ -60,8 +60,8 @@ }, "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -88,7 +88,7 @@ }, "base": false } - ] + } }, "name": "Claws and Teeth", "roll": { diff --git a/src/packs/adversaries/adversary_Patchwork_Zombie_Hulk_EQTOAOUrkIvS2z88.json b/src/packs/adversaries/adversary_Patchwork_Zombie_Hulk_EQTOAOUrkIvS2z88.json index b63e8cb7..999f89b9 100644 --- a/src/packs/adversaries/adversary_Patchwork_Zombie_Hulk_EQTOAOUrkIvS2z88.json +++ b/src/packs/adversaries/adversary_Patchwork_Zombie_Hulk_EQTOAOUrkIvS2z88.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "img": "icons/commodities/biological/hand-clawed-blue.webp", "type": "attack", @@ -252,8 +252,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -281,7 +281,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -360,8 +360,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -386,7 +386,7 @@ }, "type": [] }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -411,7 +411,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -487,8 +487,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -513,7 +513,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json b/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json index 8174e9fd..a6ce78d5 100644 --- a/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json +++ b/src/packs/adversaries/adversary_Perfected_Zombie_CP6iRfHdyFWniTHY.json @@ -75,8 +75,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -238,8 +238,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -264,7 +264,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -348,8 +348,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -375,7 +375,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Petty_Noble_wycLpvebWdUqRhpP.json b/src/packs/adversaries/adversary_Petty_Noble_wycLpvebWdUqRhpP.json index db284f40..bee77686 100644 --- a/src/packs/adversaries/adversary_Petty_Noble_wycLpvebWdUqRhpP.json +++ b/src/packs/adversaries/adversary_Petty_Noble_wycLpvebWdUqRhpP.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Pirate_Captain_OROJbjsqagVh7ECV.json b/src/packs/adversaries/adversary_Pirate_Captain_OROJbjsqagVh7ECV.json index 5b00ec60..428a9607 100644 --- a/src/packs/adversaries/adversary_Pirate_Captain_OROJbjsqagVh7ECV.json +++ b/src/packs/adversaries/adversary_Pirate_Captain_OROJbjsqagVh7ECV.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -251,8 +251,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -277,7 +277,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -401,8 +401,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -426,7 +426,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -501,8 +501,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -528,7 +528,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Pirate_Raiders_5YgEajn0wa4i85kC.json b/src/packs/adversaries/adversary_Pirate_Raiders_5YgEajn0wa4i85kC.json index 41f79b49..94137c2f 100644 --- a/src/packs/adversaries/adversary_Pirate_Raiders_5YgEajn0wa4i85kC.json +++ b/src/packs/adversaries/adversary_Pirate_Raiders_5YgEajn0wa4i85kC.json @@ -74,8 +74,8 @@ "description": "

      Seafaring scoundrels moving in a ravaging pack.

      ", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Cutlass", "img": "icons/weapons/swords/scimitar-worn-blue.webp", @@ -272,8 +272,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -298,7 +298,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Pirate_Tough_mhcVkVFrzIJ18FDm.json b/src/packs/adversaries/adversary_Pirate_Tough_mhcVkVFrzIJ18FDm.json index 69b59211..2817b191 100644 --- a/src/packs/adversaries/adversary_Pirate_Tough_mhcVkVFrzIJ18FDm.json +++ b/src/packs/adversaries/adversary_Pirate_Tough_mhcVkVFrzIJ18FDm.json @@ -67,8 +67,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -94,7 +94,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -269,8 +269,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -295,7 +295,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -347,8 +347,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -374,7 +374,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json b/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json index cd8a44b6..f74da475 100644 --- a/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json +++ b/src/packs/adversaries/adversary_Red_Ooze_9rVlbJVrDNn1x7PS.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/slimes/slime-movement-dripping-pseudopods-green.webp", "type": "attack", @@ -272,8 +272,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -299,7 +299,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -350,8 +350,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -377,7 +377,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Rotted_Zombie_gP3fWTLzSFnpA8EJ.json b/src/packs/adversaries/adversary_Rotted_Zombie_gP3fWTLzSFnpA8EJ.json index 7672961c..6755d27f 100644 --- a/src/packs/adversaries/adversary_Rotted_Zombie_gP3fWTLzSFnpA8EJ.json +++ b/src/packs/adversaries/adversary_Rotted_Zombie_gP3fWTLzSFnpA8EJ.json @@ -57,8 +57,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -85,7 +85,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/abilities/mouth-teeth-sharp.webp", "type": "attack", diff --git a/src/packs/adversaries/adversary_Royal_Advisor_EtLJiTsilPPZvLUX.json b/src/packs/adversaries/adversary_Royal_Advisor_EtLJiTsilPPZvLUX.json index 8593ec01..e215a444 100644 --- a/src/packs/adversaries/adversary_Royal_Advisor_EtLJiTsilPPZvLUX.json +++ b/src/packs/adversaries/adversary_Royal_Advisor_EtLJiTsilPPZvLUX.json @@ -86,8 +86,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -113,7 +113,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -249,8 +249,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -275,7 +275,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Secret_Keeper_sLAccjvCWfeedbpI.json b/src/packs/adversaries/adversary_Secret_Keeper_sLAccjvCWfeedbpI.json index d17c3f86..93bfef2c 100644 --- a/src/packs/adversaries/adversary_Secret_Keeper_sLAccjvCWfeedbpI.json +++ b/src/packs/adversaries/adversary_Secret_Keeper_sLAccjvCWfeedbpI.json @@ -85,8 +85,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -112,7 +112,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/staves/staff-ornate-purple.webp", "type": "attack", @@ -256,7 +256,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -336,8 +336,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -362,7 +362,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Sellsword_bgreCaQ6ap2DVpCr.json b/src/packs/adversaries/adversary_Sellsword_bgreCaQ6ap2DVpCr.json index 514be8f5..ed6d7775 100644 --- a/src/packs/adversaries/adversary_Sellsword_bgreCaQ6ap2DVpCr.json +++ b/src/packs/adversaries/adversary_Sellsword_bgreCaQ6ap2DVpCr.json @@ -61,8 +61,8 @@ "attack": { "name": "Longsword", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -89,7 +89,7 @@ }, "base": false } - ] + } }, "roll": { "bonus": 3, diff --git a/src/packs/adversaries/adversary_Shambling_Zombie_2nXz4ilAY4xuhKLm.json b/src/packs/adversaries/adversary_Shambling_Zombie_2nXz4ilAY4xuhKLm.json index 7c3925ac..5161f8e2 100644 --- a/src/packs/adversaries/adversary_Shambling_Zombie_2nXz4ilAY4xuhKLm.json +++ b/src/packs/adversaries/adversary_Shambling_Zombie_2nXz4ilAY4xuhKLm.json @@ -74,8 +74,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -266,8 +266,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -292,7 +292,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Shark_YmVAkdNsyuXWTtYp.json b/src/packs/adversaries/adversary_Shark_YmVAkdNsyuXWTtYp.json index e385a6c5..f9bad7ea 100644 --- a/src/packs/adversaries/adversary_Shark_YmVAkdNsyuXWTtYp.json +++ b/src/packs/adversaries/adversary_Shark_YmVAkdNsyuXWTtYp.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -238,8 +238,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -264,7 +264,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -316,8 +316,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -343,7 +343,7 @@ } } }, - { + "armor": { "value": { "custom": { "enabled": true, @@ -368,7 +368,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json b/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json index 05ca67a9..38f77982 100644 --- a/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json +++ b/src/packs/adversaries/adversary_Siren_BK4jwyXSRx7IOQiO.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/abilities/mouth-teeth-sharp.webp", "range": "melee", @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -271,7 +271,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -350,7 +350,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Skeleton_Archer_7X5q7a6ueeHs5oA9.json b/src/packs/adversaries/adversary_Skeleton_Archer_7X5q7a6ueeHs5oA9.json index 9d837ac0..f0dde9f0 100644 --- a/src/packs/adversaries/adversary_Skeleton_Archer_7X5q7a6ueeHs5oA9.json +++ b/src/packs/adversaries/adversary_Skeleton_Archer_7X5q7a6ueeHs5oA9.json @@ -74,8 +74,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/bows/shortbow-leather.webp", "type": "attack", @@ -310,8 +310,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -337,7 +337,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Skeleton_Dredge_6l1a3Fazq8BoKIcc.json b/src/packs/adversaries/adversary_Skeleton_Dredge_6l1a3Fazq8BoKIcc.json index 4013d7fe..e4cbab5e 100644 --- a/src/packs/adversaries/adversary_Skeleton_Dredge_6l1a3Fazq8BoKIcc.json +++ b/src/packs/adversaries/adversary_Skeleton_Dredge_6l1a3Fazq8BoKIcc.json @@ -58,8 +58,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -86,7 +86,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Skeleton_Knight_Q9LaVTyXF9NF12C7.json b/src/packs/adversaries/adversary_Skeleton_Knight_Q9LaVTyXF9NF12C7.json index 3c26dd28..8b2042f3 100644 --- a/src/packs/adversaries/adversary_Skeleton_Knight_Q9LaVTyXF9NF12C7.json +++ b/src/packs/adversaries/adversary_Skeleton_Knight_Q9LaVTyXF9NF12C7.json @@ -74,8 +74,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -240,8 +240,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -266,7 +266,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -326,8 +326,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -353,7 +353,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -378,7 +378,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -452,8 +452,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -479,7 +479,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Skeleton_Warrior_10YIQl0lvCJXZLfX.json b/src/packs/adversaries/adversary_Skeleton_Warrior_10YIQl0lvCJXZLfX.json index 28003d5c..726b06e1 100644 --- a/src/packs/adversaries/adversary_Skeleton_Warrior_10YIQl0lvCJXZLfX.json +++ b/src/packs/adversaries/adversary_Skeleton_Warrior_10YIQl0lvCJXZLfX.json @@ -73,8 +73,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -100,7 +100,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/swords/sword-guard-brass-worn.webp", "type": "attack", @@ -310,7 +310,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Spectral_Archer_5tCkhnBByUIN5UdG.json b/src/packs/adversaries/adversary_Spectral_Archer_5tCkhnBByUIN5UdG.json index e6cc30f7..5b9cbb65 100644 --- a/src/packs/adversaries/adversary_Spectral_Archer_5tCkhnBByUIN5UdG.json +++ b/src/packs/adversaries/adversary_Spectral_Archer_5tCkhnBByUIN5UdG.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "range": "far", "type": "attack", @@ -343,8 +343,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -370,7 +370,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Spectral_Captain_65cSO3EQEh6ZH6Xk.json b/src/packs/adversaries/adversary_Spectral_Captain_65cSO3EQEh6ZH6Xk.json index b70a5d53..0572e018 100644 --- a/src/packs/adversaries/adversary_Spectral_Captain_65cSO3EQEh6ZH6Xk.json +++ b/src/packs/adversaries/adversary_Spectral_Captain_65cSO3EQEh6ZH6Xk.json @@ -76,8 +76,8 @@ "name": "Longbow", "img": "icons/weapons/bows/longbow-recurve-skull-brown.webp", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -103,7 +103,7 @@ }, "base": false } - ] + } }, "roll": { "bonus": 3, @@ -456,8 +456,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -483,7 +483,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Spectral_Guardian_UFVGl1osOsJTneLf.json b/src/packs/adversaries/adversary_Spectral_Guardian_UFVGl1osOsJTneLf.json index 577a7d25..85893254 100644 --- a/src/packs/adversaries/adversary_Spectral_Guardian_UFVGl1osOsJTneLf.json +++ b/src/packs/adversaries/adversary_Spectral_Guardian_UFVGl1osOsJTneLf.json @@ -81,8 +81,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -350,8 +350,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -377,7 +377,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -402,7 +402,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Spellblade_ldbWEL7uZs84vyrR.json b/src/packs/adversaries/adversary_Spellblade_ldbWEL7uZs84vyrR.json index 13d6ed84..90c7d68f 100644 --- a/src/packs/adversaries/adversary_Spellblade_ldbWEL7uZs84vyrR.json +++ b/src/packs/adversaries/adversary_Spellblade_ldbWEL7uZs84vyrR.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -108,7 +108,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -280,8 +280,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -307,7 +307,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -439,8 +439,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -466,7 +466,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Spy_8zlynOhnVA59KpKT.json b/src/packs/adversaries/adversary_Spy_8zlynOhnVA59KpKT.json index 5affdc44..0e160edb 100644 --- a/src/packs/adversaries/adversary_Spy_8zlynOhnVA59KpKT.json +++ b/src/packs/adversaries/adversary_Spy_8zlynOhnVA59KpKT.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/weapons/daggers/dagger-curved-purple.webp", "range": "melee", @@ -329,8 +329,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": false @@ -354,7 +354,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Stag_Knight_KGVwnLq85ywP9xvB.json b/src/packs/adversaries/adversary_Stag_Knight_KGVwnLq85ywP9xvB.json index 603182cc..e7738a46 100644 --- a/src/packs/adversaries/adversary_Stag_Knight_KGVwnLq85ywP9xvB.json +++ b/src/packs/adversaries/adversary_Stag_Knight_KGVwnLq85ywP9xvB.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -271,7 +271,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -330,7 +330,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -410,8 +410,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -435,7 +435,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json b/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json index d04f41fd..c50c426d 100644 --- a/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json +++ b/src/packs/adversaries/adversary_Stonewraith_3aAS2Qm3R6cgaYfE.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "range": "melee", "type": "attack", @@ -276,8 +276,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -301,7 +301,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -435,8 +435,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -462,7 +462,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -573,8 +573,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -600,7 +600,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Swarm_of_Rats_qNgs3AbLyJrY19nt.json b/src/packs/adversaries/adversary_Swarm_of_Rats_qNgs3AbLyJrY19nt.json index 014b3dc6..28d5dabe 100644 --- a/src/packs/adversaries/adversary_Swarm_of_Rats_qNgs3AbLyJrY19nt.json +++ b/src/packs/adversaries/adversary_Swarm_of_Rats_qNgs3AbLyJrY19nt.json @@ -68,8 +68,8 @@ "description": "

      A skittering mass of ordinary rodents moving as one like a ravenous wave.

      ", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -95,7 +95,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Claws", "img": "icons/creatures/claws/claw-straight-brown.webp", diff --git a/src/packs/adversaries/adversary_Sylvan_Soldier_VtFBt9XBE0WrGGxP.json b/src/packs/adversaries/adversary_Sylvan_Soldier_VtFBt9XBE0WrGGxP.json index 2ec5e924..f3ce03c3 100644 --- a/src/packs/adversaries/adversary_Sylvan_Soldier_VtFBt9XBE0WrGGxP.json +++ b/src/packs/adversaries/adversary_Sylvan_Soldier_VtFBt9XBE0WrGGxP.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -246,8 +246,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -273,7 +273,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -353,8 +353,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -380,7 +380,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Tangle_Bramble_Swarm_PKSXFuaIHUCoH63A.json b/src/packs/adversaries/adversary_Tangle_Bramble_Swarm_PKSXFuaIHUCoH63A.json index 40297eb6..f8f93cf2 100644 --- a/src/packs/adversaries/adversary_Tangle_Bramble_Swarm_PKSXFuaIHUCoH63A.json +++ b/src/packs/adversaries/adversary_Tangle_Bramble_Swarm_PKSXFuaIHUCoH63A.json @@ -99,8 +99,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -126,7 +126,7 @@ "resultBased": false, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -309,8 +309,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -338,7 +338,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/adversaries/adversary_Tangle_Bramble_XcAGOSmtCFLT1unN.json b/src/packs/adversaries/adversary_Tangle_Bramble_XcAGOSmtCFLT1unN.json index 33afaa3a..c36502de 100644 --- a/src/packs/adversaries/adversary_Tangle_Bramble_XcAGOSmtCFLT1unN.json +++ b/src/packs/adversaries/adversary_Tangle_Bramble_XcAGOSmtCFLT1unN.json @@ -94,8 +94,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -122,7 +122,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json b/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json index 2b3867aa..9470502c 100644 --- a/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json +++ b/src/packs/adversaries/adversary_Tiny_Green_Ooze_aLkLFuVoKz2NLoBK.json @@ -57,8 +57,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -84,7 +84,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/slimes/slime-movement-dripping-pseudopods-green.webp", "type": "attack", @@ -234,8 +234,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -260,7 +260,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Tiny_Red_Ooze_1fkLQXVtmILqfJ44.json b/src/packs/adversaries/adversary_Tiny_Red_Ooze_1fkLQXVtmILqfJ44.json index 116fffba..28d6490e 100644 --- a/src/packs/adversaries/adversary_Tiny_Red_Ooze_1fkLQXVtmILqfJ44.json +++ b/src/packs/adversaries/adversary_Tiny_Red_Ooze_1fkLQXVtmILqfJ44.json @@ -58,8 +58,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -85,7 +85,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -236,8 +236,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -263,7 +263,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Treant_Sapling_o63nS0k3wHu6EgKP.json b/src/packs/adversaries/adversary_Treant_Sapling_o63nS0k3wHu6EgKP.json index ad9d8107..c6c11d36 100644 --- a/src/packs/adversaries/adversary_Treant_Sapling_o63nS0k3wHu6EgKP.json +++ b/src/packs/adversaries/adversary_Treant_Sapling_o63nS0k3wHu6EgKP.json @@ -66,8 +66,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -94,7 +94,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", diff --git a/src/packs/adversaries/adversary_Vampire_WWyUp6Mxl1S3KYUG.json b/src/packs/adversaries/adversary_Vampire_WWyUp6Mxl1S3KYUG.json index 4f51cd79..6ba4935a 100644 --- a/src/packs/adversaries/adversary_Vampire_WWyUp6Mxl1S3KYUG.json +++ b/src/packs/adversaries/adversary_Vampire_WWyUp6Mxl1S3KYUG.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -244,8 +244,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -269,7 +269,7 @@ } } }, - { + "hope": { "value": { "custom": { "enabled": true, @@ -294,7 +294,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -319,7 +319,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json b/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json index 24db9c55..97c493a8 100644 --- a/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json +++ b/src/packs/adversaries/adversary_Vault_Guardian_Gaoler_JqYraOqNmmhHk4Yy.json @@ -75,8 +75,8 @@ }, "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -270,7 +270,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json b/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json index e4098e93..d4fa0340 100644 --- a/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json +++ b/src/packs/adversaries/adversary_Vault_Guardian_Sentinel_FVgYb28fhxlVcGwA.json @@ -75,8 +75,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -373,8 +373,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -400,7 +400,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -474,8 +474,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -501,7 +501,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Vault_Guardian_Turret_c5hGdvY5UnSjlHws.json b/src/packs/adversaries/adversary_Vault_Guardian_Turret_c5hGdvY5UnSjlHws.json index ab683607..d723df80 100644 --- a/src/packs/adversaries/adversary_Vault_Guardian_Turret_c5hGdvY5UnSjlHws.json +++ b/src/packs/adversaries/adversary_Vault_Guardian_Turret_c5hGdvY5UnSjlHws.json @@ -74,8 +74,8 @@ }, "range": "far", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -101,7 +101,7 @@ }, "base": false } - ] + } }, "img": "icons/commodities/tech/metal-joint.webp", "type": "attack", @@ -429,8 +429,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -456,7 +456,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json b/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json index baf84c14..f6a8bc84 100644 --- a/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json +++ b/src/packs/adversaries/adversary_Volcanic_Dragon__Ashen_Tyrant_pMuXGCSOQaxpi5tb.json @@ -67,8 +67,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -94,7 +94,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -451,8 +451,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -477,7 +477,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -529,8 +529,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -556,7 +556,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -581,7 +581,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -710,8 +710,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -737,7 +737,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json b/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json index c73b0dda..535d9fc9 100644 --- a/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json +++ b/src/packs/adversaries/adversary_Volcanic_Dragon__Molten_Scourge_eArAPuB38CNR0ZIM.json @@ -67,8 +67,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -94,7 +94,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -359,8 +359,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -386,7 +386,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -459,8 +459,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -486,7 +486,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -566,7 +566,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -612,8 +612,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -639,7 +639,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": false @@ -663,7 +663,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -791,8 +791,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -818,7 +818,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/adversaries/adversary_Volcanic_Dragon__Obsidian_Predator_ladm7wykhZczYzrQ.json b/src/packs/adversaries/adversary_Volcanic_Dragon__Obsidian_Predator_ladm7wykhZczYzrQ.json index 2e2adbdd..fe8f280f 100644 --- a/src/packs/adversaries/adversary_Volcanic_Dragon__Obsidian_Predator_ladm7wykhZczYzrQ.json +++ b/src/packs/adversaries/adversary_Volcanic_Dragon__Obsidian_Predator_ladm7wykhZczYzrQ.json @@ -67,8 +67,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -94,7 +94,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", @@ -465,8 +465,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -490,7 +490,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -607,8 +607,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -634,7 +634,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -659,7 +659,7 @@ }, "type": [] }, - { + "hope": { "value": { "custom": { "enabled": true, @@ -684,7 +684,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_War_Wizard_noDdT0tsN6FXSmC8.json b/src/packs/adversaries/adversary_War_Wizard_noDdT0tsN6FXSmC8.json index f087c63d..55be8e1a 100644 --- a/src/packs/adversaries/adversary_War_Wizard_noDdT0tsN6FXSmC8.json +++ b/src/packs/adversaries/adversary_War_Wizard_noDdT0tsN6FXSmC8.json @@ -86,8 +86,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -113,7 +113,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -367,8 +367,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -394,7 +394,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -474,8 +474,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -501,7 +501,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -574,8 +574,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -601,7 +601,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json b/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json index 55c7cb23..8eaf56f9 100644 --- a/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json +++ b/src/packs/adversaries/adversary_Weaponmaster_ZNbQ2jg35LG4t9eH.json @@ -75,8 +75,8 @@ "img": "icons/weapons/swords/greatsword-guard-gold-worn.webp", "range": "veryClose", "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -102,7 +102,7 @@ }, "base": false } - ] + } }, "type": "attack", "chatDisplay": false @@ -240,8 +240,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -267,7 +267,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -416,8 +416,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -442,7 +442,7 @@ }, "type": [] }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -467,7 +467,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -537,8 +537,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -564,7 +564,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json b/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json index d097f765..9d7f66d0 100644 --- a/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json +++ b/src/packs/adversaries/adversary_Young_Dryad_8yUj2Mzvnifhxegm.json @@ -80,8 +80,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ }, "base": false } - ] + } }, "type": "attack", "range": "melee", @@ -253,7 +253,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -440,8 +440,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -467,7 +467,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json b/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json index 751d73b4..09e76fa8 100644 --- a/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json +++ b/src/packs/adversaries/adversary_Young_Ice_Dragon_UGPiPLJsPvMTSKEF.json @@ -79,8 +79,8 @@ "type": "attack" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -106,7 +106,7 @@ }, "base": false } - ] + } }, "img": "icons/creatures/claws/claw-scaled-red.webp", "type": "attack", @@ -302,8 +302,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -328,7 +328,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -412,8 +412,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -439,7 +439,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -563,7 +563,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -691,8 +691,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -717,7 +717,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -831,8 +831,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -858,7 +858,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/adversaries/adversary_Zombie_Legion_YhJrP7rTBiRdX5Fp.json b/src/packs/adversaries/adversary_Zombie_Legion_YhJrP7rTBiRdX5Fp.json index 91bdab81..2c3495ff 100644 --- a/src/packs/adversaries/adversary_Zombie_Legion_YhJrP7rTBiRdX5Fp.json +++ b/src/packs/adversaries/adversary_Zombie_Legion_YhJrP7rTBiRdX5Fp.json @@ -68,8 +68,8 @@ "motivesAndTactics": "Consume brain, shred fl esh, surround", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -95,7 +95,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Undead Hands", "roll": { diff --git a/src/packs/adversaries/adversary_Zombie_Pack_Nf0v43rtflV56V2T.json b/src/packs/adversaries/adversary_Zombie_Pack_Nf0v43rtflV56V2T.json index 017537ad..f418758a 100644 --- a/src/packs/adversaries/adversary_Zombie_Pack_Nf0v43rtflV56V2T.json +++ b/src/packs/adversaries/adversary_Zombie_Pack_Nf0v43rtflV56V2T.json @@ -68,8 +68,8 @@ "description": "

      A group of shambling corpses instinctively moving together.

      ", "attack": { "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -95,7 +95,7 @@ "resultBased": false, "base": false } - ] + } }, "name": "Bite", "roll": { diff --git a/src/packs/ancestries/feature_Charge_AA2CZlJSWW8GPhrR.json b/src/packs/ancestries/feature_Charge_AA2CZlJSWW8GPhrR.json index f1f7ae35..0af2610a 100644 --- a/src/packs/ancestries/feature_Charge_AA2CZlJSWW8GPhrR.json +++ b/src/packs/ancestries/feature_Charge_AA2CZlJSWW8GPhrR.json @@ -29,8 +29,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -56,7 +56,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Elemental_Breath_sRaE3CgkgjBF1UpV.json b/src/packs/ancestries/feature_Elemental_Breath_sRaE3CgkgjBF1UpV.json index 71ac4438..a660daf5 100644 --- a/src/packs/ancestries/feature_Elemental_Breath_sRaE3CgkgjBF1UpV.json +++ b/src/packs/ancestries/feature_Elemental_Breath_sRaE3CgkgjBF1UpV.json @@ -22,8 +22,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -47,7 +47,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Fungril_Network_9tmeXm623hl4Qnws.json b/src/packs/ancestries/feature_Fungril_Network_9tmeXm623hl4Qnws.json index 9d970a67..87638f37 100644 --- a/src/packs/ancestries/feature_Fungril_Network_9tmeXm623hl4Qnws.json +++ b/src/packs/ancestries/feature_Fungril_Network_9tmeXm623hl4Qnws.json @@ -22,7 +22,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Kick_gpW19TfJk0WWFh1S.json b/src/packs/ancestries/feature_Kick_gpW19TfJk0WWFh1S.json index 89546ded..b363b6c2 100644 --- a/src/packs/ancestries/feature_Kick_gpW19TfJk0WWFh1S.json +++ b/src/packs/ancestries/feature_Kick_gpW19TfJk0WWFh1S.json @@ -31,8 +31,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -58,7 +58,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Long_Tongue_oWbdlh51ajn1Q5kL.json b/src/packs/ancestries/feature_Long_Tongue_oWbdlh51ajn1Q5kL.json index aee64a9a..1f1156d7 100644 --- a/src/packs/ancestries/feature_Long_Tongue_oWbdlh51ajn1Q5kL.json +++ b/src/packs/ancestries/feature_Long_Tongue_oWbdlh51ajn1Q5kL.json @@ -29,8 +29,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -54,7 +54,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Luckbringer_8O6SQQMxKWr430QA.json b/src/packs/ancestries/feature_Luckbringer_8O6SQQMxKWr430QA.json index 3c31d62d..36fd73fb 100644 --- a/src/packs/ancestries/feature_Luckbringer_8O6SQQMxKWr430QA.json +++ b/src/packs/ancestries/feature_Luckbringer_8O6SQQMxKWr430QA.json @@ -22,8 +22,8 @@ "recovery": "session" }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -48,7 +48,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json b/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json index 6338548e..b9b000f4 100644 --- a/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json +++ b/src/packs/ancestries/feature_Retracting_Claws_Zj69cAeb3NjIa8Hn.json @@ -22,7 +22,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Tusks_YhxD1ujZpftPu19w.json b/src/packs/ancestries/feature_Tusks_YhxD1ujZpftPu19w.json index 5bd72773..6038f2c6 100644 --- a/src/packs/ancestries/feature_Tusks_YhxD1ujZpftPu19w.json +++ b/src/packs/ancestries/feature_Tusks_YhxD1ujZpftPu19w.json @@ -31,8 +31,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false, @@ -58,7 +58,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/ancestries/feature_Unshakeable_G5pE8FW94V1W9jJx.json b/src/packs/ancestries/feature_Unshakeable_G5pE8FW94V1W9jJx.json index 195b10e8..bf0a241b 100644 --- a/src/packs/ancestries/feature_Unshakeable_G5pE8FW94V1W9jJx.json +++ b/src/packs/ancestries/feature_Unshakeable_G5pE8FW94V1W9jJx.json @@ -22,7 +22,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json b/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json index acc7df36..43ba16a8 100644 --- a/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json +++ b/src/packs/beastforms/feature_Demolish_DfBXO8jTchwFG8dZ.json @@ -27,8 +27,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -52,7 +52,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json b/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json index d99a6ab7..a81eb8af 100644 --- a/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json +++ b/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json @@ -27,7 +27,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json b/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json index 4dc2c0f7..531b30ea 100644 --- a/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json +++ b/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json @@ -27,8 +27,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -54,7 +54,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json b/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json index 230f6470..4f0ea6c3 100644 --- a/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json +++ b/src/packs/beastforms/feature_Trample_A0lgd6eVEfX6oqSB.json @@ -27,8 +27,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -52,7 +52,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Unyielding_vEAQ4cfsoPmOv2Gg.json b/src/packs/beastforms/feature_Unyielding_vEAQ4cfsoPmOv2Gg.json index 6bfafa79..429b5a1a 100644 --- a/src/packs/beastforms/feature_Unyielding_vEAQ4cfsoPmOv2Gg.json +++ b/src/packs/beastforms/feature_Unyielding_vEAQ4cfsoPmOv2Gg.json @@ -20,7 +20,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json b/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json index 3b39707d..923e43bd 100644 --- a/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json +++ b/src/packs/beastforms/feature_Venomous_Strike_uW3853pViM9VAfHb.json @@ -20,7 +20,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json b/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json index 28095ea9..a3494ed0 100644 --- a/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json +++ b/src/packs/beastforms/feature_Vicious_Maul_jYUBi7yLHap5ljpa.json @@ -27,8 +27,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -53,7 +53,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json b/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json index 9e3a3d93..7cd48d25 100644 --- a/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json +++ b/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json @@ -20,7 +20,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/classes/feature_Frontline_Tank_YS1g7YdWwOaS629x.json b/src/packs/classes/feature_Frontline_Tank_YS1g7YdWwOaS629x.json index 7b7be61a..81fd08cc 100644 --- a/src/packs/classes/feature_Frontline_Tank_YS1g7YdWwOaS629x.json +++ b/src/packs/classes/feature_Frontline_Tank_YS1g7YdWwOaS629x.json @@ -29,8 +29,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/classes/feature_Life_Support_lSlvSUHbOoX36q2j.json b/src/packs/classes/feature_Life_Support_lSlvSUHbOoX36q2j.json index 9c4fc450..b788f1f4 100644 --- a/src/packs/classes/feature_Life_Support_lSlvSUHbOoX36q2j.json +++ b/src/packs/classes/feature_Life_Support_lSlvSUHbOoX36q2j.json @@ -31,8 +31,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -57,7 +57,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/classes/feature_Minor_Illusion_cshTYdtz9yoXYYB3.json b/src/packs/classes/feature_Minor_Illusion_cshTYdtz9yoXYYB3.json index fe18f68b..5f4d5fe7 100644 --- a/src/packs/classes/feature_Minor_Illusion_cshTYdtz9yoXYYB3.json +++ b/src/packs/classes/feature_Minor_Illusion_cshTYdtz9yoXYYB3.json @@ -23,7 +23,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/classes/feature_Strange_Patterns_6YsfFjmCGuFYVhT4.json b/src/packs/classes/feature_Strange_Patterns_6YsfFjmCGuFYVhT4.json index 953b3a2c..ce1f499f 100644 --- a/src/packs/classes/feature_Strange_Patterns_6YsfFjmCGuFYVhT4.json +++ b/src/packs/classes/feature_Strange_Patterns_6YsfFjmCGuFYVhT4.json @@ -29,8 +29,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_A_Soldier_s_Bond_Y08dLFuPXsgeRrHi.json b/src/packs/domains/domainCard_A_Soldier_s_Bond_Y08dLFuPXsgeRrHi.json index d3da85b6..09255a76 100644 --- a/src/packs/domains/domainCard_A_Soldier_s_Bond_Y08dLFuPXsgeRrHi.json +++ b/src/packs/domains/domainCard_A_Soldier_s_Bond_Y08dLFuPXsgeRrHi.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -51,7 +51,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Arcane_Reflection_JzSvxy9Mu3RJp1jV.json b/src/packs/domains/domainCard_Arcane_Reflection_JzSvxy9Mu3RJp1jV.json index e6d38e3f..e557b8cd 100644 --- a/src/packs/domains/domainCard_Arcane_Reflection_JzSvxy9Mu3RJp1jV.json +++ b/src/packs/domains/domainCard_Arcane_Reflection_JzSvxy9Mu3RJp1jV.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json index aa9910dc..059fb24c 100644 --- a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json +++ b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Banish_AIbHfryMA2Rvs1ut.json b/src/packs/domains/domainCard_Banish_AIbHfryMA2Rvs1ut.json index b637a622..e3c23dbf 100644 --- a/src/packs/domains/domainCard_Banish_AIbHfryMA2Rvs1ut.json +++ b/src/packs/domains/domainCard_Banish_AIbHfryMA2Rvs1ut.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Battle_Cry_Ef1JsUG50LIoKx2F.json b/src/packs/domains/domainCard_Battle_Cry_Ef1JsUG50LIoKx2F.json index 432f9992..c9ae6071 100644 --- a/src/packs/domains/domainCard_Battle_Cry_Ef1JsUG50LIoKx2F.json +++ b/src/packs/domains/domainCard_Battle_Cry_Ef1JsUG50LIoKx2F.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -51,7 +51,7 @@ }, "type": [] }, - { + "hope": { "value": { "custom": { "enabled": true, @@ -76,7 +76,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Battle_Hardened_NeEOghgfyDUBTwBG.json b/src/packs/domains/domainCard_Battle_Hardened_NeEOghgfyDUBTwBG.json index dfd0c68d..852cd329 100644 --- a/src/packs/domains/domainCard_Battle_Hardened_NeEOghgfyDUBTwBG.json +++ b/src/packs/domains/domainCard_Battle_Hardened_NeEOghgfyDUBTwBG.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -51,7 +51,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Blink_Out_Qu0iA4s3Xov10Erd.json b/src/packs/domains/domainCard_Blink_Out_Qu0iA4s3Xov10Erd.json index 0b96d99c..617bd27b 100644 --- a/src/packs/domains/domainCard_Blink_Out_Qu0iA4s3Xov10Erd.json +++ b/src/packs/domains/domainCard_Blink_Out_Qu0iA4s3Xov10Erd.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json b/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json index c1964896..df7d36a4 100644 --- a/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json +++ b/src/packs/domains/domainCard_Bolt_Beacon_BNevJyGk7hmN7XOY.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -58,7 +58,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json index 8c531bcd..7977e56a 100644 --- a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json +++ b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -51,7 +51,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -131,7 +131,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -177,8 +177,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -204,7 +204,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Exota_oVs2MSC6Uf5GbgEG.json b/src/packs/domains/domainCard_Book_of_Exota_oVs2MSC6Uf5GbgEG.json index 032a2de2..d228d04b 100644 --- a/src/packs/domains/domainCard_Book_of_Exota_oVs2MSC6Uf5GbgEG.json +++ b/src/packs/domains/domainCard_Book_of_Exota_oVs2MSC6Uf5GbgEG.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -100,8 +100,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -127,7 +127,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Grynn_R0LNheiZycZlZzV3.json b/src/packs/domains/domainCard_Book_of_Grynn_R0LNheiZycZlZzV3.json index 05276707..d84a8e18 100644 --- a/src/packs/domains/domainCard_Book_of_Grynn_R0LNheiZycZlZzV3.json +++ b/src/packs/domains/domainCard_Book_of_Grynn_R0LNheiZycZlZzV3.json @@ -76,8 +76,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -103,7 +103,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Homet_gFMx08ogQ8hS2Obi.json b/src/packs/domains/domainCard_Book_of_Homet_gFMx08ogQ8hS2Obi.json index a0102739..f6f048d1 100644 --- a/src/packs/domains/domainCard_Book_of_Homet_gFMx08ogQ8hS2Obi.json +++ b/src/packs/domains/domainCard_Book_of_Homet_gFMx08ogQ8hS2Obi.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -72,7 +72,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json b/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json index 71ce49f6..b34fa000 100644 --- a/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json +++ b/src/packs/domains/domainCard_Book_of_Illiat_df4iRqQzRntrF6Qw.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -82,8 +82,8 @@ "recovery": "shortRest" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -107,7 +107,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Korvax_cWRFHJdxEZ0M1dAg.json b/src/packs/domains/domainCard_Book_of_Korvax_cWRFHJdxEZ0M1dAg.json index 5bef4922..d97c514b 100644 --- a/src/packs/domains/domainCard_Book_of_Korvax_cWRFHJdxEZ0M1dAg.json +++ b/src/packs/domains/domainCard_Book_of_Korvax_cWRFHJdxEZ0M1dAg.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -77,7 +77,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -130,8 +130,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -157,7 +157,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json b/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json index 05d0a219..f32f380a 100644 --- a/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json +++ b/src/packs/domains/domainCard_Book_of_Norai_WtwSWXTRZa7QVvmo.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -50,7 +50,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -101,8 +101,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -128,7 +128,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Ronin_SZMNR3uGNinJcN4N.json b/src/packs/domains/domainCard_Book_of_Ronin_SZMNR3uGNinJcN4N.json index c809a8e0..88bb759d 100644 --- a/src/packs/domains/domainCard_Book_of_Ronin_SZMNR3uGNinJcN4N.json +++ b/src/packs/domains/domainCard_Book_of_Ronin_SZMNR3uGNinJcN4N.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -75,7 +75,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Sitil_eq8VNqYMRHhF9xw9.json b/src/packs/domains/domainCard_Book_of_Sitil_eq8VNqYMRHhF9xw9.json index e88ccea9..16b7a63b 100644 --- a/src/packs/domains/domainCard_Book_of_Sitil_eq8VNqYMRHhF9xw9.json +++ b/src/packs/domains/domainCard_Book_of_Sitil_eq8VNqYMRHhF9xw9.json @@ -85,7 +85,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json b/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json index 5e5cb054..fcea175c 100644 --- a/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json +++ b/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -51,7 +51,7 @@ } } }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -76,7 +76,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -144,7 +144,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Vagras_aknDDYtN7EObv94t.json b/src/packs/domains/domainCard_Book_of_Vagras_aknDDYtN7EObv94t.json index eadd1550..a5764f48 100644 --- a/src/packs/domains/domainCard_Book_of_Vagras_aknDDYtN7EObv94t.json +++ b/src/packs/domains/domainCard_Book_of_Vagras_aknDDYtN7EObv94t.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -79,7 +79,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -125,7 +125,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Vyola_VOIgm2j2Ijszwc5m.json b/src/packs/domains/domainCard_Book_of_Vyola_VOIgm2j2Ijszwc5m.json index b94cd702..522a8f7c 100644 --- a/src/packs/domains/domainCard_Book_of_Vyola_VOIgm2j2Ijszwc5m.json +++ b/src/packs/domains/domainCard_Book_of_Vyola_VOIgm2j2Ijszwc5m.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json b/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json index 4e08fb0e..17eb4223 100644 --- a/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json +++ b/src/packs/domains/domainCard_Book_of_Yarrow_J1ovx2FpNDvPq1o6.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Chain_Lightning_0kAVO6rordCfZqYP.json b/src/packs/domains/domainCard_Chain_Lightning_0kAVO6rordCfZqYP.json index 682357cc..c2bf721f 100644 --- a/src/packs/domains/domainCard_Chain_Lightning_0kAVO6rordCfZqYP.json +++ b/src/packs/domains/domainCard_Chain_Lightning_0kAVO6rordCfZqYP.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -60,7 +60,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -107,8 +107,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -134,7 +134,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Champion_s_Edge_rnejRbUQsNGX1GMC.json b/src/packs/domains/domainCard_Champion_s_Edge_rnejRbUQsNGX1GMC.json index be639515..304541e4 100644 --- a/src/packs/domains/domainCard_Champion_s_Edge_rnejRbUQsNGX1GMC.json +++ b/src/packs/domains/domainCard_Champion_s_Edge_rnejRbUQsNGX1GMC.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -59,7 +59,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -109,8 +109,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -135,7 +135,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -185,8 +185,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -213,7 +213,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Chokehold_R5GYUalYXLLFRlNl.json b/src/packs/domains/domainCard_Chokehold_R5GYUalYXLLFRlNl.json index 587e7855..73424902 100644 --- a/src/packs/domains/domainCard_Chokehold_R5GYUalYXLLFRlNl.json +++ b/src/packs/domains/domainCard_Chokehold_R5GYUalYXLLFRlNl.json @@ -65,7 +65,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json b/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json index 5ffab1e2..e3df986e 100644 --- a/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json +++ b/src/packs/domains/domainCard_Cinder_Grasp_5EP2Lgf7ojfrc0Is.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -52,7 +52,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -104,8 +104,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -131,7 +131,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Confusing_Aura_R8NDiJXJWmC48WSr.json b/src/packs/domains/domainCard_Confusing_Aura_R8NDiJXJWmC48WSr.json index 859635f3..a261da89 100644 --- a/src/packs/domains/domainCard_Confusing_Aura_R8NDiJXJWmC48WSr.json +++ b/src/packs/domains/domainCard_Confusing_Aura_R8NDiJXJWmC48WSr.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -80,7 +80,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Conjure_Swarm_rZPH0BY8Sznc9sFG.json b/src/packs/domains/domainCard_Conjure_Swarm_rZPH0BY8Sznc9sFG.json index ededde93..d1d1789d 100644 --- a/src/packs/domains/domainCard_Conjure_Swarm_rZPH0BY8Sznc9sFG.json +++ b/src/packs/domains/domainCard_Conjure_Swarm_rZPH0BY8Sznc9sFG.json @@ -31,7 +31,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -119,8 +119,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -148,7 +148,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json b/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json index 09dff08a..01d88111 100644 --- a/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json +++ b/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -49,7 +49,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Counterspell_6dhqo1kzGxejCjHa.json b/src/packs/domains/domainCard_Counterspell_6dhqo1kzGxejCjHa.json index 7d3a74c9..a8d403d8 100644 --- a/src/packs/domains/domainCard_Counterspell_6dhqo1kzGxejCjHa.json +++ b/src/packs/domains/domainCard_Counterspell_6dhqo1kzGxejCjHa.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Critical_Inspiration_ABp9pUfBS69NomTD.json b/src/packs/domains/domainCard_Critical_Inspiration_ABp9pUfBS69NomTD.json index c8013a14..252878ea 100644 --- a/src/packs/domains/domainCard_Critical_Inspiration_ABp9pUfBS69NomTD.json +++ b/src/packs/domains/domainCard_Critical_Inspiration_ABp9pUfBS69NomTD.json @@ -24,7 +24,7 @@ "recovery": "longRest" }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Dark_Whispers_yL2qrSWmTwXVOySH.json b/src/packs/domains/domainCard_Dark_Whispers_yL2qrSWmTwXVOySH.json index 390a2526..7d8ecf40 100644 --- a/src/packs/domains/domainCard_Dark_Whispers_yL2qrSWmTwXVOySH.json +++ b/src/packs/domains/domainCard_Dark_Whispers_yL2qrSWmTwXVOySH.json @@ -31,7 +31,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Death_Grip_x0FVGE1YbfXalJiw.json b/src/packs/domains/domainCard_Death_Grip_x0FVGE1YbfXalJiw.json index 6e7c6b64..214dae17 100644 --- a/src/packs/domains/domainCard_Death_Grip_x0FVGE1YbfXalJiw.json +++ b/src/packs/domains/domainCard_Death_Grip_x0FVGE1YbfXalJiw.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -75,8 +75,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -101,7 +101,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -152,8 +152,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -179,7 +179,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Disintegration_Wave_kja5qvh4rdeDBB96.json b/src/packs/domains/domainCard_Disintegration_Wave_kja5qvh4rdeDBB96.json index 4e3c3083..7d7ed27d 100644 --- a/src/packs/domains/domainCard_Disintegration_Wave_kja5qvh4rdeDBB96.json +++ b/src/packs/domains/domainCard_Disintegration_Wave_kja5qvh4rdeDBB96.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json b/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json index 614f7e32..0a35c95f 100644 --- a/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json +++ b/src/packs/domains/domainCard_Earthquake_C0qLOwSSvZ6PG3Ws.json @@ -34,8 +34,8 @@ "consumeOnSuccess": true }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -61,7 +61,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Eclipse_62Sj67PdPFzwWVe3.json b/src/packs/domains/domainCard_Eclipse_62Sj67PdPFzwWVe3.json index bd080f0d..c797a148 100644 --- a/src/packs/domains/domainCard_Eclipse_62Sj67PdPFzwWVe3.json +++ b/src/packs/domains/domainCard_Eclipse_62Sj67PdPFzwWVe3.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -76,8 +76,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -102,7 +102,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Encore_klahWDFwihqqEhXP.json b/src/packs/domains/domainCard_Encore_klahWDFwihqqEhXP.json index 23358d47..fabc00e1 100644 --- a/src/packs/domains/domainCard_Encore_klahWDFwihqqEhXP.json +++ b/src/packs/domains/domainCard_Encore_klahWDFwihqqEhXP.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json b/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json index dc574dec..284682fa 100644 --- a/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json +++ b/src/packs/domains/domainCard_Enrapture_a8lFiKX1o8T924ze.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -82,8 +82,8 @@ "recovery": "shortRest" }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -108,7 +108,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Falling_Sky_hZJp9mdkMnqKDROe.json b/src/packs/domains/domainCard_Falling_Sky_hZJp9mdkMnqKDROe.json index ee36e25d..05496132 100644 --- a/src/packs/domains/domainCard_Falling_Sky_hZJp9mdkMnqKDROe.json +++ b/src/packs/domains/domainCard_Falling_Sky_hZJp9mdkMnqKDROe.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -59,7 +59,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Final_Words_Nbw6Jnh1vRZzwHQI.json b/src/packs/domains/domainCard_Final_Words_Nbw6Jnh1vRZzwHQI.json index 757a705a..65d7dd83 100644 --- a/src/packs/domains/domainCard_Final_Words_Nbw6Jnh1vRZzwHQI.json +++ b/src/packs/domains/domainCard_Final_Words_Nbw6Jnh1vRZzwHQI.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Flight_54GUjNuBEy7xdzMz.json b/src/packs/domains/domainCard_Flight_54GUjNuBEy7xdzMz.json index bd8744f7..4d1355ee 100644 --- a/src/packs/domains/domainCard_Flight_54GUjNuBEy7xdzMz.json +++ b/src/packs/domains/domainCard_Flight_54GUjNuBEy7xdzMz.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Forager_06UapZuaA5S6fAKl.json b/src/packs/domains/domainCard_Forager_06UapZuaA5S6fAKl.json index 292961b8..e8919d6b 100644 --- a/src/packs/domains/domainCard_Forager_06UapZuaA5S6fAKl.json +++ b/src/packs/domains/domainCard_Forager_06UapZuaA5S6fAKl.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -91,8 +91,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -117,7 +117,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -185,8 +185,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -211,7 +211,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Forest_Sprites_JrkUMTzaFmQNBHVm.json b/src/packs/domains/domainCard_Forest_Sprites_JrkUMTzaFmQNBHVm.json index feb095a2..4fa469a6 100644 --- a/src/packs/domains/domainCard_Forest_Sprites_JrkUMTzaFmQNBHVm.json +++ b/src/packs/domains/domainCard_Forest_Sprites_JrkUMTzaFmQNBHVm.json @@ -32,7 +32,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Glancing_Blow_nCNCqSH7UgW4O3To.json b/src/packs/domains/domainCard_Glancing_Blow_nCNCqSH7UgW4O3To.json index 70338c03..a0766c1c 100644 --- a/src/packs/domains/domainCard_Glancing_Blow_nCNCqSH7UgW4O3To.json +++ b/src/packs/domains/domainCard_Glancing_Blow_nCNCqSH7UgW4O3To.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json b/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json index 3c17d4ee..35100187 100644 --- a/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json +++ b/src/packs/domains/domainCard_Glyph_of_Nightfall_B5HXqYRJiL3xMNKT.json @@ -32,7 +32,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Goad_Them_On_HufF5KzuNfEb9RTi.json b/src/packs/domains/domainCard_Goad_Them_On_HufF5KzuNfEb9RTi.json index 190028ed..db28b8b5 100644 --- a/src/packs/domains/domainCard_Goad_Them_On_HufF5KzuNfEb9RTi.json +++ b/src/packs/domains/domainCard_Goad_Them_On_HufF5KzuNfEb9RTi.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Gore_and_Glory_3zvjgZ5Od343wHzx.json b/src/packs/domains/domainCard_Gore_and_Glory_3zvjgZ5Od343wHzx.json index 8151beaa..ff648409 100644 --- a/src/packs/domains/domainCard_Gore_and_Glory_3zvjgZ5Od343wHzx.json +++ b/src/packs/domains/domainCard_Gore_and_Glory_3zvjgZ5Od343wHzx.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -51,7 +51,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -93,8 +93,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -119,7 +119,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Grace_Touched_KAuNb51AwhD8KEXk.json b/src/packs/domains/domainCard_Grace_Touched_KAuNb51AwhD8KEXk.json index 346a81f2..2e48f07b 100644 --- a/src/packs/domains/domainCard_Grace_Touched_KAuNb51AwhD8KEXk.json +++ b/src/packs/domains/domainCard_Grace_Touched_KAuNb51AwhD8KEXk.json @@ -53,8 +53,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -79,7 +79,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Ground_Pound_WnGldYhJPDhx8v9X.json b/src/packs/domains/domainCard_Ground_Pound_WnGldYhJPDhx8v9X.json index 56387c50..5663c6b3 100644 --- a/src/packs/domains/domainCard_Ground_Pound_WnGldYhJPDhx8v9X.json +++ b/src/packs/domains/domainCard_Ground_Pound_WnGldYhJPDhx8v9X.json @@ -31,8 +31,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -58,7 +58,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Healing_Field_GlRm1Dxlc0Z1b04o.json b/src/packs/domains/domainCard_Healing_Field_GlRm1Dxlc0Z1b04o.json index 0f60cc32..d918d49f 100644 --- a/src/packs/domains/domainCard_Healing_Field_GlRm1Dxlc0Z1b04o.json +++ b/src/packs/domains/domainCard_Healing_Field_GlRm1Dxlc0Z1b04o.json @@ -33,8 +33,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -59,7 +59,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -117,8 +117,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -143,7 +143,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Healing_Hands_WTlhnQMajc1r8i50.json b/src/packs/domains/domainCard_Healing_Hands_WTlhnQMajc1r8i50.json index 1245fc4b..c771562c 100644 --- a/src/packs/domains/domainCard_Healing_Hands_WTlhnQMajc1r8i50.json +++ b/src/packs/domains/domainCard_Healing_Hands_WTlhnQMajc1r8i50.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -85,8 +85,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -111,7 +111,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -161,8 +161,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -187,7 +187,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -237,8 +237,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -263,7 +263,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -313,8 +313,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -339,7 +339,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Healing_Strike_XtSc0jIJLOoMTMYS.json b/src/packs/domains/domainCard_Healing_Strike_XtSc0jIJLOoMTMYS.json index 26fab1a9..22f7f2c9 100644 --- a/src/packs/domains/domainCard_Healing_Strike_XtSc0jIJLOoMTMYS.json +++ b/src/packs/domains/domainCard_Healing_Strike_XtSc0jIJLOoMTMYS.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -59,7 +59,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json b/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json index 23b9588d..28c41c7e 100644 --- a/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json +++ b/src/packs/domains/domainCard_Hush_gwmYasmfgXZ7tFS6.json @@ -32,7 +32,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json b/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json index ffa0226d..15a59635 100644 --- a/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json +++ b/src/packs/domains/domainCard_Hypnotic_Shimmer_2ZeuCGVatQdPOVC6.json @@ -25,8 +25,8 @@ "consumeOnSuccess": true }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -51,7 +51,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_I_See_It_Coming_Kp6RejHGimnuoBom.json b/src/packs/domains/domainCard_I_See_It_Coming_Kp6RejHGimnuoBom.json index 8d5f6536..5fa005b6 100644 --- a/src/packs/domains/domainCard_I_See_It_Coming_Kp6RejHGimnuoBom.json +++ b/src/packs/domains/domainCard_I_See_It_Coming_Kp6RejHGimnuoBom.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Inspirational_Words_cWu1o82ZF7GvnbXc.json b/src/packs/domains/domainCard_Inspirational_Words_cWu1o82ZF7GvnbXc.json index 0c28d499..b1f15298 100644 --- a/src/packs/domains/domainCard_Inspirational_Words_cWu1o82ZF7GvnbXc.json +++ b/src/packs/domains/domainCard_Inspirational_Words_cWu1o82ZF7GvnbXc.json @@ -41,8 +41,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -67,7 +67,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -117,8 +117,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -143,7 +143,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -193,8 +193,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -219,7 +219,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Invigoration_X8OfkEoI5gLTRf1B.json b/src/packs/domains/domainCard_Invigoration_X8OfkEoI5gLTRf1B.json index 658e12fd..e3c5436c 100644 --- a/src/packs/domains/domainCard_Invigoration_X8OfkEoI5gLTRf1B.json +++ b/src/packs/domains/domainCard_Invigoration_X8OfkEoI5gLTRf1B.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Invisibility_KHkzA4Zrw8EWN1CH.json b/src/packs/domains/domainCard_Invisibility_KHkzA4Zrw8EWN1CH.json index be46b1c3..5f67ff74 100644 --- a/src/packs/domains/domainCard_Invisibility_KHkzA4Zrw8EWN1CH.json +++ b/src/packs/domains/domainCard_Invisibility_KHkzA4Zrw8EWN1CH.json @@ -32,7 +32,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Know_Thy_Enemy_O38MQMhJWdZnXi6b.json b/src/packs/domains/domainCard_Know_Thy_Enemy_O38MQMhJWdZnXi6b.json index 12308e6b..44885c23 100644 --- a/src/packs/domains/domainCard_Know_Thy_Enemy_O38MQMhJWdZnXi6b.json +++ b/src/packs/domains/domainCard_Know_Thy_Enemy_O38MQMhJWdZnXi6b.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Lean_on_Me_BdePs1ZWpZTZvY1Z.json b/src/packs/domains/domainCard_Lean_on_Me_BdePs1ZWpZTZvY1Z.json index 883e2522..ae8c5b82 100644 --- a/src/packs/domains/domainCard_Lean_on_Me_BdePs1ZWpZTZvY1Z.json +++ b/src/packs/domains/domainCard_Lean_on_Me_BdePs1ZWpZTZvY1Z.json @@ -24,8 +24,8 @@ "recovery": "longRest" }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Manifest_Wall_TtGOtWkbr23VhHfH.json b/src/packs/domains/domainCard_Manifest_Wall_TtGOtWkbr23VhHfH.json index 6e4b4654..02f20956 100644 --- a/src/packs/domains/domainCard_Manifest_Wall_TtGOtWkbr23VhHfH.json +++ b/src/packs/domains/domainCard_Manifest_Wall_TtGOtWkbr23VhHfH.json @@ -33,7 +33,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json b/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json index d4df379e..7e925700 100644 --- a/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json +++ b/src/packs/domains/domainCard_Mass_Enrapture_ubpixIgZrJXKyM3b.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -82,8 +82,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -108,7 +108,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Mending_Touch_TGjR4vJVNbQRV8zr.json b/src/packs/domains/domainCard_Mending_Touch_TGjR4vJVNbQRV8zr.json index 4cb8c2a2..60367dcc 100644 --- a/src/packs/domains/domainCard_Mending_Touch_TGjR4vJVNbQRV8zr.json +++ b/src/packs/domains/domainCard_Mending_Touch_TGjR4vJVNbQRV8zr.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -59,7 +59,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -109,8 +109,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -135,7 +135,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -194,8 +194,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -220,7 +220,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -279,8 +279,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -305,7 +305,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Midnight_Spirit_FXLsB3QbQvTtqX5B.json b/src/packs/domains/domainCard_Midnight_Spirit_FXLsB3QbQvTtqX5B.json index f97fe53d..f951054e 100644 --- a/src/packs/domains/domainCard_Midnight_Spirit_FXLsB3QbQvTtqX5B.json +++ b/src/packs/domains/domainCard_Midnight_Spirit_FXLsB3QbQvTtqX5B.json @@ -60,8 +60,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -87,7 +87,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Midnight_Touched_uSyGKVxOJcnp28po.json b/src/packs/domains/domainCard_Midnight_Touched_uSyGKVxOJcnp28po.json index 10c42418..b859aafb 100644 --- a/src/packs/domains/domainCard_Midnight_Touched_uSyGKVxOJcnp28po.json +++ b/src/packs/domains/domainCard_Midnight_Touched_uSyGKVxOJcnp28po.json @@ -24,8 +24,8 @@ "recovery": "shortRest" }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Natural_Familiar_Tag303LoRNC5zGgl.json b/src/packs/domains/domainCard_Natural_Familiar_Tag303LoRNC5zGgl.json index 7aa85b0f..c14116d4 100644 --- a/src/packs/domains/domainCard_Natural_Familiar_Tag303LoRNC5zGgl.json +++ b/src/packs/domains/domainCard_Natural_Familiar_Tag303LoRNC5zGgl.json @@ -59,7 +59,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Nature_s_Tongue_atWLorlCOxcrq8WB.json b/src/packs/domains/domainCard_Nature_s_Tongue_atWLorlCOxcrq8WB.json index c722954b..b6c9464a 100644 --- a/src/packs/domains/domainCard_Nature_s_Tongue_atWLorlCOxcrq8WB.json +++ b/src/packs/domains/domainCard_Nature_s_Tongue_atWLorlCOxcrq8WB.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json b/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json index 59a0c924..d40b1c43 100644 --- a/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json +++ b/src/packs/domains/domainCard_Night_Terror_zcldCuqOg3dphUVI.json @@ -24,7 +24,7 @@ "recovery": "longRest" }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -84,8 +84,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -109,7 +109,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Onslaught_I7pNsQ9Yx6mRJX4V.json b/src/packs/domains/domainCard_Onslaught_I7pNsQ9Yx6mRJX4V.json index d2d7361d..5122ec4b 100644 --- a/src/packs/domains/domainCard_Onslaught_I7pNsQ9Yx6mRJX4V.json +++ b/src/packs/domains/domainCard_Onslaught_I7pNsQ9Yx6mRJX4V.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json b/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json index 1b0173d7..9aa2f5b4 100644 --- a/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json +++ b/src/packs/domains/domainCard_Overwhelming_Aura_iEBLySZD9z8CLdz7.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Plant_Dominion_9a6xP5pxhVvdugk9.json b/src/packs/domains/domainCard_Plant_Dominion_9a6xP5pxhVvdugk9.json index 64b1e1c2..4b4767fa 100644 --- a/src/packs/domains/domainCard_Plant_Dominion_9a6xP5pxhVvdugk9.json +++ b/src/packs/domains/domainCard_Plant_Dominion_9a6xP5pxhVvdugk9.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Preservation_Blast_1p1cOmbnRd5CoKBp.json b/src/packs/domains/domainCard_Preservation_Blast_1p1cOmbnRd5CoKBp.json index 46dc2bdb..5470c340 100644 --- a/src/packs/domains/domainCard_Preservation_Blast_1p1cOmbnRd5CoKBp.json +++ b/src/packs/domains/domainCard_Preservation_Blast_1p1cOmbnRd5CoKBp.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -52,7 +52,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json b/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json index 839dc2c2..080dd67f 100644 --- a/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json +++ b/src/packs/domains/domainCard_Rain_of_Blades_Ucenef6JpjQxwXni.json @@ -31,8 +31,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -56,7 +56,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -102,8 +102,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -127,7 +127,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Reaper_s_Strike_MCgNRlh0s5XUPCfl.json b/src/packs/domains/domainCard_Reaper_s_Strike_MCgNRlh0s5XUPCfl.json index f4feebbb..3bb8accd 100644 --- a/src/packs/domains/domainCard_Reaper_s_Strike_MCgNRlh0s5XUPCfl.json +++ b/src/packs/domains/domainCard_Reaper_s_Strike_MCgNRlh0s5XUPCfl.json @@ -33,7 +33,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Rejuvenation_Barrier_HtWx5IIemCoorMj2.json b/src/packs/domains/domainCard_Rejuvenation_Barrier_HtWx5IIemCoorMj2.json index 25c991c2..11e15a0b 100644 --- a/src/packs/domains/domainCard_Rejuvenation_Barrier_HtWx5IIemCoorMj2.json +++ b/src/packs/domains/domainCard_Rejuvenation_Barrier_HtWx5IIemCoorMj2.json @@ -25,8 +25,8 @@ "consumeOnSuccess": true }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Restoration_wUQFsRtww18naYaq.json b/src/packs/domains/domainCard_Restoration_wUQFsRtww18naYaq.json index 8d4d7695..a83044a0 100644 --- a/src/packs/domains/domainCard_Restoration_wUQFsRtww18naYaq.json +++ b/src/packs/domains/domainCard_Restoration_wUQFsRtww18naYaq.json @@ -42,8 +42,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -68,7 +68,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -119,8 +119,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -145,7 +145,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Resurrection_z30ciOwQI7g3tHla.json b/src/packs/domains/domainCard_Resurrection_z30ciOwQI7g3tHla.json index 82b1b4fa..b7faa7ae 100644 --- a/src/packs/domains/domainCard_Resurrection_z30ciOwQI7g3tHla.json +++ b/src/packs/domains/domainCard_Resurrection_z30ciOwQI7g3tHla.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -72,7 +72,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Rift_Walker_vd5STqX29RpYbGxa.json b/src/packs/domains/domainCard_Rift_Walker_vd5STqX29RpYbGxa.json index c112e373..163cd293 100644 --- a/src/packs/domains/domainCard_Rift_Walker_vd5STqX29RpYbGxa.json +++ b/src/packs/domains/domainCard_Rift_Walker_vd5STqX29RpYbGxa.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Rise_Up_oDIZoC4l19Nli0Fj.json b/src/packs/domains/domainCard_Rise_Up_oDIZoC4l19Nli0Fj.json index 38c900b2..5d46562d 100644 --- a/src/packs/domains/domainCard_Rise_Up_oDIZoC4l19Nli0Fj.json +++ b/src/packs/domains/domainCard_Rise_Up_oDIZoC4l19Nli0Fj.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Rune_Ward_GEhBUmv9Bj7oJfHk.json b/src/packs/domains/domainCard_Rune_Ward_GEhBUmv9Bj7oJfHk.json index 54b0edbb..01515230 100644 --- a/src/packs/domains/domainCard_Rune_Ward_GEhBUmv9Bj7oJfHk.json +++ b/src/packs/domains/domainCard_Rune_Ward_GEhBUmv9Bj7oJfHk.json @@ -31,7 +31,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Salvation_Beam_4uAFGp3LxiC07woC.json b/src/packs/domains/domainCard_Salvation_Beam_4uAFGp3LxiC07woC.json index c7aeb02f..3f81c8ac 100644 --- a/src/packs/domains/domainCard_Salvation_Beam_4uAFGp3LxiC07woC.json +++ b/src/packs/domains/domainCard_Salvation_Beam_4uAFGp3LxiC07woC.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -59,7 +59,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Second_Wind_ffPbSEvLuFrFsMxl.json b/src/packs/domains/domainCard_Second_Wind_ffPbSEvLuFrFsMxl.json index 8dc535cc..764a3c87 100644 --- a/src/packs/domains/domainCard_Second_Wind_ffPbSEvLuFrFsMxl.json +++ b/src/packs/domains/domainCard_Second_Wind_ffPbSEvLuFrFsMxl.json @@ -34,8 +34,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -60,7 +60,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -111,8 +111,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -137,7 +137,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Sensory_Projection_gZOMzskSOfeiXn54.json b/src/packs/domains/domainCard_Sensory_Projection_gZOMzskSOfeiXn54.json index 2701b0ce..c0aea3df 100644 --- a/src/packs/domains/domainCard_Sensory_Projection_gZOMzskSOfeiXn54.json +++ b/src/packs/domains/domainCard_Sensory_Projection_gZOMzskSOfeiXn54.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json b/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json index 39139dfa..0fc6ce4b 100644 --- a/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json +++ b/src/packs/domains/domainCard_Shadowbind_kguhWlidhxe2GbT0.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Shrug_It_Off_JwfhtgmmuRxg4zhI.json b/src/packs/domains/domainCard_Shrug_It_Off_JwfhtgmmuRxg4zhI.json index 7cabf19d..3e757308 100644 --- a/src/packs/domains/domainCard_Shrug_It_Off_JwfhtgmmuRxg4zhI.json +++ b/src/packs/domains/domainCard_Shrug_It_Off_JwfhtgmmuRxg4zhI.json @@ -32,7 +32,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Soothing_Speech_QED2PDYePOSTbLtC.json b/src/packs/domains/domainCard_Soothing_Speech_QED2PDYePOSTbLtC.json index daecba3b..b7ef626d 100644 --- a/src/packs/domains/domainCard_Soothing_Speech_QED2PDYePOSTbLtC.json +++ b/src/packs/domains/domainCard_Soothing_Speech_QED2PDYePOSTbLtC.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -91,8 +91,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -117,7 +117,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Splintering_Strike_TYKfM3H9vBXyWiH4.json b/src/packs/domains/domainCard_Splintering_Strike_TYKfM3H9vBXyWiH4.json index e36c744c..a63fd477 100644 --- a/src/packs/domains/domainCard_Splintering_Strike_TYKfM3H9vBXyWiH4.json +++ b/src/packs/domains/domainCard_Splintering_Strike_TYKfM3H9vBXyWiH4.json @@ -33,7 +33,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json b/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json index f9b86bd0..2f66c1f0 100644 --- a/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json +++ b/src/packs/domains/domainCard_Stunning_Sunlight_lRHo6ZkK1zybeEoG.json @@ -33,8 +33,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -60,7 +60,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -112,8 +112,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -139,7 +139,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Swift_Step_H6TqCJBaa1eWEQ1z.json b/src/packs/domains/domainCard_Swift_Step_H6TqCJBaa1eWEQ1z.json index bd153045..76e9e6e9 100644 --- a/src/packs/domains/domainCard_Swift_Step_H6TqCJBaa1eWEQ1z.json +++ b/src/packs/domains/domainCard_Swift_Step_H6TqCJBaa1eWEQ1z.json @@ -25,8 +25,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -51,7 +51,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -93,8 +93,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -119,7 +119,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Telekinesis_FgzBppvLjXr0UbUI.json b/src/packs/domains/domainCard_Telekinesis_FgzBppvLjXr0UbUI.json index f80954e7..0436b1aa 100644 --- a/src/packs/domains/domainCard_Telekinesis_FgzBppvLjXr0UbUI.json +++ b/src/packs/domains/domainCard_Telekinesis_FgzBppvLjXr0UbUI.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -72,8 +72,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -99,7 +99,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Teleport_HnPwVrWblYa9hwSt.json b/src/packs/domains/domainCard_Teleport_HnPwVrWblYa9hwSt.json index b4563eac..ff262d6f 100644 --- a/src/packs/domains/domainCard_Teleport_HnPwVrWblYa9hwSt.json +++ b/src/packs/domains/domainCard_Teleport_HnPwVrWblYa9hwSt.json @@ -24,7 +24,7 @@ "recovery": "longRest" }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Tell_No_Lies_HTv9QEPS466WsstP.json b/src/packs/domains/domainCard_Tell_No_Lies_HTv9QEPS466WsstP.json index f1056dfc..1efb1374 100644 --- a/src/packs/domains/domainCard_Tell_No_Lies_HTv9QEPS466WsstP.json +++ b/src/packs/domains/domainCard_Tell_No_Lies_HTv9QEPS466WsstP.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -50,7 +50,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json b/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json index 7d587b02..3599017c 100644 --- a/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json +++ b/src/packs/domains/domainCard_Tempest_X7YaZgFieBlqaPdZ.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -51,7 +51,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -102,8 +102,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -129,7 +129,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -180,8 +180,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -207,7 +207,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Thought_Delver_B4choj481tqajWb9.json b/src/packs/domains/domainCard_Thought_Delver_B4choj481tqajWb9.json index 0dbc078d..7c8d6235 100644 --- a/src/packs/domains/domainCard_Thought_Delver_B4choj481tqajWb9.json +++ b/src/packs/domains/domainCard_Thought_Delver_B4choj481tqajWb9.json @@ -58,7 +58,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Towering_Stalk_n0P3VS1WfxvmXbB6.json b/src/packs/domains/domainCard_Towering_Stalk_n0P3VS1WfxvmXbB6.json index d7d984d1..4696c144 100644 --- a/src/packs/domains/domainCard_Towering_Stalk_n0P3VS1WfxvmXbB6.json +++ b/src/packs/domains/domainCard_Towering_Stalk_n0P3VS1WfxvmXbB6.json @@ -41,8 +41,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -68,7 +68,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Troublemaker_JrdZedm1BFKeV7Yb.json b/src/packs/domains/domainCard_Troublemaker_JrdZedm1BFKeV7Yb.json index 9d740283..161c499f 100644 --- a/src/packs/domains/domainCard_Troublemaker_JrdZedm1BFKeV7Yb.json +++ b/src/packs/domains/domainCard_Troublemaker_JrdZedm1BFKeV7Yb.json @@ -25,8 +25,8 @@ "consumeOnSuccess": true }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -51,7 +51,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Twilight_Toll_SDjjV61TC1NceV1m.json b/src/packs/domains/domainCard_Twilight_Toll_SDjjV61TC1NceV1m.json index a6a987dd..cc7f45c7 100644 --- a/src/packs/domains/domainCard_Twilight_Toll_SDjjV61TC1NceV1m.json +++ b/src/packs/domains/domainCard_Twilight_Toll_SDjjV61TC1NceV1m.json @@ -40,8 +40,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -65,7 +65,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Unbreakable_CUIQmrPjf9VCHmwJ.json b/src/packs/domains/domainCard_Unbreakable_CUIQmrPjf9VCHmwJ.json index e4847ee4..b822b632 100644 --- a/src/packs/domains/domainCard_Unbreakable_CUIQmrPjf9VCHmwJ.json +++ b/src/packs/domains/domainCard_Unbreakable_CUIQmrPjf9VCHmwJ.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Uncanny_Disguise_TV56wSysbU5xAlOa.json b/src/packs/domains/domainCard_Uncanny_Disguise_TV56wSysbU5xAlOa.json index 46d9c472..62953005 100644 --- a/src/packs/domains/domainCard_Uncanny_Disguise_TV56wSysbU5xAlOa.json +++ b/src/packs/domains/domainCard_Uncanny_Disguise_TV56wSysbU5xAlOa.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Unleash_Chaos_o62i0QdbUDIiAhSq.json b/src/packs/domains/domainCard_Unleash_Chaos_o62i0QdbUDIiAhSq.json index 62bd00a0..69049d01 100644 --- a/src/packs/domains/domainCard_Unleash_Chaos_o62i0QdbUDIiAhSq.json +++ b/src/packs/domains/domainCard_Unleash_Chaos_o62i0QdbUDIiAhSq.json @@ -42,8 +42,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -69,7 +69,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json b/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json index 20fe18ea..84ef1025 100644 --- a/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json +++ b/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "armor": { "value": { "custom": { "enabled": true, @@ -50,7 +50,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Veil_of_Night_gV4L5ZZmfPrEbIDh.json b/src/packs/domains/domainCard_Veil_of_Night_gV4L5ZZmfPrEbIDh.json index a6263afe..abac35be 100644 --- a/src/packs/domains/domainCard_Veil_of_Night_gV4L5ZZmfPrEbIDh.json +++ b/src/packs/domains/domainCard_Veil_of_Night_gV4L5ZZmfPrEbIDh.json @@ -24,7 +24,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json b/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json index 85935876..3b7358bc 100644 --- a/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json +++ b/src/packs/domains/domainCard_Vicious_Entangle_qvpvTnkAoRn9vYO4.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -51,7 +51,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Wild_Fortress_9dFvcM1i3bxG3BSA.json b/src/packs/domains/domainCard_Wild_Fortress_9dFvcM1i3bxG3BSA.json index 655f0c2b..d61f914b 100644 --- a/src/packs/domains/domainCard_Wild_Fortress_9dFvcM1i3bxG3BSA.json +++ b/src/packs/domains/domainCard_Wild_Fortress_9dFvcM1i3bxG3BSA.json @@ -32,7 +32,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Words_of_Discord_ZjAdi1FSNCDDHI3X.json b/src/packs/domains/domainCard_Words_of_Discord_ZjAdi1FSNCDDHI3X.json index fb3c6611..d743f5e1 100644 --- a/src/packs/domains/domainCard_Words_of_Discord_ZjAdi1FSNCDDHI3X.json +++ b/src/packs/domains/domainCard_Words_of_Discord_ZjAdi1FSNCDDHI3X.json @@ -24,8 +24,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "resultBased": false, "value": { "custom": { @@ -50,7 +50,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Wrangle_9DwSxHoUwl8Kxj3n.json b/src/packs/domains/domainCard_Wrangle_9DwSxHoUwl8Kxj3n.json index 16753e1e..22042f7d 100644 --- a/src/packs/domains/domainCard_Wrangle_9DwSxHoUwl8Kxj3n.json +++ b/src/packs/domains/domainCard_Wrangle_9DwSxHoUwl8Kxj3n.json @@ -25,7 +25,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/domains/domainCard_Zone_of_Protection_lOZaRb4fCVgQsWB5.json b/src/packs/domains/domainCard_Zone_of_Protection_lOZaRb4fCVgQsWB5.json index 5669173d..19bff136 100644 --- a/src/packs/domains/domainCard_Zone_of_Protection_lOZaRb4fCVgQsWB5.json +++ b/src/packs/domains/domainCard_Zone_of_Protection_lOZaRb4fCVgQsWB5.json @@ -25,7 +25,7 @@ "consumeOnSuccess": true }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json b/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json index 0fa0a09e..75fc932f 100644 --- a/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json +++ b/src/packs/environments/environment_Abandoned_Grove_pGEdzdLkqYtBhxnG.json @@ -183,8 +183,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -210,7 +210,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Ambushed_uGEdNYERCTJBEjc5.json b/src/packs/environments/environment_Ambushed_uGEdNYERCTJBEjc5.json index b0ccd435..ea1a158c 100644 --- a/src/packs/environments/environment_Ambushed_uGEdNYERCTJBEjc5.json +++ b/src/packs/environments/environment_Ambushed_uGEdNYERCTJBEjc5.json @@ -166,8 +166,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -192,7 +192,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json b/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json index a48d9b83..c380a4e2 100644 --- a/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json +++ b/src/packs/environments/environment_Burning_Heart_of_the_Woods_oY69NN4rYxoRE4hl.json @@ -213,7 +213,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -342,8 +342,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -369,7 +369,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -442,8 +442,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -469,7 +469,7 @@ } } } - ], + }, "includeBase": false, "direct": true }, diff --git a/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json b/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json index af0b3a70..e10fad1a 100644 --- a/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json +++ b/src/packs/environments/environment_Bustling_Marketplace_HZKA7hkej7JJY503.json @@ -205,7 +205,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Castle_Siege_1eZ32Esq7rfZOjlu.json b/src/packs/environments/environment_Castle_Siege_1eZ32Esq7rfZOjlu.json index 411a10c7..fdfc9a5d 100644 --- a/src/packs/environments/environment_Castle_Siege_1eZ32Esq7rfZOjlu.json +++ b/src/packs/environments/environment_Castle_Siege_1eZ32Esq7rfZOjlu.json @@ -185,8 +185,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "fear": { "value": { "custom": { "enabled": true, @@ -211,7 +211,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -342,8 +342,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -369,7 +369,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Chaos_Realm_2Z1mKc65LxNk2PqR.json b/src/packs/environments/environment_Chaos_Realm_2Z1mKc65LxNk2PqR.json index 361b15bc..e7c2c4e0 100644 --- a/src/packs/environments/environment_Chaos_Realm_2Z1mKc65LxNk2PqR.json +++ b/src/packs/environments/environment_Chaos_Realm_2Z1mKc65LxNk2PqR.json @@ -150,8 +150,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -176,7 +176,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -265,7 +265,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -381,8 +381,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -408,7 +408,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -552,8 +552,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -578,7 +578,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Cliffside_Ascent_LPpfdlNKqiZIl04w.json b/src/packs/environments/environment_Cliffside_Ascent_LPpfdlNKqiZIl04w.json index 548cf7c4..ef367d67 100644 --- a/src/packs/environments/environment_Cliffside_Ascent_LPpfdlNKqiZIl04w.json +++ b/src/packs/environments/environment_Cliffside_Ascent_LPpfdlNKqiZIl04w.json @@ -214,8 +214,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -240,7 +240,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -292,8 +292,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -317,7 +317,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -343,8 +343,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -368,7 +368,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -394,8 +394,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -419,7 +419,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Divine_Usurpation_4DLYez7VbMCFDAuZ.json b/src/packs/environments/environment_Divine_Usurpation_4DLYez7VbMCFDAuZ.json index d8e9cded..637cdd41 100644 --- a/src/packs/environments/environment_Divine_Usurpation_4DLYez7VbMCFDAuZ.json +++ b/src/packs/environments/environment_Divine_Usurpation_4DLYez7VbMCFDAuZ.json @@ -323,8 +323,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -349,7 +349,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -600,8 +600,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -625,7 +625,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Hallowed_Temple_dsA6j69AnaJhUyqH.json b/src/packs/environments/environment_Hallowed_Temple_dsA6j69AnaJhUyqH.json index f005fa59..c510a87f 100644 --- a/src/packs/environments/environment_Hallowed_Temple_dsA6j69AnaJhUyqH.json +++ b/src/packs/environments/environment_Hallowed_Temple_dsA6j69AnaJhUyqH.json @@ -150,8 +150,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -176,7 +176,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -268,8 +268,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -294,7 +294,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Imperial_Court_jr1xAoXzVwVblzxI.json b/src/packs/environments/environment_Imperial_Court_jr1xAoXzVwVblzxI.json index 4b49c341..5807d43c 100644 --- a/src/packs/environments/environment_Imperial_Court_jr1xAoXzVwVblzxI.json +++ b/src/packs/environments/environment_Imperial_Court_jr1xAoXzVwVblzxI.json @@ -209,8 +209,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -234,7 +234,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -307,7 +307,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { @@ -387,7 +387,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Local_Tavern_cM4X81DOyvxNIi52.json b/src/packs/environments/environment_Local_Tavern_cM4X81DOyvxNIi52.json index 105f230f..da2d2830 100644 --- a/src/packs/environments/environment_Local_Tavern_cM4X81DOyvxNIi52.json +++ b/src/packs/environments/environment_Local_Tavern_cM4X81DOyvxNIi52.json @@ -266,8 +266,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -291,7 +291,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Mountain_Pass_acMu9wJrMZZzLSTJ.json b/src/packs/environments/environment_Mountain_Pass_acMu9wJrMZZzLSTJ.json index 9ba6a918..eaad99f7 100644 --- a/src/packs/environments/environment_Mountain_Pass_acMu9wJrMZZzLSTJ.json +++ b/src/packs/environments/environment_Mountain_Pass_acMu9wJrMZZzLSTJ.json @@ -183,8 +183,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -208,7 +208,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -315,8 +315,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -341,7 +341,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Necromancer_s_Ossuary_h3KyRL7AshhLAmcH.json b/src/packs/environments/environment_Necromancer_s_Ossuary_h3KyRL7AshhLAmcH.json index e96b9177..949e3dc1 100644 --- a/src/packs/environments/environment_Necromancer_s_Ossuary_h3KyRL7AshhLAmcH.json +++ b/src/packs/environments/environment_Necromancer_s_Ossuary_h3KyRL7AshhLAmcH.json @@ -149,8 +149,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -175,7 +175,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -252,8 +252,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -277,7 +277,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -350,7 +350,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Pitched_Battle_EWD3ZsLoK6VMVOf7.json b/src/packs/environments/environment_Pitched_Battle_EWD3ZsLoK6VMVOf7.json index 7be27924..14c724e3 100644 --- a/src/packs/environments/environment_Pitched_Battle_EWD3ZsLoK6VMVOf7.json +++ b/src/packs/environments/environment_Pitched_Battle_EWD3ZsLoK6VMVOf7.json @@ -218,8 +218,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -245,7 +245,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json b/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json index 03dd72e3..6c87c446 100644 --- a/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json +++ b/src/packs/environments/environment_Raging_River_t4cdqTfzcqP3H1vJ.json @@ -230,8 +230,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -257,7 +257,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json b/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json index df692143..588d9cf9 100644 --- a/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json +++ b/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json @@ -48,7 +48,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json b/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json index 8ccc27e3..15b07474 100644 --- a/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json +++ b/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json @@ -20,8 +20,8 @@ "amount": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "applyTo": "stress", "value": { "custom": { @@ -46,7 +46,7 @@ "base": false, "type": [] } - ], + }, "includeBase": false }, "_id": "L8mHf4A8SylyxsMH", diff --git a/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json b/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json index 61d1fed7..82b4f791 100644 --- a/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json +++ b/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json @@ -39,7 +39,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Dragonbloom_Tea_wM18PWWW2Ami4fBG.json b/src/packs/items/consumables/consumable_Dragonbloom_Tea_wM18PWWW2Ami4fBG.json index f484f3c9..2a4c6ac9 100644 --- a/src/packs/items/consumables/consumable_Dragonbloom_Tea_wM18PWWW2Ami4fBG.json +++ b/src/packs/items/consumables/consumable_Dragonbloom_Tea_wM18PWWW2Ami4fBG.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -55,7 +55,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Dripfang_Poison_eU8VpbWB2NHIL47n.json b/src/packs/items/consumables/consumable_Dripfang_Poison_eU8VpbWB2NHIL47n.json index 70070ab2..c37b8bb4 100644 --- a/src/packs/items/consumables/consumable_Dripfang_Poison_eU8VpbWB2NHIL47n.json +++ b/src/packs/items/consumables/consumable_Dripfang_Poison_eU8VpbWB2NHIL47n.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -57,7 +57,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Feast_of_Xuria_aX6NyxkNzu0LcJpt.json b/src/packs/items/consumables/consumable_Feast_of_Xuria_aX6NyxkNzu0LcJpt.json index f98d86f1..b23f091b 100644 --- a/src/packs/items/consumables/consumable_Feast_of_Xuria_aX6NyxkNzu0LcJpt.json +++ b/src/packs/items/consumables/consumable_Feast_of_Xuria_aX6NyxkNzu0LcJpt.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -56,7 +56,7 @@ }, "type": [] }, - { + "stress": { "value": { "custom": { "enabled": true, @@ -81,7 +81,7 @@ }, "type": [] }, - { + "hope": { "value": { "custom": { "enabled": false @@ -105,7 +105,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Health_Potion_Aruc2NLutWuVIjP1.json b/src/packs/items/consumables/consumable_Health_Potion_Aruc2NLutWuVIjP1.json index 8c620942..bc82daa2 100644 --- a/src/packs/items/consumables/consumable_Health_Potion_Aruc2NLutWuVIjP1.json +++ b/src/packs/items/consumables/consumable_Health_Potion_Aruc2NLutWuVIjP1.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Improved_Arcane_Shard_nQTo6mNoPTEVBtkm.json b/src/packs/items/consumables/consumable_Improved_Arcane_Shard_nQTo6mNoPTEVBtkm.json index 2081f33b..b39db9b5 100644 --- a/src/packs/items/consumables/consumable_Improved_Arcane_Shard_nQTo6mNoPTEVBtkm.json +++ b/src/packs/items/consumables/consumable_Improved_Arcane_Shard_nQTo6mNoPTEVBtkm.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -57,7 +57,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Jar_of_Lost_Voices_yUol6M5b8jsbk9za.json b/src/packs/items/consumables/consumable_Jar_of_Lost_Voices_yUol6M5b8jsbk9za.json index c655f7ca..3e716230 100644 --- a/src/packs/items/consumables/consumable_Jar_of_Lost_Voices_yUol6M5b8jsbk9za.json +++ b/src/packs/items/consumables/consumable_Jar_of_Lost_Voices_yUol6M5b8jsbk9za.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -57,7 +57,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Major_Arcane_Shard_AA7bmiwv00lshPrC.json b/src/packs/items/consumables/consumable_Major_Arcane_Shard_AA7bmiwv00lshPrC.json index b9293362..25cb8fb3 100644 --- a/src/packs/items/consumables/consumable_Major_Arcane_Shard_AA7bmiwv00lshPrC.json +++ b/src/packs/items/consumables/consumable_Major_Arcane_Shard_AA7bmiwv00lshPrC.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -55,7 +55,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Major_Health_Potion_cM7pHe8bBAxSZ2xR.json b/src/packs/items/consumables/consumable_Major_Health_Potion_cM7pHe8bBAxSZ2xR.json index 201233ce..843249de 100644 --- a/src/packs/items/consumables/consumable_Major_Health_Potion_cM7pHe8bBAxSZ2xR.json +++ b/src/packs/items/consumables/consumable_Major_Health_Potion_cM7pHe8bBAxSZ2xR.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Major_Stamina_Potion_I4cQ03xbxnc81EGa.json b/src/packs/items/consumables/consumable_Major_Stamina_Potion_I4cQ03xbxnc81EGa.json index 3f7d2a00..ebe07a1f 100644 --- a/src/packs/items/consumables/consumable_Major_Stamina_Potion_I4cQ03xbxnc81EGa.json +++ b/src/packs/items/consumables/consumable_Major_Stamina_Potion_I4cQ03xbxnc81EGa.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Minor_Health_Potion_tPfKtKRRjv8qdSqy.json b/src/packs/items/consumables/consumable_Minor_Health_Potion_tPfKtKRRjv8qdSqy.json index 1e1e31f1..bac0f425 100644 --- a/src/packs/items/consumables/consumable_Minor_Health_Potion_tPfKtKRRjv8qdSqy.json +++ b/src/packs/items/consumables/consumable_Minor_Health_Potion_tPfKtKRRjv8qdSqy.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Minor_Stamina_Potion_b6vGSPFWOlzZZDLO.json b/src/packs/items/consumables/consumable_Minor_Stamina_Potion_b6vGSPFWOlzZZDLO.json index 9895b3ef..79a29e8b 100644 --- a/src/packs/items/consumables/consumable_Minor_Stamina_Potion_b6vGSPFWOlzZZDLO.json +++ b/src/packs/items/consumables/consumable_Minor_Stamina_Potion_b6vGSPFWOlzZZDLO.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Sleeping_Sap_XZavUVlHEvE2srEt.json b/src/packs/items/consumables/consumable_Sleeping_Sap_XZavUVlHEvE2srEt.json index 74fbf749..942f449e 100644 --- a/src/packs/items/consumables/consumable_Sleeping_Sap_XZavUVlHEvE2srEt.json +++ b/src/packs/items/consumables/consumable_Sleeping_Sap_XZavUVlHEvE2srEt.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -56,7 +56,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Snap_Powder_cg6VtQ0eVZjDdcK0.json b/src/packs/items/consumables/consumable_Snap_Powder_cg6VtQ0eVZjDdcK0.json index adcf8a31..1ae34797 100644 --- a/src/packs/items/consumables/consumable_Snap_Powder_cg6VtQ0eVZjDdcK0.json +++ b/src/packs/items/consumables/consumable_Snap_Powder_cg6VtQ0eVZjDdcK0.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -56,7 +56,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Stamina_Potion_hf3k1POoVSooJyN2.json b/src/packs/items/consumables/consumable_Stamina_Potion_hf3k1POoVSooJyN2.json index 9cb4716e..3affdb8e 100644 --- a/src/packs/items/consumables/consumable_Stamina_Potion_hf3k1POoVSooJyN2.json +++ b/src/packs/items/consumables/consumable_Stamina_Potion_hf3k1POoVSooJyN2.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Stardrop_y4c1jrlHrf0wBWOq.json b/src/packs/items/consumables/consumable_Stardrop_y4c1jrlHrf0wBWOq.json index 1a8800cd..be977305 100644 --- a/src/packs/items/consumables/consumable_Stardrop_y4c1jrlHrf0wBWOq.json +++ b/src/packs/items/consumables/consumable_Stardrop_y4c1jrlHrf0wBWOq.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -57,7 +57,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Sun_Tree_Sap_kwexUzdM9wm1Qums.json b/src/packs/items/consumables/consumable_Sun_Tree_Sap_kwexUzdM9wm1Qums.json index 48a61a28..2669a49b 100644 --- a/src/packs/items/consumables/consumable_Sun_Tree_Sap_kwexUzdM9wm1Qums.json +++ b/src/packs/items/consumables/consumable_Sun_Tree_Sap_kwexUzdM9wm1Qums.json @@ -30,7 +30,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Sweet_Moss_GrDrRqWgv7gvl9vn.json b/src/packs/items/consumables/consumable_Sweet_Moss_GrDrRqWgv7gvl9vn.json index f8b6fbb7..c17d6514 100644 --- a/src/packs/items/consumables/consumable_Sweet_Moss_GrDrRqWgv7gvl9vn.json +++ b/src/packs/items/consumables/consumable_Sweet_Moss_GrDrRqWgv7gvl9vn.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -55,7 +55,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -105,8 +105,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": false @@ -130,7 +130,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Unstable_Arcane_Shard_mUepnLbkvFk0ha4Z.json b/src/packs/items/consumables/consumable_Unstable_Arcane_Shard_mUepnLbkvFk0ha4Z.json index 96b83780..a5890ab0 100644 --- a/src/packs/items/consumables/consumable_Unstable_Arcane_Shard_mUepnLbkvFk0ha4Z.json +++ b/src/packs/items/consumables/consumable_Unstable_Arcane_Shard_mUepnLbkvFk0ha4Z.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -57,7 +57,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/consumables/consumable_Varik_Leaves_hvy5BkG3F6iOIXTx.json b/src/packs/items/consumables/consumable_Varik_Leaves_hvy5BkG3F6iOIXTx.json index 79f4d11e..27e83aa4 100644 --- a/src/packs/items/consumables/consumable_Varik_Leaves_hvy5BkG3F6iOIXTx.json +++ b/src/packs/items/consumables/consumable_Varik_Leaves_hvy5BkG3F6iOIXTx.json @@ -30,8 +30,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -56,7 +56,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/items/loot/loot_Bag_of_Ficklesand_v758j4FwNVAurhYK.json b/src/packs/items/loot/loot_Bag_of_Ficklesand_v758j4FwNVAurhYK.json index c083e7ca..2cb80d86 100644 --- a/src/packs/items/loot/loot_Bag_of_Ficklesand_v758j4FwNVAurhYK.json +++ b/src/packs/items/loot/loot_Bag_of_Ficklesand_v758j4FwNVAurhYK.json @@ -21,7 +21,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/loot/loot_Box_of_Many_Goods_bZyT7Qw7iafswlTY.json b/src/packs/items/loot/loot_Box_of_Many_Goods_bZyT7Qw7iafswlTY.json index 1090323f..cb603dc7 100644 --- a/src/packs/items/loot/loot_Box_of_Many_Goods_bZyT7Qw7iafswlTY.json +++ b/src/packs/items/loot/loot_Box_of_Many_Goods_bZyT7Qw7iafswlTY.json @@ -21,7 +21,7 @@ "recovery": "longRest" }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/loot/loot_Calming_Pendant_tgFFMxpuRSiRrrEB.json b/src/packs/items/loot/loot_Calming_Pendant_tgFFMxpuRSiRrrEB.json index 3d5b9651..ea5b50eb 100644 --- a/src/packs/items/loot/loot_Calming_Pendant_tgFFMxpuRSiRrrEB.json +++ b/src/packs/items/loot/loot_Calming_Pendant_tgFFMxpuRSiRrrEB.json @@ -21,7 +21,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/loot/loot_Skeleton_Key_edkNgwy4xghZreBa.json b/src/packs/items/loot/loot_Skeleton_Key_edkNgwy4xghZreBa.json index 72a8d3e0..b5769661 100644 --- a/src/packs/items/loot/loot_Skeleton_Key_edkNgwy4xghZreBa.json +++ b/src/packs/items/loot/loot_Skeleton_Key_edkNgwy4xghZreBa.json @@ -21,7 +21,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/loot/loot_Woven_Net_ARuv48PWUGJGBC4n.json b/src/packs/items/loot/loot_Woven_Net_ARuv48PWUGJGBC4n.json index 99d52ea9..2732b61f 100644 --- a/src/packs/items/loot/loot_Woven_Net_ARuv48PWUGJGBC4n.json +++ b/src/packs/items/loot/loot_Woven_Net_ARuv48PWUGJGBC4n.json @@ -21,7 +21,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/items/weapons/weapon_Aantari_Bow_ijodu5yNBoMxpkHV.json b/src/packs/items/weapons/weapon_Aantari_Bow_ijodu5yNBoMxpkHV.json index 93e6404c..7b51d436 100644 --- a/src/packs/items/weapons/weapon_Aantari_Bow_ijodu5yNBoMxpkHV.json +++ b/src/packs/items/weapons/weapon_Aantari_Bow_ijodu5yNBoMxpkHV.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 11, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json b/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json index 36f1be3a..a727bcd5 100644 --- a/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json +++ b/src/packs/items/weapons/weapon_Advanced_Arcane_Frame_Wheelchair_la3sAWgnvadc4NvP.json @@ -48,8 +48,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -75,7 +75,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Arcane_Gauntlets_hXR56fTKwZ6s1obs.json b/src/packs/items/weapons/weapon_Advanced_Arcane_Gauntlets_hXR56fTKwZ6s1obs.json index 183ac117..67400768 100644 --- a/src/packs/items/weapons/weapon_Advanced_Arcane_Gauntlets_hXR56fTKwZ6s1obs.json +++ b/src/packs/items/weapons/weapon_Advanced_Arcane_Gauntlets_hXR56fTKwZ6s1obs.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Battleaxe_FcbvY1ydbNVMjKvk.json b/src/packs/items/weapons/weapon_Advanced_Battleaxe_FcbvY1ydbNVMjKvk.json index 6d2879d7..e780eeed 100644 --- a/src/packs/items/weapons/weapon_Advanced_Battleaxe_FcbvY1ydbNVMjKvk.json +++ b/src/packs/items/weapons/weapon_Advanced_Battleaxe_FcbvY1ydbNVMjKvk.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Broadsword_WtQAGz0TUgz8Xg70.json b/src/packs/items/weapons/weapon_Advanced_Broadsword_WtQAGz0TUgz8Xg70.json index 9e4a67b0..4581c52f 100644 --- a/src/packs/items/weapons/weapon_Advanced_Broadsword_WtQAGz0TUgz8Xg70.json +++ b/src/packs/items/weapons/weapon_Advanced_Broadsword_WtQAGz0TUgz8Xg70.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Crossbow_3HGs0AgVrdIBTaKG.json b/src/packs/items/weapons/weapon_Advanced_Crossbow_3HGs0AgVrdIBTaKG.json index 44e47499..437423f5 100644 --- a/src/packs/items/weapons/weapon_Advanced_Crossbow_3HGs0AgVrdIBTaKG.json +++ b/src/packs/items/weapons/weapon_Advanced_Crossbow_3HGs0AgVrdIBTaKG.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Cutlass_bw9WO9lxkM9bWZxQ.json b/src/packs/items/weapons/weapon_Advanced_Cutlass_bw9WO9lxkM9bWZxQ.json index a20acb5b..45d9a597 100644 --- a/src/packs/items/weapons/weapon_Advanced_Cutlass_bw9WO9lxkM9bWZxQ.json +++ b/src/packs/items/weapons/weapon_Advanced_Cutlass_bw9WO9lxkM9bWZxQ.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Dagger_mrioysDjNQEIE8hN.json b/src/packs/items/weapons/weapon_Advanced_Dagger_mrioysDjNQEIE8hN.json index a7004807..03f27c99 100644 --- a/src/packs/items/weapons/weapon_Advanced_Dagger_mrioysDjNQEIE8hN.json +++ b/src/packs/items/weapons/weapon_Advanced_Dagger_mrioysDjNQEIE8hN.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Dualstaff_X5x3sC7v2f3L9sjL.json b/src/packs/items/weapons/weapon_Advanced_Dualstaff_X5x3sC7v2f3L9sjL.json index 3baed3d4..033b873c 100644 --- a/src/packs/items/weapons/weapon_Advanced_Dualstaff_X5x3sC7v2f3L9sjL.json +++ b/src/packs/items/weapons/weapon_Advanced_Dualstaff_X5x3sC7v2f3L9sjL.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Glowing_Rings_InQoh8mZPnwarQkX.json b/src/packs/items/weapons/weapon_Advanced_Glowing_Rings_InQoh8mZPnwarQkX.json index 2bdfed49..2ea7b20d 100644 --- a/src/packs/items/weapons/weapon_Advanced_Glowing_Rings_InQoh8mZPnwarQkX.json +++ b/src/packs/items/weapons/weapon_Advanced_Glowing_Rings_InQoh8mZPnwarQkX.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 8, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Grappler_7vvhVl4TDJHtjpFK.json b/src/packs/items/weapons/weapon_Advanced_Grappler_7vvhVl4TDJHtjpFK.json index 01bef9b2..390a0b9a 100644 --- a/src/packs/items/weapons/weapon_Advanced_Grappler_7vvhVl4TDJHtjpFK.json +++ b/src/packs/items/weapons/weapon_Advanced_Grappler_7vvhVl4TDJHtjpFK.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Greatstaff_4UzxqfkwF8gDSdu7.json b/src/packs/items/weapons/weapon_Advanced_Greatstaff_4UzxqfkwF8gDSdu7.json index c66354c2..3cc7b986 100644 --- a/src/packs/items/weapons/weapon_Advanced_Greatstaff_4UzxqfkwF8gDSdu7.json +++ b/src/packs/items/weapons/weapon_Advanced_Greatstaff_4UzxqfkwF8gDSdu7.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Greatsword_MAC6YWTo4lzSotQc.json b/src/packs/items/weapons/weapon_Advanced_Greatsword_MAC6YWTo4lzSotQc.json index 71226630..9e04bf7a 100644 --- a/src/packs/items/weapons/weapon_Advanced_Greatsword_MAC6YWTo4lzSotQc.json +++ b/src/packs/items/weapons/weapon_Advanced_Greatsword_MAC6YWTo4lzSotQc.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Halberd_C8gQn7onAc9wsrCs.json b/src/packs/items/weapons/weapon_Advanced_Halberd_C8gQn7onAc9wsrCs.json index 59d7437d..6c11724c 100644 --- a/src/packs/items/weapons/weapon_Advanced_Halberd_C8gQn7onAc9wsrCs.json +++ b/src/packs/items/weapons/weapon_Advanced_Halberd_C8gQn7onAc9wsrCs.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 8, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Hallowed_Axe_BiyXKX2Mo1TQbKgk.json b/src/packs/items/weapons/weapon_Advanced_Hallowed_Axe_BiyXKX2Mo1TQbKgk.json index e6403810..ce89ccc2 100644 --- a/src/packs/items/weapons/weapon_Advanced_Hallowed_Axe_BiyXKX2Mo1TQbKgk.json +++ b/src/packs/items/weapons/weapon_Advanced_Hallowed_Axe_BiyXKX2Mo1TQbKgk.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Hand_Crossbow_Lsvocst8aGqkBj7g.json b/src/packs/items/weapons/weapon_Advanced_Hand_Crossbow_Lsvocst8aGqkBj7g.json index 521ee38d..88ba7077 100644 --- a/src/packs/items/weapons/weapon_Advanced_Hand_Crossbow_Lsvocst8aGqkBj7g.json +++ b/src/packs/items/weapons/weapon_Advanced_Hand_Crossbow_Lsvocst8aGqkBj7g.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 5, @@ -70,7 +70,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Hand_Runes_PQACczSghZIVTdgZ.json b/src/packs/items/weapons/weapon_Advanced_Hand_Runes_PQACczSghZIVTdgZ.json index 23f33ba1..60ffb789 100644 --- a/src/packs/items/weapons/weapon_Advanced_Hand_Runes_PQACczSghZIVTdgZ.json +++ b/src/packs/items/weapons/weapon_Advanced_Hand_Runes_PQACczSghZIVTdgZ.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json b/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json index 39afe3e6..7f5bb9c7 100644 --- a/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json +++ b/src/packs/items/weapons/weapon_Advanced_Heavy_Frame_Wheelchair_eT2Qwb0RdrLX2hH1.json @@ -48,8 +48,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 9, @@ -75,7 +75,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json b/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json index 4600088d..fca77911 100644 --- a/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json +++ b/src/packs/items/weapons/weapon_Advanced_Light_Frame_Wheelchair_BuMfupnCzHbziQ8o.json @@ -77,8 +77,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -104,7 +104,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Longbow_M5CywMAyPKGgebsJ.json b/src/packs/items/weapons/weapon_Advanced_Longbow_M5CywMAyPKGgebsJ.json index ad8a5bc9..14327a8c 100644 --- a/src/packs/items/weapons/weapon_Advanced_Longbow_M5CywMAyPKGgebsJ.json +++ b/src/packs/items/weapons/weapon_Advanced_Longbow_M5CywMAyPKGgebsJ.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Longsword_9xkB3MWXahrsVP4N.json b/src/packs/items/weapons/weapon_Advanced_Longsword_9xkB3MWXahrsVP4N.json index 2cf2c43c..0b51f2ae 100644 --- a/src/packs/items/weapons/weapon_Advanced_Longsword_9xkB3MWXahrsVP4N.json +++ b/src/packs/items/weapons/weapon_Advanced_Longsword_9xkB3MWXahrsVP4N.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Mace_WreMYiH5uhVDaoVw.json b/src/packs/items/weapons/weapon_Advanced_Mace_WreMYiH5uhVDaoVw.json index db8cde18..e255da65 100644 --- a/src/packs/items/weapons/weapon_Advanced_Mace_WreMYiH5uhVDaoVw.json +++ b/src/packs/items/weapons/weapon_Advanced_Mace_WreMYiH5uhVDaoVw.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Quarterstaff_zJtm2f9ZFKZRtCRg.json b/src/packs/items/weapons/weapon_Advanced_Quarterstaff_zJtm2f9ZFKZRtCRg.json index d6beafb2..00f0b694 100644 --- a/src/packs/items/weapons/weapon_Advanced_Quarterstaff_zJtm2f9ZFKZRtCRg.json +++ b/src/packs/items/weapons/weapon_Advanced_Quarterstaff_zJtm2f9ZFKZRtCRg.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Rapier_KxFne76d7cak15dO.json b/src/packs/items/weapons/weapon_Advanced_Rapier_KxFne76d7cak15dO.json index 315d8401..28c508b8 100644 --- a/src/packs/items/weapons/weapon_Advanced_Rapier_KxFne76d7cak15dO.json +++ b/src/packs/items/weapons/weapon_Advanced_Rapier_KxFne76d7cak15dO.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Returning_Blade_sIGXA4KMeYBUjcEO.json b/src/packs/items/weapons/weapon_Advanced_Returning_Blade_sIGXA4KMeYBUjcEO.json index bbdce2d4..0694a020 100644 --- a/src/packs/items/weapons/weapon_Advanced_Returning_Blade_sIGXA4KMeYBUjcEO.json +++ b/src/packs/items/weapons/weapon_Advanced_Returning_Blade_sIGXA4KMeYBUjcEO.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json b/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json index c1c4fba5..da5d5bf8 100644 --- a/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json +++ b/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Scepter_2Khzuj768yoWN9QK.json b/src/packs/items/weapons/weapon_Advanced_Scepter_2Khzuj768yoWN9QK.json index cf619a89..6dff775a 100644 --- a/src/packs/items/weapons/weapon_Advanced_Scepter_2Khzuj768yoWN9QK.json +++ b/src/packs/items/weapons/weapon_Advanced_Scepter_2Khzuj768yoWN9QK.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -38,7 +38,7 @@ } } } - ] + } }, "range": "melee", "roll": { @@ -115,8 +115,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -142,7 +142,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Shortbow_JpSlJvDR0X8VFDns.json b/src/packs/items/weapons/weapon_Advanced_Shortbow_JpSlJvDR0X8VFDns.json index 5693e814..f5efc9a9 100644 --- a/src/packs/items/weapons/weapon_Advanced_Shortbow_JpSlJvDR0X8VFDns.json +++ b/src/packs/items/weapons/weapon_Advanced_Shortbow_JpSlJvDR0X8VFDns.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Shortstaff_T5exRCqOXhrjSYnI.json b/src/packs/items/weapons/weapon_Advanced_Shortstaff_T5exRCqOXhrjSYnI.json index 71d66d82..0e3b3161 100644 --- a/src/packs/items/weapons/weapon_Advanced_Shortstaff_T5exRCqOXhrjSYnI.json +++ b/src/packs/items/weapons/weapon_Advanced_Shortstaff_T5exRCqOXhrjSYnI.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Shortsword_p3nz5CaGUoyuGVg0.json b/src/packs/items/weapons/weapon_Advanced_Shortsword_p3nz5CaGUoyuGVg0.json index 397fa061..dd48db21 100644 --- a/src/packs/items/weapons/weapon_Advanced_Shortsword_p3nz5CaGUoyuGVg0.json +++ b/src/packs/items/weapons/weapon_Advanced_Shortsword_p3nz5CaGUoyuGVg0.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Small_Dagger_0thN0BpN05KT8Avx.json b/src/packs/items/weapons/weapon_Advanced_Small_Dagger_0thN0BpN05KT8Avx.json index 7af59440..a63789f3 100644 --- a/src/packs/items/weapons/weapon_Advanced_Small_Dagger_0thN0BpN05KT8Avx.json +++ b/src/packs/items/weapons/weapon_Advanced_Small_Dagger_0thN0BpN05KT8Avx.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Spear_pK6dsNABKKp1CIGN.json b/src/packs/items/weapons/weapon_Advanced_Spear_pK6dsNABKKp1CIGN.json index e5f3f8ec..099761b4 100644 --- a/src/packs/items/weapons/weapon_Advanced_Spear_pK6dsNABKKp1CIGN.json +++ b/src/packs/items/weapons/weapon_Advanced_Spear_pK6dsNABKKp1CIGN.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json b/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json index b2fb16d8..9fe47fc0 100644 --- a/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json +++ b/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Wand_jU9jWIardjtdAQcs.json b/src/packs/items/weapons/weapon_Advanced_Wand_jU9jWIardjtdAQcs.json index 4cb4e2b2..8043e360 100644 --- a/src/packs/items/weapons/weapon_Advanced_Wand_jU9jWIardjtdAQcs.json +++ b/src/packs/items/weapons/weapon_Advanced_Wand_jU9jWIardjtdAQcs.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Warhammer_8Lipw3RRKDgBVP0p.json b/src/packs/items/weapons/weapon_Advanced_Warhammer_8Lipw3RRKDgBVP0p.json index 72983f6b..bb142281 100644 --- a/src/packs/items/weapons/weapon_Advanced_Warhammer_8Lipw3RRKDgBVP0p.json +++ b/src/packs/items/weapons/weapon_Advanced_Warhammer_8Lipw3RRKDgBVP0p.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Advanced_Whip_01izMUSJcAUo79IX.json b/src/packs/items/weapons/weapon_Advanced_Whip_01izMUSJcAUo79IX.json index 6e1753c8..142eb542 100644 --- a/src/packs/items/weapons/weapon_Advanced_Whip_01izMUSJcAUo79IX.json +++ b/src/packs/items/weapons/weapon_Advanced_Whip_01izMUSJcAUo79IX.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json b/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json index 58ef5f4b..6959fb30 100644 --- a/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json +++ b/src/packs/items/weapons/weapon_Arcane_Frame_Wheelchair_XRChepscgr75Uug7.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": null, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Arcane_Gauntlets_PC5EyEIq7NWBV0n5.json b/src/packs/items/weapons/weapon_Arcane_Gauntlets_PC5EyEIq7NWBV0n5.json index 8d9e3c31..29afcc13 100644 --- a/src/packs/items/weapons/weapon_Arcane_Gauntlets_PC5EyEIq7NWBV0n5.json +++ b/src/packs/items/weapons/weapon_Arcane_Gauntlets_PC5EyEIq7NWBV0n5.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Axe_of_Fortunis_YcS1rHgfnSlla8Xf.json b/src/packs/items/weapons/weapon_Axe_of_Fortunis_YcS1rHgfnSlla8Xf.json index 6ce0ce68..8e4b00c5 100644 --- a/src/packs/items/weapons/weapon_Axe_of_Fortunis_YcS1rHgfnSlla8Xf.json +++ b/src/packs/items/weapons/weapon_Axe_of_Fortunis_YcS1rHgfnSlla8Xf.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 8, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Battleaxe_fbDYUja3ll9vCtrB.json b/src/packs/items/weapons/weapon_Battleaxe_fbDYUja3ll9vCtrB.json index 9b43f8dc..9ab3321e 100644 --- a/src/packs/items/weapons/weapon_Battleaxe_fbDYUja3ll9vCtrB.json +++ b/src/packs/items/weapons/weapon_Battleaxe_fbDYUja3ll9vCtrB.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Black_Powder_Revolver_AokqTusPzn0hghkE.json b/src/packs/items/weapons/weapon_Black_Powder_Revolver_AokqTusPzn0hghkE.json index 845fee44..34371c2b 100644 --- a/src/packs/items/weapons/weapon_Black_Powder_Revolver_AokqTusPzn0hghkE.json +++ b/src/packs/items/weapons/weapon_Black_Powder_Revolver_AokqTusPzn0hghkE.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 8, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Bladed_Whip_5faflfNz20cFW1EM.json b/src/packs/items/weapons/weapon_Bladed_Whip_5faflfNz20cFW1EM.json index 5238578f..2b2a5b9c 100644 --- a/src/packs/items/weapons/weapon_Bladed_Whip_5faflfNz20cFW1EM.json +++ b/src/packs/items/weapons/weapon_Bladed_Whip_5faflfNz20cFW1EM.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Blessed_Anlace_n1oPTk5czTIGTkVj.json b/src/packs/items/weapons/weapon_Blessed_Anlace_n1oPTk5czTIGTkVj.json index 82140411..14448edc 100644 --- a/src/packs/items/weapons/weapon_Blessed_Anlace_n1oPTk5czTIGTkVj.json +++ b/src/packs/items/weapons/weapon_Blessed_Anlace_n1oPTk5czTIGTkVj.json @@ -19,8 +19,8 @@ "amount": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "applyTo": "hitPoints", "value": { "custom": { @@ -45,7 +45,7 @@ "base": false, "type": [] } - ], + }, "includeBase": false }, "_id": "o18UvqLPWLe1A8XJ", @@ -117,8 +117,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -144,7 +144,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Bloodstaff_IoMVDz92WVvfGGdc.json b/src/packs/items/weapons/weapon_Bloodstaff_IoMVDz92WVvfGGdc.json index 2450d69c..ab6bb15d 100644 --- a/src/packs/items/weapons/weapon_Bloodstaff_IoMVDz92WVvfGGdc.json +++ b/src/packs/items/weapons/weapon_Bloodstaff_IoMVDz92WVvfGGdc.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d20", "bonus": 7, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Blunderbuss_SLFrK0WmldPo0shz.json b/src/packs/items/weapons/weapon_Blunderbuss_SLFrK0WmldPo0shz.json index 1fba6130..9b2f455a 100644 --- a/src/packs/items/weapons/weapon_Blunderbuss_SLFrK0WmldPo0shz.json +++ b/src/packs/items/weapons/weapon_Blunderbuss_SLFrK0WmldPo0shz.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Braveshield_QEvgVoz9xKBSKsGi.json b/src/packs/items/weapons/weapon_Braveshield_QEvgVoz9xKBSKsGi.json index aef812a6..2f5ec85d 100644 --- a/src/packs/items/weapons/weapon_Braveshield_QEvgVoz9xKBSKsGi.json +++ b/src/packs/items/weapons/weapon_Braveshield_QEvgVoz9xKBSKsGi.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Bravesword_QZrWAkprA2tL2MOI.json b/src/packs/items/weapons/weapon_Bravesword_QZrWAkprA2tL2MOI.json index 7c3e65f5..412a7083 100644 --- a/src/packs/items/weapons/weapon_Bravesword_QZrWAkprA2tL2MOI.json +++ b/src/packs/items/weapons/weapon_Bravesword_QZrWAkprA2tL2MOI.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 7, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Broadsword_1cwWNt4sqlgA8gCT.json b/src/packs/items/weapons/weapon_Broadsword_1cwWNt4sqlgA8gCT.json index 0e9a557e..87c6f7e8 100644 --- a/src/packs/items/weapons/weapon_Broadsword_1cwWNt4sqlgA8gCT.json +++ b/src/packs/items/weapons/weapon_Broadsword_1cwWNt4sqlgA8gCT.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "type": [ "physical" ], @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Buckler_EmFTp9wzT6MHSaNz.json b/src/packs/items/weapons/weapon_Buckler_EmFTp9wzT6MHSaNz.json index 4d815a6c..be147888 100644 --- a/src/packs/items/weapons/weapon_Buckler_EmFTp9wzT6MHSaNz.json +++ b/src/packs/items/weapons/weapon_Buckler_EmFTp9wzT6MHSaNz.json @@ -87,8 +87,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": 4, @@ -114,7 +114,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Casting_Sword_2Fbf2cxLfbdGkU4I.json b/src/packs/items/weapons/weapon_Casting_Sword_2Fbf2cxLfbdGkU4I.json index 9af34d45..c861e735 100644 --- a/src/packs/items/weapons/weapon_Casting_Sword_2Fbf2cxLfbdGkU4I.json +++ b/src/packs/items/weapons/weapon_Casting_Sword_2Fbf2cxLfbdGkU4I.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -36,7 +36,7 @@ } } } - ] + } }, "range": "far", "roll": { @@ -113,8 +113,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 4, @@ -140,7 +140,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Crossbow_cw7HG1Z7hp7OOLD0.json b/src/packs/items/weapons/weapon_Crossbow_cw7HG1Z7hp7OOLD0.json index 749ef4aa..62ad7f3d 100644 --- a/src/packs/items/weapons/weapon_Crossbow_cw7HG1Z7hp7OOLD0.json +++ b/src/packs/items/weapons/weapon_Crossbow_cw7HG1Z7hp7OOLD0.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Curved_Dagger_Fk69R40svV0kanZD.json b/src/packs/items/weapons/weapon_Curved_Dagger_Fk69R40svV0kanZD.json index a98a56b1..1af2c372 100644 --- a/src/packs/items/weapons/weapon_Curved_Dagger_Fk69R40svV0kanZD.json +++ b/src/packs/items/weapons/weapon_Curved_Dagger_Fk69R40svV0kanZD.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Cutlass_CWrbnethuILXrEpA.json b/src/packs/items/weapons/weapon_Cutlass_CWrbnethuILXrEpA.json index 7343b92c..4750891f 100644 --- a/src/packs/items/weapons/weapon_Cutlass_CWrbnethuILXrEpA.json +++ b/src/packs/items/weapons/weapon_Cutlass_CWrbnethuILXrEpA.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Dagger_iStO0BbeMTTR0rQi.json b/src/packs/items/weapons/weapon_Dagger_iStO0BbeMTTR0rQi.json index 5ef12e05..4818c79f 100644 --- a/src/packs/items/weapons/weapon_Dagger_iStO0BbeMTTR0rQi.json +++ b/src/packs/items/weapons/weapon_Dagger_iStO0BbeMTTR0rQi.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Devouring_Dagger_C5wSGglR8e0euQnY.json b/src/packs/items/weapons/weapon_Devouring_Dagger_C5wSGglR8e0euQnY.json index e00d665c..7775501d 100644 --- a/src/packs/items/weapons/weapon_Devouring_Dagger_C5wSGglR8e0euQnY.json +++ b/src/packs/items/weapons/weapon_Devouring_Dagger_C5wSGglR8e0euQnY.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Double_Flail_xm1yU7k58fMgXxRR.json b/src/packs/items/weapons/weapon_Double_Flail_xm1yU7k58fMgXxRR.json index a118b399..e5b603c6 100644 --- a/src/packs/items/weapons/weapon_Double_Flail_xm1yU7k58fMgXxRR.json +++ b/src/packs/items/weapons/weapon_Double_Flail_xm1yU7k58fMgXxRR.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 8, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Dual_Ended_Sword_nXjuBa215H1sTUK3.json b/src/packs/items/weapons/weapon_Dual_Ended_Sword_nXjuBa215H1sTUK3.json index da15604c..df1c3e54 100644 --- a/src/packs/items/weapons/weapon_Dual_Ended_Sword_nXjuBa215H1sTUK3.json +++ b/src/packs/items/weapons/weapon_Dual_Ended_Sword_nXjuBa215H1sTUK3.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Dualstaff_j8cdNeIUYxxzFVji.json b/src/packs/items/weapons/weapon_Dualstaff_j8cdNeIUYxxzFVji.json index e7c458c3..a3b44d76 100644 --- a/src/packs/items/weapons/weapon_Dualstaff_j8cdNeIUYxxzFVji.json +++ b/src/packs/items/weapons/weapon_Dualstaff_j8cdNeIUYxxzFVji.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Ego_Blade_G7rH31KQ5eEZXcv0.json b/src/packs/items/weapons/weapon_Ego_Blade_G7rH31KQ5eEZXcv0.json index 36d3b0ba..17e24aea 100644 --- a/src/packs/items/weapons/weapon_Ego_Blade_G7rH31KQ5eEZXcv0.json +++ b/src/packs/items/weapons/weapon_Ego_Blade_G7rH31KQ5eEZXcv0.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 4, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Elder_Bow_JdWcn9W1edhAEInL.json b/src/packs/items/weapons/weapon_Elder_Bow_JdWcn9W1edhAEInL.json index 35659402..73bb5a46 100644 --- a/src/packs/items/weapons/weapon_Elder_Bow_JdWcn9W1edhAEInL.json +++ b/src/packs/items/weapons/weapon_Elder_Bow_JdWcn9W1edhAEInL.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Extended_Polearm_fJHKMxZokVP34MCi.json b/src/packs/items/weapons/weapon_Extended_Polearm_fJHKMxZokVP34MCi.json index 62bcb3e0..35829bd5 100644 --- a/src/packs/items/weapons/weapon_Extended_Polearm_fJHKMxZokVP34MCi.json +++ b/src/packs/items/weapons/weapon_Extended_Polearm_fJHKMxZokVP34MCi.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 10, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Finehair_Bow_ykF3jouxHZ6YR8Bg.json b/src/packs/items/weapons/weapon_Finehair_Bow_ykF3jouxHZ6YR8Bg.json index 6dc27659..d1bd58b5 100644 --- a/src/packs/items/weapons/weapon_Finehair_Bow_ykF3jouxHZ6YR8Bg.json +++ b/src/packs/items/weapons/weapon_Finehair_Bow_ykF3jouxHZ6YR8Bg.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 5, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Firestaff_BtCm2RhWEfs00g38.json b/src/packs/items/weapons/weapon_Firestaff_BtCm2RhWEfs00g38.json index 983f98d1..ba7350f4 100644 --- a/src/packs/items/weapons/weapon_Firestaff_BtCm2RhWEfs00g38.json +++ b/src/packs/items/weapons/weapon_Firestaff_BtCm2RhWEfs00g38.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Flickerfly_Blade_xLJ5RRpUoTRmAC3G.json b/src/packs/items/weapons/weapon_Flickerfly_Blade_xLJ5RRpUoTRmAC3G.json index 5dd5f04e..acf0cfd6 100644 --- a/src/packs/items/weapons/weapon_Flickerfly_Blade_xLJ5RRpUoTRmAC3G.json +++ b/src/packs/items/weapons/weapon_Flickerfly_Blade_xLJ5RRpUoTRmAC3G.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 5, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Floating_Bladeshards_3vti3xfo0wJND7ew.json b/src/packs/items/weapons/weapon_Floating_Bladeshards_3vti3xfo0wJND7ew.json index 232f26e9..0460e12d 100644 --- a/src/packs/items/weapons/weapon_Floating_Bladeshards_3vti3xfo0wJND7ew.json +++ b/src/packs/items/weapons/weapon_Floating_Bladeshards_3vti3xfo0wJND7ew.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Fusion_Gloves_uK1RhtYAsDeoPNGx.json b/src/packs/items/weapons/weapon_Fusion_Gloves_uK1RhtYAsDeoPNGx.json index 747bc046..034ad5cf 100644 --- a/src/packs/items/weapons/weapon_Fusion_Gloves_uK1RhtYAsDeoPNGx.json +++ b/src/packs/items/weapons/weapon_Fusion_Gloves_uK1RhtYAsDeoPNGx.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Ghostblade_6gFvOFTE97QZ74Zr.json b/src/packs/items/weapons/weapon_Ghostblade_6gFvOFTE97QZ74Zr.json index 7784b43d..0e17e0c2 100644 --- a/src/packs/items/weapons/weapon_Ghostblade_6gFvOFTE97QZ74Zr.json +++ b/src/packs/items/weapons/weapon_Ghostblade_6gFvOFTE97QZ74Zr.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 7, @@ -69,7 +69,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Gilded_Bow_ctTgFfMbM3YtmsYU.json b/src/packs/items/weapons/weapon_Gilded_Bow_ctTgFfMbM3YtmsYU.json index 88f5a163..0147cfdb 100644 --- a/src/packs/items/weapons/weapon_Gilded_Bow_ctTgFfMbM3YtmsYU.json +++ b/src/packs/items/weapons/weapon_Gilded_Bow_ctTgFfMbM3YtmsYU.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Gilded_Falchion_VwcOgqnzjf9LBj2S.json b/src/packs/items/weapons/weapon_Gilded_Falchion_VwcOgqnzjf9LBj2S.json index ee8afebc..fdf5835e 100644 --- a/src/packs/items/weapons/weapon_Gilded_Falchion_VwcOgqnzjf9LBj2S.json +++ b/src/packs/items/weapons/weapon_Gilded_Falchion_VwcOgqnzjf9LBj2S.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Glowing_Rings_wG9f5NpCwSbaLy8t.json b/src/packs/items/weapons/weapon_Glowing_Rings_wG9f5NpCwSbaLy8t.json index 214d08a9..8996dbc8 100644 --- a/src/packs/items/weapons/weapon_Glowing_Rings_wG9f5NpCwSbaLy8t.json +++ b/src/packs/items/weapons/weapon_Glowing_Rings_wG9f5NpCwSbaLy8t.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Grappler_iEzPscUc18GuFoB6.json b/src/packs/items/weapons/weapon_Grappler_iEzPscUc18GuFoB6.json index 7f42998b..9a9158c7 100644 --- a/src/packs/items/weapons/weapon_Grappler_iEzPscUc18GuFoB6.json +++ b/src/packs/items/weapons/weapon_Grappler_iEzPscUc18GuFoB6.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": null, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Greatbow_MXBpbqQsZFln4rZk.json b/src/packs/items/weapons/weapon_Greatbow_MXBpbqQsZFln4rZk.json index f56e77c7..87118bb8 100644 --- a/src/packs/items/weapons/weapon_Greatbow_MXBpbqQsZFln4rZk.json +++ b/src/packs/items/weapons/weapon_Greatbow_MXBpbqQsZFln4rZk.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Greatstaff_Yk8pTEmyLLi4095S.json b/src/packs/items/weapons/weapon_Greatstaff_Yk8pTEmyLLi4095S.json index 66c12e5e..798541d1 100644 --- a/src/packs/items/weapons/weapon_Greatstaff_Yk8pTEmyLLi4095S.json +++ b/src/packs/items/weapons/weapon_Greatstaff_Yk8pTEmyLLi4095S.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": null, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Greatsword_70ysaFJDREwTgvZa.json b/src/packs/items/weapons/weapon_Greatsword_70ysaFJDREwTgvZa.json index f60e438d..f0e450a4 100644 --- a/src/packs/items/weapons/weapon_Greatsword_70ysaFJDREwTgvZa.json +++ b/src/packs/items/weapons/weapon_Greatsword_70ysaFJDREwTgvZa.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 3, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Halberd_qT7FfmauAumOjJoq.json b/src/packs/items/weapons/weapon_Halberd_qT7FfmauAumOjJoq.json index 6259e63e..5a990da3 100644 --- a/src/packs/items/weapons/weapon_Halberd_qT7FfmauAumOjJoq.json +++ b/src/packs/items/weapons/weapon_Halberd_qT7FfmauAumOjJoq.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 2, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hallowed_Axe_Vayg7CnRTFBrunjM.json b/src/packs/items/weapons/weapon_Hallowed_Axe_Vayg7CnRTFBrunjM.json index 9d8885b9..1fe37eba 100644 --- a/src/packs/items/weapons/weapon_Hallowed_Axe_Vayg7CnRTFBrunjM.json +++ b/src/packs/items/weapons/weapon_Hallowed_Axe_Vayg7CnRTFBrunjM.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hammer_of_Exota_0lAkBEUvbM9Osmqb.json b/src/packs/items/weapons/weapon_Hammer_of_Exota_0lAkBEUvbM9Osmqb.json index ba955850..15e00303 100644 --- a/src/packs/items/weapons/weapon_Hammer_of_Exota_0lAkBEUvbM9Osmqb.json +++ b/src/packs/items/weapons/weapon_Hammer_of_Exota_0lAkBEUvbM9Osmqb.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hammer_of_Wrath_1R4uzOpWD8bkYRUm.json b/src/packs/items/weapons/weapon_Hammer_of_Wrath_1R4uzOpWD8bkYRUm.json index 122c0769..fdab6f80 100644 --- a/src/packs/items/weapons/weapon_Hammer_of_Wrath_1R4uzOpWD8bkYRUm.json +++ b/src/packs/items/weapons/weapon_Hammer_of_Wrath_1R4uzOpWD8bkYRUm.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 7, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hand_Cannon_MyGz8nd5sieRQ7zl.json b/src/packs/items/weapons/weapon_Hand_Cannon_MyGz8nd5sieRQ7zl.json index 1396fb1d..4967c6e4 100644 --- a/src/packs/items/weapons/weapon_Hand_Cannon_MyGz8nd5sieRQ7zl.json +++ b/src/packs/items/weapons/weapon_Hand_Cannon_MyGz8nd5sieRQ7zl.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 12, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hand_Crossbow_zxKt6qXe7uZB6ljm.json b/src/packs/items/weapons/weapon_Hand_Crossbow_zxKt6qXe7uZB6ljm.json index 9f69ffc9..6501f5d4 100644 --- a/src/packs/items/weapons/weapon_Hand_Crossbow_zxKt6qXe7uZB6ljm.json +++ b/src/packs/items/weapons/weapon_Hand_Crossbow_zxKt6qXe7uZB6ljm.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hand_Runes_3whiedn0jBMNRdIb.json b/src/packs/items/weapons/weapon_Hand_Runes_3whiedn0jBMNRdIb.json index 32761768..00cb6e9b 100644 --- a/src/packs/items/weapons/weapon_Hand_Runes_3whiedn0jBMNRdIb.json +++ b/src/packs/items/weapons/weapon_Hand_Runes_3whiedn0jBMNRdIb.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": null, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Hand_Sling_RAIaoMi6iO1PKIlK.json b/src/packs/items/weapons/weapon_Hand_Sling_RAIaoMi6iO1PKIlK.json index 82641ca1..5c110b70 100644 --- a/src/packs/items/weapons/weapon_Hand_Sling_RAIaoMi6iO1PKIlK.json +++ b/src/packs/items/weapons/weapon_Hand_Sling_RAIaoMi6iO1PKIlK.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -36,7 +36,7 @@ } } } - ] + } }, "range": "close", "roll": { @@ -113,8 +113,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -140,7 +140,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json b/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json index db20063d..e74ff4aa 100644 --- a/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json +++ b/src/packs/items/weapons/weapon_Heavy_Frame_Wheelchair_XjPQjhRCH08VUIbr.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 3, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Ilmari_s_Rifle_TMrUzVC3KvcHmdt8.json b/src/packs/items/weapons/weapon_Ilmari_s_Rifle_TMrUzVC3KvcHmdt8.json index 8234ab3a..cddd762a 100644 --- a/src/packs/items/weapons/weapon_Ilmari_s_Rifle_TMrUzVC3KvcHmdt8.json +++ b/src/packs/items/weapons/weapon_Ilmari_s_Rifle_TMrUzVC3KvcHmdt8.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Impact_Gauntlet_Zg6IutksQVOqAg8K.json b/src/packs/items/weapons/weapon_Impact_Gauntlet_Zg6IutksQVOqAg8K.json index 8c8cc81d..5e9891f9 100644 --- a/src/packs/items/weapons/weapon_Impact_Gauntlet_Zg6IutksQVOqAg8K.json +++ b/src/packs/items/weapons/weapon_Impact_Gauntlet_Zg6IutksQVOqAg8K.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 11, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json b/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json index fad45a2b..33f96030 100644 --- a/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json +++ b/src/packs/items/weapons/weapon_Improved_Arcane_Frame_Wheelchair_N9P695V5KKlJbAY5.json @@ -48,8 +48,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -75,7 +75,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Arcane_Gauntlets_kENTDpa1hr5LDhIT.json b/src/packs/items/weapons/weapon_Improved_Arcane_Gauntlets_kENTDpa1hr5LDhIT.json index 40b85dde..1880d45b 100644 --- a/src/packs/items/weapons/weapon_Improved_Arcane_Gauntlets_kENTDpa1hr5LDhIT.json +++ b/src/packs/items/weapons/weapon_Improved_Arcane_Gauntlets_kENTDpa1hr5LDhIT.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Battleaxe_nxGUpuHLmuKdKsDC.json b/src/packs/items/weapons/weapon_Improved_Battleaxe_nxGUpuHLmuKdKsDC.json index 23068751..4652d62d 100644 --- a/src/packs/items/weapons/weapon_Improved_Battleaxe_nxGUpuHLmuKdKsDC.json +++ b/src/packs/items/weapons/weapon_Improved_Battleaxe_nxGUpuHLmuKdKsDC.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Broadsword_OcKeLJxvmdT81VBc.json b/src/packs/items/weapons/weapon_Improved_Broadsword_OcKeLJxvmdT81VBc.json index a17caadf..6d6f1921 100644 --- a/src/packs/items/weapons/weapon_Improved_Broadsword_OcKeLJxvmdT81VBc.json +++ b/src/packs/items/weapons/weapon_Improved_Broadsword_OcKeLJxvmdT81VBc.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Crossbow_55NwHIIZHUeKSE3M.json b/src/packs/items/weapons/weapon_Improved_Crossbow_55NwHIIZHUeKSE3M.json index 185f8f11..5bc082ef 100644 --- a/src/packs/items/weapons/weapon_Improved_Crossbow_55NwHIIZHUeKSE3M.json +++ b/src/packs/items/weapons/weapon_Improved_Crossbow_55NwHIIZHUeKSE3M.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Cutlass_ddRjXnp2vbohu7rJ.json b/src/packs/items/weapons/weapon_Improved_Cutlass_ddRjXnp2vbohu7rJ.json index 520e5679..87dfbfae 100644 --- a/src/packs/items/weapons/weapon_Improved_Cutlass_ddRjXnp2vbohu7rJ.json +++ b/src/packs/items/weapons/weapon_Improved_Cutlass_ddRjXnp2vbohu7rJ.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Dagger_ScjTkb9qrndhlk9S.json b/src/packs/items/weapons/weapon_Improved_Dagger_ScjTkb9qrndhlk9S.json index 1db4504e..194ec879 100644 --- a/src/packs/items/weapons/weapon_Improved_Dagger_ScjTkb9qrndhlk9S.json +++ b/src/packs/items/weapons/weapon_Improved_Dagger_ScjTkb9qrndhlk9S.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Dualstaff_f7hhHlZ5nL3AhYEM.json b/src/packs/items/weapons/weapon_Improved_Dualstaff_f7hhHlZ5nL3AhYEM.json index 84cc75ba..d614130e 100644 --- a/src/packs/items/weapons/weapon_Improved_Dualstaff_f7hhHlZ5nL3AhYEM.json +++ b/src/packs/items/weapons/weapon_Improved_Dualstaff_f7hhHlZ5nL3AhYEM.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Glowing_Rings_N5amhkxR1xn3B7r2.json b/src/packs/items/weapons/weapon_Improved_Glowing_Rings_N5amhkxR1xn3B7r2.json index 01439f5b..f8b29720 100644 --- a/src/packs/items/weapons/weapon_Improved_Glowing_Rings_N5amhkxR1xn3B7r2.json +++ b/src/packs/items/weapons/weapon_Improved_Glowing_Rings_N5amhkxR1xn3B7r2.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 5, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Grappler_3T3o9zfe61t22L1H.json b/src/packs/items/weapons/weapon_Improved_Grappler_3T3o9zfe61t22L1H.json index 74ee510a..31dfff22 100644 --- a/src/packs/items/weapons/weapon_Improved_Grappler_3T3o9zfe61t22L1H.json +++ b/src/packs/items/weapons/weapon_Improved_Grappler_3T3o9zfe61t22L1H.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 2, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Greatstaff_LCuTrYXi4lhg6LqW.json b/src/packs/items/weapons/weapon_Improved_Greatstaff_LCuTrYXi4lhg6LqW.json index cf1bdf63..25be3393 100644 --- a/src/packs/items/weapons/weapon_Improved_Greatstaff_LCuTrYXi4lhg6LqW.json +++ b/src/packs/items/weapons/weapon_Improved_Greatstaff_LCuTrYXi4lhg6LqW.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Greatsword_FPX4ouDrxXiQ5MDf.json b/src/packs/items/weapons/weapon_Improved_Greatsword_FPX4ouDrxXiQ5MDf.json index f71e5ea6..60e5dd53 100644 --- a/src/packs/items/weapons/weapon_Improved_Greatsword_FPX4ouDrxXiQ5MDf.json +++ b/src/packs/items/weapons/weapon_Improved_Greatsword_FPX4ouDrxXiQ5MDf.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Halberd_F9PETfCQGwczBPif.json b/src/packs/items/weapons/weapon_Improved_Halberd_F9PETfCQGwczBPif.json index 168d8953..fb5a1dcc 100644 --- a/src/packs/items/weapons/weapon_Improved_Halberd_F9PETfCQGwczBPif.json +++ b/src/packs/items/weapons/weapon_Improved_Halberd_F9PETfCQGwczBPif.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 5, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Hallowed_Axe_wFOXMN2uiX4j6Gd9.json b/src/packs/items/weapons/weapon_Improved_Hallowed_Axe_wFOXMN2uiX4j6Gd9.json index a79ad56d..71b28bea 100644 --- a/src/packs/items/weapons/weapon_Improved_Hallowed_Axe_wFOXMN2uiX4j6Gd9.json +++ b/src/packs/items/weapons/weapon_Improved_Hallowed_Axe_wFOXMN2uiX4j6Gd9.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Hand_Crossbow_XEDRkuw3BhMoVBn9.json b/src/packs/items/weapons/weapon_Improved_Hand_Crossbow_XEDRkuw3BhMoVBn9.json index 74e74f2c..91641856 100644 --- a/src/packs/items/weapons/weapon_Improved_Hand_Crossbow_XEDRkuw3BhMoVBn9.json +++ b/src/packs/items/weapons/weapon_Improved_Hand_Crossbow_XEDRkuw3BhMoVBn9.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Hand_Runes_jMEukC3VpNDz5AOD.json b/src/packs/items/weapons/weapon_Improved_Hand_Runes_jMEukC3VpNDz5AOD.json index 546e9762..dc7f2005 100644 --- a/src/packs/items/weapons/weapon_Improved_Hand_Runes_jMEukC3VpNDz5AOD.json +++ b/src/packs/items/weapons/weapon_Improved_Hand_Runes_jMEukC3VpNDz5AOD.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json b/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json index 3a386fa8..e65cc221 100644 --- a/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json +++ b/src/packs/items/weapons/weapon_Improved_Heavy_Frame_Wheelchair_L5KeCtrs768PmYWW.json @@ -48,8 +48,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 6, @@ -75,7 +75,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json b/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json index 6fbe3c9d..315ceaf3 100644 --- a/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json +++ b/src/packs/items/weapons/weapon_Improved_Light_Frame_Wheelchair_ZJsetdHKV77ygtCE.json @@ -77,8 +77,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -104,7 +104,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Longbow_NacNonjbzyoVMNhI.json b/src/packs/items/weapons/weapon_Improved_Longbow_NacNonjbzyoVMNhI.json index 787d5a28..c197f726 100644 --- a/src/packs/items/weapons/weapon_Improved_Longbow_NacNonjbzyoVMNhI.json +++ b/src/packs/items/weapons/weapon_Improved_Longbow_NacNonjbzyoVMNhI.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Longsword_QyBZ5NxM8F9nCL9s.json b/src/packs/items/weapons/weapon_Improved_Longsword_QyBZ5NxM8F9nCL9s.json index 982ca3ac..aaa38270 100644 --- a/src/packs/items/weapons/weapon_Improved_Longsword_QyBZ5NxM8F9nCL9s.json +++ b/src/packs/items/weapons/weapon_Improved_Longsword_QyBZ5NxM8F9nCL9s.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Mace_zSLx52U4Yltqx8F1.json b/src/packs/items/weapons/weapon_Improved_Mace_zSLx52U4Yltqx8F1.json index c1b626d5..1ce84304 100644 --- a/src/packs/items/weapons/weapon_Improved_Mace_zSLx52U4Yltqx8F1.json +++ b/src/packs/items/weapons/weapon_Improved_Mace_zSLx52U4Yltqx8F1.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Quarterstaff_BEmAR60PM3ZaiNXa.json b/src/packs/items/weapons/weapon_Improved_Quarterstaff_BEmAR60PM3ZaiNXa.json index 888022ed..9dc81b98 100644 --- a/src/packs/items/weapons/weapon_Improved_Quarterstaff_BEmAR60PM3ZaiNXa.json +++ b/src/packs/items/weapons/weapon_Improved_Quarterstaff_BEmAR60PM3ZaiNXa.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Rapier_LFPH8nD2f4Blv3AM.json b/src/packs/items/weapons/weapon_Improved_Rapier_LFPH8nD2f4Blv3AM.json index cc6099da..e9db95d1 100644 --- a/src/packs/items/weapons/weapon_Improved_Rapier_LFPH8nD2f4Blv3AM.json +++ b/src/packs/items/weapons/weapon_Improved_Rapier_LFPH8nD2f4Blv3AM.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Returning_Blade_SKNwkW23eVQjN4Zy.json b/src/packs/items/weapons/weapon_Improved_Returning_Blade_SKNwkW23eVQjN4Zy.json index 31688a23..1dff30a1 100644 --- a/src/packs/items/weapons/weapon_Improved_Returning_Blade_SKNwkW23eVQjN4Zy.json +++ b/src/packs/items/weapons/weapon_Improved_Returning_Blade_SKNwkW23eVQjN4Zy.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json b/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json index 53a8e9b6..091355c2 100644 --- a/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json +++ b/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": 2, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Scepter_tj26lbNkwy8bORF4.json b/src/packs/items/weapons/weapon_Improved_Scepter_tj26lbNkwy8bORF4.json index dc41692f..ac226b84 100644 --- a/src/packs/items/weapons/weapon_Improved_Scepter_tj26lbNkwy8bORF4.json +++ b/src/packs/items/weapons/weapon_Improved_Scepter_tj26lbNkwy8bORF4.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -38,7 +38,7 @@ } } } - ] + } }, "range": "melee", "roll": { @@ -115,8 +115,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -142,7 +142,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Shortbow_6ZWl6ARfvYBaAMwY.json b/src/packs/items/weapons/weapon_Improved_Shortbow_6ZWl6ARfvYBaAMwY.json index 421b8f8e..b0e101fb 100644 --- a/src/packs/items/weapons/weapon_Improved_Shortbow_6ZWl6ARfvYBaAMwY.json +++ b/src/packs/items/weapons/weapon_Improved_Shortbow_6ZWl6ARfvYBaAMwY.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Shortstaff_Mn8ja5Oi1sXvvPSk.json b/src/packs/items/weapons/weapon_Improved_Shortstaff_Mn8ja5Oi1sXvvPSk.json index 08bf9251..7d90cf94 100644 --- a/src/packs/items/weapons/weapon_Improved_Shortstaff_Mn8ja5Oi1sXvvPSk.json +++ b/src/packs/items/weapons/weapon_Improved_Shortstaff_Mn8ja5Oi1sXvvPSk.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Shortsword_rSyBNRwemBVuTo3H.json b/src/packs/items/weapons/weapon_Improved_Shortsword_rSyBNRwemBVuTo3H.json index df2f324c..96ecd37f 100644 --- a/src/packs/items/weapons/weapon_Improved_Shortsword_rSyBNRwemBVuTo3H.json +++ b/src/packs/items/weapons/weapon_Improved_Shortsword_rSyBNRwemBVuTo3H.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 2, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Small_Dagger_nMuF8ZDZ2aXZVTg6.json b/src/packs/items/weapons/weapon_Improved_Small_Dagger_nMuF8ZDZ2aXZVTg6.json index b69332a5..1553d75d 100644 --- a/src/packs/items/weapons/weapon_Improved_Small_Dagger_nMuF8ZDZ2aXZVTg6.json +++ b/src/packs/items/weapons/weapon_Improved_Small_Dagger_nMuF8ZDZ2aXZVTg6.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 2, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Spear_j5Pt1thLfcvopBij.json b/src/packs/items/weapons/weapon_Improved_Spear_j5Pt1thLfcvopBij.json index ae6b0987..790f9e51 100644 --- a/src/packs/items/weapons/weapon_Improved_Spear_j5Pt1thLfcvopBij.json +++ b/src/packs/items/weapons/weapon_Improved_Spear_j5Pt1thLfcvopBij.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json b/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json index 839d4352..6f55fe3d 100644 --- a/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json +++ b/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 2, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Wand_6d9B2b5X2d2U56jt.json b/src/packs/items/weapons/weapon_Improved_Wand_6d9B2b5X2d2U56jt.json index cecb818d..53ee6746 100644 --- a/src/packs/items/weapons/weapon_Improved_Wand_6d9B2b5X2d2U56jt.json +++ b/src/packs/items/weapons/weapon_Improved_Wand_6d9B2b5X2d2U56jt.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Warhammer_pxaN4ZK4eqKrjtWj.json b/src/packs/items/weapons/weapon_Improved_Warhammer_pxaN4ZK4eqKrjtWj.json index 40a5faba..aa24c4ad 100644 --- a/src/packs/items/weapons/weapon_Improved_Warhammer_pxaN4ZK4eqKrjtWj.json +++ b/src/packs/items/weapons/weapon_Improved_Warhammer_pxaN4ZK4eqKrjtWj.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Improved_Whip_ftTp8VlsBQ1r4LFD.json b/src/packs/items/weapons/weapon_Improved_Whip_ftTp8VlsBQ1r4LFD.json index dff7fb25..4dd1dcb1 100644 --- a/src/packs/items/weapons/weapon_Improved_Whip_ftTp8VlsBQ1r4LFD.json +++ b/src/packs/items/weapons/weapon_Improved_Whip_ftTp8VlsBQ1r4LFD.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 2, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Keeper_s_Staff_q382JqMkqLaaFLIr.json b/src/packs/items/weapons/weapon_Keeper_s_Staff_q382JqMkqLaaFLIr.json index 27b8044b..21fe863b 100644 --- a/src/packs/items/weapons/weapon_Keeper_s_Staff_q382JqMkqLaaFLIr.json +++ b/src/packs/items/weapons/weapon_Keeper_s_Staff_q382JqMkqLaaFLIr.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json b/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json index 6bc27412..56ff6d62 100644 --- a/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json +++ b/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Knuckle_Claws_SFqganS8Du4aEKjQ.json b/src/packs/items/weapons/weapon_Knuckle_Claws_SFqganS8Du4aEKjQ.json index df995a3f..a7629e7d 100644 --- a/src/packs/items/weapons/weapon_Knuckle_Claws_SFqganS8Du4aEKjQ.json +++ b/src/packs/items/weapons/weapon_Knuckle_Claws_SFqganS8Du4aEKjQ.json @@ -72,8 +72,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 8, @@ -99,7 +99,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json index 4958bbe5..0dd7d23a 100644 --- a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json +++ b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 7, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json b/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json index d8068f41..f947acac 100644 --- a/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json +++ b/src/packs/items/weapons/weapon_Legendary_Arcane_Frame_Wheelchair_gA2tiET9VHGhwMoO.json @@ -48,8 +48,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 9, @@ -75,7 +75,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Arcane_Gauntlets_umADDPYCaykXDc1v.json b/src/packs/items/weapons/weapon_Legendary_Arcane_Gauntlets_umADDPYCaykXDc1v.json index 94da915c..c7adc0f2 100644 --- a/src/packs/items/weapons/weapon_Legendary_Arcane_Gauntlets_umADDPYCaykXDc1v.json +++ b/src/packs/items/weapons/weapon_Legendary_Arcane_Gauntlets_umADDPYCaykXDc1v.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Battleaxe_1nztpLzoHGfbKf5x.json b/src/packs/items/weapons/weapon_Legendary_Battleaxe_1nztpLzoHGfbKf5x.json index 06a8a85f..3c22e3f2 100644 --- a/src/packs/items/weapons/weapon_Legendary_Battleaxe_1nztpLzoHGfbKf5x.json +++ b/src/packs/items/weapons/weapon_Legendary_Battleaxe_1nztpLzoHGfbKf5x.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Broadsword_y3hfTPfZhMognyaJ.json b/src/packs/items/weapons/weapon_Legendary_Broadsword_y3hfTPfZhMognyaJ.json index 786ba8b6..361d0353 100644 --- a/src/packs/items/weapons/weapon_Legendary_Broadsword_y3hfTPfZhMognyaJ.json +++ b/src/packs/items/weapons/weapon_Legendary_Broadsword_y3hfTPfZhMognyaJ.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Crossbow_1G6xX2QL9O0Rsgz7.json b/src/packs/items/weapons/weapon_Legendary_Crossbow_1G6xX2QL9O0Rsgz7.json index e263bcbe..358cdd56 100644 --- a/src/packs/items/weapons/weapon_Legendary_Crossbow_1G6xX2QL9O0Rsgz7.json +++ b/src/packs/items/weapons/weapon_Legendary_Crossbow_1G6xX2QL9O0Rsgz7.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Cutlass_Rpyz0jbFJ1SwqfyD.json b/src/packs/items/weapons/weapon_Legendary_Cutlass_Rpyz0jbFJ1SwqfyD.json index 2c284332..9ce1b48a 100644 --- a/src/packs/items/weapons/weapon_Legendary_Cutlass_Rpyz0jbFJ1SwqfyD.json +++ b/src/packs/items/weapons/weapon_Legendary_Cutlass_Rpyz0jbFJ1SwqfyD.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Dagger_GmTg3Fdne1UPNs8t.json b/src/packs/items/weapons/weapon_Legendary_Dagger_GmTg3Fdne1UPNs8t.json index 0e9e988d..a7bb2fc9 100644 --- a/src/packs/items/weapons/weapon_Legendary_Dagger_GmTg3Fdne1UPNs8t.json +++ b/src/packs/items/weapons/weapon_Legendary_Dagger_GmTg3Fdne1UPNs8t.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Dualstaff_o3rsLvImcLAx5TvD.json b/src/packs/items/weapons/weapon_Legendary_Dualstaff_o3rsLvImcLAx5TvD.json index 9c618ba5..b06909e4 100644 --- a/src/packs/items/weapons/weapon_Legendary_Dualstaff_o3rsLvImcLAx5TvD.json +++ b/src/packs/items/weapons/weapon_Legendary_Dualstaff_o3rsLvImcLAx5TvD.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Glowing_Rings_PReWrfuPjoNQuieo.json b/src/packs/items/weapons/weapon_Legendary_Glowing_Rings_PReWrfuPjoNQuieo.json index 1710084f..ca9937ee 100644 --- a/src/packs/items/weapons/weapon_Legendary_Glowing_Rings_PReWrfuPjoNQuieo.json +++ b/src/packs/items/weapons/weapon_Legendary_Glowing_Rings_PReWrfuPjoNQuieo.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 11, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Grappler_IrtUj0UntBMNn49G.json b/src/packs/items/weapons/weapon_Legendary_Grappler_IrtUj0UntBMNn49G.json index 83334710..f20425b2 100644 --- a/src/packs/items/weapons/weapon_Legendary_Grappler_IrtUj0UntBMNn49G.json +++ b/src/packs/items/weapons/weapon_Legendary_Grappler_IrtUj0UntBMNn49G.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Greatstaff_jDtvEabkHY1GFgfc.json b/src/packs/items/weapons/weapon_Legendary_Greatstaff_jDtvEabkHY1GFgfc.json index a5ea82f9..09fd1f7a 100644 --- a/src/packs/items/weapons/weapon_Legendary_Greatstaff_jDtvEabkHY1GFgfc.json +++ b/src/packs/items/weapons/weapon_Legendary_Greatstaff_jDtvEabkHY1GFgfc.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 9, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Greatsword_zMZ46F9VR7zdTxb9.json b/src/packs/items/weapons/weapon_Legendary_Greatsword_zMZ46F9VR7zdTxb9.json index 840e7ec7..aa9d2ef0 100644 --- a/src/packs/items/weapons/weapon_Legendary_Greatsword_zMZ46F9VR7zdTxb9.json +++ b/src/packs/items/weapons/weapon_Legendary_Greatsword_zMZ46F9VR7zdTxb9.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 12, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Halberd_1AuMNiJz96Ez9fur.json b/src/packs/items/weapons/weapon_Legendary_Halberd_1AuMNiJz96Ez9fur.json index 22e6af1b..af6b2a07 100644 --- a/src/packs/items/weapons/weapon_Legendary_Halberd_1AuMNiJz96Ez9fur.json +++ b/src/packs/items/weapons/weapon_Legendary_Halberd_1AuMNiJz96Ez9fur.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 11, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Hallowed_Axe_0HmhnZnv1I6uX69c.json b/src/packs/items/weapons/weapon_Legendary_Hallowed_Axe_0HmhnZnv1I6uX69c.json index 2bf11f05..70379d45 100644 --- a/src/packs/items/weapons/weapon_Legendary_Hallowed_Axe_0HmhnZnv1I6uX69c.json +++ b/src/packs/items/weapons/weapon_Legendary_Hallowed_Axe_0HmhnZnv1I6uX69c.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Hand_Crossbow_32nYyMaeDWaakSxz.json b/src/packs/items/weapons/weapon_Legendary_Hand_Crossbow_32nYyMaeDWaakSxz.json index ff43c21b..930310a8 100644 --- a/src/packs/items/weapons/weapon_Legendary_Hand_Crossbow_32nYyMaeDWaakSxz.json +++ b/src/packs/items/weapons/weapon_Legendary_Hand_Crossbow_32nYyMaeDWaakSxz.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Hand_Runes_DWLkswhluXuMy3bB.json b/src/packs/items/weapons/weapon_Legendary_Hand_Runes_DWLkswhluXuMy3bB.json index 2dcad490..e909f460 100644 --- a/src/packs/items/weapons/weapon_Legendary_Hand_Runes_DWLkswhluXuMy3bB.json +++ b/src/packs/items/weapons/weapon_Legendary_Hand_Runes_DWLkswhluXuMy3bB.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json b/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json index 7e561c26..d8816fc9 100644 --- a/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json +++ b/src/packs/items/weapons/weapon_Legendary_Heavy_Frame_Wheelchair_S6nB0CNlzdU05o5U.json @@ -48,8 +48,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 12, @@ -75,7 +75,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json b/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json index 9f96601c..7afbd979 100644 --- a/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json +++ b/src/packs/items/weapons/weapon_Legendary_Light_Frame_Wheelchair_Xt8tVSn5Fu6ly6LF.json @@ -77,8 +77,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -104,7 +104,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Longbow_Utt1GpoH1fhaTOtN.json b/src/packs/items/weapons/weapon_Legendary_Longbow_Utt1GpoH1fhaTOtN.json index bb0b8ab3..bd5ab13b 100644 --- a/src/packs/items/weapons/weapon_Legendary_Longbow_Utt1GpoH1fhaTOtN.json +++ b/src/packs/items/weapons/weapon_Legendary_Longbow_Utt1GpoH1fhaTOtN.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 12, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Longsword_14abPqQcROJfDChR.json b/src/packs/items/weapons/weapon_Legendary_Longsword_14abPqQcROJfDChR.json index 9399edd4..e6555b02 100644 --- a/src/packs/items/weapons/weapon_Legendary_Longsword_14abPqQcROJfDChR.json +++ b/src/packs/items/weapons/weapon_Legendary_Longsword_14abPqQcROJfDChR.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Mace_RsDsy7tIhrhaAQQc.json b/src/packs/items/weapons/weapon_Legendary_Mace_RsDsy7tIhrhaAQQc.json index 95de32f0..7f4a9dab 100644 --- a/src/packs/items/weapons/weapon_Legendary_Mace_RsDsy7tIhrhaAQQc.json +++ b/src/packs/items/weapons/weapon_Legendary_Mace_RsDsy7tIhrhaAQQc.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Quarterstaff_1ZciqG7vIKLYpKsP.json b/src/packs/items/weapons/weapon_Legendary_Quarterstaff_1ZciqG7vIKLYpKsP.json index cf25daa7..91bc8ac8 100644 --- a/src/packs/items/weapons/weapon_Legendary_Quarterstaff_1ZciqG7vIKLYpKsP.json +++ b/src/packs/items/weapons/weapon_Legendary_Quarterstaff_1ZciqG7vIKLYpKsP.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Rapier_BakN97v4jTePcXiZ.json b/src/packs/items/weapons/weapon_Legendary_Rapier_BakN97v4jTePcXiZ.json index 59a49063..d5bac6d1 100644 --- a/src/packs/items/weapons/weapon_Legendary_Rapier_BakN97v4jTePcXiZ.json +++ b/src/packs/items/weapons/weapon_Legendary_Rapier_BakN97v4jTePcXiZ.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Returning_Blade_mcj3CPkcSSDdAcBB.json b/src/packs/items/weapons/weapon_Legendary_Returning_Blade_mcj3CPkcSSDdAcBB.json index 211c88c2..b3f3fc3d 100644 --- a/src/packs/items/weapons/weapon_Legendary_Returning_Blade_mcj3CPkcSSDdAcBB.json +++ b/src/packs/items/weapons/weapon_Legendary_Returning_Blade_mcj3CPkcSSDdAcBB.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json b/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json index c7b18355..5eedb6c2 100644 --- a/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json +++ b/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Scepter_IZ4CWNxfuM46JeCN.json b/src/packs/items/weapons/weapon_Legendary_Scepter_IZ4CWNxfuM46JeCN.json index 9630fd69..882ecfdf 100644 --- a/src/packs/items/weapons/weapon_Legendary_Scepter_IZ4CWNxfuM46JeCN.json +++ b/src/packs/items/weapons/weapon_Legendary_Scepter_IZ4CWNxfuM46JeCN.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -38,7 +38,7 @@ } } } - ] + } }, "range": "melee", "roll": { @@ -115,8 +115,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 9, @@ -142,7 +142,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Shortbow_j7kp36jaetfn5jb3.json b/src/packs/items/weapons/weapon_Legendary_Shortbow_j7kp36jaetfn5jb3.json index 7fad3f95..b3dbd210 100644 --- a/src/packs/items/weapons/weapon_Legendary_Shortbow_j7kp36jaetfn5jb3.json +++ b/src/packs/items/weapons/weapon_Legendary_Shortbow_j7kp36jaetfn5jb3.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Shortstaff_D3SbNvNJZAFuzfhg.json b/src/packs/items/weapons/weapon_Legendary_Shortstaff_D3SbNvNJZAFuzfhg.json index 59d53e44..3d29bc25 100644 --- a/src/packs/items/weapons/weapon_Legendary_Shortstaff_D3SbNvNJZAFuzfhg.json +++ b/src/packs/items/weapons/weapon_Legendary_Shortstaff_D3SbNvNJZAFuzfhg.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Shortsword_dEumq3BIZBk5xYTk.json b/src/packs/items/weapons/weapon_Legendary_Shortsword_dEumq3BIZBk5xYTk.json index d7f9632a..a2203a1d 100644 --- a/src/packs/items/weapons/weapon_Legendary_Shortsword_dEumq3BIZBk5xYTk.json +++ b/src/packs/items/weapons/weapon_Legendary_Shortsword_dEumq3BIZBk5xYTk.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Small_Dagger_Px3Rh3kIvAqyISxJ.json b/src/packs/items/weapons/weapon_Legendary_Small_Dagger_Px3Rh3kIvAqyISxJ.json index c6bf5437..cf63bde2 100644 --- a/src/packs/items/weapons/weapon_Legendary_Small_Dagger_Px3Rh3kIvAqyISxJ.json +++ b/src/packs/items/weapons/weapon_Legendary_Small_Dagger_Px3Rh3kIvAqyISxJ.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Spear_4e5pWxi2qohuGsWh.json b/src/packs/items/weapons/weapon_Legendary_Spear_4e5pWxi2qohuGsWh.json index 114ea79e..e0248f4b 100644 --- a/src/packs/items/weapons/weapon_Legendary_Spear_4e5pWxi2qohuGsWh.json +++ b/src/packs/items/weapons/weapon_Legendary_Spear_4e5pWxi2qohuGsWh.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 12, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json b/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json index 47e707d3..49ca454a 100644 --- a/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json +++ b/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Wand_wPjg0LufJH9vUfVM.json b/src/packs/items/weapons/weapon_Legendary_Wand_wPjg0LufJH9vUfVM.json index 4bb0acd9..65925525 100644 --- a/src/packs/items/weapons/weapon_Legendary_Wand_wPjg0LufJH9vUfVM.json +++ b/src/packs/items/weapons/weapon_Legendary_Wand_wPjg0LufJH9vUfVM.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 10, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Warhammer_W9ymfEDck2icfvla.json b/src/packs/items/weapons/weapon_Legendary_Warhammer_W9ymfEDck2icfvla.json index 0918f8b1..562122d2 100644 --- a/src/packs/items/weapons/weapon_Legendary_Warhammer_W9ymfEDck2icfvla.json +++ b/src/packs/items/weapons/weapon_Legendary_Warhammer_W9ymfEDck2icfvla.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 12, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Legendary_Whip_Wcdbf6yS3LEt7nsg.json b/src/packs/items/weapons/weapon_Legendary_Whip_Wcdbf6yS3LEt7nsg.json index 83ac59c7..baf6d369 100644 --- a/src/packs/items/weapons/weapon_Legendary_Whip_Wcdbf6yS3LEt7nsg.json +++ b/src/packs/items/weapons/weapon_Legendary_Whip_Wcdbf6yS3LEt7nsg.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 6, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json b/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json index fdda2b56..7fadde01 100644 --- a/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json +++ b/src/packs/items/weapons/weapon_Light_Frame_Wheelchair_iaGnlUkShBgdeMo0.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "type": [ "physical" ], @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Longbow_YfVs6Se903az4Yet.json b/src/packs/items/weapons/weapon_Longbow_YfVs6Se903az4Yet.json index c6e98bc4..43af46ab 100644 --- a/src/packs/items/weapons/weapon_Longbow_YfVs6Se903az4Yet.json +++ b/src/packs/items/weapons/weapon_Longbow_YfVs6Se903az4Yet.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Longsword_Iv8BZM1R24QMT72M.json b/src/packs/items/weapons/weapon_Longsword_Iv8BZM1R24QMT72M.json index cba1bac8..3961d7c3 100644 --- a/src/packs/items/weapons/weapon_Longsword_Iv8BZM1R24QMT72M.json +++ b/src/packs/items/weapons/weapon_Longsword_Iv8BZM1R24QMT72M.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Mace_cKQCDyM2UopDL9zF.json b/src/packs/items/weapons/weapon_Mace_cKQCDyM2UopDL9zF.json index 0e6670f4..7a7582cb 100644 --- a/src/packs/items/weapons/weapon_Mace_cKQCDyM2UopDL9zF.json +++ b/src/packs/items/weapons/weapon_Mace_cKQCDyM2UopDL9zF.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Mage_Orb_XKBmBUEoGLdLcuqQ.json b/src/packs/items/weapons/weapon_Mage_Orb_XKBmBUEoGLdLcuqQ.json index 3b5983f5..dbd218f1 100644 --- a/src/packs/items/weapons/weapon_Mage_Orb_XKBmBUEoGLdLcuqQ.json +++ b/src/packs/items/weapons/weapon_Mage_Orb_XKBmBUEoGLdLcuqQ.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Magus_Revolver_jGykNGQiKm63tCiE.json b/src/packs/items/weapons/weapon_Magus_Revolver_jGykNGQiKm63tCiE.json index 42a65010..9dbbb1c1 100644 --- a/src/packs/items/weapons/weapon_Magus_Revolver_jGykNGQiKm63tCiE.json +++ b/src/packs/items/weapons/weapon_Magus_Revolver_jGykNGQiKm63tCiE.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 13, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Meridian_Cutlass_Gi26Zk9VqlAAgx3E.json b/src/packs/items/weapons/weapon_Meridian_Cutlass_Gi26Zk9VqlAAgx3E.json index dcc236a0..b83a18be 100644 --- a/src/packs/items/weapons/weapon_Meridian_Cutlass_Gi26Zk9VqlAAgx3E.json +++ b/src/packs/items/weapons/weapon_Meridian_Cutlass_Gi26Zk9VqlAAgx3E.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 5, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Midas_Scythe_BdLfy5i488VZgkjP.json b/src/packs/items/weapons/weapon_Midas_Scythe_BdLfy5i488VZgkjP.json index 799413be..57fe2367 100644 --- a/src/packs/items/weapons/weapon_Midas_Scythe_BdLfy5i488VZgkjP.json +++ b/src/packs/items/weapons/weapon_Midas_Scythe_BdLfy5i488VZgkjP.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Parrying_Dagger_taAZDkDCpeNgxhnn.json b/src/packs/items/weapons/weapon_Parrying_Dagger_taAZDkDCpeNgxhnn.json index 482d813b..b5844e89 100644 --- a/src/packs/items/weapons/weapon_Parrying_Dagger_taAZDkDCpeNgxhnn.json +++ b/src/packs/items/weapons/weapon_Parrying_Dagger_taAZDkDCpeNgxhnn.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 2, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Powered_Gauntlet_bW3xw5S9DbaLCN3E.json b/src/packs/items/weapons/weapon_Powered_Gauntlet_bW3xw5S9DbaLCN3E.json index 67922f8b..3c4ebd1c 100644 --- a/src/packs/items/weapons/weapon_Powered_Gauntlet_bW3xw5S9DbaLCN3E.json +++ b/src/packs/items/weapons/weapon_Powered_Gauntlet_bW3xw5S9DbaLCN3E.json @@ -85,8 +85,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -112,7 +112,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Primer_Shard_SxcblanBvqaest3A.json b/src/packs/items/weapons/weapon_Primer_Shard_SxcblanBvqaest3A.json index fb42af74..0cf59179 100644 --- a/src/packs/items/weapons/weapon_Primer_Shard_SxcblanBvqaest3A.json +++ b/src/packs/items/weapons/weapon_Primer_Shard_SxcblanBvqaest3A.json @@ -72,8 +72,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": null, @@ -99,7 +99,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Quarterstaff_mlIj88p1wcQNjEDG.json b/src/packs/items/weapons/weapon_Quarterstaff_mlIj88p1wcQNjEDG.json index 37c56a21..00940b6c 100644 --- a/src/packs/items/weapons/weapon_Quarterstaff_mlIj88p1wcQNjEDG.json +++ b/src/packs/items/weapons/weapon_Quarterstaff_mlIj88p1wcQNjEDG.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Rapier_zkAgEW6zMkRZalEm.json b/src/packs/items/weapons/weapon_Rapier_zkAgEW6zMkRZalEm.json index b4de1c00..45642f14 100644 --- a/src/packs/items/weapons/weapon_Rapier_zkAgEW6zMkRZalEm.json +++ b/src/packs/items/weapons/weapon_Rapier_zkAgEW6zMkRZalEm.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "type": [ "physical" ], @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Retractable_Saber_i8CqVTzqoRoCewNe.json b/src/packs/items/weapons/weapon_Retractable_Saber_i8CqVTzqoRoCewNe.json index c1b350a3..548de60f 100644 --- a/src/packs/items/weapons/weapon_Retractable_Saber_i8CqVTzqoRoCewNe.json +++ b/src/packs/items/weapons/weapon_Retractable_Saber_i8CqVTzqoRoCewNe.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 7, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Returning_Axe_FtsQGwOg3r8uUCST.json b/src/packs/items/weapons/weapon_Returning_Axe_FtsQGwOg3r8uUCST.json index 76a887ae..9f3cca62 100644 --- a/src/packs/items/weapons/weapon_Returning_Axe_FtsQGwOg3r8uUCST.json +++ b/src/packs/items/weapons/weapon_Returning_Axe_FtsQGwOg3r8uUCST.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Returning_Blade_4fQpVfQ3NVwTHStA.json b/src/packs/items/weapons/weapon_Returning_Blade_4fQpVfQ3NVwTHStA.json index 74be4227..efd81e48 100644 --- a/src/packs/items/weapons/weapon_Returning_Blade_4fQpVfQ3NVwTHStA.json +++ b/src/packs/items/weapons/weapon_Returning_Blade_4fQpVfQ3NVwTHStA.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": null, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Ricochet_Axes_E9QDh5o9eQ1Qx0kH.json b/src/packs/items/weapons/weapon_Ricochet_Axes_E9QDh5o9eQ1Qx0kH.json index 1067bb02..34f3b200 100644 --- a/src/packs/items/weapons/weapon_Ricochet_Axes_E9QDh5o9eQ1Qx0kH.json +++ b/src/packs/items/weapons/weapon_Ricochet_Axes_E9QDh5o9eQ1Qx0kH.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 11, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json b/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json index 47b096af..ccba4b0e 100644 --- a/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json +++ b/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d4", "bonus": null, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Runes_of_Ruination_EG6mZhr3ib56r974.json b/src/packs/items/weapons/weapon_Runes_of_Ruination_EG6mZhr3ib56r974.json index e0676ed2..3a966fe0 100644 --- a/src/packs/items/weapons/weapon_Runes_of_Ruination_EG6mZhr3ib56r974.json +++ b/src/packs/items/weapons/weapon_Runes_of_Ruination_EG6mZhr3ib56r974.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d20", "bonus": 4, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Scepter_GZh345N8fmuS4Jeh.json b/src/packs/items/weapons/weapon_Scepter_GZh345N8fmuS4Jeh.json index 04ce4c4b..f1e85577 100644 --- a/src/packs/items/weapons/weapon_Scepter_GZh345N8fmuS4Jeh.json +++ b/src/packs/items/weapons/weapon_Scepter_GZh345N8fmuS4Jeh.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -38,7 +38,7 @@ } } } - ] + } }, "range": "melee", "roll": { @@ -115,8 +115,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": null, @@ -142,7 +142,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Scepter_of_Elias_acPGwIaUhx3R0mTq.json b/src/packs/items/weapons/weapon_Scepter_of_Elias_acPGwIaUhx3R0mTq.json index 8c8e50af..f2c13441 100644 --- a/src/packs/items/weapons/weapon_Scepter_of_Elias_acPGwIaUhx3R0mTq.json +++ b/src/packs/items/weapons/weapon_Scepter_of_Elias_acPGwIaUhx3R0mTq.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Shortbow_p9tdjQr2AZP19RYm.json b/src/packs/items/weapons/weapon_Shortbow_p9tdjQr2AZP19RYm.json index 82216a2d..56a791ba 100644 --- a/src/packs/items/weapons/weapon_Shortbow_p9tdjQr2AZP19RYm.json +++ b/src/packs/items/weapons/weapon_Shortbow_p9tdjQr2AZP19RYm.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Shortstaff_vHDHG3STcxTEfYAM.json b/src/packs/items/weapons/weapon_Shortstaff_vHDHG3STcxTEfYAM.json index 0d468da8..3dc3a137 100644 --- a/src/packs/items/weapons/weapon_Shortstaff_vHDHG3STcxTEfYAM.json +++ b/src/packs/items/weapons/weapon_Shortstaff_vHDHG3STcxTEfYAM.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Shortsword_cjGZpXCoshEqi1FI.json b/src/packs/items/weapons/weapon_Shortsword_cjGZpXCoshEqi1FI.json index 84ae1a2a..0ea874f8 100644 --- a/src/packs/items/weapons/weapon_Shortsword_cjGZpXCoshEqi1FI.json +++ b/src/packs/items/weapons/weapon_Shortsword_cjGZpXCoshEqi1FI.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": null, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Siphoning_Gauntlets_1N1jggda5DfdzdMj.json b/src/packs/items/weapons/weapon_Siphoning_Gauntlets_1N1jggda5DfdzdMj.json index 0eb65689..205aa4e0 100644 --- a/src/packs/items/weapons/weapon_Siphoning_Gauntlets_1N1jggda5DfdzdMj.json +++ b/src/packs/items/weapons/weapon_Siphoning_Gauntlets_1N1jggda5DfdzdMj.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 9, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Sledge_Axe_OxsEmffWriiQmqJK.json b/src/packs/items/weapons/weapon_Sledge_Axe_OxsEmffWriiQmqJK.json index b5ffe457..d0230362 100644 --- a/src/packs/items/weapons/weapon_Sledge_Axe_OxsEmffWriiQmqJK.json +++ b/src/packs/items/weapons/weapon_Sledge_Axe_OxsEmffWriiQmqJK.json @@ -20,8 +20,8 @@ "amount": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "applyTo": "stress", "value": { "custom": { @@ -46,7 +46,7 @@ "base": false, "type": [] } - ], + }, "includeBase": false }, "_id": "0qVTvNMfapVST3sQ", @@ -104,8 +104,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 13, @@ -131,7 +131,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Small_Dagger_wKklDxs5nkzILNp4.json b/src/packs/items/weapons/weapon_Small_Dagger_wKklDxs5nkzILNp4.json index 5b63acd7..058d138e 100644 --- a/src/packs/items/weapons/weapon_Small_Dagger_wKklDxs5nkzILNp4.json +++ b/src/packs/items/weapons/weapon_Small_Dagger_wKklDxs5nkzILNp4.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "type": [ "physical" ], @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Spear_TF85tKJetUjLwh54.json b/src/packs/items/weapons/weapon_Spear_TF85tKJetUjLwh54.json index ea217ad9..a0ebc4ec 100644 --- a/src/packs/items/weapons/weapon_Spear_TF85tKJetUjLwh54.json +++ b/src/packs/items/weapons/weapon_Spear_TF85tKJetUjLwh54.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Spiked_Bow_O1w8KPYH85ZS8X64.json b/src/packs/items/weapons/weapon_Spiked_Bow_O1w8KPYH85ZS8X64.json index 99faed64..5421fc10 100644 --- a/src/packs/items/weapons/weapon_Spiked_Bow_O1w8KPYH85ZS8X64.json +++ b/src/packs/items/weapons/weapon_Spiked_Bow_O1w8KPYH85ZS8X64.json @@ -11,8 +11,8 @@ "type": "attack", "damage": { "includeBase": false, - "parts": [ - { + "parts": { + "hitPoints": { "resultBased": false, "value": { "custom": { @@ -36,7 +36,7 @@ } } } - ] + } }, "range": "melee", "roll": { @@ -113,8 +113,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 7, @@ -140,7 +140,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json b/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json index edadecf9..2dd08026 100644 --- a/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json +++ b/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 2, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Steelforged_Halberd_6bkbw4Ap644KZGvJ.json b/src/packs/items/weapons/weapon_Steelforged_Halberd_6bkbw4Ap644KZGvJ.json index c4730e94..1fccc471 100644 --- a/src/packs/items/weapons/weapon_Steelforged_Halberd_6bkbw4Ap644KZGvJ.json +++ b/src/packs/items/weapons/weapon_Steelforged_Halberd_6bkbw4Ap644KZGvJ.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 4, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Swinging_Ropeblade_1jOJHHKdtk3s2jaY.json b/src/packs/items/weapons/weapon_Swinging_Ropeblade_1jOJHHKdtk3s2jaY.json index b8fe04b6..cd9490f2 100644 --- a/src/packs/items/weapons/weapon_Swinging_Ropeblade_1jOJHHKdtk3s2jaY.json +++ b/src/packs/items/weapons/weapon_Swinging_Ropeblade_1jOJHHKdtk3s2jaY.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 9, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Sword_of_Light___Flame_TVPCWnSELOVBv6G1.json b/src/packs/items/weapons/weapon_Sword_of_Light___Flame_TVPCWnSELOVBv6G1.json index 7a74cf3d..63112b3e 100644 --- a/src/packs/items/weapons/weapon_Sword_of_Light___Flame_TVPCWnSELOVBv6G1.json +++ b/src/packs/items/weapons/weapon_Sword_of_Light___Flame_TVPCWnSELOVBv6G1.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 11, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Talon_Blades_jlLtgK468rO5IssR.json b/src/packs/items/weapons/weapon_Talon_Blades_jlLtgK468rO5IssR.json index 13542a63..a7c96705 100644 --- a/src/packs/items/weapons/weapon_Talon_Blades_jlLtgK468rO5IssR.json +++ b/src/packs/items/weapons/weapon_Talon_Blades_jlLtgK468rO5IssR.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 7, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Thistlebow_I1nDGpulg29GpWOW.json b/src/packs/items/weapons/weapon_Thistlebow_I1nDGpulg29GpWOW.json index 65fef12a..18f635eb 100644 --- a/src/packs/items/weapons/weapon_Thistlebow_I1nDGpulg29GpWOW.json +++ b/src/packs/items/weapons/weapon_Thistlebow_I1nDGpulg29GpWOW.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 13, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json b/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json index d49b7de7..47043c54 100644 --- a/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json +++ b/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": null, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Urok_Broadsword_zGm6Wa1fGF6cECY5.json b/src/packs/items/weapons/weapon_Urok_Broadsword_zGm6Wa1fGF6cECY5.json index 708e920f..6727c333 100644 --- a/src/packs/items/weapons/weapon_Urok_Broadsword_zGm6Wa1fGF6cECY5.json +++ b/src/packs/items/weapons/weapon_Urok_Broadsword_zGm6Wa1fGF6cECY5.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 3, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Wand_ItWisJFNGMNWeaCV.json b/src/packs/items/weapons/weapon_Wand_ItWisJFNGMNWeaCV.json index 35fc7866..8084f261 100644 --- a/src/packs/items/weapons/weapon_Wand_ItWisJFNGMNWeaCV.json +++ b/src/packs/items/weapons/weapon_Wand_ItWisJFNGMNWeaCV.json @@ -41,8 +41,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 1, @@ -68,7 +68,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Wand_of_Enthrallment_tP6vmnrmTq2h5sj7.json b/src/packs/items/weapons/weapon_Wand_of_Enthrallment_tP6vmnrmTq2h5sj7.json index f2b2f308..84c7b3f2 100644 --- a/src/packs/items/weapons/weapon_Wand_of_Enthrallment_tP6vmnrmTq2h5sj7.json +++ b/src/packs/items/weapons/weapon_Wand_of_Enthrallment_tP6vmnrmTq2h5sj7.json @@ -85,8 +85,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -112,7 +112,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Wand_of_Essek_ZrRGNjGCgZTTfgDG.json b/src/packs/items/weapons/weapon_Wand_of_Essek_ZrRGNjGCgZTTfgDG.json index 23fb1003..d788d008 100644 --- a/src/packs/items/weapons/weapon_Wand_of_Essek_ZrRGNjGCgZTTfgDG.json +++ b/src/packs/items/weapons/weapon_Wand_of_Essek_ZrRGNjGCgZTTfgDG.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 13, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_War_Scythe_z6yEdFYQJ5IzgTX3.json b/src/packs/items/weapons/weapon_War_Scythe_z6yEdFYQJ5IzgTX3.json index e80ddfad..0c57dd50 100644 --- a/src/packs/items/weapons/weapon_War_Scythe_z6yEdFYQJ5IzgTX3.json +++ b/src/packs/items/weapons/weapon_War_Scythe_z6yEdFYQJ5IzgTX3.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d8", "bonus": 5, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Warhammer_ZXh1GQahBiODfSTC.json b/src/packs/items/weapons/weapon_Warhammer_ZXh1GQahBiODfSTC.json index 50b1a829..a94950c7 100644 --- a/src/packs/items/weapons/weapon_Warhammer_ZXh1GQahBiODfSTC.json +++ b/src/packs/items/weapons/weapon_Warhammer_ZXh1GQahBiODfSTC.json @@ -49,8 +49,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d12", "bonus": 3, @@ -76,7 +76,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Whip_CmtWqw6DwoePnX7W.json b/src/packs/items/weapons/weapon_Whip_CmtWqw6DwoePnX7W.json index 2e548ab6..287d8afe 100644 --- a/src/packs/items/weapons/weapon_Whip_CmtWqw6DwoePnX7W.json +++ b/src/packs/items/weapons/weapon_Whip_CmtWqw6DwoePnX7W.json @@ -78,8 +78,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": null, @@ -105,7 +105,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Widogast_Pendant_8Z5QrThfwkYPXNco.json b/src/packs/items/weapons/weapon_Widogast_Pendant_8Z5QrThfwkYPXNco.json index a03efe6b..44e4dfd6 100644 --- a/src/packs/items/weapons/weapon_Widogast_Pendant_8Z5QrThfwkYPXNco.json +++ b/src/packs/items/weapons/weapon_Widogast_Pendant_8Z5QrThfwkYPXNco.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d10", "bonus": 5, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/items/weapons/weapon_Yutari_Bloodbow_0XpSBYXxtywvBFQi.json b/src/packs/items/weapons/weapon_Yutari_Bloodbow_0XpSBYXxtywvBFQi.json index d07a986e..17e02976 100644 --- a/src/packs/items/weapons/weapon_Yutari_Bloodbow_0XpSBYXxtywvBFQi.json +++ b/src/packs/items/weapons/weapon_Yutari_Bloodbow_0XpSBYXxtywvBFQi.json @@ -71,8 +71,8 @@ "useDefault": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "dice": "d6", "bonus": 4, @@ -98,7 +98,7 @@ }, "base": false } - ], + }, "includeBase": false }, "description": "", diff --git a/src/packs/subclasses/feature_Battle_Ritual_qqb5acyUSl1sCpWW.json b/src/packs/subclasses/feature_Battle_Ritual_qqb5acyUSl1sCpWW.json index 6dee9f9d..2b012aee 100644 --- a/src/packs/subclasses/feature_Battle_Ritual_qqb5acyUSl1sCpWW.json +++ b/src/packs/subclasses/feature_Battle_Ritual_qqb5acyUSl1sCpWW.json @@ -23,8 +23,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -49,7 +49,7 @@ }, "type": [] }, - { + "hope": { "value": { "custom": { "enabled": true, @@ -74,7 +74,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Clarity_of_Nature_etaQ01yGJhBLDUqZ.json b/src/packs/subclasses/feature_Clarity_of_Nature_etaQ01yGJhBLDUqZ.json index 09d6f953..886f0b61 100644 --- a/src/packs/subclasses/feature_Clarity_of_Nature_etaQ01yGJhBLDUqZ.json +++ b/src/packs/subclasses/feature_Clarity_of_Nature_etaQ01yGJhBLDUqZ.json @@ -22,8 +22,8 @@ "recovery": "longRest" }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -48,7 +48,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Dark_Cloud_frBTtNMX9Y2gkuPz.json b/src/packs/subclasses/feature_Dark_Cloud_frBTtNMX9Y2gkuPz.json index 95534b9f..d0bd5c22 100644 --- a/src/packs/subclasses/feature_Dark_Cloud_frBTtNMX9Y2gkuPz.json +++ b/src/packs/subclasses/feature_Dark_Cloud_frBTtNMX9Y2gkuPz.json @@ -22,7 +22,7 @@ "recovery": null }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json b/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json index 7dbae2f6..7a3ebd91 100644 --- a/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json +++ b/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json @@ -22,8 +22,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -48,7 +48,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -134,7 +134,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Elemental_Incarnation_f37TTgCc0Q3Ih1A1.json b/src/packs/subclasses/feature_Elemental_Incarnation_f37TTgCc0Q3Ih1A1.json index 30ffb50b..45ffde60 100644 --- a/src/packs/subclasses/feature_Elemental_Incarnation_f37TTgCc0Q3Ih1A1.json +++ b/src/packs/subclasses/feature_Elemental_Incarnation_f37TTgCc0Q3Ih1A1.json @@ -29,8 +29,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -56,7 +56,7 @@ } } } - ], + }, "includeBase": false }, "target": { @@ -148,8 +148,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -174,7 +174,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json b/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json index 33d5af92..f65cd041 100644 --- a/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json +++ b/src/packs/subclasses/feature_Gifted_Performer_99U7YWNCxFZHCiT0.json @@ -21,8 +21,8 @@ "recovery": "longRest" }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -47,7 +47,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -115,8 +115,8 @@ "recovery": "longRest" }, "damage": { - "parts": [ - { + "parts": { + "hope": { "value": { "custom": { "enabled": true, @@ -141,7 +141,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Honed_Expertise_w1BwNKxbQOSizLmZ.json b/src/packs/subclasses/feature_Honed_Expertise_w1BwNKxbQOSizLmZ.json index 1fad2396..48973ad9 100644 --- a/src/packs/subclasses/feature_Honed_Expertise_w1BwNKxbQOSizLmZ.json +++ b/src/packs/subclasses/feature_Honed_Expertise_w1BwNKxbQOSizLmZ.json @@ -23,7 +23,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Natural_Evasion_TnuLBtHQGbqyzn82.json b/src/packs/subclasses/feature_Natural_Evasion_TnuLBtHQGbqyzn82.json index 628fabed..517e1fe1 100644 --- a/src/packs/subclasses/feature_Natural_Evasion_TnuLBtHQGbqyzn82.json +++ b/src/packs/subclasses/feature_Natural_Evasion_TnuLBtHQGbqyzn82.json @@ -31,7 +31,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Regeneration_KRyrbSLVGreIOTZe.json b/src/packs/subclasses/feature_Regeneration_KRyrbSLVGreIOTZe.json index b7c39f2a..ab748169 100644 --- a/src/packs/subclasses/feature_Regeneration_KRyrbSLVGreIOTZe.json +++ b/src/packs/subclasses/feature_Regeneration_KRyrbSLVGreIOTZe.json @@ -29,8 +29,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": false @@ -54,7 +54,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Revenge_oNfA5F9cKwNR7joq.json b/src/packs/subclasses/feature_Revenge_oNfA5F9cKwNR7joq.json index f663201d..b7e2e8b9 100644 --- a/src/packs/subclasses/feature_Revenge_oNfA5F9cKwNR7joq.json +++ b/src/packs/subclasses/feature_Revenge_oNfA5F9cKwNR7joq.json @@ -29,8 +29,8 @@ "recovery": null }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -55,7 +55,7 @@ } } } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Rousing_Speech_PCmYTX02JLzBpgml.json b/src/packs/subclasses/feature_Rousing_Speech_PCmYTX02JLzBpgml.json index f1596519..ab7b4972 100644 --- a/src/packs/subclasses/feature_Rousing_Speech_PCmYTX02JLzBpgml.json +++ b/src/packs/subclasses/feature_Rousing_Speech_PCmYTX02JLzBpgml.json @@ -21,8 +21,8 @@ "recovery": "longRest" }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -47,7 +47,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Sparing_Touch_GfOSgVJW8bS1OjNq.json b/src/packs/subclasses/feature_Sparing_Touch_GfOSgVJW8bS1OjNq.json index deb4af6b..86de0fe8 100644 --- a/src/packs/subclasses/feature_Sparing_Touch_GfOSgVJW8bS1OjNq.json +++ b/src/packs/subclasses/feature_Sparing_Touch_GfOSgVJW8bS1OjNq.json @@ -39,8 +39,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -65,7 +65,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { @@ -116,8 +116,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "stress": { "value": { "custom": { "enabled": true, @@ -142,7 +142,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Thrive_in_Chaos_1nmFmkNXY6OYyyju.json b/src/packs/subclasses/feature_Thrive_in_Chaos_1nmFmkNXY6OYyyju.json index bbdd8707..b65184e9 100644 --- a/src/packs/subclasses/feature_Thrive_in_Chaos_1nmFmkNXY6OYyyju.json +++ b/src/packs/subclasses/feature_Thrive_in_Chaos_1nmFmkNXY6OYyyju.json @@ -31,7 +31,7 @@ "consumeOnSuccess": false }, "damage": { - "parts": [], + "parts": {}, "includeBase": false }, "target": { diff --git a/src/packs/subclasses/feature_Warden_s_Protection_2F1bUFY80oce97C9.json b/src/packs/subclasses/feature_Warden_s_Protection_2F1bUFY80oce97C9.json index e80a770a..0c6ad3e3 100644 --- a/src/packs/subclasses/feature_Warden_s_Protection_2F1bUFY80oce97C9.json +++ b/src/packs/subclasses/feature_Warden_s_Protection_2F1bUFY80oce97C9.json @@ -23,8 +23,8 @@ "consumeOnSuccess": false }, "damage": { - "parts": [ - { + "parts": { + "hitPoints": { "value": { "custom": { "enabled": true, @@ -49,7 +49,7 @@ }, "type": [] } - ], + }, "includeBase": false }, "target": { diff --git a/styles/less/global/elements.less b/styles/less/global/elements.less index f5e92e2c..53e9ba20 100755 --- a/styles/less/global/elements.less +++ b/styles/less/global/elements.less @@ -333,6 +333,15 @@ legend { font-weight: bold; color: light-dark(@dark-blue, @golden); + + &.with-icon { + display: flex; + align-items: center; + + i { + padding: 0 4px; + } + } } input[type='text'], diff --git a/templates/actionTypes/damage.hbs b/templates/actionTypes/damage.hbs index 96bb361c..6f159a2d 100644 --- a/templates/actionTypes/damage.hbs +++ b/templates/actionTypes/damage.hbs @@ -1,12 +1,12 @@
      - + {{#if (eq @root.source.type 'healing')}} {{localize "DAGGERHEART.GENERAL.healing"}} {{else}} {{localize "DAGGERHEART.GENERAL.damage"}} {{/if}} - {{#unless (eq path 'system.attack.')}}{{/unless}} + {{#unless (eq path 'system.attack.')}}{{/unless}}
      {{#if @root.hasBaseDamage}} @@ -16,75 +16,72 @@ {{formField directField value=source.direct name=(concat path "damage.direct") localize=true classes="checkbox"}} {{/unless}}
      - {{#each source.parts as |dmg index|}} - {{#if (and @root.hasBaseDamage @root.source.damage.includeBase)}} - {{setVar 'realIndex' (add index -1)}} - {{else}} - {{setVar 'realIndex' index}} - {{/if}} + {{#each source.parts as |dmg key|}}
      + + {{localize (concat "DAGGERHEART.CONFIG.HealingType." key ".name")}} + {{#unless (or dmg.base ../path)}} + + {{/unless}} + + {{#if (and (not @root.isNPC) @root.hasRoll (not dmg.base))}} - {{formField ../fields.resultBased value=dmg.resultBased name=(concat "damage.parts." realIndex ".resultBased") localize=true classes="checkbox"}} + {{formField ../fields.resultBased value=dmg.resultBased name=(concat "damage.parts." key ".resultBased") localize=true classes="checkbox"}} {{/if}} {{#if (and (not @root.isNPC) @root.hasRoll (not dmg.base) dmg.resultBased)}}
      {{localize "DAGGERHEART.GENERAL.withThing" thing=(localize "DAGGERHEART.GENERAL.hope")}} - {{> formula fields=../fields.value.fields type=../fields.type dmg=dmg source=dmg.value target="value" realIndex=realIndex path=../path}} + {{> formula fields=../fields.value.fields type=../fields.type dmg=dmg source=dmg.value target="value" key=key path=../path}}
      {{localize "DAGGERHEART.GENERAL.withThing" thing=(localize "DAGGERHEART.GENERAL.fear")}} - {{> formula fields=../fields.valueAlt.fields type=../fields.type dmg=dmg source=dmg.valueAlt target="valueAlt" realIndex=realIndex path=../path}} + {{> formula fields=../fields.valueAlt.fields type=../fields.type dmg=dmg source=dmg.valueAlt target="valueAlt" key=key path=../path}}
      {{else}} - - {{localize "DAGGERHEART.GENERAL.formula"}} - {{> formula fields=../fields.value.fields type=../fields.type dmg=dmg source=dmg.value target="value" realIndex=realIndex path=../path}} -
      + {{> formula fields=../fields.value.fields type=../fields.type dmg=dmg source=dmg.value target="value" key=key path=../path}} {{/if}} -
      - {{formField ../fields.applyTo value=dmg.applyTo name=(concat ../path "damage.parts." realIndex ".applyTo") localize=true}} - {{#if (and (eq dmg.applyTo 'hitPoints') (ne @root.source.type 'healing'))}} - {{formField ../fields.type value=dmg.type name=(concat ../path "damage.parts." realIndex ".type") localize=true}} - {{/if}} -
      + + {{#if (and (eq dmg.applyTo 'hitPoints') (ne @root.source.type 'healing'))}} + {{formField ../fields.type value=dmg.type name=(concat ../path "damage.parts." key ".type") localize=true}} + {{/if}} + {{#if ../horde}}
      {{localize "DAGGERHEART.ACTORS.Adversary.hordeDamage"}}
      - - {{formField ../fields.valueAlt.fields.flatMultiplier value=dmg.valueAlt.flatMultiplier name=(concat ../path "damage.parts." realIndex ".valueAlt.flatMultiplier") label="DAGGERHEART.ACTIONS.Settings.multiplier" classes="inline-child" localize=true }} - {{formField ../fields.valueAlt.fields.dice value=dmg.valueAlt.dice name=(concat ../path "damage.parts." realIndex ".valueAlt.dice") classes="inline-child" localize=true}} - {{formField ../fields.valueAlt.fields.bonus value=dmg.valueAlt.bonus name=(concat ../path "damage.parts." realIndex ".valueAlt.bonus") localize=true classes="inline-child"}} + + {{formField ../fields.valueAlt.fields.flatMultiplier value=dmg.valueAlt.flatMultiplier name=(concat ../path "damage.parts." key ".valueAlt.flatMultiplier") label="DAGGERHEART.ACTIONS.Settings.multiplier" classes="inline-child" localize=true }} + {{formField ../fields.valueAlt.fields.dice value=dmg.valueAlt.dice name=(concat ../path "damage.parts." key ".valueAlt.dice") classes="inline-child" localize=true}} + {{formField ../fields.valueAlt.fields.bonus value=dmg.valueAlt.bonus name=(concat ../path "damage.parts." key ".valueAlt.bonus") localize=true classes="inline-child"}}
      {{/if}} - + - {{#unless (or dmg.base ../path)}}
      {{/unless}} {{/each}} {{#*inline "formula"}} {{#unless dmg.base}} - {{formField fields.custom.fields.enabled value=source.custom.enabled name=(concat path "damage.parts." realIndex "." target ".custom.enabled") classes="checkbox" localize=true}} + {{formField fields.custom.fields.enabled value=source.custom.enabled name=(concat path "damage.parts." key "." target ".custom.enabled") classes="checkbox" localize=true}} {{/unless}} {{#if source.custom.enabled}} - {{formField fields.custom.fields.formula value=source.custom.formula name=(concat path "damage.parts." realIndex "." target ".custom.formula") localize=true}} + {{formField fields.custom.fields.formula value=source.custom.formula name=(concat path "damage.parts." key "." target ".custom.formula") localize=true}} {{else}}
      {{#unless @root.isNPC}} - {{formField fields.multiplier value=source.multiplier name=(concat path "damage.parts." realIndex "." target ".multiplier") localize=true}} + {{formField fields.multiplier value=source.multiplier name=(concat path "damage.parts." key "." target ".multiplier") localize=true}} {{/unless}} - {{#if (eq source.multiplier 'flat')}}{{formField fields.flatMultiplier value=source.flatMultiplier name=(concat path "damage.parts." realIndex "." target ".flatMultiplier") localize=true }}{{/if}} - {{formField fields.dice value=source.dice name=(concat path "damage.parts." realIndex "." target ".dice") localize=true}} - {{formField fields.bonus value=source.bonus name=(concat path "damage.parts." realIndex "." target ".bonus") localize=true}} + {{#if (eq source.multiplier 'flat')}}{{formField fields.flatMultiplier value=source.flatMultiplier name=(concat path "damage.parts." key "." target ".flatMultiplier") localize=true }}{{/if}} + {{formField fields.dice value=source.dice name=(concat path "damage.parts." key "." target ".dice") localize=true}} + {{formField fields.bonus value=source.bonus name=(concat path "damage.parts." key "." target ".bonus") localize=true}}
      {{/if}} {{#if @root.isNPC}} - + {{/if}} {{/inline}} \ No newline at end of file diff --git a/templates/sheets/items/weapon/header.hbs b/templates/sheets/items/weapon/header.hbs index 349a9516..9bbd9511 100644 --- a/templates/sheets/items/weapon/header.hbs +++ b/templates/sheets/items/weapon/header.hbs @@ -14,13 +14,13 @@ - {{localize (concat 'DAGGERHEART.CONFIG.Range.' source.system.attack.range '.name')}} - - {{#if source.system.attack.damage.parts.0.value.custom.enabled}} + {{#if source.system.attack.damage.parts.hitPoints.value.custom.enabled}} {{localize "DAGGERHEART.GENERAL.custom"}} {{else}} - {{source.system.attack.damage.parts.0.value.dice}}{{#if source.system.attack.damage.parts.0.value.bonus}} + {{source.system.attack.damage.parts.0.value.bonus}}{{/if}} + {{source.system.attack.damage.parts.hitPoints.value.dice}}{{#if source.system.attack.damage.parts.hitPoints.value.bonus}} + {{source.system.attack.damage.parts.hitPoints.value.bonus}}{{/if}} {{/if}} ( - {{#each source.system.attack.damage.parts.0.type}} + {{#each source.system.attack.damage.parts.hitPoints.type}} {{localize (concat 'DAGGERHEART.CONFIG.DamageType.' this '.abbreviation')}} {{/each}} ) diff --git a/templates/sheets/items/weapon/settings.hbs b/templates/sheets/items/weapon/settings.hbs index f9499221..e67e8dd7 100644 --- a/templates/sheets/items/weapon/settings.hbs +++ b/templates/sheets/items/weapon/settings.hbs @@ -19,24 +19,24 @@
      {{#with systemFields.attack.fields.damage.fields.parts.element.fields as | fields | }} - {{#with (lookup ../document.system.attack.damage.parts 0) as | source | }} + {{#with ../document.system.attack.damage.parts.hitPoints as | source | }} {{localize "DAGGERHEART.GENERAL.damage"}} {{localize "DAGGERHEART.ACTIONS.Config.general.customFormula"}} - {{formInput fields.value.fields.custom.fields.enabled value=source.value.custom.enabled name="system.attack.damage.parts.0.value.custom.enabled"}} + {{formInput fields.value.fields.custom.fields.enabled value=source.value.custom.enabled name="system.attack.damage.parts.hitPoints.value.custom.enabled"}} {{#if source.value.custom.enabled}} {{localize "DAGGERHEART.ACTIONS.Config.general.formula"}} - {{formInput fields.value.fields.custom.fields.formula value=source.value.custom.formula name="system.attack.damage.parts.0.value.custom.formula"}} + {{formInput fields.value.fields.custom.fields.formula value=source.value.custom.formula name="system.attack.damage.parts.hitPoints.value.custom.formula"}} {{else}} {{localize "DAGGERHEART.GENERAL.Dice.single"}} - {{formInput fields.value.fields.dice value=source.value.dice name="system.attack.damage.parts.0.value.dice"}} + {{formInput fields.value.fields.dice value=source.value.dice name="system.attack.damage.parts.hitPoints.value.dice"}} {{localize "DAGGERHEART.GENERAL.bonus"}} - {{formInput fields.value.fields.bonus value=source.value.bonus name="system.attack.damage.parts.0.value.bonus" localize=true}} + {{formInput fields.value.fields.bonus value=source.value.bonus name="system.attack.damage.parts.hitPoints.value.bonus" localize=true}} {{/if}} {{localize "DAGGERHEART.GENERAL.type"}} - {{formInput fields.type value=source.type name="system.attack.damage.parts.0.type" localize=true}} + {{formInput fields.type value=source.type name="system.attack.damage.parts.hitPoints.type" localize=true}} {{localize "DAGGERHEART.CONFIG.DamageType.direct.name"}} {{formInput @root.systemFields.attack.fields.damage.fields.direct value=@root.document.system.attack.damage.direct name="system.attack.damage.direct" localize=true}} - + {{/with}} {{/with}}
      From fcadf119b720cd249517fd3a55a3145fe66ac365 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:30:03 +0100 Subject: [PATCH 20/34] [V14] Emanation AutoSizing (#1686) * Added so that emanation templates auto size their base to any token at the spot its placed * Correct option useage * Also snap emanations when done from scene controls --------- Co-authored-by: Carlos Fernandez --- module/canvas/placeables/regionLayer.mjs | 49 ++++++++- module/canvas/placeables/templateLayer.mjs | 116 --------------------- 2 files changed, 48 insertions(+), 117 deletions(-) delete mode 100644 module/canvas/placeables/templateLayer.mjs diff --git a/module/canvas/placeables/regionLayer.mjs b/module/canvas/placeables/regionLayer.mjs index d50845b7..75c192a0 100644 --- a/module/canvas/placeables/regionLayer.mjs +++ b/module/canvas/placeables/regionLayer.mjs @@ -43,6 +43,53 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer { const hole = ui.controls.controls[this.options.name].tools.hole?.active ?? false; if (game.activeTool === 'inFront') return { type: 'cone', x: 0, y: 0, radius: 0, angle: 180, hole }; - return super._createDragShapeData(event); + const shape = super._createDragShapeData(event); + const token = shape?.type === 'emanation' && shape.base?.type === 'token' ? this.#findTokenInBounds(event.interactionData.origin) : null; + if (token) { + shape.base.width = token.width; + shape.base.height = token.height; + event.interactionData.origin = token.getCenterPoint(); + } + return shape; + } + + async placeRegion(data, options = {}) { + const preConfirm = ({ _event, document, _create, _options }) => { + const shape = document.shapes[0]; + const isEmanation = shape.type === 'emanation'; + if (isEmanation) { + const token = this.#findTokenInBounds(shape.base.origin); + if (!token) return options.preConfirm?.() ?? true; + const shapeData = shape.toObject(); + document.updateSource({ + shapes: [ + { + ...shapeData, + base: { + ...shapeData.base, + height: token.height, + width: token.width, + x: token.x, + y: token.y + } + } + ] + }); + } + + return options?.preConfirm?.() ?? true; + }; + + super.placeRegion(data, { ...options, preConfirm }); + } + + /** Searches for token at origin point, returning null if there are no tokens or multiple overlapping tokens */ + #findTokenInBounds(origin) { + const { x, y } = origin; + const gridSize = canvas.grid.size; + const inBounds = canvas.scene.tokens.filter(t => { + return x.between(t.x, t.x + t.width * gridSize) && y.between(t.y, t.y + t.height * gridSize); + }); + return inBounds.length === 1 ? inBounds[0] : null; } } diff --git a/module/canvas/placeables/templateLayer.mjs b/module/canvas/placeables/templateLayer.mjs deleted file mode 100644 index 55bd7eb2..00000000 --- a/module/canvas/placeables/templateLayer.mjs +++ /dev/null @@ -1,116 +0,0 @@ -export default class DhTemplateLayer extends foundry.canvas.layers.TemplateLayer { - static prepareSceneControls() { - const sc = foundry.applications.ui.SceneControls; - return { - name: 'templates', - order: 2, - title: 'CONTROLS.GroupMeasure', - icon: 'fa-solid fa-ruler-combined', - visible: game.user.can('REGION_CREATE'), - onChange: (event, active) => { - if (active) canvas.templates.activate(); - }, - onToolChange: () => canvas.templates.setAllRenderFlags({ refreshState: true }), - tools: { - circle: { - name: 'circle', - order: 1, - title: 'CONTROLS.MeasureCircle', - icon: 'fa-regular fa-circle', - toolclip: { - src: 'toolclips/tools/measure-circle.webm', - heading: 'CONTROLS.MeasureCircle', - items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete']) - } - }, - cone: { - name: 'cone', - order: 2, - title: 'CONTROLS.MeasureCone', - icon: 'fa-solid fa-angle-left', - toolclip: { - src: 'toolclips/tools/measure-cone.webm', - heading: 'CONTROLS.MeasureCone', - items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) - } - }, - inFront: { - name: 'inFront', - order: 3, - title: 'CONTROLS.inFront', - icon: 'fa-solid fa-eye', - toolclip: { - src: 'toolclips/tools/measure-cone.webm', - heading: 'CONTROLS.inFront', - items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) - } - }, - rect: { - name: 'rect', - order: 4, - title: 'CONTROLS.MeasureRect', - icon: 'fa-regular fa-square', - toolclip: { - src: 'toolclips/tools/measure-rect.webm', - heading: 'CONTROLS.MeasureRect', - items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) - } - }, - ray: { - name: 'ray', - order: 5, - title: 'CONTROLS.MeasureRay', - icon: 'fa-solid fa-up-down', - toolclip: { - src: 'toolclips/tools/measure-ray.webm', - heading: 'CONTROLS.MeasureRay', - items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate']) - } - }, - clear: { - name: 'clear', - order: 6, - title: 'CONTROLS.MeasureClear', - icon: 'fa-solid fa-trash', - visible: game.user.isGM, - onChange: () => canvas.templates.deleteAll(), - button: true - } - }, - activeTool: 'circle' - }; - } - - _onDragLeftStart(event) { - const interaction = event.interactionData; - - // Snap the origin to the grid - if (!event.shiftKey) interaction.origin = this.getSnappedPoint(interaction.origin); - - // Create a pending MeasuredTemplateDocument - const tool = game.activeTool === 'inFront' ? 'cone' : game.activeTool; - const previewData = { - user: game.user.id, - t: tool, - x: interaction.origin.x, - y: interaction.origin.y, - sort: Math.max(this.getMaxSort() + 1, 0), - distance: 1, - direction: 0, - fillColor: game.user.color || '#FF0000', - hidden: event.altKey - }; - const defaults = CONFIG.MeasuredTemplate.defaults; - if (game.activeTool === 'cone') previewData.angle = defaults.angle; - else if (game.activeTool === 'inFront') previewData.angle = 180; - else if (game.activeTool === 'ray') previewData.width = defaults.width * canvas.dimensions.distance; - const cls = foundry.utils.getDocumentClass('MeasuredTemplate'); - const doc = new cls(previewData, { parent: canvas.scene }); - - // Create a preview MeasuredTemplate object - const template = new this.constructor.placeableClass(doc); - doc._object = template; - interaction.preview = this.preview.addChild(template); - template.draw(); - } -} From 50b4b4cf26a86aae40aed9ab176914a1c1352099 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 12 Mar 2026 19:52:01 +0100 Subject: [PATCH 21/34] Fixed scars change preUpdate --- module/data/actor/character.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index 68f7f3a8..3d18fbbe 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -721,7 +721,8 @@ export default class DhCharacter extends DhCreature { const newHopeMax = this.system.resources.hope.max + diff; const newHopeValue = Math.min(newHopeMax, this.system.resources.hope.value); if (newHopeValue != this.system.resources.hope.value) { - if (!changes.system.resources) changes.system.resources = { hope: { value: 0 } }; + if (!changes.system.resources.hope) changes.system.resources.hope = { value: 0 }; + changes.system.resources.hope = { ...changes.system.resources.hope, value: changes.system.resources.hope.value + newHopeValue From 6c7937a9ff0c730c51925c9328bc6c0b43928fc8 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 12 Mar 2026 20:31:40 +0100 Subject: [PATCH 22/34] Fixed Book Of Tyfar missing a spellcast action --- .../domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json b/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json index 5e5cb054..4eabb038 100644 --- a/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json +++ b/src/packs/domains/domainCard_Book_of_Tyfar_1VXzwRbvbBj5bd5V.json @@ -153,9 +153,9 @@ }, "effects": [], "roll": { - "type": null, + "type": "spellcast", "trait": null, - "difficulty": null, + "difficulty": 13, "bonus": null, "advState": "neutral", "diceRolling": { From 5c8d16e1008b956b58a71dcce84faf6c36cfb7fd Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 12 Mar 2026 21:35:26 +0100 Subject: [PATCH 23/34] Raised version --- module/data/actor/environment.mjs | 2 +- system.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/data/actor/environment.mjs b/module/data/actor/environment.mjs index c4a3f747..0aaf8eb0 100644 --- a/module/data/actor/environment.mjs +++ b/module/data/actor/environment.mjs @@ -37,7 +37,7 @@ export default class DhEnvironment extends BaseDataActor { potentialAdversaries: new fields.TypedObjectField( new fields.SchemaField({ label: new fields.StringField(), - adversaries: new ForeignDocumentUUIDArrayField({ type: 'Actor' }, { required: false, initial: [] }) + adversaries: new ForeignDocumentUUIDArrayField({ type: 'Actor' }) }) ), notes: new fields.HTMLField() diff --git a/system.json b/system.json index 14d61851..41e46edb 100644 --- a/system.json +++ b/system.json @@ -5,7 +5,7 @@ "version": "2.0.0", "compatibility": { "minimum": "14.355", - "verified": "14.355", + "verified": "14.356", "maximum": "14" }, "authors": [ From ee3bbaec53f487401f84ba4e872b512c890ad946 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 12 Mar 2026 22:12:45 +0100 Subject: [PATCH 24/34] Fixed drag/drop --- .../sheets/api/application-mixin.mjs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/module/applications/sheets/api/application-mixin.mjs b/module/applications/sheets/api/application-mixin.mjs index 8c96e0bd..129914df 100644 --- a/module/applications/sheets/api/application-mixin.mjs +++ b/module/applications/sheets/api/application-mixin.mjs @@ -74,6 +74,15 @@ export default function DHApplicationMixin(Base) { class DHSheetV2 extends HandlebarsApplicationMixin(Base) { #nonHeaderAttribution = ['environment', 'ancestry', 'community', 'domainCard']; + /** + * @param {DHSheetV2Configuration} [options={}] + */ + constructor(options = {}) { + super(options); + + this._setupDragDrop(); + } + /** * The default options for the sheet. * @type {DHSheetV2Configuration} @@ -165,7 +174,9 @@ export default function DHApplicationMixin(Base) { /**@inheritdoc */ _attachPartListeners(partId, htmlElement, options) { super._attachPartListeners(partId, htmlElement, options); - // this._dragDrop.forEach(d => d.bind(htmlElement)); + + /* Core dragDrop from ActorDocument is always only 1. Possible we could refactor our own */ + if (Array.isArray(this._dragDrop)) this._dragDrop.forEach(d => d.bind(htmlElement)); // Handle delta inputs for (const deltaInput of htmlElement.querySelectorAll('input[data-allow-delta]')) { @@ -338,6 +349,26 @@ export default function DHApplicationMixin(Base) { /* Drag and Drop */ /* -------------------------------------------- */ + /** + * Creates drag-drop handlers from the configured options. + * @returns {foundry.applications.ux.DragDrop[]} + * @private + */ + _setupDragDrop() { + if (this._dragDrop) { + this._dragDrop.callbacks.dragStart = this._onDragStart; + this._dragDrop.callback.drop = this._onDrop; + } else { + this._dragDrop = this.options.dragDrop.map(d => { + d.callbacks = { + dragstart: this._onDragStart.bind(this), + drop: this._onDrop.bind(this) + }; + return new foundry.applications.ux.DragDrop.implementation(d); + }); + } + } + /** * Handle dragStart event. * @param {DragEvent} event From 8172e8baa74f5eb1c4fa9dacfeb201144224f917 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Fri, 13 Mar 2026 00:15:52 +0100 Subject: [PATCH 25/34] [Feature] DualityDice DiceSoNice Animations (#1722) * . * Fixed translation * Remove fieldset * DiceSoNice Animation Overrides (#1726) * . * . * Fixed hope/fear animation input * Visual tweaks to general tab * Move general tab to top * Fixed localizaiton --------- Co-authored-by: Carlos Fernandez --- lang/en.json | 12 +- .../settings/appearanceSettings.mjs | 53 +++++++- module/config/generalConfig.mjs | 117 +++++++++++++++++- module/config/resourceConfig.mjs | 6 +- module/config/settingsConfig.mjs | 1 + module/data/fields/actorField.mjs | 4 +- module/data/settings/Appearance.mjs | 64 +++++++++- module/data/settings/GlobalOverrides.mjs | 55 ++++++++ module/data/settings/Homebrew.mjs | 2 +- module/data/settings/_module.mjs | 1 + module/dice/dualityRoll.mjs | 6 +- module/helpers/utils.mjs | 8 +- module/systemRegistration/handlebars.mjs | 3 +- module/systemRegistration/settings.mjs | 22 ++-- styles/less/global/elements.less | 59 +-------- styles/less/ui/index.less | 1 + .../appearance-settings/diceSoNice.less | 72 +++++++++++ .../appearance-settings/diceSoNice.hbs | 94 +++++--------- .../appearance-settings/diceSoNiceTab.hbs | 62 ++++++++++ 19 files changed, 492 insertions(+), 150 deletions(-) create mode 100644 module/data/settings/GlobalOverrides.mjs create mode 100644 styles/less/ui/settings/appearance-settings/diceSoNice.less create mode 100644 templates/settings/appearance-settings/diceSoNiceTab.hbs diff --git a/lang/en.json b/lang/en.json index 75896218..98cae76b 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1058,6 +1058,10 @@ "fear": "Fear", "spotlight": "Spotlight" }, + "DaggerheartDiceAnimationEvents": { + "critical": { "name": "Critical" }, + "higher": { "name": "Highest Roll" } + }, "DamageType": { "physical": { "name": "Physical", @@ -2309,6 +2313,7 @@ "plurial": "Players" }, "portrait": "Portrait", + "preview": "Preview", "proficiency": "Proficiency", "quantity": "Quantity", "range": "Range", @@ -2758,7 +2763,12 @@ "colorset": "Theme", "material": "Material", "system": "Dice Preset", - "font": "Font" + "font": "Font", + "critical": "Duality Critical Animation", + "diceAppearance": "Dice Appearance", + "animations": "Animations", + "defaultAnimations": "Set Animations As Player Defaults", + "previewAnimation": "Preview Animation" } }, "variantRules": { diff --git a/module/applications/settings/appearanceSettings.mjs b/module/applications/settings/appearanceSettings.mjs index 9eb0cfbf..151648e1 100644 --- a/module/applications/settings/appearanceSettings.mjs +++ b/module/applications/settings/appearanceSettings.mjs @@ -12,7 +12,7 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App static DEFAULT_OPTIONS = { tag: 'form', id: 'daggerheart-appearance-settings', - classes: ['daggerheart', 'dialog', 'dh-style', 'setting'], + classes: ['daggerheart', 'dialog', 'dh-style', 'setting', 'appearance-settings'], position: { width: '600', height: 'auto' }, window: { title: 'DAGGERHEART.SETTINGS.Menu.title', @@ -70,6 +70,14 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App } } + _attachPartListeners(partId, htmlElement, options) { + super._attachPartListeners(partId, htmlElement, options); + + htmlElement + .querySelector('.default-animations-input') + ?.addEventListener('change', this.toggleSFXOverride.bind(this)); + } + /** @inheritdoc */ _configureRenderParts(options) { const parts = super._configureRenderParts(options); @@ -83,15 +91,20 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App /**@inheritdoc */ async _prepareContext(options) { const context = await super._prepareContext(options); - if (options.isFirstRender) + if (options.isFirstRender) { this.setting = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance); + this.globalOverrides = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides); + } context.setting = this.setting; + context.globalOverrides = this.globalOverrides; context.fields = this.setting.schema.fields; context.tabs = this._prepareTabs('general'); context.dsnTabs = this._prepareTabs('diceSoNice'); + context.isGM = game.user.isGM; + return context; } @@ -120,6 +133,9 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App * @protected */ async prepareDiceSoNiceContext(context) { + context.animationEvents = CONFIG.DH.GENERAL.daggerheartDiceAnimationEvents; + context.previewAnimation = this.previewAnimation; + context.diceSoNiceTextures = Object.entries(game.dice3d.exports.TEXTURELIST).reduce( (acc, [k, v]) => ({ ...acc, @@ -146,6 +162,13 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App ); context.diceSoNiceFonts = game.dice3d.exports.Utils.prepareFontList(); + const getAnimationsOptions = key => { + const fields = context.fields.diceSoNice.fields[key].fields.sfx.fields; + return { + higher: fields.higher.fields.class.choices + }; + }; + foundry.utils.mergeObject( context.dsnTabs, ['hope', 'fear', 'advantage', 'disadvantage'].reduce( @@ -153,7 +176,8 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App ...acc, [key]: { values: this.setting.diceSoNice[key], - fields: this.setting.schema.getField(`diceSoNice.${key}`).fields + fields: this.setting.schema.getField(`diceSoNice.${key}`).fields, + animations: ['hope', 'fear'].includes(key) ? getAnimationsOptions(key) : {} } }), {} @@ -169,13 +193,20 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App * @param {foundry.applications.ux.FormDataExtended} formData * @returns {Promise} */ - static async #onSubmit(event, form, formData) { + static async #onSubmit(_event, _form, formData) { const data = this.setting.schema.clean(foundry.utils.expandObject(formData.object)); + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance, data); } /* -------------------------------------------- */ + async toggleSFXOverride(event) { + await this.globalOverrides.diceSoNiceSFXUpdate(this.setting, event.target.checked); + this.globalOverrides = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides); + this.render(); + } + /** * Submit the configuration form. * @this {DHAppearanceSettings} @@ -183,13 +214,25 @@ export default class DHAppearanceSettings extends HandlebarsApplicationMixin(App */ static async #onPreview(_, target) { const formData = new foundry.applications.ux.FormDataExtended(target.closest('form')); - const { diceSoNice } = foundry.utils.expandObject(formData.object); + const { diceSoNice, ...rest } = foundry.utils.expandObject(formData.object); const { key } = target.dataset; const faces = ['advantage', 'disadvantage'].includes(key) ? 'd6' : 'd12'; const preset = await getDiceSoNicePreset(diceSoNice[key], faces); const diceSoNiceRoll = await new foundry.dice.Roll(`1${faces}`).evaluate(); diceSoNiceRoll.dice[0].options.appearance = preset.appearance; diceSoNiceRoll.dice[0].options.modelFile = preset.modelFile; + + const previewAnimation = rest[`${key}PreviewAnimation`]; + const events = CONFIG.DH.GENERAL.daggerheartDiceAnimationEvents; + if (previewAnimation) { + if (previewAnimation === events.critical.id && diceSoNice.sfx.critical.class) { + diceSoNiceRoll.dice[0].options.sfx = { specialEffect: diceSoNice.sfx.critical.class }; + } + if (previewAnimation === events.higher.id && diceSoNice[key].sfx.higher) { + diceSoNiceRoll.dice[0].options.sfx = { specialEffect: diceSoNice[key].sfx.higher.class }; + } + } + await game.dice3d.showForRoll(diceSoNiceRoll, game.user, false); } diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index d46db23a..f1c21d26 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -630,7 +630,95 @@ export const diceSetNumbers = { flat: 'Flat' }; -export const getDiceSoNicePreset = async (type, faces) => { +export const diceSoNiceSFXClasses = { + PlayAnimationBright: { + id: 'PlayAnimationBright', + label: 'DICESONICE.PlayAnimationBright' + }, + PlayAnimationDark: { + id: 'PlayAnimationDark', + label: 'DICESONICE.PlayAnimationDark' + }, + PlayAnimationOutline: { + id: 'PlayAnimationOutline', + label: 'DICESONICE.PlayAnimationOutline' + }, + PlayAnimationImpact: { + id: 'PlayAnimationImpact', + label: 'DICESONICE.PlayAnimationImpact' + }, + // PlayConfettiStrength1: { + // id: 'PlayConfettiStrength1', + // label: 'DICESONICE.PlayConfettiStrength1' + // }, + // PlayConfettiStrength2: { + // id: 'PlayConfettiStrength2', + // label: 'DICESONICE.PlayConfettiStrength2' + // }, + // PlayConfettiStrength3: { + // id: 'PlayConfettiStrength3', + // label: 'DICESONICE.PlayConfettiStrength3' + // }, + PlayAnimationThormund: { + id: 'PlayAnimationThormund', + label: 'DICESONICE.PlayAnimationThormund' + }, + PlayAnimationParticleSpiral: { + id: 'PlayAnimationParticleSpiral', + label: 'DICESONICE.PlayAnimationParticleSpiral' + }, + PlayAnimationParticleSparkles: { + id: 'PlayAnimationParticleSparkles', + label: 'DICESONICE.PlayAnimationParticleSparkles' + }, + PlayAnimationParticleVortex: { + id: 'PlayAnimationParticleVortex', + label: 'DICESONICE.PlayAnimationParticleVortex' + }, + PlaySoundEpicWin: { + id: 'PlaySoundEpicWin', + label: 'DICESONICE.PlaySoundEpicWin' + }, + PlaySoundEpicFail: { + id: 'PlaySoundEpicFail', + label: 'DICESONICE.PlaySoundEpicFail' + } + // "PlaySoundCustom", + // "PlayMacro" +}; + +export const daggerheartDiceAnimationEvents = { + critical: { + id: 'critical', + label: 'DAGGERHEART.CONFIG.DaggerheartDiceAnimationEvents.critical.name' + }, + higher: { + id: 'higher', + label: 'DAGGERHEART.CONFIG.DaggerheartDiceAnimationEvents.higher.name' + } +}; + +const getDiceSoNiceSFX = sfxOptions => { + const diceSoNice = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance).diceSoNiceData; + const criticalAnimationData = diceSoNice.sfx.critical; + if (sfxOptions.critical && criticalAnimationData.class) { + return { + specialEffect: criticalAnimationData.class, + options: {} + }; + } + + if (sfxOptions.higher && sfxOptions.data.higher) { + return { + specialEffect: sfxOptions.data.higher.class, + options: {} + }; + } + + return {}; +}; + +export const getDiceSoNicePreset = async (type, faces, sfxOptions = {}) => { const system = game.dice3d.DiceFactory.systems.get(type.system).dice.get(faces); if (!system) { ui.notifications.error( @@ -653,16 +741,33 @@ export const getDiceSoNicePreset = async (type, faces) => { appearance: { ...system.appearance, ...type - } + }, + sfx: getDiceSoNiceSFX(sfxOptions) }; }; -export const getDiceSoNicePresets = async (hopeFaces, fearFaces, advantageFaces = 'd6', disadvantageFaces = 'd6') => { - const { diceSoNice } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance); +export const getDiceSoNicePresets = async ( + result, + hopeFaces, + fearFaces, + advantageFaces = 'd6', + disadvantageFaces = 'd6' +) => { + const diceSoNice = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance).diceSoNiceData; + + const { isCritical, withHope, withFear } = result; return { - hope: await getDiceSoNicePreset(diceSoNice.hope, hopeFaces), - fear: await getDiceSoNicePreset(diceSoNice.fear, fearFaces), + hope: await getDiceSoNicePreset(diceSoNice.hope, hopeFaces, { + critical: isCritical, + higher: withHope, + data: diceSoNice.hope.sfx + }), + fear: await getDiceSoNicePreset(diceSoNice.fear, fearFaces, { + critical: isCritical, + higher: withFear, + data: diceSoNice.fear.sfx + }), advantage: await getDiceSoNicePreset(diceSoNice.advantage, advantageFaces), disadvantage: await getDiceSoNicePreset(diceSoNice.disadvantage, disadvantageFaces) }; diff --git a/module/config/resourceConfig.mjs b/module/config/resourceConfig.mjs index f7d56b44..56ef6cd5 100644 --- a/module/config/resourceConfig.mjs +++ b/module/config/resourceConfig.mjs @@ -72,17 +72,17 @@ const companionBaseResources = Object.freeze({ export const character = { base: characterBaseResources, custom: {}, // module stuff goes here - all: { ...characterBaseResources }, + all: { ...characterBaseResources } }; export const adversary = { base: adversaryBaseResources, custom: {}, // module stuff goes here - all: { ...adversaryBaseResources }, + all: { ...adversaryBaseResources } }; export const companion = { base: companionBaseResources, custom: {}, // module stuff goes here - all: { ...companionBaseResources }, + all: { ...companionBaseResources } }; diff --git a/module/config/settingsConfig.mjs b/module/config/settingsConfig.mjs index 38ffcf3b..0b28f0ab 100644 --- a/module/config/settingsConfig.mjs +++ b/module/config/settingsConfig.mjs @@ -26,6 +26,7 @@ export const gameSettings = { Metagaming: 'Metagaming', Homebrew: 'Homebrew', appearance: 'Appearance', + GlobalOverrides: 'GlobalOverrides', variantRules: 'VariantRules', Resources: { Fear: 'ResourcesFear' diff --git a/module/data/fields/actorField.mjs b/module/data/fields/actorField.mjs index 65e7abbf..1399fb32 100644 --- a/module/data/fields/actorField.mjs +++ b/module/data/fields/actorField.mjs @@ -21,7 +21,7 @@ const bonusField = label => dice: new fields.ArrayField(new fields.StringField(), { label: `${game.i18n.localize(label)} Dice` }) }); -/** +/** * Field used for actor resources. It is a resource that validates dynamically based on the config. * Because "max" may be defined during runtime, we don't attempt to clamp the maximum value. */ @@ -78,7 +78,7 @@ class ResourcesField extends fields.TypedObjectField { const resource = resources[key]; value.label = resource.label; value.isReversed = resources[key].reverse; - value.max = typeof resource.max === 'number' ? value.max ?? resource.max : null; + value.max = typeof resource.max === 'number' ? (value.max ?? resource.max) : null; } return data; } diff --git a/module/data/settings/Appearance.mjs b/module/data/settings/Appearance.mjs index cd98d6f9..9da3afac 100644 --- a/module/data/settings/Appearance.mjs +++ b/module/data/settings/Appearance.mjs @@ -1,6 +1,16 @@ export default class DhAppearance extends foundry.abstract.DataModel { static LOCALIZATION_PREFIXES = ['DAGGERHEART.SETTINGS.Appearance']; + static sfxSchema = () => + new foundry.data.fields.SchemaField({ + class: new foundry.data.fields.StringField({ + nullable: true, + initial: null, + blank: true, + choices: CONFIG.DH.GENERAL.diceSoNiceSFXClasses + }) + }); + static defineSchema() { const { StringField, ColorField, BooleanField, SchemaField } = foundry.data.fields; @@ -15,7 +25,10 @@ export default class DhAppearance extends foundry.abstract.DataModel { colorset: new StringField({ initial: 'inspired', required: true, blank: false }), material: new StringField({ initial: 'metal', required: true, blank: false }), system: new StringField({ initial: 'standard', required: true, blank: false }), - font: new StringField({ initial: 'auto', required: true, blank: false }) + font: new StringField({ initial: 'auto', required: true, blank: false }), + sfx: new SchemaField({ + higher: DhAppearance.sfxSchema() + }) }); return { @@ -30,7 +43,10 @@ export default class DhAppearance extends foundry.abstract.DataModel { hope: diceStyle({ fg: '#ffffff', bg: '#ffe760', outline: '#000000', edge: '#ffffff' }), fear: diceStyle({ fg: '#000000', bg: '#0032b1', outline: '#ffffff', edge: '#000000' }), advantage: diceStyle({ fg: '#ffffff', bg: '#008000', outline: '#000000', edge: '#ffffff' }), - disadvantage: diceStyle({ fg: '#000000', bg: '#b30000', outline: '#ffffff', edge: '#000000' }) + disadvantage: diceStyle({ fg: '#000000', bg: '#b30000', outline: '#ffffff', edge: '#000000' }), + sfx: new SchemaField({ + critical: DhAppearance.sfxSchema() + }) }), extendCharacterDescriptions: new BooleanField(), extendAdversaryDescriptions: new BooleanField(), @@ -65,4 +81,48 @@ export default class DhAppearance extends foundry.abstract.DataModel { showGenericStatusEffects: new BooleanField({ initial: true }) }; } + + get diceSoNiceData() { + const globalOverrides = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides); + const getSFX = (baseClientData, overrideKey) => { + if (!globalOverrides.diceSoNice.sfx.overrideEnabled) return baseClientData; + const overrideData = globalOverrides.diceSoNice.sfx[overrideKey]; + const clientData = foundry.utils.deepClone(baseClientData); + return Object.keys(clientData).reduce((acc, key) => { + const data = clientData[key]; + acc[key] = Object.keys(data).reduce((acc, dataKey) => { + const value = data[dataKey]; + acc[dataKey] = value ? value : overrideData[key][dataKey]; + return acc; + }, {}); + return acc; + }, {}); + }; + + return { + ...this.diceSoNice, + sfx: getSFX(this.diceSoNice.sfx, 'global'), + hope: { + ...this.diceSoNice.hope, + sfx: getSFX(this.diceSoNice.hope.sfx, 'hope') + }, + fear: { + ...this.diceSoNice.fear, + sfx: getSFX(this.diceSoNice.fear.sfx, 'fear') + } + }; + } + + /** Invoked by the setting when data changes */ + handleChange() { + if (this.displayFear) { + if (ui.resources) { + if (this.displayFear === 'hide') ui.resources.close({ allowed: true }); + else ui.resources.render({ force: true }); + } + } + + const globalOverrides = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides); + globalOverrides.diceSoNiceSFXUpdate(this); + } } diff --git a/module/data/settings/GlobalOverrides.mjs b/module/data/settings/GlobalOverrides.mjs new file mode 100644 index 00000000..746a6355 --- /dev/null +++ b/module/data/settings/GlobalOverrides.mjs @@ -0,0 +1,55 @@ +import DhAppearance from './Appearance.mjs'; + +/** + * A setting to handle cases where we want to allow the GM to set a global default for client settings. + */ +export default class DhGlobalOverrides extends foundry.abstract.DataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + diceSoNice: new fields.SchemaField({ + sfx: new fields.SchemaField({ + overrideEnabled: new fields.BooleanField(), + global: new fields.SchemaField({ + critical: DhAppearance.sfxSchema() + }), + hope: new fields.SchemaField({ + higher: DhAppearance.sfxSchema() + }), + fear: new fields.SchemaField({ + higher: DhAppearance.sfxSchema() + }) + }) + }) + }; + } + + async diceSoNiceSFXUpdate(appearanceSettings, enabled) { + if (!game.user.isGM) return; + + const newEnabled = enabled !== undefined ? enabled : this.diceSoNice.sfx.overrideEnabled; + if (newEnabled) { + const newOverrides = foundry.utils.mergeObject(this.toObject(), { + diceSoNice: { + sfx: { + overrideEnabled: true, + global: appearanceSettings.diceSoNice.sfx, + hope: appearanceSettings.diceSoNice.hope.sfx, + fear: appearanceSettings.diceSoNice.fear.sfx + } + } + }); + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides, newOverrides); + } else { + const newOverrides = { + ...this.toObject(), + diceSoNice: { + sfx: { + overrideEnabled: false + } + } + }; + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides, newOverrides); + } + } +} diff --git a/module/data/settings/Homebrew.mjs b/module/data/settings/Homebrew.mjs index 9b4ee2cf..d4b7b03f 100644 --- a/module/data/settings/Homebrew.mjs +++ b/module/data/settings/Homebrew.mjs @@ -220,7 +220,7 @@ export default class DhHomebrew extends foundry.abstract.DataModel { return result; }, {}), ...config.custom, - ...config.base, + ...config.base }); } } diff --git a/module/data/settings/_module.mjs b/module/data/settings/_module.mjs index 45405ba5..1343c0c4 100644 --- a/module/data/settings/_module.mjs +++ b/module/data/settings/_module.mjs @@ -3,3 +3,4 @@ export { default as DhAutomation } from './Automation.mjs'; export { default as DhHomebrew } from './Homebrew.mjs'; export { default as DhMetagaming } from './Metagaming.mjs'; export { default as DhVariantRules } from './VariantRules.mjs'; +export { default as DhGlobalOverrides } from './GlobalOverrides.mjs'; diff --git a/module/dice/dualityRoll.mjs b/module/dice/dualityRoll.mjs index 9037250a..75fbdf55 100644 --- a/module/dice/dualityRoll.mjs +++ b/module/dice/dualityRoll.mjs @@ -378,6 +378,8 @@ export default class DualityRoll extends D20Roll { let parsedRoll = game.system.api.dice.DualityRoll.fromData({ ...rollString, evaluated: false }); const term = parsedRoll.terms[target.dataset.dieIndex]; await term.reroll(`/r1=${term.total}`); + const result = await parsedRoll.evaluate(); + if (game.modules.get('dice-so-nice')?.active) { const diceSoNiceRoll = { _evaluated: true, @@ -391,7 +393,7 @@ export default class DualityRoll extends D20Roll { options: { appearance: {} } }; - const diceSoNicePresets = await getDiceSoNicePresets(`d${term._faces}`, `d${term._faces}`); + const diceSoNicePresets = await getDiceSoNicePresets(result, `d${term._faces}`, `d${term._faces}`); const type = target.dataset.type; if (diceSoNicePresets[type]) { diceSoNiceRoll.dice[0].options = diceSoNicePresets[type]; @@ -400,8 +402,6 @@ export default class DualityRoll extends D20Roll { await game.dice3d.showForRoll(diceSoNiceRoll, game.user, true); } - await parsedRoll.evaluate(); - const newRoll = game.system.api.dice.DualityRoll.postEvaluate(parsedRoll, { targets: message.system.targets, roll: { diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 5704b891..b49a98ca 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -60,7 +60,13 @@ export const getCommandTarget = (options = {}) => { export const setDiceSoNiceForDualityRoll = async (rollResult, advantageState, hopeFaces, fearFaces, advantageFaces) => { if (!game.modules.get('dice-so-nice')?.active) return; - const diceSoNicePresets = await getDiceSoNicePresets(hopeFaces, fearFaces, advantageFaces, advantageFaces); + const diceSoNicePresets = await getDiceSoNicePresets( + rollResult, + hopeFaces, + fearFaces, + advantageFaces, + advantageFaces + ); rollResult.dice[0].options = diceSoNicePresets.hope; rollResult.dice[1].options = diceSoNicePresets.fear; if (rollResult.dice[2] && advantageState) { diff --git a/module/systemRegistration/handlebars.mjs b/module/systemRegistration/handlebars.mjs index 9ccb16f4..f51e1035 100644 --- a/module/systemRegistration/handlebars.mjs +++ b/module/systemRegistration/handlebars.mjs @@ -46,6 +46,7 @@ export const preloadHandlebarsTemplates = async function () { 'systems/daggerheart/templates/ui/chat/parts/target-part.hbs', 'systems/daggerheart/templates/ui/chat/parts/button-part.hbs', 'systems/daggerheart/templates/ui/itemBrowser/itemContainer.hbs', - 'systems/daggerheart/templates/scene/dh-config.hbs' + 'systems/daggerheart/templates/scene/dh-config.hbs', + 'systems/daggerheart/templates/settings/appearance-settings/diceSoNiceTab.hbs' ]); }; diff --git a/module/systemRegistration/settings.mjs b/module/systemRegistration/settings.mjs index 8440e3fe..e7ec37f5 100644 --- a/module/systemRegistration/settings.mjs +++ b/module/systemRegistration/settings.mjs @@ -1,6 +1,13 @@ import { defaultLevelTiers, DhLevelTiers } from '../data/levelTier.mjs'; import DhCountdowns from '../data/countdowns.mjs'; -import { DhAppearance, DhAutomation, DhHomebrew, DhMetagaming, DhVariantRules } from '../data/settings/_module.mjs'; +import { + DhAppearance, + DhAutomation, + DhGlobalOverrides, + DhHomebrew, + DhMetagaming, + DhVariantRules +} from '../data/settings/_module.mjs'; import { DhAppearanceSettings, DhAutomationSettings, @@ -54,17 +61,18 @@ const registerMenuSettings = () => { } }); + game.settings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides, { + scope: 'world', + config: false, + type: DhGlobalOverrides + }); + game.settings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance, { scope: 'client', config: false, type: DhAppearance, onChange: value => { - if (value.displayFear) { - if (ui.resources) { - if (value.displayFear === 'hide') ui.resources.close({ allowed: true }); - else ui.resources.render({ force: true }); - } - } + value.handleChange(); } }); }; diff --git a/styles/less/global/elements.less b/styles/less/global/elements.less index f5e92e2c..beffefbb 100755 --- a/styles/less/global/elements.less +++ b/styles/less/global/elements.less @@ -565,60 +565,11 @@ } .application.setting.dh-style { - fieldset { - h2, - h3, - h4 { - margin: 8px 0 4px; - text-align: center; - } - .title-hint { - font-size: var(--font-size-12); - font-variant: small-caps; - text-align: center; - } - - .field-section { - display: flex; - flex-direction: column; - gap: 10px; - - .split-section { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px; - } - } - - .label-container { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px; - - &.full-width { - grid-template-columns: 1fr 1fr 1fr 1fr; - - select { - grid-column: span 3; - } - } - - label { - align-self: center; - text-align: center; - white-space: nowrap; - } - } - - .button-container { - display: grid; - grid-template-columns: 1fr; - gap: 10px; - text-align: center; - display: flex; - justify-content: center; - width: 100%; - } + h2, + h3, + h4 { + margin: 8px 0 4px; + text-align: center; } footer { diff --git a/styles/less/ui/index.less b/styles/less/ui/index.less index 5a6e5878..31ea8955 100644 --- a/styles/less/ui/index.less +++ b/styles/less/ui/index.less @@ -28,6 +28,7 @@ @import './settings/homebrew-settings/domains.less'; @import './settings/homebrew-settings/types.less'; @import './settings/homebrew-settings/resources.less'; +@import './settings/appearance-settings/diceSoNice.less'; @import './sidebar/tabs.less'; @import './sidebar/daggerheartMenu.less'; diff --git a/styles/less/ui/settings/appearance-settings/diceSoNice.less b/styles/less/ui/settings/appearance-settings/diceSoNice.less new file mode 100644 index 00000000..079bebc5 --- /dev/null +++ b/styles/less/ui/settings/appearance-settings/diceSoNice.less @@ -0,0 +1,72 @@ +.daggerheart.dh-style.setting.appearance-settings { + .tab.active[data-tab='diceSoNice'] { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.5rem; + } + + .diceSoNice-footer { + display: grid; + align-items: center; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap: 8px; + margin-top: 32px; + + label { + text-align: center; + } + + select { + grid-column: span 2; + } + } + + .title-hint { + font-size: var(--font-size-14); + font-variant: small-caps; + text-align: center; + } + + .split-section { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + + > label { + grid-column: span 2; + text-align: center; + font-size: var(--font-size-18); + font-weight: bold; + } + } + + .field-section { + display: flex; + flex-direction: column; + gap: 10px; + margin-bottom: 4px; + width: 100%; + padding: 0 8px; + } + + .label-container { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + + &.full-width { + grid-template-columns: 1fr 1fr 1fr 1fr; + + select { + grid-column: span 3; + } + } + + label { + align-self: center; + text-align: center; + white-space: nowrap; + } + } +} diff --git a/templates/settings/appearance-settings/diceSoNice.hbs b/templates/settings/appearance-settings/diceSoNice.hbs index 6c89fd2f..afe7dd5a 100644 --- a/templates/settings/appearance-settings/diceSoNice.hbs +++ b/templates/settings/appearance-settings/diceSoNice.hbs @@ -1,71 +1,37 @@
      -
      {{localize "DAGGERHEART.SETTINGS.Menu.appearance.diceSoNice.hint"}}
      - -
      -
      {{#each dsnTabs as |dsnTab|}} -
      -
      -
      - - {{formInput fields.system value=values.system localize=true choices=@root.diceSoNiceSystems}} -
      -
      -
      - - {{formInput fields.foreground value=values.foreground localize=true}} -
      -
      - - {{formInput fields.background value=values.background localize=true}} -
      -
      - - {{formInput fields.outline value=values.outline localize=true}} -
      -
      - - {{formInput fields.edge value=values.edge localize=true}} -
      -
      - - {{formInput fields.colorset value=values.colorset choices=@root.diceSoNiceColorsets localize=true}} -
      -
      - - {{formInput fields.texture value=values.texture choices=@root.diceSoNiceTextures localize=true}} -
      -
      - - {{formInput fields.material value=values.material choices=@root.diceSoNiceMaterials localize=true}} -
      -
      - - {{formInput fields.font value=values.font choices=@root.diceSoNiceFonts localize=true}} -
      -
      -
      - -
      -
      -
      +
      + {{> "systems/daggerheart/templates/settings/appearance-settings/diceSoNiceTab.hbs" dsnTab }} +
      {{/each}} -
      \ No newline at end of file diff --git a/templates/settings/appearance-settings/diceSoNiceTab.hbs b/templates/settings/appearance-settings/diceSoNiceTab.hbs new file mode 100644 index 00000000..a15b63ec --- /dev/null +++ b/templates/settings/appearance-settings/diceSoNiceTab.hbs @@ -0,0 +1,62 @@ +
      +

      {{localize "DAGGERHEART.SETTINGS.Menu.appearance.diceSoNice.diceAppearance"}}

      + +
      + + {{formInput fields.system value=values.system localize=true choices=@root.diceSoNiceSystems}} +
      +
      +
      + + {{formInput fields.foreground value=values.foreground localize=true}} +
      +
      + + {{formInput fields.background value=values.background localize=true}} +
      +
      + + {{formInput fields.outline value=values.outline localize=true}} +
      +
      + + {{formInput fields.edge value=values.edge localize=true}} +
      +
      + + {{formInput fields.colorset value=values.colorset choices=@root.diceSoNiceColorsets localize=true}} +
      +
      + + {{formInput fields.texture value=values.texture choices=@root.diceSoNiceTextures localize=true}} +
      +
      + + {{formInput fields.material value=values.material choices=@root.diceSoNiceMaterials localize=true}} +
      +
      + + {{formInput fields.font value=values.font choices=@root.diceSoNiceFonts localize=true}} +
      +
      + + {{#if animations}} +

      {{localize "DAGGERHEART.SETTINGS.Menu.appearance.diceSoNice.animations"}}

      +
      + + {{formInput fields.sfx.fields.higher.fields.class value=values.sfx.higher.class blank="" localize=true}} +
      + {{/if}} + + +
      \ No newline at end of file From 7d50ba409fee1bd9d412ce798c8c995a64bce39a Mon Sep 17 00:00:00 2001 From: WBHarry Date: Fri, 13 Mar 2026 01:25:52 +0100 Subject: [PATCH 26/34] Fixed so that damage buttons show up for players on their own messages --- module/dice/dhRoll.mjs | 6 +++++- system.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/module/dice/dhRoll.mjs b/module/dice/dhRoll.mjs index a836a2ea..912824e7 100644 --- a/module/dice/dhRoll.mjs +++ b/module/dice/dhRoll.mjs @@ -143,7 +143,11 @@ export default class DHRoll extends Roll { const metagamingSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Metagaming); const chatData = await this._prepareChatRenderContext({ flavor, isPrivate, ...options }); - return foundry.applications.handlebars.renderTemplate(template, { ...chatData, metagamingSettings }); + return foundry.applications.handlebars.renderTemplate(template, { + ...chatData, + parent: chatData.parent, + metagamingSettings + }); } /** @inheritDoc */ diff --git a/system.json b/system.json index 34d7e438..b8c4955b 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "daggerheart", "title": "Daggerheart", "description": "An unofficial implementation of the Daggerheart system", - "version": "1.9.0", + "version": "1.9.1", "compatibility": { "minimum": "13.346", "verified": "13.351", From 92bcaf4962c4d12b341e67395d525352d720c18c Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Fri, 13 Mar 2026 18:09:19 -0400 Subject: [PATCH 27/34] Fix clean type in v14 --- module/data/fields/actionField.mjs | 4 ++-- module/data/fields/actorField.mjs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/data/fields/actionField.mjs b/module/data/fields/actionField.mjs index 624985fc..20e4d6f0 100644 --- a/module/data/fields/actionField.mjs +++ b/module/data/fields/actionField.mjs @@ -87,10 +87,10 @@ export class ActionField extends foundry.data.fields.ObjectField { /* -------------------------------------------- */ /** @override */ - _cleanType(value, options) { + _cleanType(value, options, _state) { if (!(typeof value === 'object')) value = {}; const cls = this.getModel(value); - if (cls) return cls.cleanData(value, options); + if (cls) return cls.cleanData(value, options, _state); return value; } diff --git a/module/data/fields/actorField.mjs b/module/data/fields/actorField.mjs index 1399fb32..69ba6bf1 100644 --- a/module/data/fields/actorField.mjs +++ b/module/data/fields/actorField.mjs @@ -52,8 +52,8 @@ class ResourcesField extends fields.TypedObjectField { return key in CONFIG.DH.RESOURCE[this.actorType].all; } - _cleanType(value, options) { - value = super._cleanType(value, options); + _cleanType(value, options, _state) { + value = super._cleanType(value, options, _state); // If not partial, ensure all data exists if (!options.partial) { From 1160f5134797681add35500fad396f89a1effa97 Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Fri, 13 Mar 2026 18:47:55 -0400 Subject: [PATCH 28/34] Fix hasDamage checks on non-attack actions --- module/data/action/baseAction.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/data/action/baseAction.mjs b/module/data/action/baseAction.mjs index eea0d6c4..75fc3981 100644 --- a/module/data/action/baseAction.mjs +++ b/module/data/action/baseAction.mjs @@ -354,11 +354,11 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel } get hasDamage() { - return !foundry.utils.isEmpty(this.damage.parts) && this.type !== 'healing'; + return !foundry.utils.isEmpty(this.damage?.parts) && this.type !== 'healing'; } get hasHealing() { - return !foundry.utils.isEmpty(this.damage.parts) && this.type === 'healing'; + return !foundry.utils.isEmpty(this.damage?.parts) && this.type === 'healing'; } get hasSave() { From 7c0ab25e103d7f762863276d97c32b5581b26944 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 14 Mar 2026 00:10:48 +0100 Subject: [PATCH 29/34] Fixed contextmenu --- module/applications/ux/contextMenu.mjs | 40 -------------------------- 1 file changed, 40 deletions(-) diff --git a/module/applications/ux/contextMenu.mjs b/module/applications/ux/contextMenu.mjs index 6e70da0c..9a308667 100644 --- a/module/applications/ux/contextMenu.mjs +++ b/module/applications/ux/contextMenu.mjs @@ -52,46 +52,6 @@ * @extends {foundry.applications.ux.ContextMenu} */ export default class DHContextMenu extends foundry.applications.ux.ContextMenu { - /** - * @param {HTMLElement|jQuery} container - The HTML element that contains the context menu targets. - * @param {string} selector - A CSS selector which activates the context menu. - * @param {ContextMenuEntry[]} menuItems - An Array of entries to display in the menu - * @param {ContextMenuOptions} [options] - Additional options to configure the context menu. - */ - constructor(container, selector, menuItems, options) { - super(container, selector, menuItems, options); - - /** @deprecated since v13 until v15 */ - this.#jQuery = options.jQuery; - } - - /** - * Whether to pass jQuery objects or HTMLElement instances to callback. - * @type {boolean} - */ - #jQuery; - - /**@inheritdoc */ - activateListeners(menu) { - menu.addEventListener('click', this.#onClickItem.bind(this)); - } - - /** - * Handle click events on context menu items. - * @param {PointerEvent} event The click event - */ - #onClickItem(event) { - event.preventDefault(); - event.stopPropagation(); - const element = event.target.closest('.context-item'); - if (!element) return; - const item = this.menuItems.find(i => i.element === element); - item?.onClick(event, this.#jQuery ? $(this.target) : this.target); - this.close(); - } - - /* -------------------------------------------- */ - /** * Trigger a context menu event in response to a normal click on a additional options button. * @param {PointerEvent} event From 37b088fe7d59c25cc2fbfe738c7cbd4a6c3bd92b Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Fri, 13 Mar 2026 20:00:05 -0400 Subject: [PATCH 30/34] Apply low performance styling to all daggerheart sheets --- styles/less/global/sheet.less | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/styles/less/global/sheet.less b/styles/less/global/sheet.less index 1e7bad0a..6f77a481 100755 --- a/styles/less/global/sheet.less +++ b/styles/less/global/sheet.less @@ -14,11 +14,7 @@ body.game:is(.performance-low, .noblur) { .themed.theme-dark .application.daggerheart.sheet.dh-style, .themed.theme-dark.application.daggerheart.sheet.dh-style, &.theme-dark .application.daggerheart { - &.adversary, - &.character, - &.item { - background: @dark-blue; - } + background: @dark-blue; } } From 9d6c26e8c48d95570b1a4117d6912d82274a3f5c Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Sat, 14 Mar 2026 06:22:33 -0400 Subject: [PATCH 31/34] Fix retrieving resource attribute bars in token (#1730) --- module/data/fields/actorField.mjs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/module/data/fields/actorField.mjs b/module/data/fields/actorField.mjs index 1399fb32..76c24319 100644 --- a/module/data/fields/actorField.mjs +++ b/module/data/fields/actorField.mjs @@ -82,6 +82,24 @@ class ResourcesField extends fields.TypedObjectField { } return data; } + + /** + * Foundry bar attributes are unable to handle finding the schema field nor the label normally. + * This returns the element if its a valid resource key and overwrites the element's label for that retrieval. + */ + _getField(path) { + if ( path.length === 0 ) return this; + const first = path.shift(); + if (first === this.element.name) return this.element_getField(path); + + const resources = CONFIG.DH.RESOURCE[this.actorType].all; + if (first in resources) { + this.element.label = resources[first].label; + return this.element._getField(path); + } + + return undefined; + } } export { attributeField, ResourcesField, stressDamageReductionRule, bonusField }; From 08a9bbdf056cc9debb54df62e3f3c50e49761b83 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 14 Mar 2026 12:15:20 +0100 Subject: [PATCH 32/34] Corrected KnuckleBlades to be twohanded --- .../items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json b/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json index 6bc27412..a5d00ff4 100644 --- a/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json +++ b/src/packs/items/weapons/weapon_Knuckle_Blades_U8gfyvxoHm024inM.json @@ -33,7 +33,7 @@ "tier": 2, "equipped": false, "secondary": false, - "burden": "oneHanded", + "burden": "twoHanded", "weaponFeatures": [ { "value": "brutal", From 1bd3daed43e477bab6af61589ddaff0e158aa9ea Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Sat, 14 Mar 2026 19:20:49 -0400 Subject: [PATCH 33/34] Fix adversary feature type not rendering (#1731) --- .../global/partials/inventory-item-V2.hbs | 17 +++++++---------- templates/sheets/global/partials/item-tags.hbs | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/templates/sheets/global/partials/inventory-item-V2.hbs b/templates/sheets/global/partials/inventory-item-V2.hbs index 86d2e2d3..a758a28f 100644 --- a/templates/sheets/global/partials/inventory-item-V2.hbs +++ b/templates/sheets/global/partials/inventory-item-V2.hbs @@ -40,23 +40,20 @@ Parameters: {{!-- Name & Tags --}}
      + {{!-- Item Name --}} + {{localize item.name}} {{#unless (or noExtensible (not item.system.description))}}{{/unless}} - {{!-- Item Name --}} - {{localize item.name}} {{#unless (or noExtensible (not item.system.description))}}{{/unless}} - - {{!-- Tags Start --}} + {{!-- Tags Start --}} {{#if (not ../hideTags)}} - {{#> "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs" item }} - {{#if (eq ../type 'feature')}} - {{#if (or (eq @root.document.type 'adversary') (eq @root.document.type 'environment'))}} - {{#if system.featureForm}} + {{#> "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs" item}} + {{#if (eq ../type 'feature')}} + {{#if (and system.featureForm (or (eq @root.document.type "adversary") (eq @root.document.type "environment")))}}
      {{localize (concat "DAGGERHEART.CONFIG.FeatureForm." system.featureForm)}}
      {{/if}} {{/if}} - {{/if}} - {{/ "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs"}} + {{/ "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs"}} {{/if}} {{!--Tags End --}} diff --git a/templates/sheets/global/partials/item-tags.hbs b/templates/sheets/global/partials/item-tags.hbs index b30fcbf2..2edc1eac 100644 --- a/templates/sheets/global/partials/item-tags.hbs +++ b/templates/sheets/global/partials/item-tags.hbs @@ -4,5 +4,5 @@ {{tag}}
      {{/each}} - {{#if @partial-block}}{{> @partial-block}}{{/if}} + {{> @partial-block}} \ No newline at end of file From 8024cac565eda6d96864acf4af804e8ad9053e41 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sun, 15 Mar 2026 11:44:28 +0100 Subject: [PATCH 34/34] Raised version --- system.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system.json b/system.json index b8c4955b..4bd0f863 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "daggerheart", "title": "Daggerheart", "description": "An unofficial implementation of the Daggerheart system", - "version": "1.9.1", + "version": "1.9.2", "compatibility": { "minimum": "13.346", "verified": "13.351",