From 66961d7feaa62bd488e7e2edab6dfcd30bd6cfda Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Mon, 10 Nov 2025 14:02:44 +0100 Subject: [PATCH 1/3] . (#1252) --- module/config/generalConfig.mjs | 15 ++++++++++----- module/data/fields/action/damageField.mjs | 9 ++++----- styles/less/hud/token-hud/token-hud.less | 6 ++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 8f889bf0..1f09b748 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -166,11 +166,16 @@ export const healingTypes = { export const defeatedConditions = () => { const defeated = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation).defeated; - return Object.values(defeatedConditionChoices).map(x => ({ - ...x, - img: defeated[`${x.id}Icon`], - description: `DAGGERHEART.CONFIG.Condition.${x.id}.description` - })); + return Object.keys(defeatedConditionChoices).reduce((acc, key) => { + const choice = defeatedConditionChoices[key]; + acc[key] = { + ...choice, + img: defeated[`${choice.id}Icon`], + description: `DAGGERHEART.CONFIG.Condition.${choice.id}.description` + }; + + return acc; + }, {}); }; const defeatedConditionChoices = { diff --git a/module/data/fields/action/damageField.mjs b/module/data/fields/action/damageField.mjs index 43623c94..c5fd19b9 100644 --- a/module/data/fields/action/damageField.mjs +++ b/module/data/fields/action/damageField.mjs @@ -85,7 +85,7 @@ export default class DamageField extends fields.SchemaField { const targetDamage = []; const damagePromises = []; for (let target of targets) { - const actor = fromUuidSync(target.actorId); + const actor = foundry.utils.fromUuidSync(target.actorId); if (!actor) continue; if (!config.hasHealing && config.onSave && target.saved?.success === true) { const mod = CONFIG.DH.ACTIONS.damageOnSave[config.onSave]?.mod ?? 1; @@ -98,17 +98,16 @@ export default class DamageField extends fields.SchemaField { }); } + const token = game.scenes.find(x => x.active).tokens.find(x => x.id === target.id); if (config.hasHealing) damagePromises.push( - actor - .takeHealing(config.damage) - .then(updates => targetDamage.push({ token: actor.token ?? actor.prototypeToken, updates })) + actor.takeHealing(config.damage).then(updates => targetDamage.push({ token, updates })) ); else damagePromises.push( actor .takeDamage(config.damage, config.isDirect) - .then(updates => targetDamage.push({ token: actor.token ?? actor.prototypeToken, updates })) + .then(updates => targetDamage.push({ token, updates })) ); } diff --git a/styles/less/hud/token-hud/token-hud.less b/styles/less/hud/token-hud/token-hud.less index 7d231e8c..c124d843 100644 --- a/styles/less/hud/token-hud/token-hud.less +++ b/styles/less/hud/token-hud/token-hud.less @@ -1,3 +1,9 @@ +.theme-light .daggerheart.placeable-hud { + .status-effects .effect-control { + filter: none; + } +} + .daggerheart.placeable-hud { .col.right { .palette { From 2d6390248f34e645174001e47c11b96d2d092d4a Mon Sep 17 00:00:00 2001 From: Nikhil Nagarajan Date: Mon, 10 Nov 2025 10:29:45 -0500 Subject: [PATCH 2/3] Updated SRD and changed default images (#1253) --- ...eastform_Agile_Scout_a9UoCwtrbgKk02mK.json | 12 +-- ...orm_Aquatic_Predator_ItBVeCl2u5uetgy7.json | 12 +-- ...stform_Aquatic_Scout_qqzdFCxyYupWZK23.json | 12 +-- ...tform_Armored_Sentry_8pUHJv3BYdjA4Qdf.json | 10 +-- ...m_Epic_Aquatic_Beast_wT4xbF99I55yjKZV.json | 12 +-- ...tform_Great_Predator_afbMt4Ld6nY3mw0N.json | 12 +-- ...m_Great_Winged_Beast_b4BMnTbJ3iPPidSb.json | 12 +-- ...orm_Household_Friend_iDmOtiHJJ80AIAVT.json | 12 +-- ...form_Legendary_Beast_mqP6z4Wg4K3oDAom.json | 12 +-- ...orm_Legendary_Hybrid_rRUtgcUjimlpPhnn.json | 12 +-- ...orm_Massive_Behemoth_qjwMzPn33aKZACkv.json | 12 +-- ...stform_Mighty_Lizard_94tvcC3D5Kp4lzuN.json | 12 +-- ...tform_Mighty_Strider_zRLjqKx4Rn2TjivL.json | 12 +-- ...Mythic_Aerial_Hunter_jV6EuEacyQlHW4SN.json | 12 +-- ...astform_Mythic_Beast_kObobka52JdpWBSu.json | 12 +-- ...stform_Mythic_Hybrid_WAbxCf2An8qmxyJ1.json | 12 +-- ...stform_Nimble_Grazer_CItO8yX6amQaqyk7.json | 12 +-- ...stform_Pack_Predator_YLisKYYhAGca50WM.json | 12 +-- ...rm_Pouncing_Predator_33oFSZ1PwFqInHPe.json | 12 +-- ...tform_Powerful_Beast_m8BVTuJI1wCvzTcf.json | 12 +-- ...rm_Stalking_Arachnid_A4TVRY0D5r9EiVwA.json | 12 +-- ...orm_Striking_Serpent_1XrZWGDttBAAUxR1.json | 12 +-- ...form_Terrible_Lizard_5BABxRe2XVrYTj8N.json | 12 +-- ...astform_Winged_Beast_mZ4Wlqtss2FlNNvL.json | 12 +-- .../feature_Agile_xLS5YT1B6yeCiNTg.json | 14 ++-- ...feature_Elusive_Prey_a7Qvmm14nx9BCysA.json | 14 ++-- ...ture_Hobbling_Strike_8u0HkK3WgtU9lWYs.json | 14 ++-- .../feature_Takedown_0ey4kM9ssj2otHvb.json | 75 +++---------------- ...eature_Venomous_Bite_2KlTnfzO03vneVS8.json | 14 ++-- .../feature_Webslinger_D73fS1iM4SZPFimu.json | 12 +-- 30 files changed, 186 insertions(+), 243 deletions(-) diff --git a/src/packs/beastforms/beastform_Agile_Scout_a9UoCwtrbgKk02mK.json b/src/packs/beastforms/beastform_Agile_Scout_a9UoCwtrbgKk02mK.json index 43c4d556..a6444c9c 100644 --- a/src/packs/beastforms/beastform_Agile_Scout_a9UoCwtrbgKk02mK.json +++ b/src/packs/beastforms/beastform_Agile_Scout_a9UoCwtrbgKk02mK.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 1, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/mammals/rodent-rat-diseaed-gray.webp", + "tokenRingImg": "icons/creatures/mammals/rodent-rat-diseaed-gray.webp", "tokenSize": { "height": null, "width": null @@ -125,12 +125,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753570913893, - "modifiedTime": 1755395235599, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786932553, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "a9UoCwtrbgKk02mK", "sort": 500000, diff --git a/src/packs/beastforms/beastform_Aquatic_Predator_ItBVeCl2u5uetgy7.json b/src/packs/beastforms/beastform_Aquatic_Predator_ItBVeCl2u5uetgy7.json index 6b418b31..1b38232a 100644 --- a/src/packs/beastforms/beastform_Aquatic_Predator_ItBVeCl2u5uetgy7.json +++ b/src/packs/beastforms/beastform_Aquatic_Predator_ItBVeCl2u5uetgy7.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 3, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/fish/fish-marlin-swordfight-blue.webp", + "tokenRingImg": "icons/creatures/fish/fish-marlin-swordfight-blue.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753626985883, - "modifiedTime": 1755395436609, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787103412, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "ItBVeCl2u5uetgy7", "sort": 0, diff --git a/src/packs/beastforms/beastform_Aquatic_Scout_qqzdFCxyYupWZK23.json b/src/packs/beastforms/beastform_Aquatic_Scout_qqzdFCxyYupWZK23.json index 63f041d5..7ed72958 100644 --- a/src/packs/beastforms/beastform_Aquatic_Scout_qqzdFCxyYupWZK23.json +++ b/src/packs/beastforms/beastform_Aquatic_Scout_qqzdFCxyYupWZK23.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 1, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/tentacles/tentacles-octopus-black-pink.webp", + "tokenRingImg": "icons/creatures/tentacles/tentacles-octopus-black-pink.webp", "tokenSize": { "height": null, "width": null @@ -124,12 +124,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753575463467, - "modifiedTime": 1755395249086, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786937661, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "qqzdFCxyYupWZK23", "sort": 200000, diff --git a/src/packs/beastforms/beastform_Armored_Sentry_8pUHJv3BYdjA4Qdf.json b/src/packs/beastforms/beastform_Armored_Sentry_8pUHJv3BYdjA4Qdf.json index d6111976..cf91ac7d 100644 --- a/src/packs/beastforms/beastform_Armored_Sentry_8pUHJv3BYdjA4Qdf.json +++ b/src/packs/beastforms/beastform_Armored_Sentry_8pUHJv3BYdjA4Qdf.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 2, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/reptiles/turtle-shell-glowing-green.webp", + "tokenRingImg": "icons/creatures/reptiles/turtle-shell-glowing-green.webp", "tokenSize": { "height": null, "width": null @@ -132,10 +132,10 @@ "exportSource": null, "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.1.2", + "systemVersion": "1.2.0", "createdTime": 1753580987168, - "modifiedTime": 1761502671010, - "lastModifiedBy": "fBcTgyTzoARBvohY" + "modifiedTime": 1762786983275, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "8pUHJv3BYdjA4Qdf", "sort": 100000, diff --git a/src/packs/beastforms/beastform_Epic_Aquatic_Beast_wT4xbF99I55yjKZV.json b/src/packs/beastforms/beastform_Epic_Aquatic_Beast_wT4xbF99I55yjKZV.json index 2666e555..a06ea7d9 100644 --- a/src/packs/beastforms/beastform_Epic_Aquatic_Beast_wT4xbF99I55yjKZV.json +++ b/src/packs/beastforms/beastform_Epic_Aquatic_Beast_wT4xbF99I55yjKZV.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 4, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/fish/squid-kraken-teal.webp", + "tokenRingImg": "icons/creatures/fish/squid-kraken-teal.webp", "tokenSize": { "height": null, "width": null @@ -133,12 +133,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753628697986, - "modifiedTime": 1755395495481, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787224941, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "wT4xbF99I55yjKZV", "sort": 0, diff --git a/src/packs/beastforms/beastform_Great_Predator_afbMt4Ld6nY3mw0N.json b/src/packs/beastforms/beastform_Great_Predator_afbMt4Ld6nY3mw0N.json index e526cb8e..4439e261 100644 --- a/src/packs/beastforms/beastform_Great_Predator_afbMt4Ld6nY3mw0N.json +++ b/src/packs/beastforms/beastform_Great_Predator_afbMt4Ld6nY3mw0N.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 3, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/mammals/wolf-shadow-black.webp", + "tokenRingImg": "icons/creatures/mammals/wolf-shadow-black.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753625648103, - "modifiedTime": 1755395413225, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787119852, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "afbMt4Ld6nY3mw0N", "sort": 100000, diff --git a/src/packs/beastforms/beastform_Great_Winged_Beast_b4BMnTbJ3iPPidSb.json b/src/packs/beastforms/beastform_Great_Winged_Beast_b4BMnTbJ3iPPidSb.json index a7a78a5d..5bf38ae7 100644 --- a/src/packs/beastforms/beastform_Great_Winged_Beast_b4BMnTbJ3iPPidSb.json +++ b/src/packs/beastforms/beastform_Great_Winged_Beast_b4BMnTbJ3iPPidSb.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 3, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/birds/corvid-flying-wings-purple.webp", + "tokenRingImg": "icons/creatures/birds/corvid-flying-wings-purple.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753626865938, - "modifiedTime": 1755395430043, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787132432, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "b4BMnTbJ3iPPidSb", "sort": 200000, diff --git a/src/packs/beastforms/beastform_Household_Friend_iDmOtiHJJ80AIAVT.json b/src/packs/beastforms/beastform_Household_Friend_iDmOtiHJJ80AIAVT.json index 7cf786f1..44cb71a8 100644 --- a/src/packs/beastforms/beastform_Household_Friend_iDmOtiHJJ80AIAVT.json +++ b/src/packs/beastforms/beastform_Household_Friend_iDmOtiHJJ80AIAVT.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 1, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/mammals/rabbit-movement-glowing-green.webp", + "tokenRingImg": "icons/creatures/mammals/rabbit-movement-glowing-green.webp", "tokenSize": { "height": null, "width": null @@ -124,12 +124,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753573035973, - "modifiedTime": 1755395259885, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786944642, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "iDmOtiHJJ80AIAVT", "sort": 100000, diff --git a/src/packs/beastforms/beastform_Legendary_Beast_mqP6z4Wg4K3oDAom.json b/src/packs/beastforms/beastform_Legendary_Beast_mqP6z4Wg4K3oDAom.json index 6bbfee9e..15d0eaa4 100644 --- a/src/packs/beastforms/beastform_Legendary_Beast_mqP6z4Wg4K3oDAom.json +++ b/src/packs/beastforms/beastform_Legendary_Beast_mqP6z4Wg4K3oDAom.json @@ -5,8 +5,8 @@ "system": { "beastformType": "evolved", "tier": 3, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/magical/humanoid-giant-forest-blue.webp", + "tokenRingImg": "icons/creatures/magical/humanoid-giant-forest-blue.webp", "tokenSize": { "height": null, "width": null @@ -100,12 +100,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753627165434, - "modifiedTime": 1755395443346, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787146758, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "mqP6z4Wg4K3oDAom", "sort": 0, diff --git a/src/packs/beastforms/beastform_Legendary_Hybrid_rRUtgcUjimlpPhnn.json b/src/packs/beastforms/beastform_Legendary_Hybrid_rRUtgcUjimlpPhnn.json index 99ca7aa0..b38d1304 100644 --- a/src/packs/beastforms/beastform_Legendary_Hybrid_rRUtgcUjimlpPhnn.json +++ b/src/packs/beastforms/beastform_Legendary_Hybrid_rRUtgcUjimlpPhnn.json @@ -5,8 +5,8 @@ "system": { "beastformType": "hybrid", "tier": 3, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/magical/humanoid-silhouette-glowing-pink.webp", + "tokenRingImg": "icons/creatures/magical/humanoid-silhouette-glowing-pink.webp", "tokenSize": { "height": null, "width": null @@ -118,12 +118,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753627303526, - "modifiedTime": 1755395450377, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787159027, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "rRUtgcUjimlpPhnn", "sort": 0, diff --git a/src/packs/beastforms/beastform_Massive_Behemoth_qjwMzPn33aKZACkv.json b/src/packs/beastforms/beastform_Massive_Behemoth_qjwMzPn33aKZACkv.json index 3022d310..6990814c 100644 --- a/src/packs/beastforms/beastform_Massive_Behemoth_qjwMzPn33aKZACkv.json +++ b/src/packs/beastforms/beastform_Massive_Behemoth_qjwMzPn33aKZACkv.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 4, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/mammals/beast-horned-scaled-glowing-orange.webp", + "tokenRingImg": "icons/creatures/mammals/beast-horned-scaled-glowing-orange.webp", "tokenSize": { "height": null, "width": null @@ -134,12 +134,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753627711166, - "modifiedTime": 1755395470445, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787235514, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "qjwMzPn33aKZACkv", "sort": 100000, diff --git a/src/packs/beastforms/beastform_Mighty_Lizard_94tvcC3D5Kp4lzuN.json b/src/packs/beastforms/beastform_Mighty_Lizard_94tvcC3D5Kp4lzuN.json index 63bfaa08..e4f41dab 100644 --- a/src/packs/beastforms/beastform_Mighty_Lizard_94tvcC3D5Kp4lzuN.json +++ b/src/packs/beastforms/beastform_Mighty_Lizard_94tvcC3D5Kp4lzuN.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 3, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/reptiles/lizard-iguana-green.webp", + "tokenRingImg": "icons/creatures/reptiles/lizard-iguana-green.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753626720443, - "modifiedTime": 1755395421310, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787174916, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "94tvcC3D5Kp4lzuN", "sort": 300000, diff --git a/src/packs/beastforms/beastform_Mighty_Strider_zRLjqKx4Rn2TjivL.json b/src/packs/beastforms/beastform_Mighty_Strider_zRLjqKx4Rn2TjivL.json index bc46ad18..eebf60ee 100644 --- a/src/packs/beastforms/beastform_Mighty_Strider_zRLjqKx4Rn2TjivL.json +++ b/src/packs/beastforms/beastform_Mighty_Strider_zRLjqKx4Rn2TjivL.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 2, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/environment/creatures/horse-tan.webp", + "tokenRingImg": "icons/environment/creatures/horse-tan.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753617739175, - "modifiedTime": 1755395313904, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787003407, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "zRLjqKx4Rn2TjivL", "sort": 200000, diff --git a/src/packs/beastforms/beastform_Mythic_Aerial_Hunter_jV6EuEacyQlHW4SN.json b/src/packs/beastforms/beastform_Mythic_Aerial_Hunter_jV6EuEacyQlHW4SN.json index 87dabf23..7725d919 100644 --- a/src/packs/beastforms/beastform_Mythic_Aerial_Hunter_jV6EuEacyQlHW4SN.json +++ b/src/packs/beastforms/beastform_Mythic_Aerial_Hunter_jV6EuEacyQlHW4SN.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 4, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/reptiles/dragon-winged-blue.webp", + "tokenRingImg": "icons/creatures/reptiles/dragon-winged-blue.webp", "tokenSize": { "height": null, "width": null @@ -133,12 +133,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753628382723, - "modifiedTime": 1755395486698, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787250619, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "jV6EuEacyQlHW4SN", "sort": 200000, diff --git a/src/packs/beastforms/beastform_Mythic_Beast_kObobka52JdpWBSu.json b/src/packs/beastforms/beastform_Mythic_Beast_kObobka52JdpWBSu.json index 0032c72c..aa7483ce 100644 --- a/src/packs/beastforms/beastform_Mythic_Beast_kObobka52JdpWBSu.json +++ b/src/packs/beastforms/beastform_Mythic_Beast_kObobka52JdpWBSu.json @@ -5,8 +5,8 @@ "system": { "beastformType": "evolved", "tier": 4, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/eyes/lizard-single-slit-pink.webp", + "tokenRingImg": "icons/creatures/eyes/lizard-single-slit-pink.webp", "tokenSize": { "height": null, "width": null @@ -106,12 +106,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753628844905, - "modifiedTime": 1755395505081, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787259530, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "kObobka52JdpWBSu", "sort": 0, diff --git a/src/packs/beastforms/beastform_Mythic_Hybrid_WAbxCf2An8qmxyJ1.json b/src/packs/beastforms/beastform_Mythic_Hybrid_WAbxCf2An8qmxyJ1.json index 21e2a834..e9f62172 100644 --- a/src/packs/beastforms/beastform_Mythic_Hybrid_WAbxCf2An8qmxyJ1.json +++ b/src/packs/beastforms/beastform_Mythic_Hybrid_WAbxCf2An8qmxyJ1.json @@ -5,8 +5,8 @@ "system": { "beastformType": "hybrid", "tier": 4, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/magical/spirit-undead-horned-blue.webp", + "tokenRingImg": "icons/creatures/magical/spirit-undead-horned-blue.webp", "tokenSize": { "height": null, "width": null @@ -118,12 +118,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753628965658, - "modifiedTime": 1755395511998, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787273314, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "WAbxCf2An8qmxyJ1", "sort": 0, diff --git a/src/packs/beastforms/beastform_Nimble_Grazer_CItO8yX6amQaqyk7.json b/src/packs/beastforms/beastform_Nimble_Grazer_CItO8yX6amQaqyk7.json index 232721d8..12e8f002 100644 --- a/src/packs/beastforms/beastform_Nimble_Grazer_CItO8yX6amQaqyk7.json +++ b/src/packs/beastforms/beastform_Nimble_Grazer_CItO8yX6amQaqyk7.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 1, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/mammals/deer-antlers-glowing-blue.webp", + "tokenRingImg": "icons/creatures/mammals/deer-antlers-glowing-blue.webp", "tokenSize": { "height": null, "width": null @@ -124,12 +124,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753574930310, - "modifiedTime": 1755395265901, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786950257, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "CItO8yX6amQaqyk7", "sort": 300000, diff --git a/src/packs/beastforms/beastform_Pack_Predator_YLisKYYhAGca50WM.json b/src/packs/beastforms/beastform_Pack_Predator_YLisKYYhAGca50WM.json index 664b6c83..7074ef72 100644 --- a/src/packs/beastforms/beastform_Pack_Predator_YLisKYYhAGca50WM.json +++ b/src/packs/beastforms/beastform_Pack_Predator_YLisKYYhAGca50WM.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 1, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/mammals/wolf-howl-moon-forest-blue.webp", + "tokenRingImg": "icons/creatures/mammals/wolf-howl-moon-forest-blue.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753575274807, - "modifiedTime": 1755395272135, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786928080, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "YLisKYYhAGca50WM", "sort": 400000, diff --git a/src/packs/beastforms/beastform_Pouncing_Predator_33oFSZ1PwFqInHPe.json b/src/packs/beastforms/beastform_Pouncing_Predator_33oFSZ1PwFqInHPe.json index fe261bf7..7c345093 100644 --- a/src/packs/beastforms/beastform_Pouncing_Predator_33oFSZ1PwFqInHPe.json +++ b/src/packs/beastforms/beastform_Pouncing_Predator_33oFSZ1PwFqInHPe.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 2, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/abilities/cougar-roar-rush-orange.webp", + "tokenRingImg": "icons/creatures/abilities/cougar-roar-rush-orange.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753621789186, - "modifiedTime": 1755395328437, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787017340, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "33oFSZ1PwFqInHPe", "sort": 0, diff --git a/src/packs/beastforms/beastform_Powerful_Beast_m8BVTuJI1wCvzTcf.json b/src/packs/beastforms/beastform_Powerful_Beast_m8BVTuJI1wCvzTcf.json index b88b60ce..de65b40b 100644 --- a/src/packs/beastforms/beastform_Powerful_Beast_m8BVTuJI1wCvzTcf.json +++ b/src/packs/beastforms/beastform_Powerful_Beast_m8BVTuJI1wCvzTcf.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 2, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/abilities/bear-roar-bite-brown-green.webp", + "tokenRingImg": "icons/creatures/abilities/bear-roar-bite-brown-green.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753582598510, - "modifiedTime": 1755395305302, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787029819, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "m8BVTuJI1wCvzTcf", "sort": 300000, diff --git a/src/packs/beastforms/beastform_Stalking_Arachnid_A4TVRY0D5r9EiVwA.json b/src/packs/beastforms/beastform_Stalking_Arachnid_A4TVRY0D5r9EiVwA.json index 6416e019..3e81f75e 100644 --- a/src/packs/beastforms/beastform_Stalking_Arachnid_A4TVRY0D5r9EiVwA.json +++ b/src/packs/beastforms/beastform_Stalking_Arachnid_A4TVRY0D5r9EiVwA.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 1, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/invertebrates/spider-mandibles-brown.webp", + "tokenRingImg": "icons/creatures/invertebrates/spider-mandibles-brown.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753576016472, - "modifiedTime": 1755395283720, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786957384, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "A4TVRY0D5r9EiVwA", "sort": 0, diff --git a/src/packs/beastforms/beastform_Striking_Serpent_1XrZWGDttBAAUxR1.json b/src/packs/beastforms/beastform_Striking_Serpent_1XrZWGDttBAAUxR1.json index 5efb5d71..47e800d9 100644 --- a/src/packs/beastforms/beastform_Striking_Serpent_1XrZWGDttBAAUxR1.json +++ b/src/packs/beastforms/beastform_Striking_Serpent_1XrZWGDttBAAUxR1.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 2, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/reptiles/serpent-horned-green.webp", + "tokenRingImg": "icons/creatures/reptiles/serpent-horned-green.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753621251793, - "modifiedTime": 1755395321271, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787068105, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "1XrZWGDttBAAUxR1", "sort": 0, diff --git a/src/packs/beastforms/beastform_Terrible_Lizard_5BABxRe2XVrYTj8N.json b/src/packs/beastforms/beastform_Terrible_Lizard_5BABxRe2XVrYTj8N.json index a0025f36..2e1bf603 100644 --- a/src/packs/beastforms/beastform_Terrible_Lizard_5BABxRe2XVrYTj8N.json +++ b/src/packs/beastforms/beastform_Terrible_Lizard_5BABxRe2XVrYTj8N.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 4, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/abilities/dragon-breath-purple.webp", + "tokenRingImg": "icons/creatures/abilities/dragon-breath-purple.webp", "tokenSize": { "height": null, "width": null @@ -133,12 +133,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753628213224, - "modifiedTime": 1755395476212, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787283468, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "5BABxRe2XVrYTj8N", "sort": 300000, diff --git a/src/packs/beastforms/beastform_Winged_Beast_mZ4Wlqtss2FlNNvL.json b/src/packs/beastforms/beastform_Winged_Beast_mZ4Wlqtss2FlNNvL.json index 207e0334..27984b87 100644 --- a/src/packs/beastforms/beastform_Winged_Beast_mZ4Wlqtss2FlNNvL.json +++ b/src/packs/beastforms/beastform_Winged_Beast_mZ4Wlqtss2FlNNvL.json @@ -5,8 +5,8 @@ "system": { "beastformType": "normal", "tier": 2, - "tokenImg": "icons/svg/mystery-man.svg", - "tokenRingImg": "icons/svg/mystery-man.svg", + "tokenImg": "icons/creatures/birds/raptor-owl-flying-moon.webp", + "tokenRingImg": "icons/creatures/birds/raptor-owl-flying-moon.webp", "tokenSize": { "height": null, "width": null @@ -130,12 +130,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753624952844, - "modifiedTime": 1755395334887, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762787081429, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "mZ4Wlqtss2FlNNvL", "sort": 0, diff --git a/src/packs/beastforms/feature_Agile_xLS5YT1B6yeCiNTg.json b/src/packs/beastforms/feature_Agile_xLS5YT1B6yeCiNTg.json index bbc22d34..d67d124f 100644 --- a/src/packs/beastforms/feature_Agile_xLS5YT1B6yeCiNTg.json +++ b/src/packs/beastforms/feature_Agile_xLS5YT1B6yeCiNTg.json @@ -10,7 +10,7 @@ "type": "effect", "_id": "4yQ56hSL5LBkzrV6", "systemPath": "actions", - "description": "", + "description": "

Spend a Hope to move up to Far range without rolling.

", "chatDisplay": true, "actionType": "action", "cost": [ @@ -23,12 +23,12 @@ ], "uses": { "value": null, - "max": null, + "max": "", "recovery": null }, "effects": [], "target": { - "type": null, + "type": "", "amount": null }, "name": "Spend Hope", @@ -56,12 +56,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753569752255, - "modifiedTime": 1755395530698, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786188592, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "xLS5YT1B6yeCiNTg", "sort": 2700000, diff --git a/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json b/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json index 582d3c4e..c347db84 100644 --- a/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json +++ b/src/packs/beastforms/feature_Elusive_Prey_a7Qvmm14nx9BCysA.json @@ -10,7 +10,7 @@ "type": "attack", "_id": "9lvrqQKTEB3NRwvM", "systemPath": "actions", - "description": "", + "description": "

When an attack roll against you would succeed, you can mark a Stress and roll a d4. Add the result to your Evasion against this attack.

", "chatDisplay": true, "actionType": "action", "cost": [ @@ -23,7 +23,7 @@ ], "uses": { "value": null, - "max": null, + "max": "", "recovery": null }, "damage": { @@ -31,7 +31,7 @@ "includeBase": false }, "target": { - "type": null, + "type": "", "amount": null }, "effects": [], @@ -80,12 +80,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753574925665, - "modifiedTime": 1755395566717, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786470855, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "a7Qvmm14nx9BCysA", "sort": 2300000, diff --git a/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json b/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json index fa90cf04..0083cd5f 100644 --- a/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json +++ b/src/packs/beastforms/feature_Hobbling_Strike_8u0HkK3WgtU9lWYs.json @@ -10,7 +10,7 @@ "type": "effect", "_id": "p8DESOMGA6dLwEMz", "systemPath": "actions", - "description": "", + "description": "

When you succeed on an attack against a target within Melee range, you can mark a Stress to make the target temporarily Vulnerable.

", "chatDisplay": true, "actionType": "action", "cost": [ @@ -23,7 +23,7 @@ ], "uses": { "value": null, - "max": null, + "max": "", "recovery": null }, "effects": [ @@ -33,7 +33,7 @@ } ], "target": { - "type": null, + "type": "", "amount": null }, "name": "Mark Stress", @@ -101,12 +101,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753575250590, - "modifiedTime": 1755395576634, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786502471, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "8u0HkK3WgtU9lWYs", "sort": 2400000, diff --git a/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json b/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json index e5323c63..5392665b 100644 --- a/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json +++ b/src/packs/beastforms/feature_Takedown_0ey4kM9ssj2otHvb.json @@ -28,75 +28,20 @@ }, "damage": { "parts": [ - { - "resultBased": false, - "value": { - "custom": { - "enabled": false, - "formula": "" - }, - "multiplier": "prof", - "dice": "d8", - "bonus": 6, - "flatMultiplier": 1 - }, - "applyTo": "hitPoints", - "type": [ - "physical" - ], - "base": false, - "valueAlt": { - "multiplier": "prof", - "flatMultiplier": 1, - "dice": "d6", - "bonus": null, - "custom": { - "enabled": false, - "formula": "" - } - } - }, - { - "resultBased": false, - "value": { - "custom": { - "enabled": false, - "formula": "" - }, - "multiplier": "flat", - "flatMultiplier": 2, - "dice": "d8", - "bonus": null - }, - "applyTo": "hitPoints", - "type": [ - "physical" - ], - "base": false, - "valueAlt": { - "multiplier": "prof", - "flatMultiplier": 1, - "dice": "d6", - "bonus": null, - "custom": { - "enabled": false, - "formula": "" - } - } - }, { "resultBased": false, "value": { "custom": { "enabled": true, - "formula": "1" + "formula": "(@prof+2)@basicAttackDamageDice" }, "multiplier": "prof", "flatMultiplier": 1, "dice": "d6", "bonus": null }, - "applyTo": "stress", + "applyTo": "hitPoints", + "type": [], "base": false, "valueAlt": { "multiplier": "prof", @@ -104,11 +49,9 @@ "dice": "d6", "bonus": null, "custom": { - "enabled": false, - "formula": "" + "enabled": false } - }, - "type": [] + } } ], "includeBase": false @@ -207,12 +150,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.350", + "coreVersion": "13.347", "systemId": "daggerheart", - "systemVersion": "1.1.2", + "systemVersion": "1.1.0", "createdTime": 1753621786000, - "modifiedTime": 1762341337917, - "lastModifiedBy": "9HOfUKAXuCu7hUPY" + "modifiedTime": 1756041242273, + "lastModifiedBy": "vUIbuan0U50nfKBE" }, "_id": "0ey4kM9ssj2otHvb", "sort": 600000, diff --git a/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json b/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json index db357f62..480da867 100644 --- a/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json +++ b/src/packs/beastforms/feature_Venomous_Bite_2KlTnfzO03vneVS8.json @@ -10,13 +10,13 @@ "type": "effect", "_id": "eow90DYK6cUWOk7g", "systemPath": "actions", - "description": "", + "description": "

