Merge branch 'v14-Dev' into v14/effect-stacking

This commit is contained in:
WBHarry 2026-03-22 14:50:22 +01:00
commit b2a900db16
149 changed files with 3336 additions and 1535 deletions

View file

@ -85,7 +85,7 @@
{
"trigger": "dualityRoll",
"triggeringActorType": "self",
"command": "/* Ignore if it's a TagTeam roll */\nconst tagTeam = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll);\nif (tagTeam.members[actor.id]) return;\n\n/* Check if there's a Strange Pattern match */\nconst dice = [roll.dFear.total, roll.dHope.total];\nconst resource = this.parent.resource?.diceStates ? Object.values(this.parent.resource.diceStates).map(x => x.value)[0] : null;\nconst nrMatches = dice.filter(x => x === resource).length;\n\nif (!nrMatches) return;\n\n/* Create a dialog to choose Hope or Stress - or to cancel*/\nconst content = `\n <div><div>${game.i18n.format('DAGGERHEART.CONFIG.Triggers.triggerTexts.strangePatternsContentTitle', { nr: nrMatches })}</div>\n <div>${game.i18n.format('DAGGERHEART.CONFIG.Triggers.triggerTexts.strangePatternsContentSubTitle', { nr: nrMatches })}</div>\n<div>${game.i18n.localize('DAGGERHEART.CONFIG.Triggers.triggerTexts.strangePatternsActionExplanation')}</div>\n <div class=\"flexrow\" style=\"gap: 8px;\">\n <button type=\"button\" id=\"hopeButton\">\n <i class=\"fa-solid fa-hands-holding\"></i>\n <label>0</label>\n </button>\n <button type=\"button\" id=\"stressButton\">\n <i class=\"fa-solid fa-bolt-lightning\"></i>\n <label>0</label>\n </button>\n </div>\n</div>`;\n\nconst result = await foundry.applications.api.DialogV2.input({\n classes: ['dh-style', 'two-big-buttons'],\n window: { title: this.item.name },\n content: content,\n render: (_, dialog) => {\n const hopeButton = dialog.element.querySelector('#hopeButton');\n const stressButton = dialog.element.querySelector('#stressButton');\ndialog.element.querySelector('button[type=\"submit\"]').disabled = true;\n \n const updateFunc = (event, selector, adding, clamp) => {\n const button = event.target.closest(`#${selector}Button`);\n const parent = event.target.closest('.flexrow');\n const hope = Number.parseInt(parent.querySelector('#hopeButton label').innerHTML);\n const stress = Number.parseInt(parent.querySelector('#stressButton label').innerHTML);\n const currentTotal = (Number.isNumeric(hope) ? hope : 0) + (Number.isNumeric(stress) ? stress : 0);\n if (adding && currentTotal === nrMatches) return;\n \n const current = Number.parseInt(button.querySelector('label').innerHTML);\n if (!adding && current === 0) return;\n \n const value = Number.isNumeric(current) ? adding ? current+1 : current-1 : 1;\n if (!dialog.data) dialog.data = {};\n dialog.data[selector] = clamp(value);\n button.querySelector('label').innerHTML = dialog.data[selector];\n\n event.target.closest('.dialog-form').querySelector('button[type=\"submit\"]').disabled = !adding || currentTotal < (nrMatches-1);\n \n };\n hopeButton.addEventListener('click', event => updateFunc(event, 'hope', true, x => Math.min(x, nrMatches)));\n hopeButton.addEventListener('contextmenu', event => updateFunc(event, 'hope', false, x => Math.max(x, 0)));\n stressButton.addEventListener('click', event => updateFunc(event, 'stress', true, x => Math.min(x, nrMatches)));\n stressButton.addEventListener('contextmenu', event => updateFunc(event, 'stress', false, x => Math.max(x, 0)));\n },\n ok: { callback: (_event, _result, dialog) => {\n const hope = dialog.data.hope ?? 0;\n const stress = dialog.data.stress ?? 0;\n if (!hope && !stress) return;\n\n /* Return resource update according to choices */\n const hopeUpdate = hope ? { key: 'hope', value: hope, total: -hope, enabled: true } : null;\n const stressUpdate = stress ? { key: 'stress', value: -stress, total: stress, enabled: true } : null;\n return { updates: [hopeUpdate, stressUpdate].filter(x => x) };\n }}\n});\n\nreturn result;"
"command": "/* Check if there's a Strange Pattern match */\nconst dice = [roll.dFear.total, roll.dHope.total];\nconst resource = this.parent.resource?.diceStates ? Object.values(this.parent.resource.diceStates).map(x => x.value)[0] : null;\nconst nrMatches = dice.filter(x => x === resource).length;\n\nif (!nrMatches) return;\n\n/* Create a dialog to choose Hope or Stress - or to cancel*/\nconst content = `\n <div><div>${game.i18n.format('DAGGERHEART.CONFIG.Triggers.triggerTexts.strangePatternsContentTitle', { nr: nrMatches })}</div>\n <div>${game.i18n.format('DAGGERHEART.CONFIG.Triggers.triggerTexts.strangePatternsContentSubTitle', { nr: nrMatches })}</div>\n<div>${game.i18n.localize('DAGGERHEART.CONFIG.Triggers.triggerTexts.strangePatternsActionExplanation')}</div>\n <div class=\"flexrow\" style=\"gap: 8px;\">\n <button type=\"button\" id=\"hopeButton\">\n <i class=\"fa-solid fa-hands-holding\"></i>\n <label>0</label>\n </button>\n <button type=\"button\" id=\"stressButton\">\n <i class=\"fa-solid fa-bolt-lightning\"></i>\n <label>0</label>\n </button>\n </div>\n</div>`;\n\nconst result = await foundry.applications.api.DialogV2.input({\n classes: ['dh-style', 'two-big-buttons'],\n window: { title: this.item.name },\n content: content,\n render: (_, dialog) => {\n const hopeButton = dialog.element.querySelector('#hopeButton');\n const stressButton = dialog.element.querySelector('#stressButton');\ndialog.element.querySelector('button[type=\"submit\"]').disabled = true;\n \n const updateFunc = (event, selector, adding, clamp) => {\n const button = event.target.closest(`#${selector}Button`);\n const parent = event.target.closest('.flexrow');\n const hope = Number.parseInt(parent.querySelector('#hopeButton label').innerHTML);\n const stress = Number.parseInt(parent.querySelector('#stressButton label').innerHTML);\n const currentTotal = (Number.isNumeric(hope) ? hope : 0) + (Number.isNumeric(stress) ? stress : 0);\n if (adding && currentTotal === nrMatches) return;\n \n const current = Number.parseInt(button.querySelector('label').innerHTML);\n if (!adding && current === 0) return;\n \n const value = Number.isNumeric(current) ? adding ? current+1 : current-1 : 1;\n if (!dialog.data) dialog.data = {};\n dialog.data[selector] = clamp(value);\n button.querySelector('label').innerHTML = dialog.data[selector];\n\n event.target.closest('.dialog-form').querySelector('button[type=\"submit\"]').disabled = !adding || currentTotal < (nrMatches-1);\n \n };\n hopeButton.addEventListener('click', event => updateFunc(event, 'hope', true, x => Math.min(x, nrMatches)));\n hopeButton.addEventListener('contextmenu', event => updateFunc(event, 'hope', false, x => Math.max(x, 0)));\n stressButton.addEventListener('click', event => updateFunc(event, 'stress', true, x => Math.min(x, nrMatches)));\n stressButton.addEventListener('contextmenu', event => updateFunc(event, 'stress', false, x => Math.max(x, 0)));\n },\n ok: { callback: (_event, _result, dialog) => {\n const hope = dialog.data.hope ?? 0;\n const stress = dialog.data.stress ?? 0;\n if (!hope && !stress) return;\n\n /* Return resource update according to choices */\n const hopeUpdate = hope ? { key: 'hope', value: hope, total: -hope, enabled: true } : null;\n const stressUpdate = stress ? { key: 'stress', value: -stress, total: stress, enabled: true } : null;\n return { updates: [hopeUpdate, stressUpdate].filter(x => x) };\n }}\n});\n\nreturn result;"
}
]
}

