diff --git a/module/applications/ux/contextMenu.mjs b/module/applications/ux/contextMenu.mjs index 081e6ba0..4e4ec6a4 100644 --- a/module/applications/ux/contextMenu.mjs +++ b/module/applications/ux/contextMenu.mjs @@ -1,97 +1,4 @@ -/** - * @typedef ContextMenuEntry - * @property {string} name The context menu label. Can be localized. - * @property {string} [icon] A string containing an HTML icon element for the menu item. - * @property {string} [classes] Additional CSS classes to apply to this menu item. - * @property {string} [group] An identifier for a group this entry belongs to. - * @property {ContextMenuJQueryCallback} callback The function to call when the menu item is clicked. - * @property {ContextMenuCondition|boolean} [condition] A function to call or boolean value to determine if this entry - * appears in the menu. - */ - -/** - * @callback ContextMenuCondition - * @param {jQuery|HTMLElement} html The element of the context menu entry. - * @returns {boolean} Whether the entry should be rendered in the context menu. - */ - -/** - * @callback ContextMenuCallback - * @param {HTMLElement} target The element that the context menu has been triggered for. - * @returns {unknown} - */ - -/** - * @callback ContextMenuJQueryCallback - * @param {HTMLElement|jQuery} target The element that the context menu has been triggered for. Will - * either be a jQuery object or an HTMLElement instance, depending - * on how the ContextMenu was configured. - * @returns {unknown} - */ - -/** - * @typedef ContextMenuOptions - * @property {string} [eventName="contextmenu"] Optionally override the triggering event which can spawn the menu. If - * the menu is using fixed positioning, this event must be a MouseEvent. - * @property {ContextMenuCallback} [onOpen] A function to call when the context menu is opened. - * @property {ContextMenuCallback} [onClose] A function to call when the context menu is closed. - * @property {boolean} [fixed=false] If true, the context menu is given a fixed position rather than being - * injected into the target. - * @property {boolean} [jQuery=true] If true, callbacks will be passed jQuery objects instead of HTMLElement - * instances. - */ - -/** - * @typedef ContextMenuRenderOptions - * @property {Event} [event] The event that triggered the context menu opening. - * @property {boolean} [animate=true] Animate the context menu opening. - */ - -/** - * A subclass of ContextMenu. - * @extends {foundry.applications.ux.ContextMenu} - */ export default class DHContextMenu extends foundry.applications.ux.ContextMenu { - /** - * @param {HTMLElement|jQuery} container - The HTML element that contains the context menu targets. - * @param {string} selector - A CSS selector which activates the context menu. - * @param {ContextMenuEntry[]} menuItems - An Array of entries to display in the menu - * @param {ContextMenuOptions} [options] - Additional options to configure the context menu. - */ - constructor(container, selector, menuItems, options) { - super(container, selector, menuItems, options); - - /** @deprecated since v13 until v15 */ - this.#jQuery = options.jQuery; - } - - /** - * Whether to pass jQuery objects or HTMLElement instances to callback. - * @type {boolean} - */ - #jQuery; - - /**@inheritdoc */ - activateListeners(menu) { - menu.addEventListener('click', this.#onClickItem.bind(this)); - } - - /** - * Handle click events on context menu items. - * @param {PointerEvent} event The click event - */ - #onClickItem(event) { - event.preventDefault(); - event.stopPropagation(); - const element = event.target.closest('.context-item'); - if (!element) return; - const item = this.menuItems.find(i => i.element === element); - item?.callback(this.#jQuery ? $(this.target) : this.target, event); - this.close(); - } - - /* -------------------------------------------- */ - /** * Trigger a context menu event in response to a normal click on a additional options button. * @param {PointerEvent} event diff --git a/module/canvas/placeables/token.mjs b/module/canvas/placeables/token.mjs index c23785bc..cf6c8e21 100644 --- a/module/canvas/placeables/token.mjs +++ b/module/canvas/placeables/token.mjs @@ -48,7 +48,7 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { /**@inheritdoc */ async _drawEffect(src, tint, effect) { if (!src) return; - const tex = await loadTexture(src, { fallback: 'icons/svg/hazard.svg' }); + const tex = await foundry.canvas.loadTexture(src, { fallback: 'icons/svg/hazard.svg' }); const icon = new PIXI.Sprite(tex); icon.tint = tint ?? 0xffffff; @@ -62,7 +62,7 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { const nrDigits = Math.floor(Math.log10(effect.system.stacking.value)) + 1; stackOverlay.y = -8; /* This does not account for 1:s being much less wide than other digits. I don't think it's desired however as it makes it look jumpy */ - stackOverlay.x = icon.width - 8 - nrDigits * 56 + (lastDigitIsOne ? 16 : 0); + stackOverlay.x = icon.width - 8 - nrDigits * 56; stackOverlay.anchor.set(0, 0); icon.addChild(stackOverlay); diff --git a/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json b/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json index b5239242..2f3ce20d 100644 --- a/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json +++ b/src/packs/classes/feature_No_Mercy_njj2C3tMDeCHHOoh.json @@ -71,13 +71,18 @@ "changes": [ { "key": "system.bonuses.roll.attack.bonus", - "value": 1, + "type": "add", + "value": "@stacks", "priority": null, - "type": "add" + "phase": "initial" } ], "duration": { "type": "shortRest" + }, + "stacking": { + "enabled": true, + "max": null } }, "disabled": false, diff --git a/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json b/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json index 0f31f491..c4bf8ce8 100644 --- a/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json +++ b/src/packs/classes/feature_Rogue_s_Dodge_hVaaPIjxoextIgSL.json @@ -69,14 +69,19 @@ "changes": [ { "key": "system.evasion", - "value": 2, + "type": "add", + "value": "2 * @stacks", "priority": null, - "type": "add" + "phase": "initial" } ], "duration": { "type": "temporary", "description": "

Until the next time an attack succeeds against you.

" + }, + "stacking": { + "enabled": true, + "max": null } }, "disabled": false, diff --git a/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json b/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json index 09dff08a..064bf277 100644 --- a/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json +++ b/src/packs/domains/domainCard_Corrosive_Projectile_qJaSNTuDfbPVr8Lb.json @@ -127,7 +127,7 @@ "sort": 3400000, "effects": [ { - "name": "Corroded (1 stack)", + "name": "Corroded", "img": "icons/magic/acid/dissolve-bone-white.webp", "origin": "Compendium.daggerheart.domains.Item.qJaSNTuDfbPVr8Lb", "transfer": false, @@ -139,27 +139,32 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.difficulty", + "type": "add", + "value": "-@stack", + "priority": null, + "phase": "initial" + } + ], + "stacking": { + "enabled": true, + "max": null + }, + "duration": { + "type": "" } }, - "changes": [ - { - "key": "system.difficulty", - "mode": 2, - "value": "-1", - "priority": null - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "

While a target is Corroded, they gain a −1 penalty to their Difficulty for every 2 Stress you spent. This condition can stack.

", + "description": "

While a target is Corroded, they gain a −1 penalty to their Difficulty for every 2 Stress you spent. This condition can stack.

", "tint": "#ffffff", "statuses": [ "corrode" @@ -169,6 +174,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!qJaSNTuDfbPVr8Lb.zB95bjSSdVlApQnR" } ], diff --git a/src/packs/domains/domainCard_Rage_Up_GRL0cvs96vrTDckZ.json b/src/packs/domains/domainCard_Rage_Up_GRL0cvs96vrTDckZ.json index 6f8b481d..8baedd50 100644 --- a/src/packs/domains/domainCard_Rage_Up_GRL0cvs96vrTDckZ.json +++ b/src/packs/domains/domainCard_Rage_Up_GRL0cvs96vrTDckZ.json @@ -42,44 +42,8 @@ "type": "self", "amount": null }, - "name": "Mark 1 Stress", - "img": "icons/magic/control/silhouette-aura-energy.webp", - "range": "self" - }, - "fKY9NcYBwCFwMsgV": { - "type": "effect", - "_id": "fKY9NcYBwCFwMsgV", - "systemPath": "actions", - "description": "

You can mark a Stress to gain a bonus to your damage roll equal to twice your Strength.

", - "chatDisplay": true, - "actionType": "action", - "cost": [ - { - "scalable": false, - "key": "stress", - "value": 2, - "step": null, - "consumeOnSuccess": false - } - ], - "uses": { - "value": null, - "max": "", - "recovery": null, - "consumeOnSuccess": false - }, - "effects": [ - { - "_id": "t6SIjQxB6UBUJ98f", - "onSave": false - } - ], - "target": { - "type": "self", - "amount": null - }, - "name": "Mark 2 Stress", - "img": "icons/magic/control/silhouette-aura-energy.webp", + "name": "Mark Stress", + "img": "icons/skills/wounds/injury-face-impact-orange.webp", "range": "self" } }, @@ -94,8 +58,8 @@ "sort": 3400000, "effects": [ { - "name": "Rage Up (1)", - "img": "systems/daggerheart/assets/icons/domains/domain-card/blade.png", + "name": "Rage Up", + "img": "icons/skills/wounds/injury-face-impact-orange.webp", "origin": "Compendium.daggerheart.domains.Item.GRL0cvs96vrTDckZ", "transfer": false, "_id": "bq1MhcmoP6Wo5CXF", @@ -106,33 +70,39 @@ "type": "withinRange", "target": "hostile", "range": "melee" + }, + "changes": [ + { + "key": "system.bonuses.damage.magical.bonus", + "type": "add", + "value": "2*@system.traits.strength.value*@stacks", + "priority": 21, + "phase": "initial" + }, + { + "key": "system.bonuses.damage.physical.bonus", + "type": "add", + "value": "2*@system.traits.strength.value*@stacks", + "priority": 21, + "phase": "initial" + } + ], + "stacking": { + "enabled": true, + "max": 2 + }, + "duration": { + "type": "" } }, - "changes": [ - { - "key": "system.bonuses.damage.magical.bonus", - "mode": 2, - "value": "2*@system.traits.strength.value", - "priority": 21 - }, - { - "key": "system.bonuses.damage.physical.bonus", - "mode": 2, - "value": "2*@system.traits.strength.value", - "priority": 21 - } - ], "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, - "description": "", + "description": "

For your next attack you have a bonus to your damage roll equal to twice your Strength.

", "tint": "#ffffff", "statuses": [], "sort": 0, @@ -140,6 +110,16 @@ "_stats": { "compendiumSource": null }, + "start": { + "time": 0, + "combat": null, + "combatant": null, + "initiative": null, + "round": null, + "turn": null + }, + "showIcon": 1, + "folder": null, "_key": "!items.effects!GRL0cvs96vrTDckZ.bq1MhcmoP6Wo5CXF" }, { @@ -155,31 +135,28 @@ "type": "withinRange", "target": "hostile", "range": "melee" - } - }, - "changes": [ - { - "key": "system.bonuses.damage.magical.bonus", - "mode": 2, - "value": "4*@system.traits.strength.value", - "priority": 21 }, - { - "key": "system.bonuses.damage.physical.bonus", - "mode": 2, - "value": "4*@system.traits.strength.value", - "priority": 21 - } - ], + "changes": [ + { + "key": "system.bonuses.damage.magical.bonus", + "value": "4*@system.traits.strength.value", + "priority": 21, + "type": "add" + }, + { + "key": "system.bonuses.damage.physical.bonus", + "value": "4*@system.traits.strength.value", + "priority": 21, + "type": "add" + } + ] + }, "disabled": false, "duration": { - "startTime": null, - "combat": null, - "seconds": null, - "rounds": null, - "turns": null, - "startRound": null, - "startTurn": null + "value": null, + "units": "seconds", + "expiry": null, + "expired": false }, "description": "", "tint": "#ffffff", @@ -189,6 +166,9 @@ "_stats": { "compendiumSource": null }, + "start": null, + "showIcon": 1, + "folder": null, "_key": "!items.effects!GRL0cvs96vrTDckZ.t6SIjQxB6UBUJ98f" } ],