From 50dcbf4396631d35a942331a7ceaa8ffbcea66e6 Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Sat, 21 Mar 2026 08:53:12 -0400 Subject: [PATCH] [V14] Refactor ArmorChange schema and fix some bugs (#1742) * Refactor ArmorChange schema and fix some bugs * Add current back to schema * Fixed so changing armor values and taking damage works again * Fixed so that scrolltexts for armor changes work again * Removed old marks on armor.system * Restored damageReductionDialog armorScore.value * Use toggle for css class addition/removal * Fix armor change type choices * Added ArmorChange DamageThresholds --------- Co-authored-by: WBHarry --- lang/en.json | 2 +- .../dialogs/damageReductionDialog.mjs | 4 +- .../sheets-configs/activeEffectConfig.mjs | 55 +++++--- .../applications/sheets/actors/character.mjs | 27 ++-- module/applications/sheets/items/armor.mjs | 6 +- module/data/activeEffect/baseEffect.mjs | 75 ++++++++--- .../data/activeEffect/changeTypes/armor.mjs | 125 +++++++++++++----- module/data/actor/character.mjs | 24 ++-- module/data/item/armor.mjs | 3 - module/data/item/base.mjs | 8 -- module/documents/activeEffect.mjs | 9 +- .../domainCard_Armorer_cy8GjBPGc9w9RaGO.json | 7 +- ...omainCard_Bare_Bones_l5D9kq901JDESaXw.json | 64 +-------- ...mainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json | 5 +- ...inCard_Valor_Touched_k1AtYd3lSchIymBr.json | 5 +- ...nced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json | 5 +- ...ced_Full_Plate_Armor_crIbCb9NZ4K0VpoU.json | 5 +- ...anced_Gambeson_Armor_epkAmlZVk7HOfUUT.json | 5 +- ...vanced_Leather_Armor_itSOp2GCyem0f7oM.json | 5 +- ..._Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json | 5 +- ...rmor_Bladefare_Armor_mNN6pvcsS10ChrWF.json | 5 +- ...rmor_Chainmail_Armor_haULhuEg37zUUvhb.json | 5 +- ...mor_Channeling_Armor_vMJxEWz1srfwMsoj.json | 5 +- ...or_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json | 5 +- ...or_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json | 5 +- ...lundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json | 5 +- ...mor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json | 5 +- ...Full_Fortified_Armor_7emTSt6nhZuTlvt5.json | 5 +- ...mor_Full_Plate_Armor_UdUJNa31WxFW2noa.json | 5 +- ...armor_Gambeson_Armor_yJFp1bfpecDcStVK.json | 5 +- ...mor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json | 5 +- ...oved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json | 5 +- ...ved_Full_Plate_Armor_9f7RozpPTqrzJS1m.json | 5 +- ...roved_Gambeson_Armor_jphnMZjnS2FkOH3s.json | 5 +- ...proved_Leather_Armor_t91M61pSCMKStTNt.json | 5 +- ...ee_Breastplate_Armor_tzZntboNtHL5C6VM.json | 5 +- .../armor_Leather_Armor_nibfdNtp2PtxvbVz.json | 5 +- ...dary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json | 5 +- ...ary_Full_Plate_Armor_SXWjUR2aUR6bYvdl.json | 5 +- ...ndary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json | 5 +- ...endary_Leather_Armor_Tptgl5WOj76TyFn7.json | 5 +- ...armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json | 5 +- ...armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json | 5 +- ...nes_of_Fortification_P4qAEDJUoNLgVRsA.json | 5 +- ...netan_Floating_Armor_tHlBUDQC24YMZqd6.json | 5 +- ...mor_Savior_Chainmail_8X16lJQ3xltTwynm.json | 5 +- ...r_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json | 5 +- ...mor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json | 5 +- ...r_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json | 5 +- ...dvanced_Round_Shield_hiEOGF2reabGLUoi.json | 5 +- ...dvanced_Tower_Shield_OfOzQbs4hg6QbfTG.json | 5 +- ...mproved_Round_Shield_DlinEBGZfIlvreO3.json | 5 +- ...mproved_Tower_Shield_bxt3NsbMqTSdI5ab.json | 5 +- .../weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json | 5 +- ...gendary_Round_Shield_A28WL9E2lJ3iLZHW.json | 5 +- ...gendary_Tower_Shield_MaJIROht7A9LxIZx.json | 5 +- .../weapon_Round_Shield_mxwWKDujgsRcZWPT.json | 5 +- ...weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json | 5 +- .../weapon_Tower_Shield_C9aWpK1shVMWP4m5.json | 5 +- .../sheets/activeEffects/activeEffects.less | 45 ++++++- .../sheets/activeEffect/armor/details.hbs | 20 --- .../sheets/activeEffect/armor/footer.hbs | 3 - .../sheets/activeEffect/armor/settings.hbs | 17 --- templates/sheets/activeEffect/change.hbs | 4 +- templates/sheets/activeEffect/changes.hbs | 10 +- .../activeEffect/typeChanges/armorChange.hbs | 38 ++++-- templates/sheets/items/armor/header.hbs | 2 +- templates/ui/tooltip/armorManagement.hbs | 6 +- 68 files changed, 356 insertions(+), 428 deletions(-) delete mode 100644 templates/sheets/activeEffect/armor/details.hbs delete mode 100644 templates/sheets/activeEffect/armor/footer.hbs delete mode 100644 templates/sheets/activeEffect/armor/settings.hbs diff --git a/lang/en.json b/lang/en.json index f7d49a04..5fc2cef9 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1891,7 +1891,7 @@ "armor": { "newArmorEffect": "Armor Effect", "FIELDS": { - "armorInteraction": { + "interaction": { "label": "Armor Interaction", "hint": "Does the character wearing armor suppress this effect?" } diff --git a/module/applications/dialogs/damageReductionDialog.mjs b/module/applications/dialogs/damageReductionDialog.mjs index 5e858e4b..50225528 100644 --- a/module/applications/dialogs/damageReductionDialog.mjs +++ b/module/applications/dialogs/damageReductionDialog.mjs @@ -27,11 +27,11 @@ export default class DamageReductionDialog extends HandlebarsApplicationMixin(Ap true ); const armor = orderedArmorEffects.reduce((acc, effect) => { - const { value, max } = effect.system.armorData; + const { current, max } = effect.system.armorData; acc.push({ effect: effect, marks: [...Array(max).keys()].reduce((acc, _, index) => { - const spent = index < value; + const spent = index < current; acc[foundry.utils.randomID()] = { selected: false, disabled: spent, spent }; return acc; }, {}) diff --git a/module/applications/sheets-configs/activeEffectConfig.mjs b/module/applications/sheets-configs/activeEffectConfig.mjs index e4a18831..9f970e1d 100644 --- a/module/applications/sheets-configs/activeEffectConfig.mjs +++ b/module/applications/sheets-configs/activeEffectConfig.mjs @@ -154,6 +154,10 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac htmlElement .querySelector('.armor-change-checkbox') ?.addEventListener('change', this.armorChangeToggle.bind(this)); + + htmlElement + .querySelector('.armor-damage-thresholds-checkbox') + ?.addEventListener('change', this.armorDamageThresholdToggle.bind(this)); } async _prepareContext(options) { @@ -190,23 +194,14 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac })); break; case 'changes': - const fields = this.document.system.schema.fields.changes.element.fields; - const singleTypes = ['armor']; - const { base, ...typedChanges } = context.source.changes.reduce((acc, change, index) => { - const type = CONFIG.DH.GENERAL.baseActiveEffectModes[change.type] ? 'base' : change.type; - if (singleTypes.includes(type)) { - acc[type] = { ...change, index }; - } else { - if (!acc[type]) acc[type] = []; - acc[type].push({ ...change, index }); + const typedChanges = context.source.changes.reduce((acc, change, index) => { + if (singleTypes.includes(change.type)) { + acc[change.type] = { ...change, index }; } - return acc; }, {}); - partContext.changes = await Promise.all( - foundry.utils.deepClone(base ?? []).map(c => this._prepareChangeContext(c, fields)) - ); + partContext.changes = partContext.changes.filter(c => !!c); partContext.typedChanges = typedChanges; break; } @@ -238,29 +233,51 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac return this.submit({ updateData: { system: { changes } } }); } - _prepareChangeContext(change, fields) { + armorDamageThresholdToggle(event) { + const submitData = this._processFormData(null, this.form, new FormDataExtended(this.form)); + const changes = Object.values(submitData.system?.changes ?? {}); + const index = Number(event.target.dataset.index); + if (event.target.checked) { + changes[index].value.damageThresholds = { major: 0, severe: 0 }; + } else { + changes[index].value.damageThresholds = null; + } + + return this.submit({ updateData: { system: { changes } } }); + } + + /** @inheritdoc */ + _renderChange(context) { + const { change, index, defaultPriority } = context; + if (!(change.type in CONFIG.DH.GENERAL.baseActiveEffectModes)) return null; + + const changeTypesSchema = this.document.system.schema.fields.changes.element.types; + const fields = context.fields ?? (changeTypesSchema[change.type] ?? changeTypesSchema.add).fields; if (typeof change.value !== 'string') change.value = JSON.stringify(change.value); - const defaultPriority = game.system.api.documents.DhActiveEffect.CHANGE_TYPES[change.type]?.defaultPriority; Object.assign( change, ['key', 'type', 'value', 'priority'].reduce((paths, fieldName) => { - paths[`${fieldName}Path`] = `system.changes.${change.index}.${fieldName}`; + paths[`${fieldName}Path`] = `system.changes.${index}.${fieldName}`; return paths; }, {}) ); return ( game.system.api.documents.DhActiveEffect.CHANGE_TYPES[change.type].render?.( change, - change.index, + index, defaultPriority ) ?? foundry.applications.handlebars.renderTemplate( 'systems/daggerheart/templates/sheets/activeEffect/change.hbs', { change, - index: change.index, + index, defaultPriority, - fields + fields, + types: Object.keys(CONFIG.DH.GENERAL.baseActiveEffectModes).reduce((r, key) => { + r[key] = CONFIG.DH.GENERAL.baseActiveEffectModes[key].label; + return r; + }, {}) } ) ); diff --git a/module/applications/sheets/actors/character.mjs b/module/applications/sheets/actors/character.mjs index bddbca62..bfcc13a2 100644 --- a/module/applications/sheets/actors/character.mjs +++ b/module/applications/sheets/actors/character.mjs @@ -1003,16 +1003,16 @@ export default class CharacterSheet extends DHBaseActorSheet { const effect = await foundry.utils.fromUuid(event.target.dataset.uuid); const armorChange = effect.system.armorChange; if (!armorChange) return; - const value = Math.max(Math.min(Number.parseInt(event.target.value), effect.system.armorData.max), 0); + const current = Math.max(Math.min(Number.parseInt(event.target.value), effect.system.armorData.max), 0); const newChanges = effect.system.changes.map(change => ({ ...change, - value: change.type === 'armor' ? value : change.value + value: change.type === 'armor' ? { ...change.value, current } : change.value })); - event.target.value = value; + event.target.value = current; const progressBar = event.target.closest('.status-bar.armor-slots').querySelector('progress'); - progressBar.value = value; + progressBar.value = current; await effect.update({ 'system.changes': newChanges }); } @@ -1023,27 +1023,22 @@ export default class CharacterSheet extends DHBaseActorSheet { const armorChange = effect.system.armorChange; if (!armorChange) return; - const { value } = effect.system.armorData; + const { current } = effect.system.armorData; const inputValue = Number.parseInt(target.dataset.value); - const decreasing = value >= inputValue; - const newValue = decreasing ? inputValue - 1 : inputValue; + const decreasing = current >= inputValue; + const newCurrent = decreasing ? inputValue - 1 : inputValue; const newChanges = effect.system.changes.map(change => ({ ...change, - value: change.type === 'armor' ? newValue : change.value + value: change.type === 'armor' ? { ...change.value, current: newCurrent } : change.value })); const container = target.closest('.slot-bar'); for (const armorSlot of container.querySelectorAll('.armor-slot i')) { - const index = Number.parseInt(armorSlot.dataset.index); - if (decreasing && index >= newValue) { - armorSlot.classList.remove('fa-shield'); - armorSlot.classList.add('fa-shield-halved'); - } else if (!decreasing && index < newValue) { - armorSlot.classList.add('fa-shield'); - armorSlot.classList.remove('fa-shield-halved'); - } + const marked = !decreasing && Number.parseInt(armorSlot.dataset.index) < newCurrent; + armorSlot.classList.toggle('fa-shield', marked); + armorSlot.classList.toggle('fa-shield-halved', !marked); } await effect.update({ 'system.changes': newChanges }); diff --git a/module/applications/sheets/items/armor.mjs b/module/applications/sheets/items/armor.mjs index 93325405..46d03ede 100644 --- a/module/applications/sheets/items/armor.mjs +++ b/module/applications/sheets/items/armor.mjs @@ -51,8 +51,8 @@ export default class ArmorSheet extends ItemAttachmentSheet(DHBaseItemSheet) { context.armorScore = this.document.system.armorData.max; break; case 'effects': - context.effects.actives = context.effects.actives.filter(x => x.type !== 'armor'); - context.effects.inactives = context.effects.actives.filter(x => x.type !== 'armor'); + context.effects.actives = context.effects.actives.filter(x => !x.system.armorData); + context.effects.inactives = context.effects.inactives.filter(x => !x.system.armorData); break; } @@ -64,7 +64,7 @@ export default class ArmorSheet extends ItemAttachmentSheet(DHBaseItemSheet) { const armorEffect = this.document.system.armorEffect; if (Number.isNaN(value) || !armorEffect) return; - await armorEffect.system.armorChange.typeData.updateArmorMax(value); + await armorEffect.system.armorChange.updateArmorMax(value); this.render(); } diff --git a/module/data/activeEffect/baseEffect.mjs b/module/data/activeEffect/baseEffect.mjs index fc87b353..81ddb4ad 100644 --- a/module/data/activeEffect/baseEffect.mjs +++ b/module/data/activeEffect/baseEffect.mjs @@ -12,29 +12,41 @@ * "Anything that uses another data model value as its value": +1 - Effects that increase traits have to be calculated first at Base priority. (EX: Raise evasion by half your agility) */ +import { getScrollTextData } from '../../helpers/utils.mjs'; import { changeTypes } from './_module.mjs'; export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { static defineSchema() { const fields = foundry.data.fields; + const baseChanges = Object.keys(CONFIG.DH.GENERAL.baseActiveEffectModes).reduce((r, type) => { + r[type] = new fields.SchemaField({ + key: new fields.StringField({ required: true }), + type: new fields.StringField({ + required: true, + choices: [type], + initial: type, + validate: BaseEffect.#validateType + }), + value: new fields.AnyField({ + required: true, + nullable: true, + serializable: true, + initial: '' + }), + phase: new fields.StringField({ required: true, blank: false, initial: 'initial' }), + priority: new fields.NumberField() + }); + return r; + }, {}); + return { ...super.defineSchema(), changes: new fields.ArrayField( - new fields.SchemaField({ - key: new fields.StringField({ required: true }), - type: new fields.StringField({ - required: true, - blank: false, - choices: CONFIG.DH.GENERAL.activeEffectModes, - initial: CONFIG.DH.GENERAL.activeEffectModes.add.id, - validate: BaseEffect.#validateType - }), - value: new fields.AnyField({ required: true, nullable: true, serializable: true, initial: '' }), - phase: new fields.StringField({ required: true, blank: false, initial: 'initial' }), - priority: new fields.NumberField(), - typeData: new fields.TypedSchemaField(changeTypes, { nullable: true, initial: null }) - }) + new fields.TypedSchemaField( + { ...changeTypes, ...baseChanges }, + { initial: baseChanges.add.getInitialValue() } + ) ), duration: new fields.SchemaField({ type: new fields.StringField({ @@ -89,6 +101,12 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { return true; } + get isSuppressed() { + for (const change of this.changes) { + if (change.isSuppressed) return true; + } + } + get armorChange() { return this.changes.find(x => x.type === CONFIG.DH.GENERAL.activeEffectModes.armor.id); } @@ -97,7 +115,7 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { const armorChange = this.armorChange; if (!armorChange) return null; - return armorChange.typeData.getArmorData(armorChange); + return armorChange.getArmorData(); } static getDefaultObject() { @@ -119,4 +137,31 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { } }; } + + async _preUpdate(changed, options, userId) { + const allowed = await super._preUpdate(changed, options, userId); + if (allowed === false) return false; + + const autoSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation); + if ( + autoSettings.resourceScrollTexts && + this.parent.actor?.type === 'character' && + this.parent.actor.system.resources.armor + ) { + const newArmorTotal = (changed.system?.changes ?? []).reduce((acc, change) => { + if (change.type === 'armor') acc += change.value.current; + return acc; + }, 0); + + const armorData = getScrollTextData(this.parent.actor, { value: newArmorTotal }, 'armor'); + options.scrollingTextData = [armorData]; + } + } + + _onUpdate(changed, options, userId) { + super._onUpdate(changed, options, userId); + + if (this.parent.actor && options.scrollingTextData) + this.parent.actor.queueScrollText(options.scrollingTextData); + } } diff --git a/module/data/activeEffect/changeTypes/armor.mjs b/module/data/activeEffect/changeTypes/armor.mjs index 5f6047fd..f400d41b 100644 --- a/module/data/activeEffect/changeTypes/armor.mjs +++ b/module/data/activeEffect/changeTypes/armor.mjs @@ -2,39 +2,56 @@ import { itemAbleRollParse } from '../../../helpers/utils.mjs'; const fields = foundry.data.fields; -export default class Armor extends foundry.abstract.DataModel { +export default class ArmorChange extends foundry.abstract.DataModel { static defineSchema() { return { - type: new fields.StringField({ required: true, initial: 'armor', blank: false }), - max: new fields.StringField({ - required: true, - nullable: false, - initial: '1', - label: 'DAGGERHEART.GENERAL.max' - }), - armorInteraction: new fields.StringField({ - required: true, - choices: CONFIG.DH.GENERAL.activeEffectArmorInteraction, - initial: CONFIG.DH.GENERAL.activeEffectArmorInteraction.none.id, - label: 'DAGGERHEART.EFFECTS.ChangeTypes.armor.FIELDS.armorInteraction.label', - hint: 'DAGGERHEART.EFFECTS.ChangeTypes.armor.FIELDS.armorInteraction.hint' + type: new fields.StringField({ required: true, choices: ['armor'], initial: 'armor' }), + priority: new fields.NumberField(), + phase: new fields.StringField({ required: true, blank: false, initial: 'initial' }), + value: new fields.SchemaField({ + current: new fields.NumberField({ integer: true, min: 0, initial: 0 }), + max: new fields.StringField({ + required: true, + nullable: false, + initial: '1', + label: 'DAGGERHEART.GENERAL.max' + }), + damageThresholds: new fields.SchemaField( + { + major: new fields.StringField({ + initial: '0', + label: 'DAGGERHEART.GENERAL.DamageThresholds.majorThreshold' + }), + severe: new fields.StringField({ + initial: '0', + label: 'DAGGERHEART.GENERAL.DamageThresholds.severeThreshold' + }) + }, + { nullable: true, initial: null } + ), + interaction: new fields.StringField({ + required: true, + choices: CONFIG.DH.GENERAL.activeEffectArmorInteraction, + initial: CONFIG.DH.GENERAL.activeEffectArmorInteraction.none.id, + label: 'DAGGERHEART.EFFECTS.ChangeTypes.armor.FIELDS.interaction.label', + hint: 'DAGGERHEART.EFFECTS.ChangeTypes.armor.FIELDS.interaction.hint' + }) }) }; } static changeEffect = { label: 'Armor', - defaultPriortiy: 20, + defaultPriority: 20, handler: (actor, change, _options, _field, replacementData) => { - const parsedMax = itemAbleRollParse(change.typeData.max, actor, change.effect.parent); - + const parsedMax = itemAbleRollParse(change.value.max, actor, change.effect.parent); game.system.api.documents.DhActiveEffect.applyChange( actor, { ...change, key: 'system.armorScore.value', type: CONFIG.DH.GENERAL.activeEffectModes.add.id, - value: change.value + value: change.value.current }, replacementData ); @@ -48,13 +65,52 @@ export default class Armor extends foundry.abstract.DataModel { }, replacementData ); + + if (change.value.damageThresholds) { + const getThresholdValue = value => { + const parsed = itemAbleRollParse(value, actor, change.effect.parent); + const roll = new Roll(parsed).evaluateSync(); + return roll ? (roll.isDeterministic ? roll.total : null) : null; + }; + const major = getThresholdValue(change.value.damageThresholds.major); + const severe = getThresholdValue(change.value.damageThresholds.severe); + + if (major) { + game.system.api.documents.DhActiveEffect.applyChange( + actor, + { + ...change, + key: 'system.damageThresholds.major', + type: CONFIG.DH.GENERAL.activeEffectModes.override.id, + priority: 50, + value: major + }, + replacementData + ); + } + + if (severe) { + game.system.api.documents.DhActiveEffect.applyChange( + actor, + { + ...change, + key: 'system.damageThresholds.severe', + type: CONFIG.DH.GENERAL.activeEffectModes.override.id, + priority: 50, + value: severe + }, + replacementData + ); + } + } + return {}; }, render: null }; get isSuppressed() { - switch (this.armorInteraction) { + switch (this.value.interaction) { case CONFIG.DH.GENERAL.activeEffectArmorInteraction.active.id: return !this.parent.parent?.actor.system.armor; case CONFIG.DH.GENERAL.activeEffectArmorInteraction.inactive.id: @@ -64,15 +120,12 @@ export default class Armor extends foundry.abstract.DataModel { } } - static getInitialValue(locked) { + static getInitialValue() { return { - key: 'Armor', type: CONFIG.DH.GENERAL.activeEffectModes.armor.id, - value: 0, - typeData: { - type: 'armor', - max: 0, - locked + value: { + current: 0, + max: 0 }, phase: 'initial', priority: 20 @@ -84,22 +137,22 @@ export default class Armor extends foundry.abstract.DataModel { name: game.i18n.localize('DAGGERHEART.EFFECTS.ChangeTypes.armor.newArmorEffect'), img: 'icons/equipment/chest/breastplate-helmet-metal.webp', system: { - changes: [Armor.getInitialValue(true)] + changes: [ArmorChange.getInitialValue()] } }; } /* Helpers */ - getArmorData(parentChange) { + getArmorData() { const actor = this.parent.parent?.actor?.type === 'character' ? this.parent.parent.actor : null; - const maxParse = actor ? itemAbleRollParse(this.max, actor, this.parent.parent.parent) : null; + const maxParse = actor ? itemAbleRollParse(this.value.max, actor, this.parent.parent.parent) : null; const maxRoll = maxParse ? new Roll(maxParse).evaluateSync() : null; const maxEvaluated = maxRoll ? (maxRoll.isDeterministic ? maxRoll.total : null) : null; return { - value: parentChange.value, - max: maxEvaluated ?? this.max + current: this.value.current, + max: maxEvaluated ?? this.value.max }; } @@ -107,8 +160,14 @@ export default class Armor extends foundry.abstract.DataModel { const newChanges = [ ...this.parent.changes.map(change => ({ ...change, - value: change.type === 'armor' ? Math.min(change.value, newMax) : change.value, - typeData: change.type === 'armor' ? { ...change.typeData, max: newMax } : change.typeData + value: + change.type === 'armor' + ? { + ...change.value, + current: Math.min(change.value.current, newMax), + max: newMax + } + : change.value })) ]; await this.parent.parent.update({ 'system.changes': newChanges }); diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index e69c4dc1..b8846a75 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -42,15 +42,15 @@ export default class DhCharacter extends DhCreature { }), evasion: new fields.NumberField({ initial: 0, integer: true, label: 'DAGGERHEART.GENERAL.evasion' }), damageThresholds: new fields.SchemaField({ - severe: new fields.NumberField({ - integer: true, - initial: 0, - label: 'DAGGERHEART.GENERAL.DamageThresholds.severeThreshold' - }), major: new fields.NumberField({ integer: true, initial: 0, label: 'DAGGERHEART.GENERAL.DamageThresholds.majorThreshold' + }), + severe: new fields.NumberField({ + integer: true, + initial: 0, + label: 'DAGGERHEART.GENERAL.DamageThresholds.severeThreshold' }) }), experiences: new fields.TypedObjectField( @@ -479,14 +479,14 @@ export default class DhCharacter extends DhCreature { for (const armorEffect of orderedEffects) { let usedArmorChange = 0; if (clear) { - usedArmorChange -= armorEffect.system.armorChange.value; + usedArmorChange -= armorEffect.system.armorChange.value.current; } else { if (increasing) { - const remainingArmor = armorEffect.system.armorData.max - armorEffect.system.armorData.value; + const remainingArmor = armorEffect.system.armorData.max - armorEffect.system.armorData.current; usedArmorChange = Math.min(remainingChange, remainingArmor); remainingChange -= usedArmorChange; } else { - const changeChange = Math.min(armorEffect.system.armorData.value, remainingChange); + const changeChange = Math.min(armorEffect.system.armorData.current, remainingChange); usedArmorChange -= changeChange; remainingChange -= changeChange; } @@ -503,7 +503,10 @@ export default class DhCharacter extends DhCreature { ...change, value: change.type === 'armor' - ? armorEffect.system.armorChange.value + usedArmorChange + ? { + ...change.value, + current: armorEffect.system.armorChange.value.current + usedArmorChange + } : change.value })) }); @@ -519,11 +522,12 @@ export default class DhCharacter extends DhCreature { async updateArmorEffectValue({ uuid, value }) { const effect = await foundry.utils.fromUuid(uuid); + const effectValue = effect.system.armorChange.value; await effect.update({ 'system.changes': [ { ...effect.system.armorChange, - value: effect.system.armorChange.value + value + value: { ...effectValue, current: effectValue.current + value } } ] }); diff --git a/module/data/item/armor.mjs b/module/data/item/armor.mjs index ba70e4b9..18d20e2e 100644 --- a/module/data/item/armor.mjs +++ b/module/data/item/armor.mjs @@ -28,9 +28,6 @@ export default class DHArmor extends AttachableItem { actionIds: new fields.ArrayField(new fields.StringField({ required: true })) }) ), - marks: new fields.SchemaField({ - value: new fields.NumberField({ initial: 0, integer: true }) - }), baseThresholds: new fields.SchemaField({ major: new fields.NumberField({ integer: true, initial: 0 }), severe: new fields.NumberField({ integer: true, initial: 0 }) diff --git a/module/data/item/base.mjs b/module/data/item/base.mjs index 5a16927a..25986afe 100644 --- a/module/data/item/base.mjs +++ b/module/data/item/base.mjs @@ -220,14 +220,6 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel { addLinkedItemsDiff(changed.system?.features, this.features, options); - const autoSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation); - const armorChanged = - changed.system?.marks?.value !== undefined && changed.system.marks.value !== this.marks.value; - if (armorChanged && autoSettings.resourceScrollTexts && this.parent.parent?.type === 'character') { - const armorData = getScrollTextData(this.parent.parent, changed.system.marks, 'armor'); - options.scrollingTextData = [armorData]; - } - if (changed.system?.actions) { const triggersToRemove = Object.keys(changed.system.actions).reduce((acc, key) => { const action = changed.system.actions[key]; diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs index 043d7f33..07c68518 100644 --- a/module/documents/activeEffect.mjs +++ b/module/documents/activeEffect.mjs @@ -1,5 +1,5 @@ import { itemAbleRollParse } from '../helpers/utils.mjs'; -import { RefreshType, socketEvent } from '../systemRegistration/socket.mjs'; +import { RefreshType } from '../systemRegistration/socket.mjs'; export default class DhActiveEffect extends foundry.documents.ActiveEffect { /* -------------------------------------------- */ @@ -155,11 +155,6 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { /* Methods */ /* -------------------------------------------- */ - /**@inheritdoc */ - static applyChange(actor, change, options) { - super.applyChange(actor, change, options); - } - /**@inheritdoc*/ static applyChangeField(model, change, field) { change.value = Number.isNumeric(change.value) @@ -168,7 +163,7 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect { super.applyChangeField(model, change, field); } - _applyChangeUnguided(actor, change, changes, options) { + static _applyChangeUnguided(actor, change, changes, options) { change.value = DhActiveEffect.getChangeValue(actor, change, change.effect); super._applyChangeUnguided(actor, change, changes, options); } diff --git a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json index e328325d..cad6012e 100644 --- a/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json +++ b/src/packs/domains/domainCard_Armorer_cy8GjBPGc9w9RaGO.json @@ -94,15 +94,12 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "1", - "armorInteraction": "active" + "interaction": "active" } } ] diff --git a/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json b/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json index 69d1a2b2..098f5f4c 100644 --- a/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json +++ b/src/packs/domains/domainCard_Bare_Bones_l5D9kq901JDESaXw.json @@ -21,20 +21,21 @@ "flags": {}, "effects": [ { - "name": "Bare Bones Armor", + "name": "Bare Bones", "type": "base", "system": { "changes": [ { - "value": 0, - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "typeData": { - "type": "armor", + "value": { "max": "3 + @system.traits.strength.value", - "armorInteraction": "inactive" + "interaction": "inactive", + "damageThresholds": { + "major": "9 + (@tier - 1) * 5 + max(0, (@tier -2) * 2 )", + "severe": "19 + (@tier - 1) * 5 + max(0, (@tier -2) * 2 )" + } } } ] @@ -62,57 +63,6 @@ "compendiumSource": null }, "_key": "!items.effects!l5D9kq901JDESaXw.FCsgz7Tdsw6QUzBs" - }, - { - "name": "Bare Bones", - "type": "base", - "system": { - "changes": [ - { - "key": "system.damageThresholds.major", - "type": "add", - "value": "9 + (@tier - 1) * 5 + max(0, (@tier -2) * 2 )", - "priority": null, - "phase": "initial" - }, - { - "key": "system.damageThresholds.severe", - "type": "add", - "value": "19 + (@tier - 1) * 5 + max(0, (@tier -2) * 2 )", - "priority": null, - "phase": "initial" - } - ], - "rangeDependence": { - "enabled": false, - "type": "withinRange", - "target": "hostile", - "range": "melee" - } - }, - "_id": "8flPpWNoBeuFPFTK", - "img": "icons/magic/control/buff-strength-muscle-damage-orange.webp", - "disabled": false, - "start": null, - "duration": { - "value": null, - "units": "seconds", - "expiry": null, - "expired": false - }, - "description": "

You use the following as your base damage thresholds:

", - "origin": null, - "tint": "#ffffff", - "transfer": true, - "statuses": [], - "showIcon": 1, - "folder": null, - "sort": 0, - "flags": {}, - "_stats": { - "compendiumSource": null - }, - "_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 7852356b..fa247c89 100644 --- a/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json +++ b/src/packs/domains/domainCard_Book_of_Ava_YtZzYBtR0yLPPA93.json @@ -263,13 +263,10 @@ }, "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "1" } } diff --git a/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json b/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json index 870ff246..61c7ace8 100644 --- a/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json +++ b/src/packs/domains/domainCard_Valor_Touched_k1AtYd3lSchIymBr.json @@ -95,13 +95,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "1" } } 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 1be3d76b..1a06285b 100644 --- a/src/packs/items/armors/armor_Advanced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json +++ b/src/packs/items/armors/armor_Advanced_Chainmail_Armor_LzLOJ9EVaHWAjoq9.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 60cc3da9..93b9d5b2 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,13 +76,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 c8bf64d5..be6c5070 100644 --- a/src/packs/items/armors/armor_Advanced_Gambeson_Armor_epkAmlZVk7HOfUUT.json +++ b/src/packs/items/armors/armor_Advanced_Gambeson_Armor_epkAmlZVk7HOfUUT.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 6597bea0..ca5fd9f1 100644 --- a/src/packs/items/armors/armor_Advanced_Leather_Armor_itSOp2GCyem0f7oM.json +++ b/src/packs/items/armors/armor_Advanced_Leather_Armor_itSOp2GCyem0f7oM.json @@ -33,13 +33,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 a5ac42ba..2844e96c 100644 --- a/src/packs/items/armors/armor_Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json +++ b/src/packs/items/armors/armor_Bellamoi_Fine_Armor_WuoVwZA53XRAIt6d.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } diff --git a/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json b/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json index 12f9441c..d51ec961 100644 --- a/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json +++ b/src/packs/items/armors/armor_Bladefare_Armor_mNN6pvcsS10ChrWF.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } diff --git a/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json b/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json index e1e8be0a..07b9150a 100644 --- a/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json +++ b/src/packs/items/armors/armor_Chainmail_Armor_haULhuEg37zUUvhb.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } diff --git a/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json b/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json index e4a50d08..c4b2da7b 100644 --- a/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json +++ b/src/packs/items/armors/armor_Channeling_Armor_vMJxEWz1srfwMsoj.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } diff --git a/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json b/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json index d7a9e182..8d660958 100644 --- a/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json +++ b/src/packs/items/armors/armor_Dragonscale_Armor_mdQ69eFHyAQUDmE7.json @@ -70,13 +70,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } diff --git a/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json b/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json index 91a58fcf..5f7137c5 100644 --- a/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json +++ b/src/packs/items/armors/armor_Dunamis_Silkchain_hAY6UgdGT7dj22Pr.json @@ -96,13 +96,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "7" } } 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 c217a626..da664058 100644 --- a/src/packs/items/armors/armor_Elundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json +++ b/src/packs/items/armors/armor_Elundrian_Chain_Armor_Q6LxmtFetDDkoZVZ.json @@ -72,13 +72,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } diff --git a/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json b/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json index dfdefdcb..ea9c1d02 100644 --- a/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json +++ b/src/packs/items/armors/armor_Emberwoven_Armor_bcQUh4QG3qFX0Vx6.json @@ -94,13 +94,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 4a3bcdc9..7d96f091 100644 --- a/src/packs/items/armors/armor_Full_Fortified_Armor_7emTSt6nhZuTlvt5.json +++ b/src/packs/items/armors/armor_Full_Fortified_Armor_7emTSt6nhZuTlvt5.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } 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 4427c082..95b015cf 100644 --- a/src/packs/items/armors/armor_Full_Plate_Armor_UdUJNa31WxFW2noa.json +++ b/src/packs/items/armors/armor_Full_Plate_Armor_UdUJNa31WxFW2noa.json @@ -76,13 +76,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } diff --git a/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json b/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json index a0bdf8d6..03ed23d8 100644 --- a/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json +++ b/src/packs/items/armors/armor_Gambeson_Armor_yJFp1bfpecDcStVK.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "3" } } diff --git a/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json b/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json index 2bfc3ff6..7f024816 100644 --- a/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json +++ b/src/packs/items/armors/armor_Harrowbone_Armor_dvyQeUVRLc9y6rnt.json @@ -87,13 +87,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } 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 79c52596..26422d2c 100644 --- a/src/packs/items/armors/armor_Improved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json +++ b/src/packs/items/armors/armor_Improved_Chainmail_Armor_K5WkjS0NGqHYmhU3.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 bbbd6183..6627bc15 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,13 +76,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 6c32e3ca..b1ea88ff 100644 --- a/src/packs/items/armors/armor_Improved_Gambeson_Armor_jphnMZjnS2FkOH3s.json +++ b/src/packs/items/armors/armor_Improved_Gambeson_Armor_jphnMZjnS2FkOH3s.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } 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 26092645..5d7f9b93 100644 --- a/src/packs/items/armors/armor_Improved_Leather_Armor_t91M61pSCMKStTNt.json +++ b/src/packs/items/armors/armor_Improved_Leather_Armor_t91M61pSCMKStTNt.json @@ -33,13 +33,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } 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 756fccdc..5c87565f 100644 --- a/src/packs/items/armors/armor_Irontree_Breastplate_Armor_tzZntboNtHL5C6VM.json +++ b/src/packs/items/armors/armor_Irontree_Breastplate_Armor_tzZntboNtHL5C6VM.json @@ -83,13 +83,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } diff --git a/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json b/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json index 601cf23c..b6c9cb8b 100644 --- a/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json +++ b/src/packs/items/armors/armor_Leather_Armor_nibfdNtp2PtxvbVz.json @@ -33,13 +33,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "3" } } 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 867c2420..0e97ae17 100644 --- a/src/packs/items/armors/armor_Legendary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json +++ b/src/packs/items/armors/armor_Legendary_Chainmail_Armor_EsIN5OLKe9ZYFNXZ.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "7" } } 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 2fb8c064..e9da0a8d 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,13 +76,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "7" } } 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 8ab2894d..5d82c736 100644 --- a/src/packs/items/armors/armor_Legendary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json +++ b/src/packs/items/armors/armor_Legendary_Gambeson_Armor_c6tMXz4rPf9ioQrf.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 44c29bfb..c0890465 100644 --- a/src/packs/items/armors/armor_Legendary_Leather_Armor_Tptgl5WOj76TyFn7.json +++ b/src/packs/items/armors/armor_Legendary_Leather_Armor_Tptgl5WOj76TyFn7.json @@ -33,13 +33,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 db0c20d1..7ad68c23 100644 --- a/src/packs/items/armors/armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json +++ b/src/packs/items/armors/armor_Monett_s_Cloak_AQzU2RsqS5V5bd1v.json @@ -71,13 +71,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } diff --git a/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json b/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json index 55cc6eb8..5c853e44 100644 --- a/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json +++ b/src/packs/items/armors/armor_Rosewild_Armor_tN8kAeBvNKM3EBFo.json @@ -63,13 +63,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 2ca27f45..e3b813fb 100644 --- a/src/packs/items/armors/armor_Runes_of_Fortification_P4qAEDJUoNLgVRsA.json +++ b/src/packs/items/armors/armor_Runes_of_Fortification_P4qAEDJUoNLgVRsA.json @@ -70,13 +70,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 54f6322e..c6a1c055 100644 --- a/src/packs/items/armors/armor_Runetan_Floating_Armor_tHlBUDQC24YMZqd6.json +++ b/src/packs/items/armors/armor_Runetan_Floating_Armor_tHlBUDQC24YMZqd6.json @@ -70,13 +70,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "4" } } diff --git a/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json b/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json index f40df5c7..3505176b 100644 --- a/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json +++ b/src/packs/items/armors/armor_Savior_Chainmail_8X16lJQ3xltTwynm.json @@ -101,13 +101,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "8" } } 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 8f15ae28..68b26346 100644 --- a/src/packs/items/armors/armor_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json +++ b/src/packs/items/armors/armor_Spiked_Plate_Armor_QjwsIhXKqnlvRBMv.json @@ -76,13 +76,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 eb89421d..5114b1e2 100644 --- a/src/packs/items/armors/armor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json +++ b/src/packs/items/armors/armor_Tyris_Soft_Armor_PSW3BxCGmtLeWOxM.json @@ -63,13 +63,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "5" } } 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 6e5f24bc..2388e647 100644 --- a/src/packs/items/armors/armor_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json +++ b/src/packs/items/armors/armor_Veritas_Opal_Armor_OvzgUTYy2RCN85vV.json @@ -63,13 +63,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "6" } } 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 85321808..54800642 100644 --- a/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json +++ b/src/packs/items/weapons/weapon_Advanced_Round_Shield_hiEOGF2reabGLUoi.json @@ -118,13 +118,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier" } } 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 568e7ebc..a88749a8 100644 --- a/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json +++ b/src/packs/items/weapons/weapon_Advanced_Tower_Shield_OfOzQbs4hg6QbfTG.json @@ -156,13 +156,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier + 1" } } 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 322682d9..65868950 100644 --- a/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json +++ b/src/packs/items/weapons/weapon_Improved_Round_Shield_DlinEBGZfIlvreO3.json @@ -118,13 +118,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier" } } 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 70647216..64555dfa 100644 --- a/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json +++ b/src/packs/items/weapons/weapon_Improved_Tower_Shield_bxt3NsbMqTSdI5ab.json @@ -156,13 +156,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier + 1" } } diff --git a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json index 1adda37c..11994d3e 100644 --- a/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json +++ b/src/packs/items/weapons/weapon_Labrys_Axe_ijWppQzSOqVCb3rE.json @@ -118,13 +118,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier" } } 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 7e0d5374..85134d21 100644 --- a/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json +++ b/src/packs/items/weapons/weapon_Legendary_Round_Shield_A28WL9E2lJ3iLZHW.json @@ -118,13 +118,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier" } } 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 945678e5..772e9ca9 100644 --- a/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json +++ b/src/packs/items/weapons/weapon_Legendary_Tower_Shield_MaJIROht7A9LxIZx.json @@ -156,13 +156,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier + 1" } } diff --git a/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json b/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json index 987892b2..55e92f01 100644 --- a/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json +++ b/src/packs/items/weapons/weapon_Round_Shield_mxwWKDujgsRcZWPT.json @@ -118,13 +118,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier" } } diff --git a/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json b/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json index fed95455..39c18b08 100644 --- a/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json +++ b/src/packs/items/weapons/weapon_Spiked_Shield_vzyzFwLUniWZV1rt.json @@ -160,13 +160,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "1" } } diff --git a/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json b/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json index 5cf27983..e584b63c 100644 --- a/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json +++ b/src/packs/items/weapons/weapon_Tower_Shield_C9aWpK1shVMWP4m5.json @@ -156,13 +156,10 @@ "system": { "changes": [ { - "key": "Armor", "type": "armor", "phase": "initial", "priority": 20, - "value": 0, - "typeData": { - "type": "armor", + "value": { "max": "ITEM.@system.tier + 1" } } diff --git a/styles/less/sheets/activeEffects/activeEffects.less b/styles/less/sheets/activeEffects/activeEffects.less index 077369cf..3f6526cb 100644 --- a/styles/less/sheets/activeEffects/activeEffects.less +++ b/styles/less/sheets/activeEffects/activeEffects.less @@ -50,7 +50,50 @@ header, ol { - grid-template-columns: 6rem 6rem 12rem 4rem; + grid-template-columns: 5rem 7rem 12rem 4rem; + } + + .damage-thresholds-container { + width: 100%; + display: flex; + flex-direction: column; + gap: 4px; + + .damage-threshold-title { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + + &::before, + &::after { + content: ''; + flex: 1; + height: 2px; + } + + &::before { + background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, light-dark(@dark-blue, @golden) 100%); + } + + &::after { + background: linear-gradient(90deg, light-dark(@dark-blue, @golden) 0%, rgba(0, 0, 0, 0) 100%); + } + + span { + font-size: var(--font-size-18); + } + } + + .form-group { + flex-direction: column; + gap: 0; + + label { + color: inherit; + line-height: 16px; + } + } } } } diff --git a/templates/sheets/activeEffect/armor/details.hbs b/templates/sheets/activeEffect/armor/details.hbs deleted file mode 100644 index 2b16560e..00000000 --- a/templates/sheets/activeEffect/armor/details.hbs +++ /dev/null @@ -1,20 +0,0 @@ -
- {{formGroup fields.tint value=source.tint rootId=rootId placeholder="#ffffff"}} - {{formGroup fields.description value=source.description rootId=rootId}} - {{formGroup fields.disabled value=source.disabled rootId=rootId}} - - {{#if isActorEffect}} -
- -
- -
-
- {{/if}} - - {{#if isItemEffect}} - {{formGroup fields.transfer value=source.transfer rootId=rootId label=legacyTransfer.label hint=(localize "DAGGERHEART.EFFECTS.Attachments.transferHint")}} - {{/if}} - - {{formGroup fields.showIcon value=source.showIcon options=showIconOptions rootId=rootId}} -
\ No newline at end of file diff --git a/templates/sheets/activeEffect/armor/footer.hbs b/templates/sheets/activeEffect/armor/footer.hbs deleted file mode 100644 index 761189ff..00000000 --- a/templates/sheets/activeEffect/armor/footer.hbs +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/templates/sheets/activeEffect/armor/settings.hbs b/templates/sheets/activeEffect/armor/settings.hbs deleted file mode 100644 index 12ca2154..00000000 --- a/templates/sheets/activeEffect/armor/settings.hbs +++ /dev/null @@ -1,17 +0,0 @@ -
-
- {{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}} -
-
- -
- {{localize "DAGGERHEART.GENERAL.general"}} - - {{formGroup @root.systemFields.armorInteraction name="system.armorInteraction" value=source.system.armorInteraction localize=true}} -
-
\ No newline at end of file diff --git a/templates/sheets/activeEffect/change.hbs b/templates/sheets/activeEffect/change.hbs index 30f643b8..d7d396e4 100644 --- a/templates/sheets/activeEffect/change.hbs +++ b/templates/sheets/activeEffect/change.hbs @@ -3,7 +3,9 @@
- {{formInput fields.type name=change.typePath value=change.type localize=true}} +
{{formInput fields.value name=change.valuePath value=change.value elementType="input"}} diff --git a/templates/sheets/activeEffect/changes.hbs b/templates/sheets/activeEffect/changes.hbs index a699e951..47a48382 100644 --- a/templates/sheets/activeEffect/changes.hbs +++ b/templates/sheets/activeEffect/changes.hbs @@ -17,15 +17,7 @@
{{localize "DAGGERHEART.GENERAL.armor"}} {{#if typedChanges.armor}} -
-
{{localize "EFFECT.FIELDS.changes.element.value.label"}}
-
{{localize "DAGGERHEART.GENERAL.max"}}
-
{{localize "DAGGERHEART.EFFECTS.ChangeTypes.armor.FIELDS.armorInteraction.label"}}
-
{{localize "EFFECT.FIELDS.changes.element.priority.label"}}
-
-
    - {{> "systems/daggerheart/templates/sheets/activeEffect/typeChanges/armorChange.hbs" typedChanges.armor fields=@root.systemFields.changes.element.fields}} -
+ {{> "systems/daggerheart/templates/sheets/activeEffect/typeChanges/armorChange.hbs" typedChanges.armor fields=@root.systemFields.changes.element.types.armor.fields}} {{/if}}
diff --git a/templates/sheets/activeEffect/typeChanges/armorChange.hbs b/templates/sheets/activeEffect/typeChanges/armorChange.hbs index 6a04aba2..662a1294 100644 --- a/templates/sheets/activeEffect/typeChanges/armorChange.hbs +++ b/templates/sheets/activeEffect/typeChanges/armorChange.hbs @@ -1,10 +1,28 @@ -
  • - - - - - {{formInput fields.value name=(concat "system.changes." index ".value") value=value elementType="input" data-dtype="Number"}} - {{formInput fields.typeData.types.armor.fields.max name=(concat "system.changes." index ".typeData.max") value=typeData.max data-dtype="Number"}} - {{formInput fields.typeData.types.armor.fields.armorInteraction name=(concat "system.changes." index ".typeData.armorInteraction") value=typeData.armorInteraction localize=true}} - {{formInput fields.priority name=(concat "system.changes." index ".priority") value=priority}} -
  • \ No newline at end of file +
    +
    {{localize "EFFECT.FIELDS.changes.element.value.label"}}
    +
    {{localize "DAGGERHEART.GENERAL.max"}}
    +
    {{localize "DAGGERHEART.EFFECTS.ChangeTypes.armor.FIELDS.interaction.label"}}
    +
    {{localize "EFFECT.FIELDS.changes.element.priority.label"}}
    +
    +
      +
    1. + + + {{formInput fields.value.fields.current name=(concat "system.changes." index ".value.current") value=value.current data-dtype="Number"}} + {{formInput fields.value.fields.max name=(concat "system.changes." index ".value.max") value=value.max data-dtype="Number"}} + {{formInput fields.value.fields.interaction name=(concat "system.changes." index ".value.interaction") value=value.interaction localize=true}} + {{formInput fields.priority name=(concat "system.changes." index ".priority") value=priority}} +
    2. +
    +
    +
    + {{localize "DAGGERHEART.GENERAL.DamageThresholds.title"}} + +
    + {{#if value.damageThresholds}} +
    + {{formGroup fields.value.fields.damageThresholds.fields.major name=(concat "system.changes." index ".value.damageThresholds.major") value=value.damageThresholds.major localize=true }} + {{formGroup fields.value.fields.damageThresholds.fields.severe name=(concat "system.changes." index ".value.damageThresholds.severe") value=value.damageThresholds.severe localize=true }} +
    + {{/if}} +
    \ No newline at end of file diff --git a/templates/sheets/items/armor/header.hbs b/templates/sheets/items/armor/header.hbs index d4306131..6d3bc0fb 100644 --- a/templates/sheets/items/armor/header.hbs +++ b/templates/sheets/items/armor/header.hbs @@ -9,7 +9,7 @@

    {{localize "DAGGERHEART.ITEMS.Armor.baseScore"}}: - {{source.system.baseScore}} + {{source.system.armorData.max}} - {{localize "DAGGERHEART.ITEMS.Armor.baseThresholds.base"}}: {{source.system.baseThresholds.major}} diff --git a/templates/ui/tooltip/armorManagement.hbs b/templates/ui/tooltip/armorManagement.hbs index 20dab7d2..55d702b1 100644 --- a/templates/ui/tooltip/armorManagement.hbs +++ b/templates/ui/tooltip/armorManagement.hbs @@ -7,7 +7,7 @@