From b64a9002eaeceb1f2a21c8e785faab80ae2506b8 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sat, 14 Feb 2026 13:07:47 +0100 Subject: [PATCH 1/2] Fixed advantage/disadvantage sources for adversaries and companions (#1659) --- daggerheart.mjs | 4 ++-- module/data/actor/adversary.mjs | 5 +++-- module/data/actor/character.mjs | 13 +++---------- module/data/actor/companion.mjs | 4 ++-- module/data/actor/creature.mjs | 20 ++++++++++++++++++++ system.json | 2 +- 6 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 module/data/actor/creature.mjs diff --git a/daggerheart.mjs b/daggerheart.mjs index e418401a..1987ec12 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -252,7 +252,7 @@ Hooks.on('setup', () => { ); const actorCommon = { bar: ['resources.stress'], - value: [...resistance] + value: [...resistance, 'advantageSources', 'disadvantageSources'] }; CONFIG.Actor.trackableAttributes = { character: { @@ -270,7 +270,7 @@ Hooks.on('setup', () => { }, adversary: { bar: [...actorCommon.bar, 'resources.hitPoints'], - value: [...actorCommon.value, ...damageThresholds, 'criticalThreshold'] + value: [...actorCommon.value, ...damageThresholds, 'criticalThreshold', 'difficulty'] }, companion: { bar: [...actorCommon.bar], diff --git a/module/data/actor/adversary.mjs b/module/data/actor/adversary.mjs index d3844bcb..78964720 100644 --- a/module/data/actor/adversary.mjs +++ b/module/data/actor/adversary.mjs @@ -1,11 +1,12 @@ import DHAdversarySettings from '../../applications/sheets-configs/adversary-settings.mjs'; import { ActionField } from '../fields/actionField.mjs'; -import BaseDataActor, { commonActorRules } from './base.mjs'; +import { commonActorRules } from './base.mjs'; +import DhCreature from './creature.mjs'; import { resourceField, bonusField } from '../fields/actorField.mjs'; import { calculateExpectedValue, parseTermsFromSimpleFormula } from '../../helpers/utils.mjs'; import { adversaryExpectedDamage, adversaryScalingData } from '../../config/actorConfig.mjs'; -export default class DhpAdversary extends BaseDataActor { +export default class DhpAdversary extends DhCreature { static LOCALIZATION_PREFIXES = ['DAGGERHEART.ACTORS.Adversary']; static get metadata() { diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index c79bb078..aca87c5c 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -1,12 +1,13 @@ import { burden } from '../../config/generalConfig.mjs'; import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs'; import DhLevelData from '../levelData.mjs'; -import BaseDataActor, { commonActorRules } from './base.mjs'; +import { commonActorRules } from './base.mjs'; +import DhCreature from './creature.mjs'; import { attributeField, resourceField, stressDamageReductionRule, bonusField } from '../fields/actorField.mjs'; import { ActionField } from '../fields/actionField.mjs'; import DHCharacterSettings from '../../applications/sheets-configs/character-settings.mjs'; -export default class DhCharacter extends BaseDataActor { +export default class DhCharacter extends DhCreature { /**@override */ static LOCALIZATION_PREFIXES = ['DAGGERHEART.ACTORS.Character']; @@ -131,14 +132,6 @@ export default class DhCharacter extends BaseDataActor { } } }), - advantageSources: new fields.ArrayField(new fields.StringField(), { - label: 'DAGGERHEART.ACTORS.Character.advantageSources.label', - hint: 'DAGGERHEART.ACTORS.Character.advantageSources.hint' - }), - disadvantageSources: new fields.ArrayField(new fields.StringField(), { - label: 'DAGGERHEART.ACTORS.Character.disadvantageSources.label', - hint: 'DAGGERHEART.ACTORS.Character.disadvantageSources.hint' - }), levelData: new fields.EmbeddedDataField(DhLevelData), bonuses: new fields.SchemaField({ roll: new fields.SchemaField({ diff --git a/module/data/actor/companion.mjs b/module/data/actor/companion.mjs index 40cece72..6f51b593 100644 --- a/module/data/actor/companion.mjs +++ b/module/data/actor/companion.mjs @@ -1,4 +1,4 @@ -import BaseDataActor from './base.mjs'; +import DhCreature from './creature.mjs'; import DhLevelData from '../levelData.mjs'; import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs'; import { ActionField } from '../fields/actionField.mjs'; @@ -6,7 +6,7 @@ import { adjustDice, adjustRange } from '../../helpers/utils.mjs'; import DHCompanionSettings from '../../applications/sheets-configs/companion-settings.mjs'; import { resourceField, bonusField } from '../fields/actorField.mjs'; -export default class DhCompanion extends BaseDataActor { +export default class DhCompanion extends DhCreature { static LOCALIZATION_PREFIXES = ['DAGGERHEART.ACTORS.Companion']; /**@inheritdoc */ diff --git a/module/data/actor/creature.mjs b/module/data/actor/creature.mjs new file mode 100644 index 00000000..4b927aed --- /dev/null +++ b/module/data/actor/creature.mjs @@ -0,0 +1,20 @@ +import BaseDataActor from './base.mjs'; + +export default class DhCreature extends BaseDataActor { + /**@inheritdoc */ + static defineSchema() { + const fields = foundry.data.fields; + + return { + ...super.defineSchema(), + advantageSources: new fields.ArrayField(new fields.StringField(), { + label: 'DAGGERHEART.ACTORS.Character.advantageSources.label', + hint: 'DAGGERHEART.ACTORS.Character.advantageSources.hint' + }), + disadvantageSources: new fields.ArrayField(new fields.StringField(), { + label: 'DAGGERHEART.ACTORS.Character.disadvantageSources.label', + hint: 'DAGGERHEART.ACTORS.Character.disadvantageSources.hint' + }) + }; + } +} diff --git a/system.json b/system.json index 96636bab..fb23ad7b 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "daggerheart", "title": "Daggerheart", "description": "An unofficial implementation of the Daggerheart system", - "version": "1.7.1", + "version": "1.7.2", "compatibility": { "minimum": "13.346", "verified": "13.351", From ca434d33f1a8c67a7bf47988b0d20186b4490c8d Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Sat, 14 Feb 2026 13:09:13 +0100 Subject: [PATCH 2/2] Fixed so that advantage/disadvantage dice are properly considered when rerolling (#1662) --- module/dice/dualityRoll.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/dice/dualityRoll.mjs b/module/dice/dualityRoll.mjs index e65d0ff5..cafe0cff 100644 --- a/module/dice/dualityRoll.mjs +++ b/module/dice/dualityRoll.mjs @@ -409,7 +409,9 @@ export default class DualityRoll extends D20Roll { difficulty: message.system.roll.difficulty ? Number(message.system.roll.difficulty) : null } }); - newRoll.extra = newRoll.extra.slice(2); + + const extraIndex = newRoll.advantage ? 3 : 2; + newRoll.extra = newRoll.extra.slice(extraIndex); const tagTeamSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll);