From 90ca39ebda8236e6f64183a1d8c9433663a3155c Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 11 Feb 2026 16:06:47 +0100 Subject: [PATCH 1/3] Finally finished the migration ._. --- .../armorActiveEffectConfig.mjs | 7 + module/applications/ui/progress.mjs | 2 +- module/systemRegistration/migrations.mjs | 147 ++++++++++++++---- 3 files changed, 121 insertions(+), 35 deletions(-) diff --git a/module/applications/sheets-configs/armorActiveEffectConfig.mjs b/module/applications/sheets-configs/armorActiveEffectConfig.mjs index 131558a0..7d8070e0 100644 --- a/module/applications/sheets-configs/armorActiveEffectConfig.mjs +++ b/module/applications/sheets-configs/armorActiveEffectConfig.mjs @@ -45,6 +45,13 @@ export default class ArmorActiveEffectConfig extends HandlebarsApplicationMixin( const partContext = await super._preparePartContext(partId, context); if (partId in partContext.tabs) partContext.tab = partContext.tabs[partId]; + switch (partId) { + case 'details': + partContext.isActorEffect = this.document.parent?.documentName === 'Actor'; + partContext.isItemEffect = this.document.parent?.documentName === 'Item'; + break; + } + return partContext; } diff --git a/module/applications/ui/progress.mjs b/module/applications/ui/progress.mjs index eca4ad6b..2fb1b445 100644 --- a/module/applications/ui/progress.mjs +++ b/module/applications/ui/progress.mjs @@ -13,7 +13,7 @@ export default class DhProgress { advance({ by = 1, label = this.label } = {}) { if (this.value === this.max) return; - this.value += Math.abs(by); + this.value = (this.value ?? 0) + Math.abs(by); this.#notification.update({ message: label, pct: this.value / this.max }); } diff --git a/module/systemRegistration/migrations.mjs b/module/systemRegistration/migrations.mjs index 6bfb32ee..dff85fef 100644 --- a/module/systemRegistration/migrations.mjs +++ b/module/systemRegistration/migrations.mjs @@ -248,9 +248,10 @@ export async function runMigrations() { } if (foundry.utils.isNewerVersion('2.0.0', lastMigrationVersion)) { - /* Migrate existing armors to the new Armor Effects */ const progress = game.system.api.applications.ui.DhProgress.createMigrationProgress(0); + const progressBuffer = 50; + //#region Data Setup const lockedPacks = []; const itemPacks = game.packs.filter(x => x.metadata.type === 'Item'); const actorPacks = game.packs.filter(x => x.metadata.type === 'Actor'); @@ -259,7 +260,7 @@ export async function runMigrations() { const indexes = []; for (const pack of packs) { const indexValues = pack.index.values().reduce((acc, index) => { - if (index.type === type) acc.push(index.uuid); + if (!type || index.type === type) acc.push(index.uuid); return acc; }, []); @@ -274,54 +275,132 @@ export async function runMigrations() { return indexes; }; - const armorEntries = await getIndexes(itemPacks, 'armor'); - const actorEntries = await getIndexes(actorPacks, 'actor'); + const itemEntries = await getIndexes(itemPacks); + const characterEntries = await getIndexes(actorPacks, 'character'); - const worldArmors = game.items.filter(x => x instanceof game.system.api.documents.DHItem && x.type === 'armor'); - - for (const character of game.actors.filter(x => x.type === 'character')) { - worldArmors.push(...character.items.filter(x => x.type === 'armor')); - } + const worldItems = game.items; + const worldCharacters = game.actors.filter(x => x.type === 'character'); /* The async fetches are the mainstay of time. Leaving 1 progress for the sync logic */ - const newMax = armorEntries.length + actorEntries.length + 1; + const newMax = itemEntries.length + characterEntries.length + progressBuffer; progress.updateMax(newMax); - const compendiumArmors = []; - for (const entry of armorEntries) { - const armor = await foundry.utils.fromUuid(entry); - compendiumArmors.push(armor); + const compendiumItems = []; + for (const entry of itemEntries) { + const item = await foundry.utils.fromUuid(entry); + compendiumItems.push(item); progress.advance(); } - for (const entry of actorEntries) { - const actor = await foundry.utils.fromUuid(entry); - compendiumArmors.push(...actor.items.filter(x => x.type === 'armor')); + const compendiumCharacters = []; + for (const entry of characterEntries) { + const character = await foundry.utils.fromUuid(entry); + compendiumCharacters.push(character); progress.advance(); } + //#endregion - for (const armor of [...compendiumArmors, ...worldArmors]) { - const hasArmorEffect = armor.effects.some(x => x.type === 'armor'); - const migrationArmorScore = armor.flags.daggerheart?.baseScoreMigrationValue; - if (migrationArmorScore !== undefined && !hasArmorEffect) { - await armor.createEmbeddedDocuments('ActiveEffect', [ + /* Migrate existing effects modifying armor, creating new Armor Effects instead */ + const migrateEffects = async entity => { + const effectChangeData = []; + for (const effect of entity.effects) { + const oldArmorChanges = effect.system.changes.filter(x => x.key === 'system.armorScore'); + if (!oldArmorChanges.length) continue; + + const changeData = {}; + const newChanges = effect.system.changes.filter(x => x.key !== 'system.armorScore'); + if (newChanges.length) { + await effect.update({ 'system.changes': newChanges }); + } else { + changeData.deleteId = effect.id; + } + + const oldEffectData = effect.toObject(); + changeData.createData = { + ...oldEffectData, + type: 'armor', + system: { + ...oldEffectData.sytem, + changes: oldArmorChanges.map(change => ({ + key: 'system.armorScore', + type: CONFIG.DH.GENERAL.activeEffectModes.armor.id, + phase: 'initial', + priority: 20, + value: 0, + max: change.value + })) + } + }; + effectChangeData.push(changeData); + } + + for (const changeData of effectChangeData) { + const relatedActions = Array.from(entity.system.actions ?? []).filter(x => + x.effects.some(effect => effect._id === changeData.deleteId) + ); + const [newEffect] = await entity.createEmbeddedDocuments('ActiveEffect', [ { - ...game.system.api.data.activeEffects.ArmorEffect.getDefaultObject(), - changes: [ - { - type: CONFIG.DH.GENERAL.activeEffectModes.armor.id, - phase: 'initial', - priority: 20, - value: 0, - max: migrationArmorScore.toString() - } - ] + ...changeData.createData, + transfer: relatedActions.length ? false : true } ]); + for (const action of relatedActions) { + await action.update({ + effects: action.effects.map(effect => ({ + ...effect, + _id: effect._id === changeData.deleteId ? newEffect.id : effect._id + })) + }); + } } + + await entity.deleteEmbeddedDocuments( + 'ActiveEffect', + effectChangeData.reduce((acc, data) => { + if (data.deleteId) acc.push(data.deleteId); + return acc; + }, []) + ); + }; + + /* Migrate existing armors to the new Armor Effects */ + const migrateItems = async items => { + for (const item of items) { + await migrateEffects(item); + + if (item instanceof game.system.api.documents.DHItem && item.type === 'armor') { + const hasArmorEffect = item.effects.some(x => x.type === 'armor'); + const migrationArmorScore = item.flags.daggerheart?.baseScoreMigrationValue; + if (migrationArmorScore !== undefined && !hasArmorEffect) { + await item.createEmbeddedDocuments('ActiveEffect', [ + { + ...game.system.api.data.activeEffects.ArmorEffect.getDefaultObject(), + changes: [ + { + key: 'system.armorScore', + type: CONFIG.DH.GENERAL.activeEffectModes.armor.id, + phase: 'initial', + priority: 20, + value: 0, + max: migrationArmorScore.toString() + } + ] + } + ]); + } + } + } + }; + + await migrateItems([...compendiumItems, ...worldItems]); + progress.advance({ by: progressBuffer / 2 }); + + for (const actor of [...compendiumCharacters, ...worldCharacters]) { + await migrateEffects(actor); + await migrateItems(actor.items); } - progress.advance(); + progress.advance({ by: progressBuffer / 2 }); for (let packId of lockedPacks) { const pack = game.packs.get(packId); @@ -330,7 +409,7 @@ export async function runMigrations() { progress.close(); - // lastMigrationVersion = '2.0.0'; + lastMigrationVersion = '2.0.0'; } //#endregion From c067fd0e10f1d557e2cfe9f918aa56a74e1df619 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 11 Feb 2026 16:21:34 +0100 Subject: [PATCH 2/3] SRD finalization --- .../domainCard_Armorer_cy8GjBPGc9w9RaGO.json | 12 ++-- ...omainCard_Bare_Bones_l5D9kq901JDESaXw.json | 12 ++-- ...mainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json | 14 ++-- ...inCard_Valor_Touched_k1AtYd3lSchIymBr.json | 12 ++-- .../folders_Splendor_TL1TutmbeCVJ06nR.json | 2 +- ...nced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json | 8 +-- ...ced_Full_Plate_Armor_crIbCb9NZ4K0VpoU.json | 8 +-- ...anced_Gambeson_Armor_epkAmlZVk7HOfUUT.json | 8 +-- ...vanced_Leather_Armor_itSOp2GCyem0f7oM.json | 8 +-- .../armor_Bare_Bones_ITAjcigTcUw5pMCN.json | 71 ++++++++++++++++++ ..._Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json | 8 +-- ...rmor_Bladefare_Armor_mNN6pvcsS10ChrWF.json | 8 +-- ...rmor_Chainmail_Armor_haULhuEg37zUUvhb.json | 8 +-- ...mor_Channeling_Armor_vMJxEWz1srfwMsoj.json | 8 +-- ...or_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json | 8 +-- ...or_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json | 8 +-- ...lundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json | 8 +-- ...mor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json | 8 +-- ...Full_Fortified_Armor_7emTSt6nhZuTlvt5.json | 8 +-- ...mor_Full_Plate_Armor_UdUJNa31WxFW2noa.json | 4 +- ...armor_Gambeson_Armor_yJFp1bfpecDcStVK.json | 8 +-- ...mor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json | 8 +-- ...oved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json | 8 +-- ...ved_Full_Plate_Armor_9f7RozpPTqrzJS1m.json | 8 +-- ...roved_Gambeson_Armor_jphnMZjnS2FkOH3s.json | 8 +-- ...proved_Leather_Armor_t91M61pSCMKStTNt.json | 8 +-- ...ee_Breastplate_Armor_tzZntboNtHL5C6VM.json | 8 +-- .../armor_Leather_Armor_nibfdNtp2PtxvbVz.json | 8 +-- ...dary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json | 8 +-- ...ary_Full_Plate_Armor_SXWjUR2aUR6bYvdl.json | 8 +-- ...ndary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json | 8 +-- ...endary_Leather_Armor_Tptgl5WOj76TyFn7.json | 8 +-- ...armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json | 8 +-- ...armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json | 8 +-- ...nes_of_Fortification_P4qAEDJUoNLgVRsA.json | 8 +-- ...netan_Floating_Armor_tHlBUDQC24YMZqd6.json | 8 +-- ...mor_Savior_Chainmail_8X16lJQ3xltTwynm.json | 8 +-- ...r_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json | 8 +-- ...mor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json | 8 +-- ...r_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json | 8 +-- .../folders_Special_tI3bfr6Sgi16Z7zm.json | 12 ++++ ...dvanced_Round_Shield_hiEOGF2reabGLUoi.json | 41 ++++++----- ...dvanced_Tower_Shield_OfOzQbs4hg6QbfTG.json | 72 +++++++++++++++---- ...mproved_Round_Shield_DlinEBGZfIlvreO3.json | 41 ++++++----- ...mproved_Tower_Shield_bxt3NsbMqTSdI5ab.json | 72 +++++++++++++++---- .../weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json | 35 +++++---- ...gendary_Round_Shield_A28WL9E2lJ3iLZHW.json | 41 ++++++----- ...gendary_Tower_Shield_MaJIROht7A9LxIZx.json | 72 +++++++++++++++---- .../weapon_Round_Shield_mxwWKDujgsRcZWPT.json | 41 ++++++----- ...weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json | 71 ++++++++++++++---- .../weapon_Tower_Shield_C9aWpK1shVMWP4m5.json | 72 +++++++++++++++---- 51 files changed, 637 insertions(+), 324 deletions(-) create mode 100644 src/packs/items/armors/armor_Bare_Bones_ITAjcigTcUw5pMCN.json create mode 100644 src/packs/items/armors/folders_Special_tI3bfr6Sgi16Z7zm.json diff --git a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json index cb7bec9f..c06a34ab 100644 --- a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json +++ b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json @@ -103,29 +103,29 @@ } ] }, - "_id": "PczrmraHWZ54NJsW", + "_id": "tJw2JIPcT9hEMRXg", "img": "icons/tools/hand/hammer-and-nail.webp", "disabled": false, - "start": null, "duration": { "value": null, "units": "seconds", "expiry": null, "expired": false }, - "description": "

While you’re wearing armor, gain a +1 bonus to your Armor Score.

", + "description": "

While you’re wearing armor, gain a +1 bonus to your Armor Score.

", "origin": null, "tint": "#ffffff", "transfer": true, "statuses": [], - "showIcon": 1, - "folder": null, "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, - "_key": "!items.effects!cy8GjBPGc9w9RaGO.PczrmraHWZ54NJsW" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!cy8GjBPGc9w9RaGO.tJw2JIPcT9hEMRXg" } ], "ownership": { diff --git a/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json b/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json index f6474623..7e0129d7 100644 --- a/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json +++ b/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json @@ -4,7 +4,7 @@ "type": "domainCard", "folder": "QpOL7jPbMBzH96qR", "system": { - "description": "

When you choose not to equip armor, you have a base Armor Score of 3 + your Strength and use the following as your base damage thresholds:

Equip the below armor to use Bare Bones.

", + "description": "

When you choose not to equip armor, you have a base Armor Score of 3 + your Strength and use the following as your base damage thresholds:

Equip the below armor to use Bare Bones.

@UUID[Compendium.daggerheart.armors.Item.ITAjcigTcUw5pMCN]{Bare Bones}

", "domain": "valor", "recallCost": 0, "level": 1, @@ -35,7 +35,7 @@ } ] }, - "_id": "Zn1nNUwjlkbRfbMc", + "_id": "FCsgz7Tdsw6QUzBs", "img": "icons/magic/control/buff-strength-muscle-damage-orange.webp", "disabled": false, "start": null, @@ -45,7 +45,7 @@ "expiry": null, "expired": false }, - "description": "

You have a base Armor Score of 3 + your Strength

", + "description": "

You have a base Armor Score of 3 + your Strength.

", "origin": null, "tint": "#ffffff", "transfer": true, @@ -57,7 +57,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!l5D9kq901JDESaXw.Zn1nNUwjlkbRfbMc" + "_key": "!items.effects!l5D9kq901JDESaXw.FCsgz7Tdsw6QUzBs" }, { "name": "Bare Bones", @@ -86,7 +86,7 @@ "range": "melee" } }, - "_id": "FazU8RFjMmTpXs7Z", + "_id": "8flPpWNoBeuFPFTK", "img": "icons/magic/control/buff-strength-muscle-damage-orange.webp", "disabled": false, "start": null, @@ -108,7 +108,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!l5D9kq901JDESaXw.FazU8RFjMmTpXs7Z" + "_key": "!items.effects!l5D9kq901JDESaXw.8flPpWNoBeuFPFTK" } ], "ownership": { diff --git a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json index 6dfc851a..da2d75f1 100644 --- a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json +++ b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json @@ -105,7 +105,7 @@ }, "effects": [ { - "_id": "OKf8Kjr6Px8A3ubJ", + "_id": "ptYT10JZ2WJHvFMd", "onSave": false } ], @@ -252,8 +252,8 @@ "img": "icons/magic/defensive/shield-barrier-glowing-triangle-blue.webp", "origin": "Compendium.daggerheart.domains.Item.YtZzYBtR0yLPPA93", "transfer": false, + "_id": "ptYT10JZ2WJHvFMd", "type": "armor", - "_id": "OKf8Kjr6Px8A3ubJ", "system": { "changes": [ { @@ -267,24 +267,24 @@ ] }, "disabled": false, - "start": null, "duration": { "value": null, "units": "seconds", "expiry": null, "expired": false }, - "description": "

Spend a Hope to give a target you can touch a +1 bonus to their Armor Score until their next rest or you cast Tava’s Armor again.

", + "description": "

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

", "tint": "#ffffff", "statuses": [], - "showIcon": 1, - "folder": null, "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, - "_key": "!items.effects!YtZzYBtR0yLPPA93.OKf8Kjr6Px8A3ubJ" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!YtZzYBtR0yLPPA93.ptYT10JZ2WJHvFMd" } ], "ownership": { diff --git a/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json b/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json index ee6e377e..7df5e095 100644 --- a/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json +++ b/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json @@ -104,29 +104,29 @@ } ] }, - "_id": "JLw50ONfq1KJh1iM", + "_id": "Ma8Zp005QYKPWIEN", "img": "icons/magic/control/control-influence-rally-purple.webp", "disabled": false, - "start": null, "duration": { "value": null, "units": "seconds", "expiry": null, "expired": false }, - "description": "

+1 bonus to your Armor Score

", + "description": "", "origin": null, "tint": "#ffffff", "transfer": true, "statuses": [], - "showIcon": 1, - "folder": null, "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, - "_key": "!items.effects!k1AtYd3lSchIymBr.JLw50ONfq1KJh1iM" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!k1AtYd3lSchIymBr.Ma8Zp005QYKPWIEN" } ], "ownership": { diff --git a/src/packs/domains/folders_Splendor_TL1TutmbeCVJ06nR.json b/src/packs/domains/folders_Splendor_TL1TutmbeCVJ06nR.json index 9c220def..d7032288 100644 --- a/src/packs/domains/folders_Splendor_TL1TutmbeCVJ06nR.json +++ b/src/packs/domains/folders_Splendor_TL1TutmbeCVJ06nR.json @@ -6,7 +6,7 @@ "sorting": "m", "_id": "TL1TutmbeCVJ06nR", "description": "", - "sort": 750000, + "sort": 900000, "flags": {}, "_key": "!folders!TL1TutmbeCVJ06nR" } diff --git a/src/packs/items/armors/armor_Advanced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json b/src/packs/items/armors/armor_Advanced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json index 7287d027..91b1f890 100644 --- a/src/packs/items/armors/armor_Advanced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json +++ b/src/packs/items/armors/armor_Advanced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "xU3zAv0sBiOGAE4i", + "_id": "YehcKtTeJ18q0THd", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!LzLOJ9EVaHWAjoq9.xU3zAv0sBiOGAE4i" + "_key": "!items.effects!LzLOJ9EVaHWAjoq9.YehcKtTeJ18q0THd" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Advanced_Full_Plate_Armor_crIbCb9NZ4K0VpoU.json b/src/packs/items/armors/armor_Advanced_Full_Plate_Armor_crIbCb9NZ4K0VpoU.json index 6522c67a..f1dd3086 100644 --- a/src/packs/items/armors/armor_Advanced_Full_Plate_Armor_crIbCb9NZ4K0VpoU.json +++ b/src/packs/items/armors/armor_Advanced_Full_Plate_Armor_crIbCb9NZ4K0VpoU.json @@ -76,16 +76,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "TMxnzDzCmVibJWQ0", + "_id": "Xp0MlTLdCe2oP36X", "disabled": false, "start": null, "duration": { @@ -106,7 +106,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!crIbCb9NZ4K0VpoU.TMxnzDzCmVibJWQ0" + "_key": "!items.effects!crIbCb9NZ4K0VpoU.Xp0MlTLdCe2oP36X" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Advanced_Gambeson_Armor_epkAmlZVk7HOfUUT.json b/src/packs/items/armors/armor_Advanced_Gambeson_Armor_epkAmlZVk7HOfUUT.json index d9ee9649..1618fe85 100644 --- a/src/packs/items/armors/armor_Advanced_Gambeson_Armor_epkAmlZVk7HOfUUT.json +++ b/src/packs/items/armors/armor_Advanced_Gambeson_Armor_epkAmlZVk7HOfUUT.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "HxZEKljAth8b5Wcv", + "_id": "GyPhsm7zLznZDfN2", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!epkAmlZVk7HOfUUT.HxZEKljAth8b5Wcv" + "_key": "!items.effects!epkAmlZVk7HOfUUT.GyPhsm7zLznZDfN2" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Advanced_Leather_Armor_itSOp2GCyem0f7oM.json b/src/packs/items/armors/armor_Advanced_Leather_Armor_itSOp2GCyem0f7oM.json index 09a45a8a..b7a63b40 100644 --- a/src/packs/items/armors/armor_Advanced_Leather_Armor_itSOp2GCyem0f7oM.json +++ b/src/packs/items/armors/armor_Advanced_Leather_Armor_itSOp2GCyem0f7oM.json @@ -33,16 +33,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "jSGmBv0I5FhxmTen", + "_id": "XJueICAnl5vu2q2U", "disabled": false, "start": null, "duration": { @@ -63,7 +63,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!itSOp2GCyem0f7oM.jSGmBv0I5FhxmTen" + "_key": "!items.effects!itSOp2GCyem0f7oM.XJueICAnl5vu2q2U" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Bare_Bones_ITAjcigTcUw5pMCN.json b/src/packs/items/armors/armor_Bare_Bones_ITAjcigTcUw5pMCN.json new file mode 100644 index 00000000..a0b2aae3 --- /dev/null +++ b/src/packs/items/armors/armor_Bare_Bones_ITAjcigTcUw5pMCN.json @@ -0,0 +1,71 @@ +{ + "folder": "tI3bfr6Sgi16Z7zm", + "name": "Bare Bones", + "type": "armor", + "_id": "ITAjcigTcUw5pMCN", + "img": "icons/magic/control/buff-strength-muscle-damage.webp", + "system": { + "description": "

When you choose not to equip armor, you have a base Armor Score of 3 + your Strength and use the following as your base damage thresholds:

", + "actions": {}, + "attached": [], + "tier": 1, + "equipped": false, + "baseScore": 3, + "armorFeatures": [], + "marks": { + "value": 0 + }, + "baseThresholds": { + "major": 9, + "severe": 19 + } + }, + "effects": [ + { + "name": "Bare Bones", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "@system.traits.strength.value" + } + ] + }, + "_id": "C7as6q5bx3S0Xxfn", + "img": "icons/magic/control/buff-strength-muscle-damage.webp", + "disabled": false, + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "description": "

When you choose not to equip armor, you have a base Armor Score of 3 + your Strength and use the following as your base damage thresholds:

", + "origin": null, + "tint": "#ffffff", + "transfer": true, + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!ITAjcigTcUw5pMCN.C7as6q5bx3S0Xxfn" + } + ], + "sort": 0, + "ownership": { + "default": 0, + "MQSznptE5yLT7kj8": 3 + }, + "flags": {}, + "_key": "!items!ITAjcigTcUw5pMCN" +} diff --git a/src/packs/items/armors/armor_Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json b/src/packs/items/armors/armor_Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json index fc7c62eb..9242aed9 100644 --- a/src/packs/items/armors/armor_Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json +++ b/src/packs/items/armors/armor_Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "34OQBJZZV3d5AN7U", + "_id": "2OMciFns3bSETeH9", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!WuoVwZA53XRAIt6d.34OQBJZZV3d5AN7U" + "_key": "!items.effects!WuoVwZA53XRAIt6d.2OMciFns3bSETeH9" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json b/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json index a82f0ba4..cc245d50 100644 --- a/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json +++ b/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "6AGrG6Y1wUSY3mg5", + "_id": "dIb9PWvzyS3jYDUj", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!mNN6pvcsS10ChrWF.6AGrG6Y1wUSY3mg5" + "_key": "!items.effects!mNN6pvcsS10ChrWF.dIb9PWvzyS3jYDUj" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json b/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json index 9fc6b7db..a45cfa04 100644 --- a/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json +++ b/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "RXsc2d47cauTWTf0", + "_id": "hA0EcaykFiIpg4ZH", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!haULhuEg37zUUvhb.RXsc2d47cauTWTf0" + "_key": "!items.effects!haULhuEg37zUUvhb.hA0EcaykFiIpg4ZH" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json b/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json index d37d45ff..6f8ec29d 100644 --- a/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json +++ b/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "dKK4sbP3DZQYdmTn", + "_id": "Wejd1c4e8VtnFoc4", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!vMJxEWz1srfwMsoj.dKK4sbP3DZQYdmTn" + "_key": "!items.effects!vMJxEWz1srfwMsoj.Wejd1c4e8VtnFoc4" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json b/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json index 136b89d6..335ab56f 100644 --- a/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json +++ b/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json @@ -70,16 +70,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "kNq8nLq1ljLZZGDg", + "_id": "FgjNYkbghYSz8gwW", "disabled": false, "start": null, "duration": { @@ -100,7 +100,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!mdQ69eFHyAQUDmE7.kNq8nLq1ljLZZGDg" + "_key": "!items.effects!mdQ69eFHyAQUDmE7.FgjNYkbghYSz8gwW" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json b/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json index 9b858104..2a1e8c83 100644 --- a/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json +++ b/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json @@ -96,16 +96,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "7", - "key": "system.armorScore" + "max": "7" } ] }, - "_id": "sBTZAS0aYcE15RwZ", + "_id": "n4wyEBHbHIuYNBzt", "disabled": false, "start": null, "duration": { @@ -126,7 +126,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!hAY6UgdGT7dj22Pr.sBTZAS0aYcE15RwZ" + "_key": "!items.effects!hAY6UgdGT7dj22Pr.n4wyEBHbHIuYNBzt" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Elundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json b/src/packs/items/armors/armor_Elundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json index d84108d8..e19c363b 100644 --- a/src/packs/items/armors/armor_Elundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json +++ b/src/packs/items/armors/armor_Elundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json @@ -72,16 +72,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "uFvhPlk3FVGfQST4", + "_id": "gZfuMqjYTYLspQop", "disabled": false, "start": null, "duration": { @@ -102,7 +102,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!Q6LxmtFetDDkoZVZ.uFvhPlk3FVGfQST4" + "_key": "!items.effects!Q6LxmtFetDDkoZVZ.gZfuMqjYTYLspQop" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json b/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json index 92652f66..5be30445 100644 --- a/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json +++ b/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json @@ -94,16 +94,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "Dg8Gx6G3nwAH9wt2", + "_id": "5t3jCX3AGiWBB4DN", "disabled": false, "start": null, "duration": { @@ -124,7 +124,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!bcQUh4QG3qFX0Vx6.Dg8Gx6G3nwAH9wt2" + "_key": "!items.effects!bcQUh4QG3qFX0Vx6.5t3jCX3AGiWBB4DN" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Full_Fortified_Armor_7emTSt6nhZuTlvt5.json b/src/packs/items/armors/armor_Full_Fortified_Armor_7emTSt6nhZuTlvt5.json index a4e21b75..52aa784b 100644 --- a/src/packs/items/armors/armor_Full_Fortified_Armor_7emTSt6nhZuTlvt5.json +++ b/src/packs/items/armors/armor_Full_Fortified_Armor_7emTSt6nhZuTlvt5.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "XPbNhspFyOj8RIQJ", + "_id": "9jCrg3Acd75jVclW", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!7emTSt6nhZuTlvt5.XPbNhspFyOj8RIQJ" + "_key": "!items.effects!7emTSt6nhZuTlvt5.9jCrg3Acd75jVclW" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Full_Plate_Armor_UdUJNa31WxFW2noa.json b/src/packs/items/armors/armor_Full_Plate_Armor_UdUJNa31WxFW2noa.json index 0400f59e..c603305b 100644 --- a/src/packs/items/armors/armor_Full_Plate_Armor_UdUJNa31WxFW2noa.json +++ b/src/packs/items/armors/armor_Full_Plate_Armor_UdUJNa31WxFW2noa.json @@ -85,7 +85,7 @@ } ] }, - "_id": "zji5nzTC1y8BUWHn", + "_id": "OmGtjOMcTHNN6OsH", "disabled": false, "start": null, "duration": { @@ -106,7 +106,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!UdUJNa31WxFW2noa.zji5nzTC1y8BUWHn" + "_key": "!items.effects!UdUJNa31WxFW2noa.OmGtjOMcTHNN6OsH" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json b/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json index eb8285cb..36484785 100644 --- a/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json +++ b/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "3", - "key": "system.armorScore" + "max": "3" } ] }, - "_id": "72LkcLIihluGgx48", + "_id": "ySw8mkws8rxzxsg4", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!yJFp1bfpecDcStVK.72LkcLIihluGgx48" + "_key": "!items.effects!yJFp1bfpecDcStVK.ySw8mkws8rxzxsg4" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json b/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json index 43057efa..7f69317b 100644 --- a/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json +++ b/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json @@ -87,16 +87,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "GYRwYD3CHW9q4N29", + "_id": "nyoNusMuukJt1MJw", "disabled": false, "start": null, "duration": { @@ -117,7 +117,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!dvyQeUVRLc9y6rnt.GYRwYD3CHW9q4N29" + "_key": "!items.effects!dvyQeUVRLc9y6rnt.nyoNusMuukJt1MJw" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Improved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json b/src/packs/items/armors/armor_Improved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json index 69b1bbae..dd674a8b 100644 --- a/src/packs/items/armors/armor_Improved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json +++ b/src/packs/items/armors/armor_Improved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "2KD6EdRL2L2gQkMR", + "_id": "7FdWcilv74zKcXWk", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!K5WkjS0NGqHYmhU3.2KD6EdRL2L2gQkMR" + "_key": "!items.effects!K5WkjS0NGqHYmhU3.7FdWcilv74zKcXWk" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Improved_Full_Plate_Armor_9f7RozpPTqrzJS1m.json b/src/packs/items/armors/armor_Improved_Full_Plate_Armor_9f7RozpPTqrzJS1m.json index eb62a85b..00b2afa9 100644 --- a/src/packs/items/armors/armor_Improved_Full_Plate_Armor_9f7RozpPTqrzJS1m.json +++ b/src/packs/items/armors/armor_Improved_Full_Plate_Armor_9f7RozpPTqrzJS1m.json @@ -76,16 +76,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "ehijWY3PGw1OaQr0", + "_id": "qgA4nbITVOp2WTpl", "disabled": false, "start": null, "duration": { @@ -106,7 +106,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!9f7RozpPTqrzJS1m.ehijWY3PGw1OaQr0" + "_key": "!items.effects!9f7RozpPTqrzJS1m.qgA4nbITVOp2WTpl" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Improved_Gambeson_Armor_jphnMZjnS2FkOH3s.json b/src/packs/items/armors/armor_Improved_Gambeson_Armor_jphnMZjnS2FkOH3s.json index 2e1b4f93..3e2a52ba 100644 --- a/src/packs/items/armors/armor_Improved_Gambeson_Armor_jphnMZjnS2FkOH3s.json +++ b/src/packs/items/armors/armor_Improved_Gambeson_Armor_jphnMZjnS2FkOH3s.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "d6QRNZ1X4wdoy82q", + "_id": "dtkOq7rUKj5nLGJP", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!jphnMZjnS2FkOH3s.d6QRNZ1X4wdoy82q" + "_key": "!items.effects!jphnMZjnS2FkOH3s.dtkOq7rUKj5nLGJP" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Improved_Leather_Armor_t91M61pSCMKStTNt.json b/src/packs/items/armors/armor_Improved_Leather_Armor_t91M61pSCMKStTNt.json index 3dce3151..7dfe14e7 100644 --- a/src/packs/items/armors/armor_Improved_Leather_Armor_t91M61pSCMKStTNt.json +++ b/src/packs/items/armors/armor_Improved_Leather_Armor_t91M61pSCMKStTNt.json @@ -33,16 +33,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "lQNHCtW6HnIj0b7F", + "_id": "JqnUKeUDbH4YJbVb", "disabled": false, "start": null, "duration": { @@ -63,7 +63,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!t91M61pSCMKStTNt.lQNHCtW6HnIj0b7F" + "_key": "!items.effects!t91M61pSCMKStTNt.JqnUKeUDbH4YJbVb" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Irontree_Breastplate_Armor_tzZntboNtHL5C6VM.json b/src/packs/items/armors/armor_Irontree_Breastplate_Armor_tzZntboNtHL5C6VM.json index 9be75429..8b978654 100644 --- a/src/packs/items/armors/armor_Irontree_Breastplate_Armor_tzZntboNtHL5C6VM.json +++ b/src/packs/items/armors/armor_Irontree_Breastplate_Armor_tzZntboNtHL5C6VM.json @@ -83,16 +83,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "jnjdtSTQF1zTSkEr", + "_id": "6Mh24zh1c3aK60wZ", "disabled": false, "start": null, "duration": { @@ -113,7 +113,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!tzZntboNtHL5C6VM.jnjdtSTQF1zTSkEr" + "_key": "!items.effects!tzZntboNtHL5C6VM.6Mh24zh1c3aK60wZ" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json b/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json index 5f79c177..1b3cae95 100644 --- a/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json +++ b/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json @@ -33,16 +33,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "3", - "key": "system.armorScore" + "max": "3" } ] }, - "_id": "bkEJ55HhIYFnX1Tz", + "_id": "2enPnnikOoG0oIZP", "disabled": false, "start": null, "duration": { @@ -63,7 +63,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!nibfdNtp2PtxvbVz.bkEJ55HhIYFnX1Tz" + "_key": "!items.effects!nibfdNtp2PtxvbVz.2enPnnikOoG0oIZP" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Legendary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json b/src/packs/items/armors/armor_Legendary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json index 993b35cf..fd3d1f9f 100644 --- a/src/packs/items/armors/armor_Legendary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json +++ b/src/packs/items/armors/armor_Legendary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "7", - "key": "system.armorScore" + "max": "7" } ] }, - "_id": "PZsaURELHOaRJK28", + "_id": "kqNdkD1d4FOQloMV", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!EsIN5OLKe9ZYFNXZ.PZsaURELHOaRJK28" + "_key": "!items.effects!EsIN5OLKe9ZYFNXZ.kqNdkD1d4FOQloMV" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Legendary_Full_Plate_Armor_SXWjUR2aUR6bYvdl.json b/src/packs/items/armors/armor_Legendary_Full_Plate_Armor_SXWjUR2aUR6bYvdl.json index ba4eb949..a32a6be5 100644 --- a/src/packs/items/armors/armor_Legendary_Full_Plate_Armor_SXWjUR2aUR6bYvdl.json +++ b/src/packs/items/armors/armor_Legendary_Full_Plate_Armor_SXWjUR2aUR6bYvdl.json @@ -76,16 +76,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "7", - "key": "system.armorScore" + "max": "7" } ] }, - "_id": "IMPH2qFG7zXaxefg", + "_id": "kFxM3Et2bPzghJWm", "disabled": false, "start": null, "duration": { @@ -106,7 +106,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!SXWjUR2aUR6bYvdl.IMPH2qFG7zXaxefg" + "_key": "!items.effects!SXWjUR2aUR6bYvdl.kFxM3Et2bPzghJWm" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Legendary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json b/src/packs/items/armors/armor_Legendary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json index b0af0790..85fdb01b 100644 --- a/src/packs/items/armors/armor_Legendary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json +++ b/src/packs/items/armors/armor_Legendary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "TtMaMntKKpcTU054", + "_id": "jdD0dJoh8gdGdh6W", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!c6tMXz4rPf9ioQrf.TtMaMntKKpcTU054" + "_key": "!items.effects!c6tMXz4rPf9ioQrf.jdD0dJoh8gdGdh6W" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Legendary_Leather_Armor_Tptgl5WOj76TyFn7.json b/src/packs/items/armors/armor_Legendary_Leather_Armor_Tptgl5WOj76TyFn7.json index 6460fc02..7019a908 100644 --- a/src/packs/items/armors/armor_Legendary_Leather_Armor_Tptgl5WOj76TyFn7.json +++ b/src/packs/items/armors/armor_Legendary_Leather_Armor_Tptgl5WOj76TyFn7.json @@ -33,16 +33,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "UtbfSKO8hmJanog5", + "_id": "gP4PsefQLSTcBAQm", "disabled": false, "start": null, "duration": { @@ -63,7 +63,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!Tptgl5WOj76TyFn7.UtbfSKO8hmJanog5" + "_key": "!items.effects!Tptgl5WOj76TyFn7.gP4PsefQLSTcBAQm" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json b/src/packs/items/armors/armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json index 91ab3f80..464d6505 100644 --- a/src/packs/items/armors/armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json +++ b/src/packs/items/armors/armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json @@ -71,16 +71,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "kskfQTQTgCgmQR6b", + "_id": "xMJr6Zj9zZd7v5uD", "disabled": false, "start": null, "duration": { @@ -101,7 +101,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!AQzU2RsqS5V5bd1v.kskfQTQTgCgmQR6b" + "_key": "!items.effects!AQzU2RsqS5V5bd1v.xMJr6Zj9zZd7v5uD" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json b/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json index a7c2ab93..172e100b 100644 --- a/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json +++ b/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json @@ -63,16 +63,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "eT5j1FNPPQOdLO2Q", + "_id": "ebhSsuWrFYUVkGXC", "disabled": false, "start": null, "duration": { @@ -93,7 +93,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!tN8kAeBvNKM3EBFo.eT5j1FNPPQOdLO2Q" + "_key": "!items.effects!tN8kAeBvNKM3EBFo.ebhSsuWrFYUVkGXC" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Runes_of_Fortification_P4qAEDJUoNLgVRsA.json b/src/packs/items/armors/armor_Runes_of_Fortification_P4qAEDJUoNLgVRsA.json index c1beaad7..66a88157 100644 --- a/src/packs/items/armors/armor_Runes_of_Fortification_P4qAEDJUoNLgVRsA.json +++ b/src/packs/items/armors/armor_Runes_of_Fortification_P4qAEDJUoNLgVRsA.json @@ -70,16 +70,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "UmpUTOMR2UBmrAu6", + "_id": "pw8CD3IFNqb7530v", "disabled": false, "start": null, "duration": { @@ -100,7 +100,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!P4qAEDJUoNLgVRsA.UmpUTOMR2UBmrAu6" + "_key": "!items.effects!P4qAEDJUoNLgVRsA.pw8CD3IFNqb7530v" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Runetan_Floating_Armor_tHlBUDQC24YMZqd6.json b/src/packs/items/armors/armor_Runetan_Floating_Armor_tHlBUDQC24YMZqd6.json index a26eb694..3039c375 100644 --- a/src/packs/items/armors/armor_Runetan_Floating_Armor_tHlBUDQC24YMZqd6.json +++ b/src/packs/items/armors/armor_Runetan_Floating_Armor_tHlBUDQC24YMZqd6.json @@ -70,16 +70,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "4", - "key": "system.armorScore" + "max": "4" } ] }, - "_id": "s39jgXMmi4fDHuaE", + "_id": "Y4ZSoO0iGxLiNr80", "disabled": false, "start": null, "duration": { @@ -100,7 +100,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!tHlBUDQC24YMZqd6.s39jgXMmi4fDHuaE" + "_key": "!items.effects!tHlBUDQC24YMZqd6.Y4ZSoO0iGxLiNr80" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json b/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json index 371cf794..739f15d9 100644 --- a/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json +++ b/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json @@ -101,16 +101,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "8", - "key": "system.armorScore" + "max": "8" } ] }, - "_id": "SWXFcH4qbmPYI7WH", + "_id": "vNGSiFtcEBCz6jFQ", "disabled": false, "start": null, "duration": { @@ -131,7 +131,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!8X16lJQ3xltTwynm.SWXFcH4qbmPYI7WH" + "_key": "!items.effects!8X16lJQ3xltTwynm.vNGSiFtcEBCz6jFQ" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json b/src/packs/items/armors/armor_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json index 114b92f5..b8b12bc3 100644 --- a/src/packs/items/armors/armor_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json +++ b/src/packs/items/armors/armor_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json @@ -76,16 +76,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "OtOaxh7BCM2OMOmS", + "_id": "jfcv9NL2RtlfpECz", "disabled": false, "start": null, "duration": { @@ -106,7 +106,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!QjwsIhXKqnlvRBMv.OtOaxh7BCM2OMOmS" + "_key": "!items.effects!QjwsIhXKqnlvRBMv.jfcv9NL2RtlfpECz" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json b/src/packs/items/armors/armor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json index 45fea752..8be5ce42 100644 --- a/src/packs/items/armors/armor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json +++ b/src/packs/items/armors/armor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json @@ -63,16 +63,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "5", - "key": "system.armorScore" + "max": "5" } ] }, - "_id": "DgAQc09o3x6zn6DQ", + "_id": "E8iCCJSpPbCMostx", "disabled": false, "start": null, "duration": { @@ -93,7 +93,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!PSW3BxCGmtLeWOxM.DgAQc09o3x6zn6DQ" + "_key": "!items.effects!PSW3BxCGmtLeWOxM.E8iCCJSpPbCMostx" } ], "sort": 0, diff --git a/src/packs/items/armors/armor_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json b/src/packs/items/armors/armor_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json index e9f98300..301c1d25 100644 --- a/src/packs/items/armors/armor_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json +++ b/src/packs/items/armors/armor_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json @@ -63,16 +63,16 @@ "system": { "changes": [ { + "key": "system.armorScore", "type": "armor", "phase": "initial", "priority": 20, "value": 0, - "max": "6", - "key": "system.armorScore" + "max": "6" } ] }, - "_id": "2gMOVh1Hty0nVWy4", + "_id": "avGWSRMFFLbdJaYC", "disabled": false, "start": null, "duration": { @@ -93,7 +93,7 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!OvzgUTYy2RCN85vV.2gMOVh1Hty0nVWy4" + "_key": "!items.effects!OvzgUTYy2RCN85vV.avGWSRMFFLbdJaYC" } ], "sort": 0, diff --git a/src/packs/items/armors/folders_Special_tI3bfr6Sgi16Z7zm.json b/src/packs/items/armors/folders_Special_tI3bfr6Sgi16Z7zm.json new file mode 100644 index 00000000..65c4eca8 --- /dev/null +++ b/src/packs/items/armors/folders_Special_tI3bfr6Sgi16Z7zm.json @@ -0,0 +1,12 @@ +{ + "type": "Item", + "folder": null, + "name": "Special", + "color": null, + "sorting": "a", + "_id": "tI3bfr6Sgi16Z7zm", + "description": "", + "sort": 0, + "flags": {}, + "_key": "!folders!tI3bfr6Sgi16Z7zm" +} 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..549df4d8 100644 --- a/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json +++ b/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json @@ -113,26 +113,26 @@ "name": "Protective", "description": "

Add the item's Tier to your Armor Score

", "img": "icons/skills/melee/shield-block-gray-orange.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier", - "priority": null - } - ], - "_id": "i5HfkF5aKQuUCTEG", - "type": "base", - "system": {}, + "_id": "7285CRGdZfHCEtT2", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier" + } + ] + }, "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 }, "origin": null, "tint": "#ffffff", @@ -143,7 +143,10 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!hiEOGF2reabGLUoi.i5HfkF5aKQuUCTEG" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!hiEOGF2reabGLUoi.7285CRGdZfHCEtT2" } ], "sort": 0, 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..96ac78cb 100644 --- a/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json +++ b/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json @@ -113,25 +113,25 @@ "name": "Barrier", "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", "img": "icons/skills/melee/shield-block-bash-blue.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier + 1" - }, - { - "key": "system.evasion", - "mode": 2, - "value": "-1" - } - ], "_id": "87gedjJZGdFY81Mt", "type": "base", - "system": {}, + "system": { + "changes": [ + { + "key": "system.evasion", + "type": "add", + "value": -1, + "phase": "initial", + "priority": 0 + } + ] + }, "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "origin": null, "tint": "#ffffff", @@ -142,7 +142,49 @@ "_stats": { "compendiumSource": null }, + "start": null, + "showIcon": 1, + "folder": null, "_key": "!items.effects!OfOzQbs4hg6QbfTG.87gedjJZGdFY81Mt" + }, + { + "name": "Barrier", + "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", + "img": "icons/skills/melee/shield-block-bash-blue.webp", + "_id": "J0f7zqqOr61ADpdy", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier + 1" + } + ] + }, + "disabled": false, + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "origin": null, + "tint": "#ffffff", + "transfer": true, + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!OfOzQbs4hg6QbfTG.J0f7zqqOr61ADpdy" } ], "sort": 0, 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..fcd3caed 100644 --- a/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json +++ b/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json @@ -113,26 +113,26 @@ "name": "Protective", "description": "