When you succeed on an attack against a target within Melee range, the target becomes temporarily Poisoned. A Poisoned creature takes 1d10 direct physical damage each time they act.

", "chatDisplay": true, "actionType": "action", "cost": [], "uses": { "value": null, - "max": null, + "max": "", "recovery": null }, "effects": [ @@ -63,7 +63,7 @@ "startRound": null, "startTurn": null }, - "description": "

A Poisoned creature takes 1d10 direct physical damage each time they act.

", + "description": "

A Poisoned creature takes 1d10 direct physical damage each time they act.

", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -91,12 +91,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753576004121, - "modifiedTime": 1755395614203, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786649810, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "2KlTnfzO03vneVS8", "sort": 1600000, diff --git a/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json b/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json index 5e1295e1..a85f5d14 100644 --- a/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json +++ b/src/packs/beastforms/feature_Webslinger_D73fS1iM4SZPFimu.json @@ -10,13 +10,13 @@ "type": "attack", "_id": "vRU6xutkp3VYxZ0i", "systemPath": "actions", - "description": "", + "description": "

You can temporarily Restrain a target within Close range by succeeding on a Finesse Roll against them.

", "chatDisplay": true, "actionType": "action", "cost": [], "uses": { "value": null, - "max": null, + "max": "", "recovery": null }, "damage": { @@ -117,12 +117,12 @@ "compendiumSource": null, "duplicateSource": null, "exportSource": null, - "coreVersion": "13.347", + "coreVersion": "13.350", "systemId": "daggerheart", - "systemVersion": "1.0.5", + "systemVersion": "1.2.0", "createdTime": 1753576005315, - "modifiedTime": 1755395606969, - "lastModifiedBy": "VZIeX2YDvX338Zvr" + "modifiedTime": 1762786690091, + "lastModifiedBy": "gtrqalNxfl7iRwL8" }, "_id": "D73fS1iM4SZPFimu", "sort": 1700000, From 7055591a76b3350028a60ed34348ad40780444f3 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Mon, 10 Nov 2025 16:30:04 +0100 Subject: [PATCH 3/3] [PR] [Feature] Beastform Wildcards (#1247) * Added support for wildcard paths in beastform token paths * Fixed browse dataSource --- lang/en.json | 4 ++ module/applications/dialogs/_module.mjs | 1 + .../applications/dialogs/beastformDialog.mjs | 17 ++++- .../dialogs/imageSelectDialog.mjs | 67 +++++++++++++++++++ .../applications/sheets/actors/character.mjs | 17 +++++ module/data/fields/action/beastformField.mjs | 2 +- module/data/item/beastform.mjs | 26 +++++++ styles/less/dialog/image-select/sheet.less | 33 +++++++++ styles/less/dialog/index.less | 2 + templates/dialogs/image-select/footer.hbs | 4 ++ templates/dialogs/image-select/main.hbs | 5 ++ 11 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 module/applications/dialogs/imageSelectDialog.mjs create mode 100644 styles/less/dialog/image-select/sheet.less create mode 100644 templates/dialogs/image-select/footer.hbs create mode 100644 templates/dialogs/image-select/main.hbs diff --git a/lang/en.json b/lang/en.json index ab522e16..cacf7d3a 100755 --- a/lang/en.json +++ b/lang/en.json @@ -440,6 +440,10 @@ "genericEffects": "Foundry Effects" } }, + "ImageSelect": { + "title": "Select Image", + "selectImage": "Select Image" + }, "Levelup": { "actions": { "creatureComfort": { diff --git a/module/applications/dialogs/_module.mjs b/module/applications/dialogs/_module.mjs index 84ba4037..b8e764c9 100644 --- a/module/applications/dialogs/_module.mjs +++ b/module/applications/dialogs/_module.mjs @@ -5,6 +5,7 @@ export { default as DamageDialog } from './damageDialog.mjs'; export { default as DamageReductionDialog } from './damageReductionDialog.mjs'; export { default as DeathMove } from './deathMove.mjs'; export { default as Downtime } from './downtime.mjs'; +export { default as ImageSelectDialog } from './imageSelectDialog.mjs'; export { default as MulticlassChoiceDialog } from './multiclassChoiceDialog.mjs'; export { default as OwnershipSelection } from './ownershipSelection.mjs'; export { default as RerollDamageDialog } from './rerollDamageDialog.mjs'; diff --git a/module/applications/dialogs/beastformDialog.mjs b/module/applications/dialogs/beastformDialog.mjs index 35bac11c..3dd88d6c 100644 --- a/module/applications/dialogs/beastformDialog.mjs +++ b/module/applications/dialogs/beastformDialog.mjs @@ -276,7 +276,22 @@ export default class BeastformDialog extends HandlebarsApplicationMixin(Applicat const featureItem = item; app.addEventListener( 'close', - () => resolve({ selected: app.selected, evolved: app.evolved, hybrid: app.hybrid, item: featureItem }), + async () => { + const selected = app.selected.toObject(); + const data = await game.system.api.data.items.DHBeastform.getWildcardImage( + app.configData.data.parent, + app.selected + ); + if (data) { + if (!data.selectedImage) selected = null; + else { + if (data.usesDynamicToken) selected.system.tokenRingImg = data.selectedImage; + else selected.system.tokenImg = data.selectedImage; + } + } + + resolve({ selected: selected, evolved: app.evolved, hybrid: app.hybrid, item: featureItem }); + }, { once: true } ); app.render({ force: true }); diff --git a/module/applications/dialogs/imageSelectDialog.mjs b/module/applications/dialogs/imageSelectDialog.mjs new file mode 100644 index 00000000..b54a45e0 --- /dev/null +++ b/module/applications/dialogs/imageSelectDialog.mjs @@ -0,0 +1,67 @@ +const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api; + +export default class ImageSelectDialog extends HandlebarsApplicationMixin(ApplicationV2) { + constructor(titleName, images) { + super(); + + this.titleName = titleName; + this.images = images; + } + + static DEFAULT_OPTIONS = { + tag: 'form', + classes: ['daggerheart', 'dialog', 'dh-style', 'image-select'], + position: { + width: 600, + height: 'auto' + }, + window: { + icon: 'fa-solid fa-paw' + }, + actions: { + selectImage: ImageSelectDialog.#selectImage, + finishSelection: ImageSelectDialog.#finishSelection + } + }; + + get title() { + return this.titleName; + } + + /** @override */ + static PARTS = { + main: { template: 'systems/daggerheart/templates/dialogs/image-select/main.hbs' }, + footer: { template: 'systems/daggerheart/templates/dialogs/image-select/footer.hbs' } + }; + + async _prepareContext(_options) { + const context = await super._prepareContext(_options); + context.images = this.images; + context.selectedImage = this.selectedImage; + + return context; + } + + static #selectImage(_event, button) { + this.selectedImage = button.dataset.image ?? button.querySelector('img').dataset.image; + this.render(); + } + + static #finishSelection() { + this.close({ submitted: true }); + } + + async close(options = {}) { + if (!options.submitted) this.selectedImage = null; + + await super.close(); + } + + static async configure(title, images) { + return new Promise(resolve => { + const app = new this(title, images); + app.addEventListener('close', () => resolve(app.selectedImage), { once: true }); + app.render({ force: true }); + }); + } +} diff --git a/module/applications/sheets/actors/character.mjs b/module/applications/sheets/actors/character.mjs index b9859a01..227a1a39 100644 --- a/module/applications/sheets/actors/character.mjs +++ b/module/applications/sheets/actors/character.mjs @@ -844,6 +844,23 @@ export default class CharacterSheet extends DHBaseActorSheet { itemData.system.inVault = true; } + if (item.type === 'beastform') { + if (this.document.effects.find(x => x.type === 'beastform')) { + return ui.notifications.warn( + game.i18n.localize('DAGGERHEART.UI.Notifications.beastformAlreadyApplied') + ); + } + + const data = await game.system.api.data.items.DHBeastform.getWildcardImage(this.document, itemData); + if (data) { + if (!data.selectedImage) return; + else { + if (data.usesDynamicToken) itemData.system.tokenRingImg = data.selectedImage; + else itemData.system.tokenImg = data.selectedImage; + } + } + } + if (this.document.uuid === item.parent?.uuid) return this._onSortItem(event, itemData); const createdItem = await this._onDropItemCreate(itemData); diff --git a/module/data/fields/action/beastformField.mjs b/module/data/fields/action/beastformField.mjs index 0a1caea9..cefbcc21 100644 --- a/module/data/fields/action/beastformField.mjs +++ b/module/data/fields/action/beastformField.mjs @@ -79,7 +79,7 @@ export default class BeastformField extends fields.SchemaField { * @returns */ static async transform(selectedForm, evolvedData, hybridData) { - const formData = evolvedData?.form ? evolvedData.form.toObject() : selectedForm.toObject(); + const formData = evolvedData?.form ? evolvedData.form.toObject() : selectedForm; const beastformEffect = formData.effects.find(x => x.type === 'beastform'); if (!beastformEffect) { ui.notifications.error('DAGGERHEART.UI.Notifications.beastformMissingEffect'); diff --git a/module/data/item/beastform.mjs b/module/data/item/beastform.mjs index 3c9bef5c..8f5dffe6 100644 --- a/module/data/item/beastform.mjs +++ b/module/data/item/beastform.mjs @@ -33,11 +33,13 @@ export default class DHBeastform extends BaseDataItem { tokenImg: new fields.FilePathField({ initial: 'icons/svg/mystery-man.svg', categories: ['IMAGE'], + wildcard: true, base64: false }), tokenRingImg: new fields.FilePathField({ initial: 'icons/svg/mystery-man.svg', categories: ['IMAGE'], + wildcard: true, base64: false }), tokenSize: new fields.SchemaField({ @@ -108,6 +110,30 @@ export default class DHBeastform extends BaseDataItem { }; } + static async getWildcardImage(actor, beastform) { + const usesDynamicToken = actor.prototypeToken.ring.enabled && beastform.system.tokenRingImg; + const tokenPath = usesDynamicToken ? beastform.system.tokenRingImg : beastform.system.tokenImg; + const usesWildcard = tokenPath.includes('*'); + if (usesWildcard) { + const filePicker = new foundry.applications.apps.FilePicker.implementation(tokenPath); + const { files } = await foundry.applications.apps.FilePicker.implementation.browse( + filePicker.activeSource, + tokenPath, + { + wildcard: true, + type: 'image' + } + ); + const selectedImage = await game.system.api.applications.dialogs.ImageSelectDialog.configure( + game.i18n.localize('DAGGERHEART.APPLICATIONS.ImageSelect.title'), + files + ); + return { usesDynamicToken, selectedImage }; + } + + return null; + } + async _preCreate() { if (!this.actor) return; diff --git a/styles/less/dialog/image-select/sheet.less b/styles/less/dialog/image-select/sheet.less new file mode 100644 index 00000000..1548044a --- /dev/null +++ b/styles/less/dialog/image-select/sheet.less @@ -0,0 +1,33 @@ +.daggerheart.dh-style.dialog.image-select { + display: flex; + flex-direction: column; + + .images-container { + display: flex; + flex-wrap: wrap; + gap: 8px; + + img { + width: 136px; + height: 136px; + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + opacity: 0.4; + + &.selected { + opacity: 1; + } + } + } + + .footer { + margin-top: 8px; + display: flex; + align-items: center; + gap: 8px; + + button { + flex: 1; + } + } +} diff --git a/styles/less/dialog/index.less b/styles/less/dialog/index.less index 65af4a71..d4104d3c 100644 --- a/styles/less/dialog/index.less +++ b/styles/less/dialog/index.less @@ -30,3 +30,5 @@ @import './multiclass-choice/sheet.less'; @import './reroll-dialog/sheet.less'; + +@import './image-select/sheet.less'; diff --git a/templates/dialogs/image-select/footer.hbs b/templates/dialogs/image-select/footer.hbs new file mode 100644 index 00000000..cd7d3d1a --- /dev/null +++ b/templates/dialogs/image-select/footer.hbs @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/templates/dialogs/image-select/main.hbs b/templates/dialogs/image-select/main.hbs new file mode 100644 index 00000000..099d88c3 --- /dev/null +++ b/templates/dialogs/image-select/main.hbs @@ -0,0 +1,5 @@ +
+ {{#each images as |image|}} + + {{/each}} +
\ No newline at end of file