View file

@ -92,34 +92,28 @@
"name": "Armorer",
"type": "base",
"system": {
"rangeDependence": {
"enabled": false,
"type": "withinRange",
"target": "hostile",
"range": "melee"
}
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"max": "1",
"interaction": "active"
}
}
]
},
"_id": "cED730OjuMW5haJR",
"_id": "tJw2JIPcT9hEMRXg",
"img": "icons/tools/hand/hammer-and-nail.webp",
"changes": [
{
"key": "system.armorScore",
"mode": 2,
"value": "1",
"priority": null
}
],
"disabled": false,
"duration": {
"startTime": null,
"combat": null,
"seconds": null,
"rounds": null,
"turns": null,
"startRound": null,
"startTurn": null
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "<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 class=\"tooltip-convert\" 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\">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\">.</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,
@ -129,7 +123,10 @@
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!cy8GjBPGc9w9RaGO.cED730OjuMW5haJR"
"start": null,
"showIcon": 1,
"folder": null,
"_key": "!items.effects!cy8GjBPGc9w9RaGO.tJw2JIPcT9hEMRXg"
}
],
"ownership": {

View file

@ -19,7 +19,52 @@
}
},
"flags": {},
"effects": [],
"effects": [
{
"name": "Bare Bones",
"type": "base",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"max": "3 + @system.traits.strength.value",
"interaction": "inactive",
"damageThresholds": {
"major": "9 + (@tier - 1) * 5 + max(0, (@tier -2) * 2 )",
"severe": "19 + (@tier - 1) * 5 + max(0, (@tier -2) * 2 )"
}
}
}
]
},
"_id": "FCsgz7Tdsw6QUzBs",
"img": "icons/magic/control/buff-strength-muscle-damage-orange.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.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,
"statuses": [],
"showIcon": 1,
"folder": null,
"sort": 0,
"flags": {},
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!l5D9kq901JDESaXw.FCsgz7Tdsw6QUzBs"
}
],
"ownership": {
"default": 0,
"MQSznptE5yLT7kj8": 3

View file

@ -105,7 +105,7 @@
},
"effects": [
{
"_id": "LdcT1nrkd5ORCU4n",
"_id": "ptYT10JZ2WJHvFMd",
"onSave": false
}
],
@ -252,7 +252,7 @@
"img": "icons/magic/defensive/shield-barrier-glowing-triangle-blue.webp",
"origin": "Compendium.daggerheart.domains.Item.YtZzYBtR0yLPPA93",
"transfer": false,
"_id": "LdcT1nrkd5ORCU4n",
"_id": "ptYT10JZ2WJHvFMd",
"type": "base",
"system": {
"rangeDependence": {
@ -263,10 +263,12 @@
},
"changes": [
{
"key": "system.armorScore",
"value": 1,
"priority": null,
"type": "add"
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"max": "1"
}
}
],
"duration": {
@ -298,7 +300,7 @@
},
"showIcon": 1,
"folder": null,
"_key": "!items.effects!YtZzYBtR0yLPPA93.LdcT1nrkd5ORCU4n"
"_key": "!items.effects!YtZzYBtR0yLPPA93.ptYT10JZ2WJHvFMd"
}
],
"ownership": {

View file

@ -93,32 +93,25 @@
"name": "Valor-Touched",
"type": "base",
"system": {
"rangeDependence": {
"enabled": false,
"type": "withinRange",
"target": "hostile",
"range": "melee"
}
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"max": "1"
}
}
]
},
"_id": "H9lgIqqp1imSNOv9",
"_id": "Ma8Zp005QYKPWIEN",
"img": "icons/magic/control/control-influence-rally-purple.webp",
"changes": [
{
"key": "system.armorScore",
"mode": 2,
"value": "1",
"priority": null
}
],
"disabled": false,
"duration": {
"startTime": null,
"combat": null,
"seconds": null,
"rounds": null,
"turns": null,
"startRound": null,
"startTurn": null
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"description": "<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,
@ -130,7 +123,10 @@
"_stats": {
"compendiumSource": null
},
"_key": "!items.effects!k1AtYd3lSchIymBr.H9lgIqqp1imSNOv9"
"start": null,
"showIcon": 1,
"folder": null,
"_key": "!items.effects!k1AtYd3lSchIymBr.Ma8Zp005QYKPWIEN"
}
],
"ownership": {

View file

@ -1,5 +1,5 @@
{
"type": "Item",
"type": "Actor",
"folder": null,
"name": "Tier 1",
"color": null,

View file

@ -1,5 +1,5 @@
{
"type": "Item",
"type": "Actor",
"folder": null,
"name": "Tier 2",
"color": null,

View file

@ -1,5 +1,5 @@
{
"type": "Item",
"type": "Actor",
"folder": null,
"name": "Tier 3",
"color": null,

View file

@ -1,5 +1,5 @@
{
"type": "Item",
"type": "Actor",
"folder": null,
"name": "Tier 4",
"color": null,

View file

@ -5,6 +5,10 @@
"_id": "LzLOJ9EVaHWAjoq9",
"img": "icons/equipment/chest/breastplate-banded-steel-gold.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "crIbCb9NZ4K0VpoU",
"img": "icons/equipment/chest/breastplate-layered-steel-grey.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "epkAmlZVk7HOfUUT",
"img": "icons/equipment/chest/breastplate-purple.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "itSOp2GCyem0f7oM",
"img": "icons/equipment/chest/breastplate-layered-leather-blue.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -1,75 +0,0 @@
{
"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": "base",
"system": {
"rangeDependence": {
"enabled": false,
"type": "withinRange",
"target": "hostile",
"range": "melee"
}
},
"_id": "8ze88zUwdkQSKKJq",
"img": "icons/magic/control/buff-strength-muscle-damage.webp",
"changes": [
{
"key": "system.armorScore",
"mode": 2,
"value": "@system.traits.strength.value",
"priority": 21
}
],
"disabled": false,
"duration": {
"startTime": null,
"combat": null,
"seconds": null,
"rounds": null,
"turns": null,
"startRound": null,
"startTurn": null
},
"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
},
"_key": "!items.effects!ITAjcigTcUw5pMCN.8ze88zUwdkQSKKJq"
}
],
"sort": 0,
"ownership": {
"default": 0,
"MQSznptE5yLT7kj8": 3
},
"flags": {},
"_key": "!items!ITAjcigTcUw5pMCN"
}

View file

@ -5,6 +5,10 @@
"_id": "WuoVwZA53XRAIt6d",
"img": "icons/equipment/chest/breastplate-layered-gold.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "mNN6pvcsS10ChrWF",
"img": "icons/equipment/chest/breastplate-collared-steel-grey.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "haULhuEg37zUUvhb",
"img": "icons/equipment/chest/breastplate-scale-grey.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "vMJxEWz1srfwMsoj",
"img": "icons/equipment/chest/robe-collared-blue.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "mdQ69eFHyAQUDmE7",
"img": "icons/equipment/chest/breastplate-rivited-red.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {
"J1MCpcfXByKaSSgx": {

View file

@ -5,6 +5,10 @@
"_id": "hAY6UgdGT7dj22Pr",
"img": "icons/equipment/chest/robe-layered-red.webp",
"system": {
"armor": {
"current": 0,
"max": 7
},
"description": "",
"actions": {
"8PD5JQuS05IA6HJT": {

View file

@ -5,6 +5,10 @@
"_id": "Q6LxmtFetDDkoZVZ",
"img": "icons/equipment/chest/breastplate-sculpted-green.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "bcQUh4QG3qFX0Vx6",
"img": "icons/equipment/chest/breastplate-layered-gilded-orange.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {
"L8mHf4A8SylyxsMH": {

View file

@ -5,6 +5,10 @@
"_id": "7emTSt6nhZuTlvt5",
"img": "icons/equipment/chest/breastplate-layered-steel.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "UdUJNa31WxFW2noa",
"img": "icons/equipment/chest/breastplate-collared-steel.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "yJFp1bfpecDcStVK",
"img": "icons/equipment/chest/vest-leather-tattered-white.webp",
"system": {
"armor": {
"current": 0,
"max": 3
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "dvyQeUVRLc9y6rnt",
"img": "icons/equipment/chest/breastplate-gorget-steel.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {
"IzM88FIxQ35P5VB2": {

View file

@ -5,6 +5,10 @@
"_id": "K5WkjS0NGqHYmhU3",
"img": "icons/equipment/chest/breastplate-metal-scaled-grey.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "9f7RozpPTqrzJS1m",
"img": "icons/equipment/chest/breastplate-cuirass-steel-grey.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "jphnMZjnS2FkOH3s",
"img": "icons/equipment/chest/breastplate-quilted-brown.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "t91M61pSCMKStTNt",
"img": "icons/equipment/chest/breastplate-banded-simple-leather-brown.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "tzZntboNtHL5C6VM",
"img": "icons/equipment/chest/breastplate-layered-leather-brown-silver.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "nibfdNtp2PtxvbVz",
"img": "icons/equipment/chest/breastplate-layered-leather-brown.webp",
"system": {
"armor": {
"current": 0,
"max": 3
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "EsIN5OLKe9ZYFNXZ",
"img": "icons/equipment/chest/breastplate-banded-blue.webp",
"system": {
"armor": {
"current": 0,
"max": 7
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "SXWjUR2aUR6bYvdl",
"img": "icons/equipment/chest/breastplate-layered-steel-blue-gold.webp",
"system": {
"armor": {
"current": 0,
"max": 7
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "c6tMXz4rPf9ioQrf",
"img": "icons/equipment/chest/breastplate-layered-leather-blue-gold.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "Tptgl5WOj76TyFn7",
"img": "icons/equipment/chest/breastplate-layered-gilded-black.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "AQzU2RsqS5V5bd1v",
"img": "icons/equipment/chest/coat-collared-red.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "tN8kAeBvNKM3EBFo",
"img": "icons/equipment/chest/breastplate-banded-leather-purple.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {
"QRTnCYxJfuJHdnyV": {

View file

@ -5,6 +5,10 @@
"_id": "P4qAEDJUoNLgVRsA",
"img": "icons/magic/symbols/rune-sigil-red-orange.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {
"37KLF2bim9nRdPTU": {

View file

@ -5,6 +5,10 @@
"_id": "tHlBUDQC24YMZqd6",
"img": "icons/equipment/chest/breastplate-layered-leather-black.webp",
"system": {
"armor": {
"current": 0,
"max": 4
},
"description": "",
"actions": {
"Nn33zCIcWe6LQMDH": {

View file

@ -5,6 +5,10 @@
"_id": "8X16lJQ3xltTwynm",
"img": "icons/equipment/chest/breastplate-layered-leather-green.webp",
"system": {
"armor": {
"current": 0,
"max": 8
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "QjwsIhXKqnlvRBMv",
"img": "icons/equipment/chest/breastplate-banded-steel-studded.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {},
"attached": [],

View file

@ -5,6 +5,10 @@
"_id": "PSW3BxCGmtLeWOxM",
"img": "icons/equipment/chest/robe-layered-purple.webp",
"system": {
"armor": {
"current": 0,
"max": 5
},
"description": "",
"actions": {
"Ch6IhuPewBeseGez": {

View file

@ -5,6 +5,10 @@
"_id": "OvzgUTYy2RCN85vV",
"img": "icons/equipment/chest/breastplate-collared-steel-green.webp",
"system": {
"armor": {
"current": 0,
"max": 6
},
"description": "",
"actions": {
"sY3W5JYspN5Du5ag": {

View file

@ -1,12 +0,0 @@
{
"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",
"_id": "7285CRGdZfHCEtT2",
"type": "base",
"system": {},
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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": "base",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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",
"_id": "pZCrWd7zLTarvEQK",
"type": "base",
"system": {},
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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": "base",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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

@ -33,7 +33,7 @@
"tier": 2,
"equipped": false,
"secondary": false,
"burden": "oneHanded",
"burden": "twoHanded",
"weaponFeatures": [
{
"value": "brutal",

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",
"_id": "vnR4Zhnb0rOqwrFw",
"type": "base",
"system": {},
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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",
"_id": "EixxJrRHyc6kj3Wg",
"type": "base",
"system": {},
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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": "base",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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",
"_id": "eV4lFIpQMiKERj4U",
"type": "base",
"system": {},
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"max": "1"
}
}
]
},
"_id": "mvUY9LGfwICak7cE",
"type": "base",
"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": "base",
"system": {
"changes": [
{
"type": "armor",
"phase": "initial",
"priority": 20,
"value": {
"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,