Add the item's Tier to your Armor Score

", "img": "icons/skills/melee/shield-block-gray-orange.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier", - "priority": null - } - ], - "_id": "cXWSV50apzaNQkdA", - "type": "base", - "system": {}, + "_id": "pZCrWd7zLTarvEQK", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier" + } + ] + }, "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 }, "origin": null, "tint": "#ffffff", @@ -143,7 +143,10 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!DlinEBGZfIlvreO3.cXWSV50apzaNQkdA" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!DlinEBGZfIlvreO3.pZCrWd7zLTarvEQK" } ], "sort": 0, 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..b1b4279f 100644 --- a/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json +++ b/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json @@ -113,25 +113,25 @@ "name": "Barrier", "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", "img": "icons/skills/melee/shield-block-bash-blue.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier + 1" - }, - { - "key": "system.evasion", - "mode": 2, - "value": "-1" - } - ], "_id": "tkNEA1PO3jEFhKCa", "type": "base", - "system": {}, + "system": { + "changes": [ + { + "key": "system.evasion", + "type": "add", + "value": -1, + "phase": "initial", + "priority": 0 + } + ] + }, "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "origin": null, "tint": "#ffffff", @@ -142,7 +142,49 @@ "_stats": { "compendiumSource": null }, + "start": null, + "showIcon": 1, + "folder": null, "_key": "!items.effects!bxt3NsbMqTSdI5ab.tkNEA1PO3jEFhKCa" + }, + { + "name": "Barrier", + "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", + "img": "icons/skills/melee/shield-block-bash-blue.webp", + "_id": "XugJeHJdnC6IymSa", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier + 1" + } + ] + }, + "disabled": false, + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "origin": null, + "tint": "#ffffff", + "transfer": true, + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!bxt3NsbMqTSdI5ab.XugJeHJdnC6IymSa" } ], "sort": 0, diff --git a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json index 4958bbe5..2272926c 100644 --- a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json +++ b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json @@ -113,20 +113,26 @@ "name": "Protective", "description": "Add your character's Tier to your Armor Score", "img": "icons/skills/melee/shield-block-gray-orange.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier" - } - ], - "_id": "qTxADRsQnKiYfOiQ", - "type": "base", - "system": {}, + "_id": "vnR4Zhnb0rOqwrFw", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier" + } + ] + }, "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "origin": null, "tint": "#ffffff", @@ -137,7 +143,10 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!ijWppQzSOqVCb3rE.qTxADRsQnKiYfOiQ" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!ijWppQzSOqVCb3rE.vnR4Zhnb0rOqwrFw" } ], "sort": 0, 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..81045ea3 100644 --- a/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json +++ b/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json @@ -113,26 +113,26 @@ "name": "Protective", "description": "

