[Feature] 1766 - Group Attack (#1770)

* Implemented group attack logic

* Updated all minions in the SRD to use the group attack functionality

* .

* Renamed groupAttack.nr to groupAttack.numAttackers

* Moved the flag vs global setting logic to documents/scene

* .
This commit is contained in:
WBHarry 2026-04-09 22:07:51 +02:00 committed by GitHub
parent b505e15eb2
commit ae480157d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
32 changed files with 1286 additions and 220 deletions

View file

@ -131,6 +131,7 @@
"attackName": "Attack Name",
"criticalThreshold": "Critical Threshold",
"includeBase": { "label": "Include Item Damage" },
"groupAttack": { "label": "Group Attack" },
"multiplier": "Multiplier",
"saveHint": "Set a default Trait to enable Reaction Roll. It can be changed later in Reaction Roll Dialog.",
"resultBased": {
@ -3143,7 +3144,8 @@
"tokenActorsMissing": "[{names}] missing Actors",
"domainTouchRequirement": "This domain card requires {nr} {domain} cards in the loadout to be used",
"knowTheTide": "Know The Tide gained a token",
"lackingItemTransferPermission": "User {user} lacks owner permission needed to transfer items to {target}"
"lackingItemTransferPermission": "User {user} lacks owner permission needed to transfer items to {target}",
"noTokenTargeted": "No token is targeted"
},
"Progress": {
"migrationLabel": "Performing system migration. Please wait and do not close Foundry."

View file

@ -22,6 +22,7 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application
},
actions: {
toggleSelectedEffect: this.toggleSelectedEffect,
updateGroupAttack: this.updateGroupAttack,
toggleCritical: this.toggleCritical,
submitRoll: this.submitRoll
},
@ -64,15 +65,40 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application
context.hasSelectedEffects = Boolean(Object.keys(this.selectedEffects).length);
context.selectedEffects = this.selectedEffects;
context.damageOptions = this.config.damageOptions;
context.rangeOptions = CONFIG.DH.GENERAL.groupAttackRange;
return context;
}
static updateRollConfiguration(_event, _, formData) {
const { ...rest } = foundry.utils.expandObject(formData.object);
foundry.utils.mergeObject(this.config.roll, rest.roll);
foundry.utils.mergeObject(this.config.modifiers, rest.modifiers);
this.config.selectedMessageMode = rest.selectedMessageMode;
const data = foundry.utils.expandObject(formData.object);
foundry.utils.mergeObject(this.config.roll, data.roll);
foundry.utils.mergeObject(this.config.modifiers, data.modifiers);
this.config.selectedMessageMode = data.selectedMessageMode;
if (data.damageOptions) {
const numAttackers = data.damageOptions.groupAttack?.numAttackers;
if (typeof numAttackers !== 'number' || numAttackers % 1 !== 0) {
data.damageOptions.groupAttack.numAttackers = null;
}
foundry.utils.mergeObject(this.config.damageOptions, data.damageOptions);
}
this.render();
}
static updateGroupAttack() {
const targets = Array.from(game.user.targets);
if (targets.length === 0)
return ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.noTokenTargeted'));
const actorId = this.roll.data.parent.id;
const range = this.config.damageOptions.groupAttack.range;
const groupAttackTokens = game.system.api.fields.ActionFields.DamageField.getGroupAttackTokens(actorId, range);
this.config.damageOptions.groupAttack.numAttackers = groupAttackTokens.length;
this.render();
}

View file

@ -70,6 +70,14 @@ export const range = {
}
};
export const groupAttackRange = {
melee: range.melee,
veryClose: range.veryClose,
close: range.close,
far: range.far,
veryFar: range.veryFar
};
/* circle|cone|rect|ray used to be CONST.MEASURED_TEMPLATE_TYPES. Hardcoded for now */
export const templateTypes = {
CIRCLE: 'circle',

View file

@ -280,6 +280,26 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
}
};
if (this.damage) {
config.isDirect = this.damage.direct;
const groupAttackTokens = this.damage.groupAttack
? game.system.api.fields.ActionFields.DamageField.getGroupAttackTokens(
this.actor.id,
this.damage.groupAttack
)
: null;
config.damageOptions = {
groupAttack: this.damage.groupAttack
? {
numAttackers: Math.max(groupAttackTokens.length, 1),
range: this.damage.groupAttack
}
: null
};
}
DHBaseAction.applyKeybindings(config);
return config;
}

View file

