Compare commits

...

3 commits

Author SHA1 Message Date
WBHarry
10baf0ba10 Added ArmoreEffect.armorInteraction option 2026-02-11 17:00:58 +01:00
WBHarry
c067fd0e10 SRD finalization 2026-02-11 16:21:34 +01:00
WBHarry
90ca39ebda Finally finished the migration ._. 2026-02-11 16:06:47 +01:00
60 changed files with 819 additions and 382 deletions

View file

@ -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": {

View file

@ -9,6 +9,7 @@ export default class ArmorActiveEffectConfig extends HandlebarsApplicationMixin(
submitOnChange: true,
closeOnSubmit: false
},
position: { width: 560 },
actions: {
finish: ArmorActiveEffectConfig.#finish
}
@ -45,6 +46,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;
}

View file

@ -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 });
}

View file

@ -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' }
};

View file

@ -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 */
/**

View file

@ -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) {

View file

@ -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

View file

@ -101,31 +101,32 @@
"value": 0,
"max": "1"
}
]
],
"armorInteraction": "active"
},
"_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": "<p><span style=\"color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.376);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline !important\">While youre wearing armor, gain a +1 bonus to your </span><span style=\"box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(93, 20, 43) rgba(0, 0, 0, 0);color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.376);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial\" class=\"tooltip-convert\">Armor Score</span><span style=\"color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.376);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline !important\">.</span></p>",
"description": "<p><span style=\"color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.376);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;display:inline !important;float:none\">While youre wearing armor, gain a +1 bonus to your </span><span style=\"box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(93, 20, 43) rgba(0, 0, 0, 0);color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.376);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial\" class=\"tooltip-convert\">Armor Score</span><span style=\"color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.376);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;display:inline !important;float:none\">.</span></p>",
"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": {

View file

@ -4,7 +4,7 @@
"type": "domainCard",
"folder": "QpOL7jPbMBzH96qR",
"system": {
"description": "<p class=\"Body-Foundation\">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:</p><ul><li class=\"vertical-card-list-found\"><p><em><strong>Tier 1:</strong></em> 9/19</p></li><li class=\"vertical-card-list-found\"><p><em><strong>Tier 2:</strong></em> 11/24</p></li><li class=\"vertical-card-list-found\"><p><em><strong>Tier 3:</strong></em> 13/31</p></li><li class=\"vertical-card-list-found\"><p><em><strong>Tier 4:</strong></em> 15/38</p></li></ul><p>Equip the below armor to use Bare Bones.</p>",
"description": "<p class=\"Body-Foundation\">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:</p><ul><li class=\"vertical-card-list-found\"><em><strong>Tier 1:</strong></em> 9/19</li><li class=\"vertical-card-list-found\"><em><strong>Tier 2:</strong></em> 11/24</li><li class=\"vertical-card-list-found\"><em><strong>Tier 3:</strong></em> 13/31</li><li class=\"vertical-card-list-found\"><em><strong>Tier 4:</strong></em> 15/38</li></ul><p>Equip the below armor to use Bare Bones.</p><p>@UUID[Compendium.daggerheart.armors.Item.ITAjcigTcUw5pMCN]{Bare Bones}</p>",
"domain": "valor",
"recallCost": 0,
"level": 1,
@ -33,9 +33,10 @@
"phase": "initial",
"priority": 20
}
]
],
"armorInteraction": "inactive"
},
"_id": "Zn1nNUwjlkbRfbMc",
"_id": "FCsgz7Tdsw6QUzBs",
"img": "icons/magic/control/buff-strength-muscle-damage-orange.webp",
"disabled": false,
"start": null,
@ -45,7 +46,7 @@
"expiry": null,
"expired": false
},
"description": "<p><span style=\"color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.565);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;display:inline !important;float:none\">You have a base Armor Score of 3 + your Strength</span></p>",
"description": "<p><span style=\"color:rgb(239, 230, 216);font-family:Montserrat, sans-serif;font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;white-space:normal;background-color:rgba(24, 22, 46, 0.565);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;display:inline !important;float:none\">You have a base Armor Score of 3 + your Strength.</span></p>",
"origin": null,
"tint": "#ffffff",
"transfer": true,
@ -57,7 +58,7 @@
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!l5D9kq901JDESaXw.Zn1nNUwjlkbRfbMc"
"_key": "!items.effects!l5D9kq901JDESaXw.FCsgz7Tdsw6QUzBs"
},
{
"name": "Bare Bones",
@ -86,7 +87,7 @@
"range": "melee"
}
},
"_id": "FazU8RFjMmTpXs7Z",
"_id": "8flPpWNoBeuFPFTK",
"img": "icons/magic/control/buff-strength-muscle-damage-orange.webp",
"disabled": false,
"start": null,
@ -108,7 +109,7 @@
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!l5D9kq901JDESaXw.FazU8RFjMmTpXs7Z"
"_key": "!items.effects!l5D9kq901JDESaXw.8flPpWNoBeuFPFTK"
}
],
"ownership": {

View file

@ -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": "<p><strong>Spend a Hope</strong> to give a target you can touch a +1 bonus to their Armor Score until their next rest or you cast Tavas Armor again.</p>",
"description": "<p>+1 bonus to your Armor Score until your next rest, or the caster cast's Tavas Armor again.</p>",
"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": {

View file

@ -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": "<p>+1 bonus to your Armor Score</p>",
"description": "<ul><li class=\"vertical-card-list-found\"><p>+1 bonus to your Armor Score</p></li><li class=\"vertical-card-list-found\"><p>When you mark 1 or more Hit Points without marking an Armor Slot, clear an Armor Slot.</p></li></ul>",
"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": {

View file

@ -6,7 +6,7 @@
"sorting": "m",
"_id": "TL1TutmbeCVJ06nR",
"description": "",
"sort": 750000,
"sort": 900000,
"flags": {},
"_key": "!folders!TL1TutmbeCVJ06nR"
}

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -0,0 +1,71 @@
{
"folder": "tI3bfr6Sgi16Z7zm",
"name": "Bare Bones",
"type": "armor",
"_id": "ITAjcigTcUw5pMCN",
"img": "icons/magic/control/buff-strength-muscle-damage.webp",
"system": {
"description": "<p></p><p class=\"Body-Foundation\">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:</p><ul><li class=\"vertical-card-list-found\"><em><strong>Tier 1:</strong></em> 9/19</li><li class=\"vertical-card-list-found\"><em><strong>Tier 2:</strong></em> 11/24</li><li class=\"vertical-card-list-found\"><em><strong>Tier 3:</strong></em> 13/31</li><li class=\"vertical-card-list-found\"><em><strong>Tier 4:</strong></em> 15/38</li></ul>",
"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": "<p></p><p class=\"Body-Foundation\">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:</p><ul><li class=\"vertical-card-list-found\"><em><strong>Tier 1:</strong></em> 9/19</li><li class=\"vertical-card-list-found\"><em><strong>Tier 2:</strong></em> 11/24</li><li class=\"vertical-card-list-found\"><em><strong>Tier 3:</strong></em> 13/31</li><li class=\"vertical-card-list-found\"><em><strong>Tier 4:</strong></em> 15/38</li></ul>",
"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"
}

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -0,0 +1,12 @@
{
"type": "Item",
"folder": null,
"name": "Special",
"color": null,
"sorting": "a",
"_id": "tI3bfr6Sgi16Z7zm",
"description": "",
"sort": 0,
"flags": {},
"_key": "!folders!tI3bfr6Sgi16Z7zm"
}

View file

@ -113,26 +113,26 @@
"name": "Protective",
"description": "<p>Add the item's Tier to your Armor Score</p>",
"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,

View file

@ -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,

View file

@ -113,26 +113,26 @@
"name": "Protective",
"description": "<p>Add the item's Tier to your Armor Score</p>",
"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,

View file

@ -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,

View file

@ -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,

View file

@ -113,26 +113,26 @@
"name": "Protective",
"description": "<p>Add the item's Tier to your Armor Score</p>",
"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,

View file

@ -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,

View file

@ -113,26 +113,26 @@
"name": "Protective",
"description": "<p>Add the item's Tier to your Armor Score</p>",
"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,

View file

@ -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,

View file

@ -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,

View file

@ -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;
}
}

View file

@ -1,10 +1,17 @@
<section class="tab{{#if tab.active}} active{{/if}}" data-group="{{tab.group}}" data-tab="{{tab.id}}">
<div class="armor-effects-container">
{{#each source.system.changes as |change index|}}
<div class="armor-effect-container">
<fieldset>
<legend>{{localize "Armor"}}</legend>
<div class="two-columns even">
{{#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}}
</div>
{{/each}}
</div>
{{/each}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "DAGGERHEART.GENERAL.general"}}</legend>
{{formGroup @root.systemFields.armorInteraction name="system.armorInteraction" value=source.system.armorInteraction localize=true}}
</fieldset>
</section>