Add the item's Tier to your Armor Score

", "img": "icons/skills/melee/shield-block-gray-orange.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier", - "priority": null - } - ], - "_id": "Z2p00q5h6x6seXys", - "type": "base", - "system": {}, + "_id": "EixxJrRHyc6kj3Wg", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier" + } + ] + }, "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 }, "origin": null, "tint": "#ffffff", @@ -143,7 +143,10 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!A28WL9E2lJ3iLZHW.Z2p00q5h6x6seXys" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!A28WL9E2lJ3iLZHW.EixxJrRHyc6kj3Wg" } ], "sort": 0, 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..6ae5d720 100644 --- a/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json +++ b/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json @@ -113,25 +113,25 @@ "name": "Barrier", "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", "img": "icons/skills/melee/shield-block-bash-blue.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier + 1" - }, - { - "key": "system.evasion", - "mode": 2, - "value": "-1" - } - ], "_id": "lBJMzxdGO2nJdTQS", "type": "base", - "system": {}, + "system": { + "changes": [ + { + "key": "system.evasion", + "type": "add", + "value": -1, + "phase": "initial", + "priority": 0 + } + ] + }, "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "origin": null, "tint": "#ffffff", @@ -142,7 +142,49 @@ "_stats": { "compendiumSource": null }, + "start": null, + "showIcon": 1, + "folder": null, "_key": "!items.effects!MaJIROht7A9LxIZx.lBJMzxdGO2nJdTQS" + }, + { + "name": "Barrier", + "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", + "img": "icons/skills/melee/shield-block-bash-blue.webp", + "_id": "1fgUIaXl6VQrhP7j", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier + 1" + } + ] + }, + "disabled": false, + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "origin": null, + "tint": "#ffffff", + "transfer": true, + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!MaJIROht7A9LxIZx.1fgUIaXl6VQrhP7j" } ], "sort": 0, diff --git a/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json b/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json index 47b096af..d16c550c 100644 --- a/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json +++ b/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json @@ -113,26 +113,26 @@ "name": "Protective", "description": "