@ -48,6 +48,7 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
action: new fields.StringField()
}),
damage: new fields.ObjectField(),
damageOptions: new fields.ObjectField(),
costs: new fields.ArrayField(new fields.ObjectField()),
successConsumed: new fields.BooleanField({ initial: false })
};

View file

@ -18,7 +18,12 @@ export default class DamageField extends fields.SchemaField {
initial: false,
label: 'DAGGERHEART.ACTIONS.Settings.includeBase.label'
}),
direct: new fields.BooleanField({ initial: false, label: 'DAGGERHEART.CONFIG.DamageType.direct.name' })
direct: new fields.BooleanField({ initial: false, label: 'DAGGERHEART.CONFIG.DamageType.direct.name' }),
groupAttack: new fields.StringField({
choices: CONFIG.DH.GENERAL.groupAttackRange,
blank: true,
label: 'DAGGERHEART.ACTIONS.Settings.groupAttack.label'
})
};
super(damageFields, options, context);
}
@ -224,6 +229,22 @@ export default class DamageField extends fields.SchemaField {
game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation).roll.damageApply.players)
);
}
static getGroupAttackTokens(actorId, range) {
if (!canvas.scene) return [];
const targets = Array.from(game.user.targets);
const rangeSettings = canvas.scene?.rangeSettings;
if (!rangeSettings) return [];
const maxDistance = rangeSettings[range];
return canvas.scene.tokens.filter(x => {
if (x.actor?.id !== actorId) return false;
if (targets.every(target => x.object.distanceTo(target) > maxDistance)) return false;
return true;
});
}
}
export class DHActionDiceData extends foundry.abstract.DataModel {

View file

@ -144,6 +144,7 @@ export default class DamageRoll extends DHRoll {
constructFormula(config) {
this.options.isCritical = config.isCritical;
for (const [index, part] of this.options.roll.entries()) {
const isHitpointPart = part.applyTo === CONFIG.DH.GENERAL.healingTypes.hitPoints.id;
part.roll = new Roll(Roll.replaceFormulaData(part.formula, config.data));
part.roll.terms = Roll.parse(part.roll.formula, config.data);
if (part.applyTo === CONFIG.DH.GENERAL.healingTypes.hitPoints.id) {
@ -169,7 +170,16 @@ export default class DamageRoll extends DHRoll {
);
}
if (config.isCritical && part.applyTo === CONFIG.DH.GENERAL.healingTypes.hitPoints.id) {
if (config.damageOptions.groupAttack?.numAttackers > 1 && isHitpointPart) {
const damageTypes = [foundry.dice.terms.Die, foundry.dice.terms.NumericTerm];
for (const term of part.roll.terms) {
if (damageTypes.some(type => term instanceof type)) {
term.number *= config.damageOptions.groupAttack.numAttackers;
}
}
}
if (config.isCritical && isHitpointPart) {
const total = part.roll.dice.reduce((acc, term) => acc + term._faces * term._number, 0);
if (total > 0) {
part.roll.terms.push(...this.formatModifier(total));

View file

@ -1,6 +1,16 @@
import DHToken from './token.mjs';
export default class DhScene extends Scene {
get rangeSettings() {
const { custom } = CONFIG.DH.GENERAL.sceneRangeMeasurementSetting;
const sceneMeasurements = this.flags.daggerheart?.rangeMeasurement;
const globalMeasurements = game.settings.get(
CONFIG.DH.id,
CONFIG.DH.SETTINGS.gameSettings.variantRules
).rangeMeasurement;
return sceneMeasurements?.setting === custom.id ? sceneMeasurements : globalMeasurements;
}
/** A map of `TokenDocument` IDs embedded in this scene long with new dimensions from actor size-category changes */
#sizeSyncBatch = new Map();

View file

@ -118,13 +118,6 @@ const getTemplateDistance = range => {
const rangeNumber = Number(range);
if (!Number.isNaN(rangeNumber)) return rangeNumber;
const { custom } = CONFIG.DH.GENERAL.sceneRangeMeasurementSetting;
const sceneMeasurements = canvas.scene?.flags.daggerheart?.rangeMeasurement;
const globalMeasurements = game.settings.get(
CONFIG.DH.id,
CONFIG.DH.SETTINGS.gameSettings.variantRules
).rangeMeasurement;
const settings = sceneMeasurements?.setting === custom.id ? sceneMeasurements : globalMeasurements;
return settings[range];
const settings = canvas.scene?.rangeSettings;
return settings ? settings[range] : 0;
};

View file

@ -131,12 +131,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -187,7 +184,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -213,7 +210,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -249,33 +247,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"vgguNWz8vG8aoLXR": {
"type": "effect",
"_id": "vgguNWz8vG8aoLXR",
"SrNyZgPvCXMpbCLG": {
"type": "attack",
"_id": "SrNyZgPvCXMpbCLG",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "4"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/magic/unholy/orb-hands-pink.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -242,33 +240,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"cbAvPSIhwBMBTI3D": {
"type": "effect",
"_id": "cbAvPSIhwBMBTI3D",
"FCeTuf71gCzRiO5N": {
"type": "attack",
"_id": "FCeTuf71gCzRiO5N",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "6"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -242,33 +240,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all Cult @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"EH1preaTWBD4rOvx": {
"type": "effect",
"_id": "EH1preaTWBD4rOvx",
"4M2MvVzEgIQEQHBS": {
"type": "attack",
"_id": "4M2MvVzEgIQEQHBS",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "5"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": null,
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -242,33 +240,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"vXHZVb0Y7Hqu3uso": {
"type": "effect",
"_id": "vXHZVb0Y7Hqu3uso",
"S3dYxRclyhYINRi8": {
"type": "attack",
"_id": "S3dYxRclyhYINRi8",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "5"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/magic/unholy/orb-hands-pink.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -320,33 +318,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"QHNRSEQmqOcaoXq4": {
"type": "effect",
"_id": "QHNRSEQmqOcaoXq4",
"G0DVft7h55pBnwJA": {
"type": "attack",
"_id": "G0DVft7h55pBnwJA",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "12"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/magic/unholy/orb-hands-pink.webp",
"range": ""
}
},

View file

@ -131,12 +131,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -187,7 +184,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -213,7 +210,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -272,8 +270,38 @@
"recovery": null
},
"damage": {
"parts": {},
"includeBase": false
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "1"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"groupAttack": "close"
},
"target": {
"type": "any",
@ -300,7 +328,7 @@
"difficulty": null,
"damageMod": "none"
},
"name": "Attack",
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -242,35 +240,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"DjbPQowW1OdBD9Zn": {
"type": "effect",
"_id": "DjbPQowW1OdBD9Zn",
"wez1xgy9vScux9wi": {
"type": "attack",
"_id": "wez1xgy9vScux9wi",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"consumeOnSuccess": false,
"scalable": false,
"key": "fear",
"value": 1,
"keyIsID": false,
"step": null,
"consumeOnSuccess": false
"itemId": null,
"step": null
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "5"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -297,33 +295,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"eo7J0v1B5zPHul1M": {
"type": "effect",
"_id": "eo7J0v1B5zPHul1M",
"irZGPKPpGLA6sP2y": {
"type": "attack",
"_id": "irZGPKPpGLA6sP2y",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "10"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -131,12 +131,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -187,7 +184,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -213,7 +210,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -251,33 +249,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name] within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"aoQDb2m32NDxE6ZP": {
"type": "effect",
"_id": "aoQDb2m32NDxE6ZP",
"ferZO3BuiP9zU46m": {
"type": "attack",
"_id": "ferZO3BuiP9zU46m",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"consumeOnSuccess": false,
"scalable": false,
"key": "fear",
"value": 1,
"itemId": null,
"step": null
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "2"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -245,33 +243,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"xTMNAHcoErKuR6TZ": {
"type": "effect",
"_id": "xTMNAHcoErKuR6TZ",
"xFlhxnQWmVvDqQ55": {
"type": "attack",
"_id": "xFlhxnQWmVvDqQ55",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "4"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -242,33 +240,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"tvQetauskZoHDR5y": {
"type": "effect",
"_id": "tvQetauskZoHDR5y",
"6VKv71tPUIGGIfkZ": {
"type": "attack",
"_id": "6VKv71tPUIGGIfkZ",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"consumeOnSuccess": false,
"scalable": false,
"key": "fear",
"value": 1,
"itemId": null,
"step": null
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "11"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -245,33 +243,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"DJBNtd3hWjwsjPwq": {
"type": "effect",
"_id": "DJBNtd3hWjwsjPwq",
"8wRrAWHU0xHW4zuE": {
"type": "attack",
"_id": "8wRrAWHU0xHW4zuE",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "2"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -245,33 +243,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"ghgFZskDiizJDjcn": {
"type": "effect",
"_id": "ghgFZskDiizJDjcn",
"K3pF2DBnR9zJ90W8": {
"type": "attack",
"_id": "K3pF2DBnR9zJ90W8",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"consumeOnSuccess": false,
"scalable": false,
"key": "fear",
"value": 1,
"itemId": null,
"step": null
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "3"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -245,33 +243,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"Sz55uB8xkoNytLwJ": {
"type": "effect",
"_id": "Sz55uB8xkoNytLwJ",
"6rdwJKwsSCO4R0Ty": {
"type": "attack",
"_id": "6rdwJKwsSCO4R0Ty",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "1"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -164,12 +164,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -220,7 +217,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -246,7 +243,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -284,33 +282,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"ZC5pKIb9N82vgMWu": {
"type": "effect",
"_id": "ZC5pKIb9N82vgMWu",
"V58Ry90tvIjvfDTZ": {
"type": "attack",
"_id": "V58Ry90tvIjvfDTZ",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"consumeOnSuccess": false,
"scalable": false,
"key": "fear",
"value": 1,
"itemId": null,
"step": null
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "2"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/creatures/abilities/tail-strike-bone-orange.webp",
"range": ""
}
},

View file

@ -125,12 +125,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5,
"anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain",
"scaleX": 1,
"scaleY": 1,
"rotation": 0,
"tint": "#ffffff",
"alphaThreshold": 0.75
},
@ -181,7 +178,7 @@
"saturation": 0,
"contrast": 0
},
"detectionModes": [],
"detectionModes": {},
"occludable": {
"radius": 0
},
@ -207,7 +204,8 @@
"flags": {},
"randomImg": false,
"appendNumber": false,
"prependAdjective": false
"prependAdjective": false,
"depth": 1
},
"items": [
{
@ -242,33 +240,95 @@
"description": "<p><strong>Spend a Fear</strong> to choose a target and spotlight all @Lookup[@name]s within Close range of them. Those Minions move into Melee range of the target and make one shared attack roll. On a success, they deal @Lookup[@system.attack.damageFormula] physical damage each. Combine this damage.</p>",
"resource": null,
"actions": {
"euP8VA4wvfsCpwN1": {
"type": "effect",
"_id": "euP8VA4wvfsCpwN1",
"Itubbr63irPJcbXG": {
"type": "attack",
"_id": "Itubbr63irPJcbXG",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"cost": [
{
"scalable": false,
"key": "fear",
"value": 1,
"step": null
"itemId": null,
"step": null,
"consumeOnSuccess": false
}
],
"uses": {
"value": null,
"max": "",
"recovery": null
"recovery": null,
"consumeOnSuccess": false
},
"damage": {
"parts": {
"hitPoints": {
"applyTo": "hitPoints",
"resultBased": false,
"value": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": true,
"formula": "8"
}
},
"valueAlt": {
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false,
"formula": ""
}
},
"base": false,
"type": [
"physical"
]
}
},
"includeBase": false,
"direct": false,
"groupAttack": "close"
},
"effects": [],
"target": {
"type": "self",
"type": "any",
"amount": null
},
"effects": [],
"roll": {
"type": "attack",
"trait": null,
"difficulty": null,
"bonus": null,
"advState": "neutral",
"diceRolling": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"compare": null,
"treshold": null
},
"useDefault": false
},
"save": {
"trait": null,
"difficulty": null,
"damageMod": "none"
},
"name": "Spend Fear",
"img": "icons/magic/unholy/orb-hands-pink.webp",
"range": ""
}
},

View file

@ -21,7 +21,7 @@
gap: 4px;
.critical-chip {
flex: 0;
display: flex;
align-items: center;
border-radius: 5px;
@ -41,6 +41,26 @@
}
}
.group-attack-container {
margin: 0;
.group-attack-inner-container {
display: flex;
align-items: center;
gap: 16px;
> * {
flex: 1;
}
.group-attack-tools {
display: flex;
align-items: center;
gap: 4px;
}
}
}
.damage-section-controls {
display: flex;
align-items: center;

View file

@ -419,11 +419,19 @@
width: fit-content;
display: flex;
align-items: center;
.form-fields {
height: 32px;
align-content: center;
}
}
&.select {
width: fit-content;
display: flex;
align-items: center;
gap: 4px;
}
}
.scalable-input {

View file

@ -8,13 +8,16 @@
{{/if}}
{{#unless (eq path 'system.attack.')}}<a data-action="addDamage" {{#if @root.allDamageTypesUsed}}disabled{{/if}}><i class="fa-solid fa-plus icon-button"></i></a>{{/unless}}
</legend>
<div class="nest-inputs space-between">
<div class="nest-inputs">
{{#if @root.hasBaseDamage}}
{{formField @root.fields.damage.fields.includeBase value=@root.source.damage.includeBase name="damage.includeBase" classes="checkbox" localize=true }}
{{/if}}
{{#unless (eq @root.source.type 'healing')}}
{{formField directField value=source.direct name=(concat path "damage.direct") localize=true classes="checkbox"}}
{{formField baseFields.direct value=source.direct name=(concat path "damage.direct") localize=true classes="checkbox"}}
{{/unless}}
{{#if (and @root.isNPC (not (eq path 'system.attack.')))}}
{{formField baseFields.groupAttack value=source.groupAttack name=(concat path "damage.groupAttack") localize=true classes="select"}}
{{/if}}
</div>
{{!-- Handlebars uses Symbol.Iterator to produce index|key. This isn't compatible with our parts object, so we instead use applyTo, which is the same value --}}

View file

@ -42,6 +42,24 @@
</button>
</div>
{{/each}}
{{#if damageOptions.groupAttack}}
<fieldset class="group-attack-container">
<legend>{{localize "DAGGERHEART.ACTIONS.Settings.groupAttack.label"}}</legend>
<div class="group-attack-inner-container">
<input type="text" data-dtype="Number" name="damageOptions.groupAttack.numAttackers" value="{{damageOptions.groupAttack.numAttackers}}" />
<div class="group-attack-tools">
<select name="damageOptions.groupAttack.range">
{{selectOptions rangeOptions selected=damageOptions.groupAttack.range localize=true}}
</select>
<button data-action="updateGroupAttack"><i class="fa-solid fa-crosshairs"></i></button>
</div>
</div>
</fieldset>
{{/if}}
{{#unless (empty @root.modifiers)}}
<fieldset class="modifier-container two-columns">
<legend>{{localize "DAGGERHEART.GENERAL.Modifier.plural"}}</legend>

View file

@ -5,7 +5,7 @@
>
{{#if fields.roll}}{{> 'systems/daggerheart/templates/actionTypes/roll.hbs' fields=fields.roll.fields source=source.roll}}{{/if}}
{{#if fields.save}}{{> 'systems/daggerheart/templates/actionTypes/save.hbs' fields=fields.save.fields source=source.save}}{{/if}}
{{#if fields.damage}}{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=fields.damage.fields.parts.element.fields source=source.damage directField=fields.damage.fields.direct }}{{/if}}
{{#if fields.damage}}{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=fields.damage.fields.parts.element.fields source=source.damage baseFields=fields.damage.fields }}{{/if}}
{{#if fields.macro}}{{> 'systems/daggerheart/templates/actionTypes/macro.hbs' fields=fields.macro source=source.macro}}{{/if}}
{{#if fields.effects}}{{> 'systems/daggerheart/templates/actionTypes/effect.hbs' fields=fields.effects.element.fields source=source.effects}}{{/if}}
{{#if fields.beastform}}{{> 'systems/daggerheart/templates/actionTypes/beastform.hbs' fields=fields.beastform.fields source=source.beastform}}{{/if}}

View file

@ -22,5 +22,5 @@
</div>
{{formGroup systemFields.criticalThreshold value=document._source.system.criticalThreshold label="DAGGERHEART.ACTIONS.Settings.criticalThreshold" name="system.criticalThreshold" localize=true}}
</fieldset>
{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=systemFields.attack.fields.damage.fields.parts.element.fields source=document.system.attack.damage path="system.attack." directField=systemFields.attack.fields.damage.fields.direct horde=(eq document._source.system.type 'horde')}}
{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=systemFields.attack.fields.damage.fields.parts.element.fields source=document.system.attack.damage path="system.attack." baseFields=systemFields.attack.fields.damage.fields horde=(eq document._source.system.type 'horde')}}
</section>

View file

@ -18,5 +18,5 @@
{{/if}}
{{/if}}
</fieldset>
{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=systemFields.attack.fields.damage.fields.parts.element.fields source=document.system.attack.damage path="system.attack." directField=systemFields.attack.fields.damage.fields.direct}}
{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=systemFields.attack.fields.damage.fields.parts.element.fields source=document.system.attack.damage path="system.attack." baseFields=systemFields.attack.fields.damage.fields}}
</section>