Add the item's Tier to your Armor Score

", "img": "icons/skills/melee/shield-block-gray-orange.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier", - "priority": null - } - ], - "_id": "M70a81e0Mg66jHRL", - "type": "base", - "system": {}, + "_id": "eV4lFIpQMiKERj4U", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier" + } + ] + }, "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 }, "origin": null, "tint": "#ffffff", @@ -143,7 +143,10 @@ "_stats": { "compendiumSource": null }, - "_key": "!items.effects!mxwWKDujgsRcZWPT.M70a81e0Mg66jHRL" + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!mxwWKDujgsRcZWPT.eV4lFIpQMiKERj4U" } ], "sort": 0, diff --git a/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json b/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json index edadecf9..40e451bd 100644 --- a/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json +++ b/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json @@ -113,32 +113,31 @@ "name": "Double Duty", "description": "+1 to Armor Score; +1 to primary weapon damage within Melee range", "img": "icons/skills/melee/sword-shield-stylized-white.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "1" - }, - { - "key": "system.bonuses.damage.primaryWeapon.bonus", - "mode": 2, - "value": "1" - } - ], "system": { "rangeDependence": { "enabled": true, "range": "melee", "target": "hostile", "type": "withinRange" - } + }, + "changes": [ + { + "key": "system.bonuses.damage.primaryWeapon.bonus", + "type": "add", + "value": 1, + "phase": "initial", + "priority": 0 + } + ] }, "_id": "d3TJtlpoHBCztbom", "type": "base", "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "origin": null, "tint": "#ffffff", @@ -149,7 +148,49 @@ "_stats": { "compendiumSource": null }, + "start": null, + "showIcon": 1, + "folder": null, "_key": "!items.effects!vzyzFwLUniWZV1rt.d3TJtlpoHBCztbom" + }, + { + "name": "Double Duty", + "description": "+1 to Armor Score; +1 to primary weapon damage within Melee range", + "img": "icons/skills/melee/sword-shield-stylized-white.webp", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "1" + } + ] + }, + "_id": "mvUY9LGfwICak7cE", + "type": "armor", + "disabled": false, + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "origin": null, + "tint": "#ffffff", + "transfer": true, + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!vzyzFwLUniWZV1rt.mvUY9LGfwICak7cE" } ], "sort": 0, diff --git a/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json b/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json index d49b7de7..9e3e9968 100644 --- a/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json +++ b/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json @@ -113,25 +113,25 @@ "name": "Barrier", "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", "img": "icons/skills/melee/shield-block-bash-blue.webp", - "changes": [ - { - "key": "system.armorScore", - "mode": 2, - "value": "ITEM.@system.tier + 1" - }, - { - "key": "system.evasion", - "mode": 2, - "value": "-1" - } - ], "_id": "8r0TcKWXboFV0eqS", "type": "base", - "system": {}, + "system": { + "changes": [ + { + "key": "system.evasion", + "type": "add", + "value": -1, + "phase": "initial", + "priority": 0 + } + ] + }, "disabled": false, "duration": { - "startTime": null, - "combat": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "origin": null, "tint": "#ffffff", @@ -142,7 +142,49 @@ "_stats": { "compendiumSource": null }, + "start": null, + "showIcon": 1, + "folder": null, "_key": "!items.effects!C9aWpK1shVMWP4m5.8r0TcKWXboFV0eqS" + }, + { + "name": "Barrier", + "description": "Gain Weapon Tier + 1 to Armor Score; -1 to Evasion", + "img": "icons/skills/melee/shield-block-bash-blue.webp", + "_id": "tLRc4UAnGuIq7er3", + "type": "armor", + "system": { + "changes": [ + { + "key": "system.armorScore", + "type": "armor", + "phase": "initial", + "priority": 20, + "value": 0, + "max": "ITEM.@system.tier + 1" + } + ] + }, + "disabled": false, + "duration": { + "value": null, + "units": "seconds", + "expiry": null, + "expired": false + }, + "origin": null, + "tint": "#ffffff", + "transfer": true, + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "start": null, + "showIcon": 1, + "folder": null, + "_key": "!items.effects!C9aWpK1shVMWP4m5.tLRc4UAnGuIq7er3" } ], "sort": 0, From 10baf0ba105dbf70d10f8837abb197d4bd123891 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Wed, 11 Feb 2026 17:00:58 +0100 Subject: [PATCH 3/3] Added ArmoreEffect.armorInteraction option --- lang/en.json | 13 ++++++++++- .../armorActiveEffectConfig.mjs | 1 + module/config/generalConfig.mjs | 6 +++++ module/data/activeEffect/armorEffect.mjs | 22 ++++++++++++++++++- module/documents/activeEffect.mjs | 2 ++ .../domainCard_Armorer_cy8GjBPGc9w9RaGO.json | 5 +++-- ...omainCard_Bare_Bones_l5D9kq901JDESaXw.json | 3 ++- .../sheets/activeEffects/armorEffects.less | 15 ++----------- .../sheets/activeEffect/armor/settings.hbs | 19 +++++++++++----- 9 files changed, 62 insertions(+), 24 deletions(-) diff --git a/lang/en.json b/lang/en.json index 14218311..9f528c14 100755 --- a/lang/en.json +++ b/lang/en.json @@ -751,6 +751,11 @@ "bruiser": "for each Bruiser adversary.", "solo": "for each Solo adversary." }, + "ArmorInteraction": { + "none": { "label": "Ignores Armor" }, + "active": { "label": "Only Active With Armor" }, + "inactive": { "label": "Only Active Without Armor" } + }, "ArmorFeature": { "burning": { "name": "Burning", @@ -1851,7 +1856,13 @@ "transferHint": "If checked, this effect will be applied to any actor that owns this Effect's parent Item. The effect is always applied if this Item is attached to another one." }, "Armor": { - "newArmorEffect": "Armor Effect" + "newArmorEffect": "Armor Effect", + "FIELDS": { + "armorInteraction": { + "label": "Armor Interaction", + "hint": "Does the character wearing armor suppress this effect?" + } + } } }, "GENERAL": { diff --git a/module/applications/sheets-configs/armorActiveEffectConfig.mjs b/module/applications/sheets-configs/armorActiveEffectConfig.mjs index 7d8070e0..3dca8ef1 100644 --- a/module/applications/sheets-configs/armorActiveEffectConfig.mjs +++ b/module/applications/sheets-configs/armorActiveEffectConfig.mjs @@ -9,6 +9,7 @@ export default class ArmorActiveEffectConfig extends HandlebarsApplicationMixin( submitOnChange: true, closeOnSubmit: false }, + position: { width: 560 }, actions: { finish: ArmorActiveEffectConfig.#finish } diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 80ac546e..b2833580 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -890,3 +890,9 @@ export const activeEffectModes = { label: 'EFFECT.CHANGES.TYPES.override' } }; + +export const activeEffectArmorInteraction = { + none: { id: 'none', label: 'DAGGERHEART.CONFIG.ArmorInteraction.none.label' }, + active: { id: 'active', label: 'DAGGERHEART.CONFIG.ArmorInteraction.active.label' }, + inactive: { id: 'inactive', label: 'DAGGERHEART.CONFIG.ArmorInteraction.inactive.label' } +}; diff --git a/module/data/activeEffect/armorEffect.mjs b/module/data/activeEffect/armorEffect.mjs index d32d24b2..894bf3ff 100644 --- a/module/data/activeEffect/armorEffect.mjs +++ b/module/data/activeEffect/armorEffect.mjs @@ -51,10 +51,30 @@ export default class ArmorEffect extends foundry.data.ActiveEffectTypeDataModel } ] } - ) + ), + armorInteraction: new fields.StringField({ + required: true, + choices: CONFIG.DH.GENERAL.activeEffectArmorInteraction, + initial: CONFIG.DH.GENERAL.activeEffectArmorInteraction.none.id, + label: 'DAGGERHEART.EFFECTS.Armor.FIELDS.armorInteraction.label', + hint: 'DAGGERHEART.EFFECTS.Armor.FIELDS.armorInteraction.hint' + }) }; } + get isSuppressed() { + if (this.parent.actor?.type !== 'character') return false; + + switch (this.armorInteraction) { + case CONFIG.DH.GENERAL.activeEffectArmorInteraction.active.id: + return !this.parent.actor.system.armor; + case CONFIG.DH.GENERAL.activeEffectArmorInteraction.inactive.id: + return Boolean(this.parent.actor.system.armor); + default: + return false; + } + } + /* Type Functions */ /** diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index 055267b2..56981c52 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -8,6 +8,8 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { /**@override */ get isSuppressed() { + if (this.system.isSuppressed === true) return true; + // If this is a copied effect from an attachment, never suppress it // (These effects have attachmentSource metadata) if (this.flags?.daggerheart?.attachmentSource) { diff --git a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json index c06a34ab..096be253 100644 --- a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json +++ b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json @@ -101,7 +101,8 @@ "value": 0, "max": "1" } - ] + ], + "armorInteraction": "active" }, "_id": "tJw2JIPcT9hEMRXg", "img": "icons/tools/hand/hammer-and-nail.webp", @@ -112,7 +113,7 @@ "expiry": null, "expired": false }, - "description": "

While you’re wearing armor, gain a +1 bonus to your Armor Score.

", + "description": "

While you’re wearing armor, gain a +1 bonus to your Armor Score.

", "origin": null, "tint": "#ffffff", "transfer": true, diff --git a/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json b/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json index 7e0129d7..40af13a7 100644 --- a/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json +++ b/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json @@ -33,7 +33,8 @@ "phase": "initial", "priority": 20 } - ] + ], + "armorInteraction": "inactive" }, "_id": "FCsgz7Tdsw6QUzBs", "img": "icons/magic/control/buff-strength-muscle-damage-orange.webp", diff --git a/styles/less/sheets/activeEffects/armorEffects.less b/styles/less/sheets/activeEffects/armorEffects.less index 9756edce..fd5c89b1 100644 --- a/styles/less/sheets/activeEffects/armorEffects.less +++ b/styles/less/sheets/activeEffects/armorEffects.less @@ -1,16 +1,5 @@ .application.sheet.daggerheart.dh-style.armor-effect-config { - .armor-effects-container { - display: flex; - flex-direction: column; - gap: 8px; - - .armor-effect-container { - display: flex; - gap: 4px; - - * { - flex: 1; - } - } + .tab-form-footer { + margin-top: 8px; } } diff --git a/templates/sheets/activeEffect/armor/settings.hbs b/templates/sheets/activeEffect/armor/settings.hbs index c0f77b35..12ca2154 100644 --- a/templates/sheets/activeEffect/armor/settings.hbs +++ b/templates/sheets/activeEffect/armor/settings.hbs @@ -1,10 +1,17 @@
-
- {{#each source.system.changes as |change index|}} -
+
+ {{localize "Armor"}} +
+ {{#each source.system.changes as |change index|}} {{formGroup @root.systemFields.changes.element.fields.value name=(concat 'system.changes.' index '.value') value=change.value localize=true}} {{formGroup @root.systemFields.changes.element.fields.max name=(concat 'system.changes.' index '.max') value=change.max localize=true}} -
- {{/each}} -
+ {{/each}} +
+ + +
+ {{localize "DAGGERHEART.GENERAL.general"}} + + {{formGroup @root.systemFields.armorInteraction name="system.armorInteraction" value=source.system.armorInteraction localize=true}} +
\ No newline at end of file