Merged with main

This commit is contained in:
WBHarry 2026-04-22 15:32:10 +02:00
commit 4e555dd314
174 changed files with 3707 additions and 1217 deletions

View file

@ -1,3 +1,5 @@
[*] [*]
indent_size = 4 indent_size = 4
indent_style = spaces indent_style = spaces
[*.yml]
indent_size = 2

42
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: Project CI
on:
pull_request:
branches: [main]
push:
branches: [main]
workflow_dispatch:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [24.x]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- uses: pnpm/action-setup@v4
with:
version: 10
- name: Cache NPM Deps
id: cache-npm
uses: actions/cache@v3
with:
path: node_modules/
key: npm-${{ hashFiles('package-lock.json') }}
- name: Install NPM Deps
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
run: npm ci
- name: Lint
run: npm run lint

View file

@ -32,6 +32,11 @@ CONFIG.Dice.daggerheart = {
FateRoll: FateRoll FateRoll: FateRoll
}; };
CONFIG.RegionBehavior.dataModels = {
...CONFIG.RegionBehavior.dataModels,
...data.regionBehaviors
};
Object.assign(CONFIG.Dice.termTypes, dice.diceTypes); Object.assign(CONFIG.Dice.termTypes, dice.diceTypes);
CONFIG.Actor.documentClass = documents.DhpActor; CONFIG.Actor.documentClass = documents.DhpActor;

14
eslint.config.mjs Normal file
View file

@ -0,0 +1,14 @@
import globals from 'globals';
import { defineConfig } from 'eslint/config';
import prettier from 'eslint-plugin-prettier';
export default defineConfig([
{ files: ['**/*.{js,mjs,cjs}'], languageOptions: { globals: globals.browser } },
{ plugins: { prettier } },
{
files: ['**/*.{js,mjs,cjs}'],
rules: {
'prettier/prettier': 'error'
}
}
]);

View file

@ -109,11 +109,18 @@
"customFormula": "Custom Formula", "customFormula": "Custom Formula",
"formula": "Formula" "formula": "Formula"
}, },
"area": {
"sectionTitle": "Areas",
"shape": "Shape",
"size": "Size"
},
"displayInChat": "Display in chat", "displayInChat": "Display in chat",
"deleteTriggerTitle": "Delete Trigger", "deleteTriggerTitle": "Delete Trigger",
"deleteTriggerContent": "Are you sure you want to delete the {trigger} trigger?", "deleteTriggerContent": "Are you sure you want to delete the {trigger} trigger?",
"advantageState": "Advantage State", "advantageState": "Advantage State",
"damageOnSave": "Damage on Save" "damageOnSave": "Damage on Save",
"useDefaultItemValues": "Use default Item values",
"itemDamageIsUsed": "Item Damage Is Used"
}, },
"RollField": { "RollField": {
"diceRolling": { "diceRolling": {
@ -128,7 +135,7 @@
"attackModifier": "Attack Modifier", "attackModifier": "Attack Modifier",
"attackName": "Attack Name", "attackName": "Attack Name",
"criticalThreshold": "Critical Threshold", "criticalThreshold": "Critical Threshold",
"includeBase": { "label": "Include Item Damage" }, "includeBase": { "label": "Use Item Damage" },
"groupAttack": { "label": "Group Attack" }, "groupAttack": { "label": "Group Attack" },
"multiplier": "Multiplier", "multiplier": "Multiplier",
"saveHint": "Set a default Trait to enable Reaction Roll. It can be changed later in Reaction Roll Dialog.", "saveHint": "Set a default Trait to enable Reaction Roll. It can be changed later in Reaction Roll Dialog.",
@ -161,7 +168,8 @@
"rangeDependence": { "rangeDependence": {
"title": "Range Dependence" "title": "Range Dependence"
}, },
"stacking": { "title": "Stacking" } "stacking": { "title": "Stacking" },
"targetDispositions": "Affected Dispositions"
}, },
"RangeDependance": { "RangeDependance": {
"hint": "Settings for an optional distance at which this effect should activate", "hint": "Settings for an optional distance at which this effect should activate",
@ -2446,6 +2454,7 @@
"maxWithThing": "Max {thing}", "maxWithThing": "Max {thing}",
"missingDragDropThing": "Drop {thing} here", "missingDragDropThing": "Drop {thing} here",
"multiclass": "Multiclass", "multiclass": "Multiclass",
"name": "Name",
"newCategory": "New Category", "newCategory": "New Category",
"newThing": "New {thing}", "newThing": "New {thing}",
"next": "Next", "next": "Next",
@ -3247,6 +3256,7 @@
"Tooltip": { "Tooltip": {
"disableEffect": "Disable Effect", "disableEffect": "Disable Effect",
"enableEffect": "Enable Effect", "enableEffect": "Enable Effect",
"edit": "Edit",
"openItemWorld": "Open Item World", "openItemWorld": "Open Item World",
"openActorWorld": "Open Actor World", "openActorWorld": "Open Actor World",
"sendToChat": "Send to Chat", "sendToChat": "Send to Chat",

View file

@ -72,8 +72,8 @@ export default class ActionSelectionDialog extends HandlebarsApplicationMixin(Ap
static async #onChooseAction(event, button) { static async #onChooseAction(event, button) {
const { actionId } = button.dataset; const { actionId } = button.dataset;
this.#action = this.#item.system.actionsList.find(a => a._id === actionId); this.action = this.item.system.actionsList.find(a => a._id === actionId);
Object.defineProperty(this.#event, 'shiftKey', { Object.defineProperty(this.event, 'shiftKey', {
get() { get() {
return event.shiftKey; return event.shiftKey;
} }

View file

@ -259,8 +259,9 @@ export default class DhpDowntime extends HandlebarsApplicationMixin(ApplicationV
const resetValue = increasing const resetValue = increasing
? 0 ? 0
: feature.system.resource.max : feature.system.resource.max
? Roll.replaceFormulaData(feature.system.resource.max, this.actor) ? new Roll(Roll.replaceFormulaData(feature.system.resource.max, this.actor)).evaluateSync().total
: 0; : 0;
await feature.update({ 'system.resource.value': resetValue }); await feature.update({ 'system.resource.value': resetValue });
} }

View file

@ -115,6 +115,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
async _onRender(context, options) { async _onRender(context, options) {
await super._onRender(context, options); await super._onRender(context, options);
// if (this.element.querySelector('.roll-selection')) {
// for (const element of this.element.querySelectorAll('.team-member-container')) {
// element.classList.add('select-padding');
// }
// }
if (this.element.querySelector('.team-container')) return; if (this.element.querySelector('.team-container')) return;
const initializationPart = this.element.querySelector('.initialization-container'); const initializationPart = this.element.querySelector('.initialization-container');
initializationPart.insertAdjacentHTML('afterend', '<div class="team-container"></div>'); initializationPart.insertAdjacentHTML('afterend', '<div class="team-container"></div>');
@ -133,7 +139,10 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
context.members = {}; context.members = {};
context.allHaveRolled = Object.keys(this.party.system.tagTeam.members).every(key => { context.allHaveRolled = Object.keys(this.party.system.tagTeam.members).every(key => {
const data = this.party.system.tagTeam.members[key]; const data = this.party.system.tagTeam.members[key];
return Boolean(data.rollData); const hasRolled = Boolean(data.rollData);
if (!hasRolled) return false;
return !data.rollData.options.hasDamage || Boolean(data.rollData.options.damage);
}); });
return context; return context;

View file

@ -264,7 +264,9 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2)
key = event.target.closest('[data-key]').dataset.key; key = event.target.closest('[data-key]').dataset.key;
if (!this.action[key]) return; if (!this.action[key]) return;
data[key].push(this.action.defaultValues[key] ?? {}); const value = key === 'areas' ? { name: this.action.item.name } : {};
data[key].push(this.action.defaultValues[key] ?? value);
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) }); this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) });
} }

View file

@ -19,15 +19,17 @@ export default class DHActionConfig extends DHActionBaseConfig {
return context; return context;
} }
static async addEffect(_event) { static async addEffect(event) {
const { areaIndex } = event.target.dataset;
if (!this.action.effects) return; if (!this.action.effects) return;
const data = this.action.toObject(); const data = this.action.toObject();
const created = await this.action.item.createEmbeddedDocuments('ActiveEffect', [ const created = await this.action.item.createEmbeddedDocuments('ActiveEffect', [
game.system.api.data.activeEffects.BaseEffect.getDefaultObject() game.system.api.data.activeEffects.BaseEffect.getDefaultObject({ transfer: false })
]); ]);
data.effects.push({ _id: created[0]._id }); if (areaIndex !== undefined) data.areas[areaIndex].effects.push(created[0]._id);
else data.effects.push({ _id: created[0]._id });
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) }); this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) });
this.action.item.effects.get(created[0]._id).sheet.render(true); this.action.item.effects.get(created[0]._id).sheet.render(true);
} }
@ -52,9 +54,19 @@ export default class DHActionConfig extends DHActionBaseConfig {
static removeEffect(event, button) { static removeEffect(event, button) {
if (!this.action.effects) return; if (!this.action.effects) return;
const index = button.dataset.index,
const { areaIndex, index } = button.dataset;
let effectId = null;
if (areaIndex !== undefined) {
effectId = this.action.areas[areaIndex].effects[index];
const data = this.action.toObject();
data.areas[areaIndex].effects.splice(index, 1);
this.constructor.updateForm.call(this, null, null, { object: foundry.utils.flattenObject(data) });
} else {
effectId = this.action.effects[index]._id; effectId = this.action.effects[index]._id;
this.constructor.removeElement.bind(this)(event, button); this.constructor.removeElement.call(this, event, button);
}
this.action.item.deleteEmbeddedDocuments('ActiveEffect', [effectId]); this.action.item.deleteEmbeddedDocuments('ActiveEffect', [effectId]);
} }

View file

@ -31,21 +31,35 @@ export default class DHActionSettingsConfig extends DHActionBaseConfig {
} }
static async addEffect(_event) { static async addEffect(_event) {
const { areaIndex } = event.target.dataset;
if (!this.action.effects) return; if (!this.action.effects) return;
const effectData = game.system.api.data.activeEffects.BaseEffect.getDefaultObject();
const effectData = game.system.api.data.activeEffects.BaseEffect.getDefaultObject({ transfer: false });
const data = this.action.toObject(); const data = this.action.toObject();
this.sheetUpdate(data, effectData); this.sheetUpdate(data, effectData);
this.effects = [...this.effects, effectData]; this.effects = [...this.effects, effectData];
data.effects.push({ _id: effectData.id });
if (areaIndex !== undefined) data.areas[areaIndex].effects.push(effectData.id);
else data.effects.push({ _id: effectData.id });
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) }); this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) });
} }
static removeEffect(event, button) { static removeEffect(event, button) {
if (!this.action.effects) return; if (!this.action.effects) return;
const index = button.dataset.index, const { areaIndex, index } = button.dataset;
let effectId = null;
if (areaIndex !== undefined) {
effectId = this.action.areas[areaIndex].effects[index];
const data = this.action.toObject();
data.areas[areaIndex].effects.splice(index, 1);
this.constructor.updateForm.call(this, null, null, { object: foundry.utils.flattenObject(data) });
} else {
effectId = this.action.effects[index]._id; effectId = this.action.effects[index]._id;
this.constructor.removeElement.bind(this)(event, button); this.constructor.removeElement.call(this, event, button);
}
this.sheetUpdate( this.sheetUpdate(
this.action.toObject(), this.action.toObject(),
this.effects.find(x => x.id === effectId), this.effects.find(x => x.id === effectId),

View file

@ -12,8 +12,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
classes: ['character'], classes: ['character'],
position: { width: 850, height: 800 }, position: { width: 850, height: 800 },
/* Foundry adds disabled to all buttons and inputs if editPermission is missing. This is not desired. */
editPermission: CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER,
actions: { actions: {
toggleVault: CharacterSheet.#toggleVault, toggleVault: CharacterSheet.#toggleVault,
rollAttribute: CharacterSheet.#rollAttribute, rollAttribute: CharacterSheet.#rollAttribute,
@ -68,7 +66,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
} }
}, },
{ {
handler: CharacterSheet.#getEquipamentContextOptions, handler: CharacterSheet.#getEquipmentContextOptions,
selector: '[data-item-uuid][data-type="armor"], [data-item-uuid][data-type="weapon"]', selector: '[data-item-uuid][data-type="armor"], [data-item-uuid][data-type="weapon"]',
options: { options: {
parentClassHooks: false, parentClassHooks: false,
@ -170,6 +168,16 @@ export default class CharacterSheet extends DHBaseActorSheet {
return applicationOptions; return applicationOptions;
} }
/** @inheritdoc */
_toggleDisabled(disabled) {
// Overriden to only disable text inputs by default.
// Everything else is done by checking @root.editable in the sheet
const form = this.form;
for (const input of form.querySelectorAll('input:not([type=search]), .editor.prosemirror')) {
input.disabled = disabled;
}
}
/** @inheritDoc */ /** @inheritDoc */
async _onRender(context, options) { async _onRender(context, options) {
await super._onRender(context, options); await super._onRender(context, options);
@ -315,11 +323,11 @@ export default class CharacterSheet extends DHBaseActorSheet {
/**@type {import('@client/applications/ux/context-menu.mjs').ContextMenuEntry[]} */ /**@type {import('@client/applications/ux/context-menu.mjs').ContextMenuEntry[]} */
const options = [ const options = [
{ {
name: 'toLoadout', label: 'toLoadout',
icon: 'fa-solid fa-arrow-up', icon: 'fa-solid fa-arrow-up',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return doc && doc.system.inVault; return doc?.isOwner && doc.system.inVault;
}, },
callback: async target => { callback: async target => {
const doc = await getDocFromElement(target); const doc = await getDocFromElement(target);
@ -329,11 +337,11 @@ export default class CharacterSheet extends DHBaseActorSheet {
} }
}, },
{ {
name: 'recall', label: 'recall',
icon: 'fa-solid fa-bolt-lightning', icon: 'fa-solid fa-bolt-lightning',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return doc && doc.system.inVault; return doc?.isOwner && doc.system.inVault;
}, },
callback: async (target, event) => { callback: async (target, event) => {
const doc = await getDocFromElement(target); const doc = await getDocFromElement(target);
@ -368,17 +376,17 @@ export default class CharacterSheet extends DHBaseActorSheet {
} }
}, },
{ {
name: 'toVault', label: 'toVault',
icon: 'fa-solid fa-arrow-down', icon: 'fa-solid fa-arrow-down',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return doc && !doc.system.inVault; return doc?.isOwner && !doc.system.inVault;
}, },
callback: async target => (await getDocFromElement(target)).update({ 'system.inVault': true }) callback: async target => (await getDocFromElement(target)).update({ 'system.inVault': true })
} }
].map(option => ({ ].map(option => ({
...option, ...option,
name: `DAGGERHEART.APPLICATIONS.ContextMenu.${option.name}`, label: `DAGGERHEART.APPLICATIONS.ContextMenu.${option.label}`,
icon: `<i class="${option.icon}"></i>` icon: `<i class="${option.icon}"></i>`
})); }));
@ -391,29 +399,29 @@ export default class CharacterSheet extends DHBaseActorSheet {
* @this {CharacterSheet} * @this {CharacterSheet}
* @protected * @protected
*/ */
static #getEquipamentContextOptions() { static #getEquipmentContextOptions() {
const options = [ const options = [
{ {
name: 'equip', label: 'equip',
icon: 'fa-solid fa-hands', icon: 'fa-solid fa-hands',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return doc && !doc.system.equipped; return doc.isOwner && doc && !doc.system.equipped;
}, },
callback: (target, event) => CharacterSheet.#toggleEquipItem.call(this, event, target) callback: (target, event) => CharacterSheet.#toggleEquipItem.call(this, event, target)
}, },
{ {
name: 'unequip', label: 'unequip',
icon: 'fa-solid fa-hands', icon: 'fa-solid fa-hands',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return doc && doc.system.equipped; return doc.isOwner && doc && doc.system.equipped;
}, },
callback: (target, event) => CharacterSheet.#toggleEquipItem.call(this, event, target) callback: (target, event) => CharacterSheet.#toggleEquipItem.call(this, event, target)
} }
].map(option => ({ ].map(option => ({
...option, ...option,
name: `DAGGERHEART.APPLICATIONS.ContextMenu.${option.name}`, label: `DAGGERHEART.APPLICATIONS.ContextMenu.${option.label}`,
icon: `<i class="${option.icon}"></i>` icon: `<i class="${option.icon}"></i>`
})); }));

View file

@ -433,18 +433,18 @@ export default function DHApplicationMixin(Base) {
/**@type {import('@client/applications/ux/context-menu.mjs').ContextMenuEntry[]} */ /**@type {import('@client/applications/ux/context-menu.mjs').ContextMenuEntry[]} */
const options = [ const options = [
{ {
name: 'disableEffect', label: 'disableEffect',
icon: 'fa-solid fa-lightbulb', icon: 'fa-solid fa-lightbulb',
condition: element => { visible: element => {
const target = element.closest('[data-item-uuid]'); const target = element.closest('[data-item-uuid]');
return !target.dataset.disabled && target.dataset.itemType !== 'beastform'; return !target.dataset.disabled && target.dataset.itemType !== 'beastform';
}, },
callback: async target => (await getDocFromElement(target)).update({ disabled: true }) callback: async target => (await getDocFromElement(target)).update({ disabled: true })
}, },
{ {
name: 'enableEffect', label: 'enableEffect',
icon: 'fa-regular fa-lightbulb', icon: 'fa-regular fa-lightbulb',
condition: element => { visible: element => {
const target = element.closest('[data-item-uuid]'); const target = element.closest('[data-item-uuid]');
return target.dataset.disabled && target.dataset.itemType !== 'beastform'; return target.dataset.disabled && target.dataset.itemType !== 'beastform';
}, },
@ -452,7 +452,7 @@ export default function DHApplicationMixin(Base) {
} }
].map(option => ({ ].map(option => ({
...option, ...option,
name: `DAGGERHEART.APPLICATIONS.ContextMenu.${option.name}`, label: `DAGGERHEART.APPLICATIONS.ContextMenu.${option.label}`,
icon: `<i class="${option.icon}"></i>` icon: `<i class="${option.icon}"></i>`
})); }));
@ -483,14 +483,14 @@ export default function DHApplicationMixin(Base) {
_getContextMenuCommonOptions({ usable = false, toChat = false, deletable = true }) { _getContextMenuCommonOptions({ usable = false, toChat = false, deletable = true }) {
const options = [ const options = [
{ {
name: 'CONTROLS.CommonEdit', label: 'CONTROLS.CommonEdit',
icon: 'fa-solid fa-pen-to-square', icon: 'fa-solid fa-pen-to-square',
condition: target => { visible: target => {
const { dataset } = target.closest('[data-item-uuid]'); const { dataset } = target.closest('[data-item-uuid]');
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return ( return (
(!dataset.noCompendiumEdit && !doc) || (!dataset.noCompendiumEdit && !doc) ||
(doc && (!doc?.hasOwnProperty('systemPath') || doc?.inCollection)) (doc?.isOwner && (!doc?.hasOwnProperty('systemPath') || doc?.inCollection))
); );
}, },
callback: async target => (await getDocFromElement(target)).sheet.render({ force: true }) callback: async target => (await getDocFromElement(target)).sheet.render({ force: true })
@ -499,14 +499,14 @@ export default function DHApplicationMixin(Base) {
if (usable) { if (usable) {
options.unshift({ options.unshift({
name: 'DAGGERHEART.GENERAL.damage', label: 'DAGGERHEART.GENERAL.damage',
icon: 'fa-solid fa-explosion', icon: 'fa-solid fa-explosion',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return ( const hasDamage =
!foundry.utils.isEmpty(doc?.system?.attack?.damage.parts) || !foundry.utils.isEmpty(doc?.system?.attack?.damage.parts) ||
!foundry.utils.isEmpty(doc?.damage?.parts) !foundry.utils.isEmpty(doc?.damage?.parts);
); return doc?.isOwner && hasDamage;
}, },
callback: async (target, event) => { callback: async (target, event) => {
const doc = await getDocFromElement(target), const doc = await getDocFromElement(target),
@ -522,11 +522,11 @@ export default function DHApplicationMixin(Base) {
}); });
options.unshift({ options.unshift({
name: 'DAGGERHEART.APPLICATIONS.ContextMenu.useItem', label: 'DAGGERHEART.APPLICATIONS.ContextMenu.useItem',
icon: 'fa-solid fa-burst', icon: 'fa-solid fa-burst',
condition: target => { visible: target => {
const doc = getDocFromElementSync(target); const doc = getDocFromElementSync(target);
return doc && !(doc.type === 'domainCard' && doc.system.inVault); return doc?.isOwner && !(doc.type === 'domainCard' && doc.system.inVault);
}, },
callback: async (target, event) => (await getDocFromElement(target)).use(event) callback: async (target, event) => (await getDocFromElement(target)).use(event)
}); });
@ -534,18 +534,19 @@ export default function DHApplicationMixin(Base) {
if (toChat) if (toChat)
options.push({ options.push({
name: 'DAGGERHEART.APPLICATIONS.ContextMenu.sendToChat', label: 'DAGGERHEART.APPLICATIONS.ContextMenu.sendToChat',
icon: 'fa-solid fa-message', icon: 'fa-solid fa-message',
callback: async target => (await getDocFromElement(target)).toChat(this.document.uuid) callback: async target => (await getDocFromElement(target)).toChat(this.document.uuid)
}); });
if (deletable) if (deletable)
options.push({ options.push({
name: 'CONTROLS.CommonDelete', label: 'CONTROLS.CommonDelete',
icon: 'fa-solid fa-trash', icon: 'fa-solid fa-trash',
condition: element => { visible: element => {
const target = element.closest('[data-item-uuid]'); const target = element.closest('[data-item-uuid]');
return target.dataset.itemType !== 'beastform'; const doc = getDocFromElementSync(target);
return doc?.isOwner && target.dataset.itemType !== 'beastform';
}, },
callback: async (target, event) => { callback: async (target, event) => {
const doc = await getDocFromElement(target); const doc = await getDocFromElement(target);

View file

@ -31,7 +31,7 @@ export default class FeatureSheet extends DHBaseItemSheet {
labelPrefix: 'DAGGERHEART.GENERAL.Tabs' labelPrefix: 'DAGGERHEART.GENERAL.Tabs'
} }
}; };
//Might be wrong location but testing out if here is okay. //Might be wrong location but testing out if here is okay.
/**@override */ /**@override */
async _prepareContext(options) { async _prepareContext(options) {
const context = await super._prepareContext(options); const context = await super._prepareContext(options);

View file

@ -48,9 +48,9 @@ export default class DhActorDirectory extends foundry.applications.sidebar.tabs.
const options = super._getEntryContextOptions(); const options = super._getEntryContextOptions();
options.push( options.push(
{ {
name: 'DAGGERHEART.UI.Sidebar.actorDirectory.duplicateToNewTier', label: 'DAGGERHEART.UI.Sidebar.actorDirectory.duplicateToNewTier',
icon: `<i class="fa-solid fa-arrow-trend-up" inert></i>`, icon: `<i class="fa-solid fa-arrow-trend-up" inert></i>`,
condition: li => { visible: li => {
const actor = game.actors.get(li.dataset.entryId); const actor = game.actors.get(li.dataset.entryId);
return actor?.type === 'adversary' && actor.system.type !== 'social'; return actor?.type === 'adversary' && actor.system.type !== 'social';
}, },
@ -92,9 +92,9 @@ export default class DhActorDirectory extends foundry.applications.sidebar.tabs.
} }
}, },
{ {
name: 'DAGGERHEART.UI.Sidebar.actorDirectory.activateParty', label: 'DAGGERHEART.UI.Sidebar.actorDirectory.activateParty',
icon: `<i class="fa-regular fa-square"></i>`, icon: `<i class="fa-regular fa-square"></i>`,
condition: li => { visible: li => {
const actor = game.actors.get(li.dataset.entryId); const actor = game.actors.get(li.dataset.entryId);
return actor && actor.type === 'party' && !actor.system.active; return actor && actor.type === 'party' && !actor.system.active;
}, },

View file

@ -103,23 +103,10 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
_getEntryContextOptions() { _getEntryContextOptions() {
return [ return [
...super._getEntryContextOptions(), ...super._getEntryContextOptions(),
// {
// name: 'Reroll',
// icon: '<i class="fa-solid fa-dice"></i>',
// condition: li => {
// const message = game.messages.get(li.dataset.messageId);
// return (game.user.isGM || message.isAuthor) && message.rolls.length > 0;
// },
// callback: li => {
// const message = game.messages.get(li.dataset.messageId);
// new game.system.api.applications.dialogs.RerollDialog(message).render({ force: true });
// }
// },
{ {
name: game.i18n.localize('DAGGERHEART.UI.ChatLog.rerollDamage'), label: 'DAGGERHEART.UI.ChatLog.rerollDamage',
icon: '<i class="fa-solid fa-dice"></i>', icon: '<i class="fa-solid fa-dice"></i>',
condition: li => { visible: li => {
const message = game.messages.get(li.dataset.messageId); const message = game.messages.get(li.dataset.messageId);
const hasRolledDamage = message.system.hasDamage const hasRolledDamage = message.system.hasDamage
? Object.keys(message.system.damage).length > 0 ? Object.keys(message.system.damage).length > 0

View file

@ -84,15 +84,15 @@ export default class DhCombatTracker extends foundry.applications.sidebar.tabs.C
_getCombatContextOptions() { _getCombatContextOptions() {
return [ return [
{ {
name: 'COMBAT.ClearMovementHistories', label: 'COMBAT.ClearMovementHistories',
icon: '<i class="fa-solid fa-shoe-prints"></i>', icon: '<i class="fa-solid fa-shoe-prints"></i>',
condition: () => game.user.isGM && this.viewed?.combatants.size > 0, visible: () => game.user.isGM && this.viewed?.combatants.size > 0,
callback: () => this.viewed.clearMovementHistories() callback: () => this.viewed.clearMovementHistories()
}, },
{ {
name: 'COMBAT.Delete', label: 'COMBAT.Delete',
icon: '<i class="fa-solid fa-trash"></i>', icon: '<i class="fa-solid fa-trash"></i>',
condition: () => game.user.isGM && !!this.viewed, visible: () => game.user.isGM && !!this.viewed,
callback: () => this.viewed.endCombat() callback: () => this.viewed.endCombat()
} }
]; ];

View file

@ -6,8 +6,11 @@ export default class DHContextMenu extends foundry.applications.ux.ContextMenu {
static triggerContextMenu(event, altSelector) { static triggerContextMenu(event, altSelector) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
const { clientX, clientY } = event;
const selector = altSelector ?? '[data-item-uuid]'; const selector = altSelector ?? '[data-item-uuid]';
if (ui.context?.selector === selector) return;
const { clientX, clientY } = event;
const target = event.target.closest(selector) ?? event.currentTarget.closest(selector); const target = event.target.closest(selector) ?? event.currentTarget.closest(selector);
target?.dispatchEvent( target?.dispatchEvent(
new PointerEvent('contextmenu', { new PointerEvent('contextmenu', {

View file

@ -95,4 +95,61 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer {
}); });
return inBounds.length === 1 ? inBounds[0] : null; return inBounds.length === 1 ? inBounds[0] : null;
} }
static getTemplateShape({ type, angle, range, direction } = {}) {
const { line, rectangle, inFront, cone, circle, emanation } = CONFIG.DH.GENERAL.templateTypes;
/* Length calculation */
const { grid, distance } = CONFIG.Scene.documentClass.schema.fields.grid.fields;
const sceneGridSize = canvas.scene?.grid.size ?? grid.size.initial;
const sceneGridDistance = canvas.scene?.grid.distance ?? distance.getInitialValue();
const dimensionConstant = sceneGridSize / sceneGridDistance;
const settings = canvas.scene?.rangeSettings;
const rangeNumber = Number(range);
const length = (!Number.isNaN(rangeNumber) ? rangeNumber : settings ? settings[range] : 0) * dimensionConstant;
/*----*/
const shapeData = {
...canvas.mousePosition,
type: type,
direction: direction ?? 0
};
switch (type) {
case rectangle.id:
shapeData.width = length;
shapeData.height = length;
break;
case line.id:
shapeData.length = length;
shapeData.width = 5 * dimensionConstant;
break;
case cone.id:
shapeData.angle = angle ?? CONFIG.MeasuredTemplate.defaults.angle;
shapeData.radius = length;
break;
case inFront.id:
shapeData.angle = '180';
shapeData.radius = length;
shapeData.type = cone.id;
break;
case circle.id:
shapeData.radius = length;
break;
case emanation.id:
shapeData.radius = length;
shapeData.base = {
type: 'token',
x: 0,
y: 0,
width: 1,
height: 1,
shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1
};
break;
}
return shapeData;
}
} }

View file

@ -115,3 +115,10 @@ export const advantageState = {
value: 1 value: 1
} }
}; };
export const areaTypes = {
placed: {
id: 'placed',
label: 'Placed Area'
}
};

View file

@ -80,12 +80,30 @@ export const groupAttackRange = {
/* circle|cone|rect|ray used to be CONST.MEASURED_TEMPLATE_TYPES. Hardcoded for now */ /* circle|cone|rect|ray used to be CONST.MEASURED_TEMPLATE_TYPES. Hardcoded for now */
export const templateTypes = { export const templateTypes = {
CIRCLE: 'circle', circle: {
CONE: 'cone', id: 'circle',
RECTANGLE: 'rectangle', label: 'Circle'
LINE: 'line', },
EMANATION: 'emanation', cone: {
INFRONT: 'inFront' id: 'cone',
label: 'Cone'
},
rectangle: {
id: 'rectangle',
label: 'Rectangle'
},
line: {
id: 'line',
label: 'Line'
},
emanation: {
id: 'emanation',
label: 'Emanation'
},
inFront: {
id: 'inFront',
label: 'In Front'
}
}; };
export const rangeInclusion = { export const rangeInclusion = {
@ -1092,3 +1110,18 @@ export const fallAndCollisionDamage = {
damageFormula: '1d20 + 5' damageFormula: '1d20 + 5'
} }
}; };
export const simpleDispositions = {
[-1]: {
id: -1,
label: 'TOKEN.DISPOSITION.HOSTILE'
},
[0]: {
id: 0,
label: 'TOKEN.DISPOSITION.NEUTRAL'
},
[1]: {
id: 1,
label: 'TOKEN.DISPOSITION.FRIENDLY'
}
};

View file

@ -75,12 +75,17 @@ export const typeConfig = {
{ {
key: 'type', key: 'type',
label: 'DAGGERHEART.GENERAL.type', label: 'DAGGERHEART.GENERAL.type',
format: type => type ? `TYPES.Item.${type}` : '-' format: type => (type ? `TYPES.Item.${type}` : '-')
}, },
{ {
key: 'system.secondary', key: 'system.secondary',
label: 'DAGGERHEART.UI.ItemBrowser.subtype', label: 'DAGGERHEART.UI.ItemBrowser.subtype',
format: isSecondary => (isSecondary ? 'DAGGERHEART.ITEMS.Weapon.secondaryWeapon.short' : isSecondary === false ? 'DAGGERHEART.ITEMS.Weapon.primaryWeapon.short' : '-') format: isSecondary =>
isSecondary
? 'DAGGERHEART.ITEMS.Weapon.secondaryWeapon.short'
: isSecondary === false
? 'DAGGERHEART.ITEMS.Weapon.primaryWeapon.short'
: '-'
}, },
{ {
key: 'system.tier', key: 'system.tier',
@ -260,12 +265,12 @@ export const typeConfig = {
{ {
key: 'system.type', key: 'system.type',
label: 'DAGGERHEART.GENERAL.type', label: 'DAGGERHEART.GENERAL.type',
format: type => type ? `DAGGERHEART.CONFIG.DomainCardTypes.${type}` : '-' format: type => (type ? `DAGGERHEART.CONFIG.DomainCardTypes.${type}` : '-')
}, },
{ {
key: 'system.domain', key: 'system.domain',
label: 'DAGGERHEART.GENERAL.Domain.single', label: 'DAGGERHEART.GENERAL.Domain.single',
format: domain => domain ? CONFIG.DH.DOMAIN.allDomains()[domain].label : '-' format: domain => (domain ? CONFIG.DH.DOMAIN.allDomains()[domain].label : '-')
}, },
{ {
key: 'system.level', key: 'system.level',

View file

@ -42,7 +42,7 @@ export const gameSettings = {
SpotlightRequestQueue: 'SpotlightRequestQueue', SpotlightRequestQueue: 'SpotlightRequestQueue',
CompendiumBrowserSettings: 'CompendiumBrowserSettings', CompendiumBrowserSettings: 'CompendiumBrowserSettings',
SpotlightTracker: 'SpotlightTracker', SpotlightTracker: 'SpotlightTracker',
ActiveParty: 'ActiveParty', ActiveParty: 'ActiveParty'
}; };
export const actionAutomationChoices = { export const actionAutomationChoices = {

View file

@ -15,3 +15,4 @@ export * as chatMessages from './chat-message/_modules.mjs';
export * as fields from './fields/_module.mjs'; export * as fields from './fields/_module.mjs';
export * as items from './item/_module.mjs'; export * as items from './item/_module.mjs';
export * as scenes from './scene/_module.mjs'; export * as scenes from './scene/_module.mjs';
export * as regionBehaviors from './regionBehavior/_module.mjs';

View file

@ -13,7 +13,7 @@ export default class DHAttackAction extends DHDamageAction {
if (!!this.item?.system?.attack) { if (!!this.item?.system?.attack) {
if (this.damage.includeBase) { if (this.damage.includeBase) {
const baseDamage = this.getParentDamage(); const baseDamage = this.getParentDamage();
this.damage.parts.unshift(new DHDamageData(baseDamage)); this.damage.parts.hitPoints = new DHDamageData(baseDamage);
} }
if (this.roll.useDefault) { if (this.roll.useDefault) {
this.roll.trait = this.item.system.attack.roll.trait; this.roll.trait = this.item.system.attack.roll.trait;
@ -51,7 +51,7 @@ export default class DHAttackAction extends DHDamageAction {
async use(event, options) { async use(event, options) {
const result = await super.use(event, options); const result = await super.use(event, options);
if (result?.message?.system.action.roll?.type === 'attack') { if (result?.message?.system.action?.roll?.type === 'attack') {
const { updateCountdowns } = game.system.api.applications.ui.DhCountdowns; const { updateCountdowns } = game.system.api.applications.ui.DhCountdowns;
await updateCountdowns(CONFIG.DH.GENERAL.countdownProgressionTypes.characterAttack.id); await updateCountdowns(CONFIG.DH.GENERAL.countdownProgressionTypes.characterAttack.id);
} }

View file

@ -15,7 +15,7 @@ const fields = foundry.data.fields;
*/ */
export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel) { export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel) {
static extraSchemas = ['cost', 'uses', 'range']; static extraSchemas = ['areas', 'cost', 'uses', 'range'];
/** @inheritDoc */ /** @inheritDoc */
static defineSchema() { static defineSchema() {
@ -110,6 +110,11 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
return this._id; return this._id;
} }
/** Returns true if the current user is the owner of the containing item */
get isOwner() {
return this.item?.isOwner ?? true;
}
/** /**
* Return Item the action is attached too. * Return Item the action is attached too.
*/ */
@ -143,6 +148,12 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
: null; : null;
} }
/** Returns true if the action is usable */
get usable() {
const actor = this.actor;
return this.isOwner && actor?.type === 'character';
}
static getRollType(parent) { static getRollType(parent) {
return 'trait'; return 'trait';
} }

View file

@ -93,6 +93,12 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
max: new fields.NumberField({ integer: true, label: 'DAGGERHEART.GENERAL.max' }) max: new fields.NumberField({ integer: true, label: 'DAGGERHEART.GENERAL.max' })
}, },
{ nullable: true, initial: null } { nullable: true, initial: null }
),
targetDispositions: new fields.SetField(
new fields.NumberField({
choices: CONFIG.DH.GENERAL.simpleDispositions
}),
{ label: 'DAGGERHEART.ACTIVEEFFECT.Config.targetDispositions' }
) )
}; };
} }
@ -131,13 +137,14 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
return armorChange.getArmorData(); return armorChange.getArmorData();
} }
static getDefaultObject() { static getDefaultObject(options = { transfer: true }) {
return { return {
name: 'New Effect', name: 'New Effect',
id: foundry.utils.randomID(), id: foundry.utils.randomID(),
disabled: false, disabled: false,
img: 'icons/magic/life/heart-cross-blue.webp', img: 'icons/magic/life/heart-cross-blue.webp',
description: '', description: '',
transfer: options.transfer,
statuses: [], statuses: [],
changes: [], changes: [],
system: { system: {

View file

@ -20,7 +20,7 @@ export default class DhCharacter extends DhCreature {
settingSheet: DHCharacterSettings, settingSheet: DHCharacterSettings,
isNPC: false, isNPC: false,
hasInventory: true, hasInventory: true,
quantifiable: ["loot", "consumable"] quantifiable: ['loot', 'consumable']
}); });
} }

View file

@ -9,7 +9,7 @@ export default class DhParty extends BaseDataActor {
static get metadata() { static get metadata() {
return foundry.utils.mergeObject(super.metadata, { return foundry.utils.mergeObject(super.metadata, {
hasInventory: true, hasInventory: true,
quantifiable: ["weapon", "armor", "loot", "consumable"] quantifiable: ['weapon', 'armor', 'loot', 'consumable']
}); });
} }

View file

@ -7,26 +7,31 @@ export default class DHAbilityUse extends foundry.abstract.TypeDataModel {
img: new fields.StringField({}), img: new fields.StringField({}),
name: new fields.StringField({}), name: new fields.StringField({}),
description: new fields.StringField({}), description: new fields.StringField({}),
actions: new fields.ArrayField( source: new fields.SchemaField({
new fields.ObjectField({ actor: new fields.StringField(),
name: new fields.StringField({}), item: new fields.StringField(),
damage: new fields.SchemaField({ action: new fields.StringField()
type: new fields.StringField({}), })
value: new fields.StringField({})
}),
healing: new fields.SchemaField({
type: new fields.StringField({}),
value: new fields.StringField({})
}),
cost: new fields.SchemaField({
type: new fields.StringField({}),
value: new fields.NumberField({})
}),
target: new fields.SchemaField({
type: new fields.StringField({ nullable: true })
})
})
)
}; };
} }
get actionActor() {
if (!this.source.actor) return null;
return fromUuidSync(this.source.actor);
}
get actionItem() {
const actionActor = this.actionActor;
if (!actionActor || !this.source.item) return null;
const item = actionActor.items.get(this.source.item);
return item ? item.system.actions?.find(a => a.id === this.source.action) : null;
}
get action() {
const { actionItem: itemAction } = this;
if (!this.source.action) return null;
if (itemAction) return itemAction;
return null;
}
} }

View file

@ -1,3 +1,4 @@
export { default as AreasField } from './areasField.mjs';
export { default as CostField } from './costField.mjs'; export { default as CostField } from './costField.mjs';
export { default as CountdownField } from './countdownField.mjs'; export { default as CountdownField } from './countdownField.mjs';
export { default as UsesField } from './usesField.mjs'; export { default as UsesField } from './usesField.mjs';

View file

@ -0,0 +1,40 @@
const fields = foundry.data.fields;
export default class AreasField extends fields.ArrayField {
/**
* Action Workflow order
*/
static order = 150;
/** @inheritDoc */
constructor(options = {}, context = {}) {
const element = new fields.SchemaField({
name: new fields.StringField({
nullable: false,
initial: 'Area',
label: 'DAGGERHEART.GENERAL.name'
}),
type: new fields.StringField({
nullable: false,
choices: CONFIG.DH.ACTIONS.areaTypes,
initial: CONFIG.DH.ACTIONS.areaTypes.placed.id,
label: 'DAGGERHEART.GENERAL.type'
}),
shape: new fields.StringField({
nullable: false,
choices: CONFIG.DH.GENERAL.templateTypes,
initial: CONFIG.DH.GENERAL.templateTypes.circle.id,
label: 'DAGGERHEART.ACTIONS.Config.area.shape'
}),
/* Could be opened up to allow numbers to be input aswell. Probably best handled via an autocomplete in that case to allow the select options but also free text */
size: new fields.StringField({
nullable: false,
choices: CONFIG.DH.GENERAL.range,
initial: CONFIG.DH.GENERAL.range.veryClose.id,
label: 'DAGGERHEART.ACTIONS.Config.area.size'
}),
effects: new fields.ArrayField(new fields.DocumentIdField())
});
super(element, options, context);
}
}

View file

@ -40,9 +40,7 @@ export default class DHSummonField extends fields.ArrayField {
const roll = new Roll(itemAbleRollParse(summon.count, this.actor, this.item)); const roll = new Roll(itemAbleRollParse(summon.count, this.actor, this.item));
await roll.evaluate(); await roll.evaluate();
const count = roll.total; const count = roll.total;
if (!roll.isDeterministic && game.modules.get('dice-so-nice')?.active) if (!roll.isDeterministic && game.modules.get('dice-so-nice')?.active) rolls.push(roll);
rolls.push(roll);
const actor = await DHSummonField.getWorldActor(await foundry.utils.fromUuid(summon.actorUUID)); const actor = await DHSummonField.getWorldActor(await foundry.utils.fromUuid(summon.actorUUID));
/* Extending summon data in memory so it's available in actionField.toChat. Think it's harmless, but ugly. Could maybe find a better way. */ /* Extending summon data in memory so it's available in actionField.toChat. Think it's harmless, but ugly. Could maybe find a better way. */

View file

@ -281,8 +281,14 @@ export function ActionMixin(Base) {
name: this.name, name: this.name,
img: this.baseAction ? this.parent.parent.img : this.img, img: this.baseAction ? this.parent.parent.img : this.img,
tags: this.tags ? this.tags : ['Spell', 'Arcana', 'Lv 10'], tags: this.tags ? this.tags : ['Spell', 'Arcana', 'Lv 10'],
areas: this.areas,
summon: this.summon summon: this.summon
}, },
source: {
actor: this.actor.uuid,
item: this.item.id,
action: this.id
},
itemOrigin: this.item, itemOrigin: this.item,
description: this.description || (this.item instanceof Item ? this.item.system.description : '') description: this.description || (this.item instanceof Item ? this.item.system.description : '')
}; };

View file

@ -108,6 +108,10 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
} }
get actionsList() { get actionsList() {
// No actions on non-characters
if (this.metadata.isInventoryItem && this.actor && this.actor.type !== 'character') {
return [];
}
return this.actions; return this.actions;
} }

View file

@ -99,7 +99,9 @@ export default class DHWeapon extends AttachableItem {
/* -------------------------------------------- */ /* -------------------------------------------- */
get actionsList() { get actionsList() {
return [this.attack, ...this.actions]; // No actions on non-characters
if (this.actor && this.actor.type !== 'character') return [];
return [this.attack, ...super.actionsList];
} }
get customActions() { get customActions() {

View file

@ -0,0 +1 @@
export { default as applyActiveEffect } from './applyActiveEffect.mjs';

View file

@ -0,0 +1,40 @@
export default class DhApplyActiveEffect extends CONFIG.RegionBehavior.dataModels.applyActiveEffect {
static async #getApplicableEffects(token) {
const effects = await Promise.all(this.effects.map(foundry.utils.fromUuid));
return effects.filter(
effect => !effect.system.targetDispositions.size || effect.system.targetDispositions.has(token.disposition)
);
}
static async #onTokenEnter(event) {
if (!event.user.isSelf) return;
const { token, movement } = event.data;
const actor = token.actor;
if (!actor) return;
const resumeMovement = movement ? token.pauseMovement() : undefined;
const effects = await DhApplyActiveEffect.#getApplicableEffects.bind(this)(event.data.token);
const toCreate = [];
for (const effect of effects) {
const data = effect.toObject();
delete data._id;
if (effect.compendium) {
data._stats.duplicateSource = null;
data._stats.compendiumSource = effect.uuid;
} else {
data._stats.duplicateSource = effect.uuid;
data._stats.compendiumSource = null;
}
data._stats.exportSource = null;
data.origin = this.parent.uuid;
toCreate.push(data);
}
if (toCreate.length) await actor.createEmbeddedDocuments('ActiveEffect', toCreate);
await resumeMovement?.();
}
/** @override */
static events = {
...CONFIG.RegionBehavior.dataModels.applyActiveEffect.events,
[CONST.REGION_EVENTS.TOKEN_ENTER]: this.#onTokenEnter
};
}

View file

@ -145,6 +145,7 @@ export default class DHRoll extends Roll {
roll: this, roll: this,
parent: chatData.parent, parent: chatData.parent,
targetMode: chatData.targetMode, targetMode: chatData.targetMode,
areas: chatData.action?.areas,
metagamingSettings metagamingSettings
}); });
} }

View file

@ -200,7 +200,6 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
static effectSafeEval(expression) { static effectSafeEval(expression) {
let result; let result;
try { try {
// eslint-disable-next-line no-new-func
const evl = new Function('sandbox', `with (sandbox) { return ${expression}}`); const evl = new Function('sandbox', `with (sandbox) { return ${expression}}`);
result = evl(Roll.MATH_PROXY); result = evl(Roll.MATH_PROXY);
} catch (err) { } catch (err) {

View file

@ -137,6 +137,10 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
element.addEventListener('click', this.onApplyEffect.bind(this)) element.addEventListener('click', this.onApplyEffect.bind(this))
); );
for (const element of html.querySelectorAll('.action-areas')) {
element.addEventListener('click', this.onCreateAreas.bind(this));
}
html.querySelectorAll('.roll-target').forEach(element => { html.querySelectorAll('.roll-target').forEach(element => {
element.addEventListener('mouseenter', this.hoverTarget); element.addEventListener('mouseenter', this.hoverTarget);
element.addEventListener('mouseleave', this.unhoverTarget); element.addEventListener('mouseleave', this.unhoverTarget);
@ -249,6 +253,54 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
this.system.action?.workflow.get('effects')?.execute(config, targets, true); this.system.action?.workflow.get('effects')?.execute(config, targets, true);
} }
async onCreateAreas(event) {
const createArea = async selectedArea => {
const effects = selectedArea.effects.map(effect => this.system.action.item.effects.get(effect).uuid);
const { shape: type, size: range } = selectedArea;
const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({ type, range });
await canvas.regions.placeRegion(
{
name: selectedArea.name,
shapes: [shapeData],
restriction: { enabled: false, type: 'move', priority: 0 },
behaviors: [
{
name: game.i18n.localize('TYPES.RegionBehavior.applyActiveEffect'),
type: 'applyActiveEffect',
system: {
effects: effects
}
}
],
displayMeasurements: true,
locked: false,
ownership: { default: CONST.DOCUMENT_OWNERSHIP_LEVELS.NONE },
visibility: CONST.REGION_VISIBILITY.ALWAYS
},
{ create: true }
);
};
if (this.system.action.areas.length === 1) createArea(this.system.action.areas[0]);
else if (this.system.action.areas.length > 1) {
new foundry.applications.ux.ContextMenu.implementation(
event.target,
'.action-areas',
this.system.action.areas.map(area => ({
label: area.name,
onClick: () => createArea(area)
})),
{
jQuery: false,
fixed: true
}
);
CONFIG.ux.ContextMenu.triggerContextMenu(event, '.action-areas');
}
}
filterPermTargets(targets) { filterPermTargets(targets) {
return targets.filter(t => fromUuidSync(t.actorId)?.canUserModify(game.user, 'update')); return targets.filter(t => fromUuidSync(t.actorId)?.canUserModify(game.user, 'update'));
} }

View file

@ -3,7 +3,7 @@ export default class DhActorCollection extends foundry.documents.collections.Act
get party() { get party() {
const id = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty); const id = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty);
const actor = game.actors.get(id); const actor = game.actors.get(id);
return actor?.type === "party" ? actor : null; return actor?.type === 'party' ? actor : null;
} }
/** Ensure companions are initialized after all other subtypes. */ /** Ensure companions are initialized after all other subtypes. */

View file

@ -76,6 +76,13 @@ export default class DHItem extends foundry.documents.Item {
return this.system.metadata.isInventoryItem ?? false; return this.system.metadata.isInventoryItem ?? false;
} }
/** Returns true if the item can be used */
get usable() {
const actor = this.actor;
const actionsList = this.system.actionsList;
return this.isOwner && actor?.type === 'character' && (actionsList?.size || actionsList?.length);
}
/** @inheritdoc */ /** @inheritdoc */
static async createDialog(data = {}, createOptions = {}, options = {}) { static async createDialog(data = {}, createOptions = {}, options = {}) {
const { folders, types, template, context = {}, ...dialogOptions } = options; const { folders, types, template, context = {}, ...dialogOptions } = options;

View file

@ -12,7 +12,7 @@ export default function DhTemplateEnricher(match, _options) {
)?.id )?.id
: params.range; : params.range;
if (!Object.values(CONFIG.DH.GENERAL.templateTypes).find(x => x === type) || !range) return match[0]; if (!CONFIG.DH.GENERAL.templateTypes[type] || !range) return match[0];
const label = game.i18n.localize(`DAGGERHEART.CONFIG.TemplateTypes.${type}`); const label = game.i18n.localize(`DAGGERHEART.CONFIG.TemplateTypes.${type}`);
const rangeDisplay = Number.isNaN(Number(range)) const rangeDisplay = Number.isNaN(Number(range))
@ -49,8 +49,6 @@ export default function DhTemplateEnricher(match, _options) {
} }
export const renderMeasuredTemplate = async event => { export const renderMeasuredTemplate = async event => {
const { LINE, RECTANGLE, INFRONT, CONE } = CONFIG.DH.GENERAL.templateTypes;
const button = event.currentTarget, const button = event.currentTarget,
type = button.dataset.type, type = button.dataset.type,
range = button.dataset.range, range = button.dataset.range,
@ -59,49 +57,16 @@ export const renderMeasuredTemplate = async event => {
if (!type || !range || !game.canvas.scene) return; if (!type || !range || !game.canvas.scene) return;
const usedType = type === 'inFront' ? 'cone' : type; const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({
const usedAngle = type,
type === CONE ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) : type === INFRONT ? '180' : undefined; angle,
range,
let baseDistance = getTemplateDistance(range); direction
});
const { grid, distance } = CONFIG.Scene.documentClass.schema.fields.grid.fields;
const sceneGridSize = canvas.scene?.grid.size ?? grid.size.initial;
const sceneGridDistance = canvas.scene?.grid.distance ?? distance.getInitialValue();
const dimensionConstant = sceneGridSize / sceneGridDistance;
baseDistance *= dimensionConstant;
const length = baseDistance;
const radius = length;
const shapeWidth = type === LINE ? 5 * dimensionConstant : type === RECTANGLE ? length : undefined;
const { width, height } = game.canvas.scene.dimensions;
const shapeData = {
x: width / 2,
y: height / 2,
base: {
type: 'token',
x: 0,
y: 0,
width: 1,
height: 1,
shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1
},
t: usedType,
length: length,
width: shapeWidth,
height: length,
angle: usedAngle,
radius: radius,
direction: direction,
type: usedType
};
await canvas.regions.placeRegion( await canvas.regions.placeRegion(
{ {
name: usedType.capitalize(), name: type.capitalize(),
shapes: [shapeData], shapes: [shapeData],
restriction: { enabled: false, type: 'move', priority: 0 }, restriction: { enabled: false, type: 'move', priority: 0 },
behaviors: [], behaviors: [],
@ -113,11 +78,3 @@ export const renderMeasuredTemplate = async event => {
{ create: true } { create: true }
); );
}; };
const getTemplateDistance = range => {
const rangeNumber = Number(range);
if (!Number.isNaN(rangeNumber)) return rangeNumber;
const settings = canvas.scene?.rangeSettings;
return settings ? settings[range] : 0;
};

View file

@ -29,6 +29,7 @@ export const preloadHandlebarsTemplates = async function () {
'systems/daggerheart/templates/actionTypes/uses.hbs', 'systems/daggerheart/templates/actionTypes/uses.hbs',
'systems/daggerheart/templates/actionTypes/roll.hbs', 'systems/daggerheart/templates/actionTypes/roll.hbs',
'systems/daggerheart/templates/actionTypes/save.hbs', 'systems/daggerheart/templates/actionTypes/save.hbs',
'systems/daggerheart/templates/actionTypes/areas.hbs',
'systems/daggerheart/templates/actionTypes/cost.hbs', 'systems/daggerheart/templates/actionTypes/cost.hbs',
'systems/daggerheart/templates/actionTypes/range-target.hbs', 'systems/daggerheart/templates/actionTypes/range-target.hbs',
'systems/daggerheart/templates/actionTypes/effect.hbs', 'systems/daggerheart/templates/actionTypes/effect.hbs',

View file

@ -56,10 +56,10 @@ export const registerKeyBindings = () => {
game.keybindings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.keybindings.partySheet, { game.keybindings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.keybindings.partySheet, {
name: _loc('DAGGERHEART.SETTINGS.Keybindings.partySheet.name'), name: _loc('DAGGERHEART.SETTINGS.Keybindings.partySheet.name'),
hint: _loc('DAGGERHEART.SETTINGS.Keybindings.partySheet.hint'), hint: _loc('DAGGERHEART.SETTINGS.Keybindings.partySheet.hint'),
editable: [{ key: "KeyP" }], editable: [{ key: 'KeyP' }],
onDown: () => { onDown: () => {
const controlled = canvas.ready ? canvas.tokens.controlled : []; const controlled = canvas.ready ? canvas.tokens.controlled : [];
const selectedParty = controlled.find((c) => c.actor?.type === 'party')?.actor; const selectedParty = controlled.find(c => c.actor?.type === 'party')?.actor;
const party = selectedParty ?? game.actors.party; const party = selectedParty ?? game.actors.party;
if (!party) return; if (!party) return;
@ -215,6 +215,6 @@ const registerNonConfigSettings = () => {
scope: 'world', scope: 'world',
config: false, config: false,
type: String, type: String,
default: null, default: null
}); });
}; };

872
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -17,13 +17,18 @@
"pullYMLtoLDB": "node ./tools/pullYMLtoLDB.mjs", "pullYMLtoLDB": "node ./tools/pullYMLtoLDB.mjs",
"pullYMLtoLDBBuild": "node ./tools/pullYMLtoLDB.mjs --build", "pullYMLtoLDBBuild": "node ./tools/pullYMLtoLDB.mjs --build",
"createSymlink": "node ./tools/create-symlink.mjs", "createSymlink": "node ./tools/create-symlink.mjs",
"setup:dev": "node ./tools/dev-setup.mjs" "setup:dev": "node ./tools/dev-setup.mjs",
"lint": "eslint",
"lint:fix": "eslint --fix"
}, },
"devDependencies": { "devDependencies": {
"@foundryvtt/foundryvtt-cli": "^1.0.2", "@foundryvtt/foundryvtt-cli": "^1.0.2",
"@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-node-resolve": "^15.2.3",
"concurrently": "^8.2.2", "concurrently": "^8.2.2",
"eslint": "^10.2.1",
"eslint-plugin-prettier": "^5.5.5",
"globals": "^17.5.0",
"husky": "^9.1.5", "husky": "^9.1.5",
"lint-staged": "^15.2.10", "lint-staged": "^15.2.10",
"postcss": "^8.4.32", "postcss": "^8.4.32",

View file

@ -169,12 +169,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -225,7 +222,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -251,7 +248,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -319,7 +317,7 @@
"_id": "ctXYwil2D1zfsekT", "_id": "ctXYwil2D1zfsekT",
"img": "icons/magic/earth/barrier-stone-explosion-red.webp", "img": "icons/magic/earth/barrier-stone-explosion-red.webp",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to have the @Lookup[@name] burst out of the ground. All creatures within Very Close range must succeed on an Agility Reaction Roll or be knocked over, making them Vulnerable until they next act.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to have the @Lookup[@name] burst out of the ground. All creatures within Very Close range must succeed on an Agility Reaction Roll or be knocked over, making them Vulnerable until they next act.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"4ppSeiTdbqnMzWAs": { "4ppSeiTdbqnMzWAs": {
@ -344,7 +342,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -378,7 +377,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/earth/barrier-stone-explosion-red.webp", "img": "icons/magic/earth/barrier-stone-explosion-red.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Earth Eruption",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -581,7 +589,7 @@
"_id": "aNIVT5LKhwLyjKpI", "_id": "aNIVT5LKhwLyjKpI",
"img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp", "img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp",
"system": { "system": {
"description": "<p>When the @Lookup[@name] takes Severe damage, all creatures within Close range are bathed in their acidic blood, taking <strong>1d10</strong> physical damage. This splash covers the ground within Very Close range with blood, and all creatures other than the @Lookup[@name] who move through it take <strong>1d6</strong> physical damage.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When the @Lookup[@name] takes Severe damage, all creatures within Close range are bathed in their acidic blood, taking <strong>1d10</strong> physical damage. This splash covers the ground within Very Close range with blood, and all creatures other than the @Lookup[@name] who move through it take <strong>1d6</strong> physical damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"XbtTzOBvlTaxOKTy": { "XbtTzOBvlTaxOKTy": {
@ -627,7 +635,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -636,7 +645,23 @@
"effects": [], "effects": [],
"name": "Splash", "name": "Splash",
"img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp", "img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Acid Bath: Damage Area",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
},
{
"name": "Acid Ground",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
}, },
"xpcp1ECTWF20kxve": { "xpcp1ECTWF20kxve": {
"type": "damage", "type": "damage",
@ -690,7 +715,8 @@
"effects": [], "effects": [],
"name": "Acid Ground", "name": "Acid Ground",
"img": "icons/magic/acid/dissolve-pool-bubbles.webp", "img": "icons/magic/acid/dissolve-pool-bubbles.webp",
"range": "" "range": "",
"areas": []
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -376,7 +374,7 @@
"name": "Whirlwind", "name": "Whirlwind",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to whirl, making an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take <strong>3d8</strong> direct physical damage.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Spend a Fear</strong> to whirl, making an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take <strong>3d8</strong> direct physical damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"RV1wKufKrMPN6MOo": { "RV1wKufKrMPN6MOo": {
@ -429,7 +427,8 @@
} }
}, },
"includeBase": false, "includeBase": false,
"direct": true "direct": true,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -458,7 +457,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/strike-slashes-orange.webp", "img": "icons/skills/melee/strike-slashes-orange.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Whirlwind",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -484,7 +492,7 @@
"name": "Mind Dance", "name": "Mind Dance",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to create a magically dazzling display that grapples the minds of nearby foes. All targets within Close range must make an Instinct Reaction Roll. For each target who failed, you gain a Fear and the @Lookup[@name] learns one of the targets fears.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to create a magically dazzling display that grapples the minds of nearby foes. All targets within Close range must make an Instinct Reaction Roll. For each target who failed, you gain a Fear and the @Lookup[@name] learns one of the targets fears.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"GNwsDlCabx3fiG4g": { "GNwsDlCabx3fiG4g": {
@ -509,7 +517,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -538,7 +547,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/light/explosion-glow-spiral-yellow.webp", "img": "icons/magic/light/explosion-glow-spiral-yellow.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Mind Dance",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -564,14 +582,14 @@
"name": "Hallucinatory Breath", "name": "Hallucinatory Breath",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><em>Countdown (Loop 1d6)</em>. When the @Lookup[@name] takes damage for the first time, activate the countdown. When it triggers, the @Lookup[@name] breathes hallucinatory gas on all targets in front of them up to Far range. Targets must make an Instinct Reaction Roll or be tormented by fearful hallucinations. Targets whose fears are known to the @Lookup[@name] have disadvantage on this roll. Targets who fail lose 2 Hope and take <strong>3d8+3</strong> direct magic damage.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p><em>Countdown (Loop 1d6)</em>. When the @Lookup[@name] takes damage for the first time, activate the countdown. When it triggers, the @Lookup[@name] breathes hallucinatory gas on all targets in front of them up to Far range. Targets must make an Instinct Reaction Roll or be tormented by fearful hallucinations. Targets whose fears are known to the @Lookup[@name] have disadvantage on this roll. Targets who fail lose 2 Hope and take <strong>3d8+3</strong> direct magic damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"YOyKyKGTUEWkMmJe": { "YOyKyKGTUEWkMmJe": {
"type": "attack", "type": "attack",
"_id": "YOyKyKGTUEWkMmJe", "_id": "YOyKyKGTUEWkMmJe",
"systemPath": "actions", "systemPath": "actions",
"description": "<p>The @Lookup[@name] breathes hallucinatory gas on all targets in front of them up to Far range. Targets must make an Instinct Reaction Roll or be tormented by fearful hallucinations. Targets whose fears are known to the @Lookup[@name] have disadvantage on this roll. Targets who fail lose 2 Hope and take <strong>3d8+3</strong> direct magic damage.</p><p>@Template[type:inFront|range:f]</p>", "description": "",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],
@ -634,7 +652,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -663,7 +682,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/air/fog-gas-smoke-purple.webp", "img": "icons/magic/air/fog-gas-smoke-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Hallucinatory Breath",
"type": "placed",
"shape": "inFront",
"size": "far",
"effects": []
}
]
}, },
"lBhmLc33pcXzJHT3": { "lBhmLc33pcXzJHT3": {
"type": "countdown", "type": "countdown",

View file

@ -143,12 +143,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -199,7 +196,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -225,7 +222,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -312,7 +310,7 @@
"name": "Beam Of Decay", "name": "Beam Of Decay",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark 2 Stress</strong> to cause all targets within Far range to make a Strength Reaction Roll. Targets who fail take <strong>2d20+12</strong> magic damage and you gain a Fear. Targets who succeed take half damage. A target who marks 2 or more HP must also <strong>mark 2 Stress</strong> and becomes <em>Vulnerable</em> until they roll with Hope.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Mark 2 Stress</strong> to cause all targets within Far range to make a Strength Reaction Roll. Targets who fail take <strong>2d20+12</strong> magic damage and you gain a Fear. Targets who succeed take half damage. A target who marks 2 or more HP must also <strong>mark 2 Stress</strong> and becomes <em>Vulnerable</em> until they roll with Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"vaXLESD4sRkQ3Ahn": { "vaXLESD4sRkQ3Ahn": {
@ -364,7 +362,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -398,7 +397,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/unholy/projectile-missile-green.webp", "img": "icons/magic/unholy/projectile-missile-green.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Beam Of Decay",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
}, },
"ME8AMAjgTAChHa3C": { "ME8AMAjgTAChHa3C": {
"type": "healing", "type": "healing",

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -246,7 +244,7 @@
"name": "Focused Volley", "name": "Focused Volley",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to target a point within Far range. Make an attack with advantage against all targets within Close range of that point. Targets the @Lookup[@name] succeeds against take <strong>1d10+4</strong> physical damage.</p><p>@Template[type:circle|range:c]</p>", "description": "<p><strong>Spend a Fear</strong> to target a point within Far range. Make an attack with advantage against all targets within Close range of that point. Targets the @Lookup[@name] succeeds against take <strong>1d10+4</strong> physical damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"uG7Hl2DqaT69aNs1": { "uG7Hl2DqaT69aNs1": {
@ -296,7 +294,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -325,7 +324,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/ranged/arrows-flying-triple-brown.webp", "img": "icons/skills/ranged/arrows-flying-triple-brown.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Focused Volley",
"type": "placed",
"shape": "circle",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -351,7 +359,7 @@
"name": "Supressing Fire", "name": "Supressing Fire",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to target a point within Far range. Until the next roll with Fear, a creature who moves within Close range of that point must make an Agility Reaction Roll. On a failure, they take <strong>2d6+3</strong> physical damage. On a success, they take half damage.</p><p>@Template[type:circle|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to target a point within Far range. Until the next roll with Fear, a creature who moves within Close range of that point must make an Agility Reaction Roll. On a failure, they take <strong>2d6+3</strong> physical damage. On a success, they take half damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"mH6mmJIMM1fwzePt": { "mH6mmJIMM1fwzePt": {
@ -394,7 +402,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -423,7 +432,16 @@
}, },
"name": "Agility Roll", "name": "Agility Roll",
"img": "icons/skills/ranged/arrows-flying-salvo-blue.webp", "img": "icons/skills/ranged/arrows-flying-salvo-blue.webp",
"range": "" "range": "",
"areas": [
{
"name": "Supressing Fire",
"type": "placed",
"shape": "circle",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -399,7 +397,7 @@
"name": "Fumigation", "name": "Fumigation",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>Drop a smoke bomb that fills the air within Close range with smoke, Dizzying all targets in this area. Dizzied targets have disadvantage on their next action roll, then clear the condition.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>Drop a smoke bomb that fills the air within Close range with smoke, Dizzying all targets in this area. Dizzied targets have disadvantage on their next action roll, then clear the condition.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"sp7RfJRQJsEUm09m": { "sp7RfJRQJsEUm09m": {
@ -427,7 +425,16 @@
}, },
"name": "Drop Bomb", "name": "Drop Bomb",
"img": "icons/magic/air/fog-gas-smoke-green.webp", "img": "icons/magic/air/fog-gas-smoke-green.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Fumigation",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -450,18 +457,15 @@
"type": "withinRange", "type": "withinRange",
"target": "hostile", "target": "hostile",
"range": "melee" "range": "melee"
} },
"changes": []
}, },
"changes": [],
"disabled": false, "disabled": false,
"duration": { "duration": {
"startTime": null, "value": null,
"combat": null, "units": "seconds",
"seconds": null, "expiry": null,
"rounds": null, "expired": false
"turns": null,
"startRound": null,
"startTurn": null
}, },
"description": "<p>Dizzied targets have disadvantage on their next action roll, then clear the condition.</p>", "description": "<p>Dizzied targets have disadvantage on their next action roll, then clear the condition.</p>",
"tint": "#ffffff", "tint": "#ffffff",
@ -471,6 +475,9 @@
"_stats": { "_stats": {
"compendiumSource": null "compendiumSource": null
}, },
"start": null,
"showIcon": 1,
"folder": null,
"_key": "!actors.items.effects!h5RuhzGL17dW5FBT.lAmiK8wVxjyHwKlp.yP4ot8VqS56RnxnE" "_key": "!actors.items.effects!h5RuhzGL17dW5FBT.lAmiK8wVxjyHwKlp.yP4ot8VqS56RnxnE"
} }
], ],

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -465,7 +463,7 @@
"name": "Fire Jets", "name": "Fire Jets",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>The @Lookup[@name] shoots into the air, spinning and releasing jets of flame. Make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d8</strong> physical damage.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>The @Lookup[@name] shoots into the air, spinning and releasing jets of flame. Make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d8</strong> physical damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"hRAKaOdzQXLYBNVV": { "hRAKaOdzQXLYBNVV": {
@ -510,7 +508,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -539,7 +538,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/fire/explosion-embers-orange.webp", "img": "icons/magic/fire/explosion-embers-orange.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Fire Jets",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -565,7 +573,7 @@
"name": "Trample", "name": "Trample",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>The @Lookup[@name] rockets around erratically. Make an attack against all PCs within Close range. Targets the @Lookup[@name] succeeds against take <strong>1d6+5</strong> physical damage and are Vulnerable until their next roll with Hope.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>The @Lookup[@name] rockets around erratically. Make an attack against all PCs within Close range. Targets the @Lookup[@name] succeeds against take <strong>1d6+5</strong> physical damage and are Vulnerable until their next roll with Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"IOgPMu12Xnn33TfG": { "IOgPMu12Xnn33TfG": {
@ -610,7 +618,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -644,7 +653,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/movement/arrow-upward-yellow.webp", "img": "icons/skills/movement/arrow-upward-yellow.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Trample",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -720,7 +738,7 @@
"name": "Shocking Gas", "name": "Shocking Gas",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>The @Lookup[@name] sprays out a silver gas sparking with lightning. All targets within Close range must succeed on a Finesse Reaction Roll or mark 3 Stress.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>The @Lookup[@name] sprays out a silver gas sparking with lightning. All targets within Close range must succeed on a Finesse Reaction Roll or mark 3 Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"ky4OMl558J5wCbDp": { "ky4OMl558J5wCbDp": {
@ -764,7 +782,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -793,7 +812,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/lightning/bolt-strike-embers-teal.webp", "img": "icons/magic/lightning/bolt-strike-embers-teal.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Shocking Gas",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -819,7 +847,7 @@
"name": "Stunning Clap", "name": "Stunning Clap",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>The @Lookup[@name] leaps and their sides clap, creating a small sonic boom. All targets within Very Close range must succeed on a Strength Reaction Roll or become <em>Vulnerable</em> until the cube is defeated.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p>The @Lookup[@name] leaps and their sides clap, creating a small sonic boom. All targets within Very Close range must succeed on a Strength Reaction Roll or become <em>Vulnerable</em> until the cube is defeated.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"LQtopkrtSlCQ5MAr": { "LQtopkrtSlCQ5MAr": {
@ -837,7 +865,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -871,7 +900,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/sonic/explosion-impact-shock-wave.webp", "img": "icons/magic/sonic/explosion-impact-shock-wave.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Stunning Clap",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -947,7 +985,7 @@
"name": "Psionic Whine", "name": "Psionic Whine",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>The @Lookup[@name] releases a cluster of mechanical bees whose buzz rattles mortal minds. All targets within Close range must succeed on a Presence Reaction Roll or take <strong>2d4+9</strong> direct magic damage.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>The @Lookup[@name] releases a cluster of mechanical bees whose buzz rattles mortal minds. All targets within Close range must succeed on a Presence Reaction Roll or take <strong>2d4+9</strong> direct magic damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"3R3pGOUj4rHaUzPK": { "3R3pGOUj4rHaUzPK": {
@ -992,7 +1030,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -1021,7 +1060,16 @@
}, },
"name": "Bees!", "name": "Bees!",
"img": "icons/creatures/invertebrates/wasp-swarm-tan.webp", "img": "icons/creatures/invertebrates/wasp-swarm-tan.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Psionic Whine",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -1148,7 +1196,7 @@
"name": "Death Quake", "name": "Death Quake",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] marks their last HP, the magic powering them ruptures in an explosion of force. All targets within Close range must succeed on an Instinct Reaction Roll or take <strong>2d8+1</strong> magic damage</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When the @Lookup[@name] marks their last HP, the magic powering them ruptures in an explosion of force. All targets within Close range must succeed on an Instinct Reaction Roll or take <strong>2d8+1</strong> magic damage</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"oCpv4zi9jtEpo0K1": { "oCpv4zi9jtEpo0K1": {
@ -1193,7 +1241,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -1222,7 +1271,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/sonic/explosion-shock-wave-teal.webp", "img": "icons/magic/sonic/explosion-shock-wave-teal.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Death Quake",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -139,12 +139,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -195,7 +192,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -221,7 +218,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -312,7 +310,7 @@
"_id": "zGvaBYJPOOnQVQEn", "_id": "zGvaBYJPOOnQVQEn",
"img": "icons/magic/earth/projectile-stone-boulder-orange.webp", "img": "icons/magic/earth/projectile-stone-boulder-orange.webp",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to pick up heavy objects and throw them at all targets in front of the @Lookup[@name] within Far range. Make an attack against these targets. Targets the @Lookup[@name] succeeds against take <strong>1d10+2</strong> physical damage. If they succeed against more than one target, you gain a Fear.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p><strong>Mark a Stress</strong> to pick up heavy objects and throw them at all targets in front of the @Lookup[@name] within Far range. Make an attack against these targets. Targets the @Lookup[@name] succeeds against take <strong>1d10+2</strong> physical damage. If they succeed against more than one target, you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"3p1qfHy5uHe4H2hB": { "3p1qfHy5uHe4H2hB": {
@ -367,7 +365,8 @@
} }
}, },
"includeBase": false, "includeBase": false,
"direct": true "direct": true,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -396,7 +395,16 @@
}, },
"name": "Throw", "name": "Throw",
"img": "icons/magic/earth/projectile-stone-boulder-orange.webp", "img": "icons/magic/earth/projectile-stone-boulder-orange.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Hail of Boulders",
"type": "placed",
"shape": "inFront",
"size": "far",
"effects": []
}
]
}, },
"pmeromzI4eQOilbp": { "pmeromzI4eQOilbp": {
"type": "healing", "type": "healing",

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -359,7 +357,7 @@
"name": "Magic Burst", "name": "Magic Burst",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d6+4</strong> magic damage.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d6+4</strong> magic damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"iF0PD1t3yovKMTfy": { "iF0PD1t3yovKMTfy": {
@ -411,7 +409,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -440,7 +439,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/lightning/bolt-strike-purple.webp", "img": "icons/magic/lightning/bolt-strike-purple.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Magic Burst",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -562,7 +560,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -591,7 +590,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/sonic/explosion-shock-wave-teal.webp", "img": "icons/magic/sonic/explosion-shock-wave-teal.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Death Quake",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -143,12 +143,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -199,7 +196,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -225,7 +222,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -486,7 +484,7 @@
"name": "Shadow Shackles", "name": "Shadow Shackles",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> and choose a point within Far range. All targets within Close range of that point are <em>Restrained</em> in smoky chains until they break free with a successful Strength or Instinct Roll. A target Restrained by this feature must spend a Hope to make an action roll.</p><p>@Template[type:circle|range:c]</p>", "description": "<p><strong>Spend a Fear</strong> and choose a point within Far range. All targets within Close range of that point are <em>Restrained</em> in smoky chains until they break free with a successful Strength or Instinct Roll. A target Restrained by this feature must spend a Hope to make an action roll.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"g4RDHrY0AEYXjH52": { "g4RDHrY0AEYXjH52": {
@ -521,7 +519,16 @@
}, },
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/magic/air/fog-gas-smoke-dense-pink.webp", "img": "icons/magic/air/fog-gas-smoke-dense-pink.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Shadow Shackles",
"type": "placed",
"shape": "circle",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -137,12 +137,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -193,7 +190,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -219,7 +216,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -228,7 +226,7 @@
"_id": "0DSCzAFXy0hV4afJ", "_id": "0DSCzAFXy0hV4afJ",
"img": "icons/magic/earth/barrier-stone-brown-green.webp", "img": "icons/magic/earth/barrier-stone-brown-green.webp",
"system": { "system": {
"description": "<p>Slam the ground, knocking all targets within Very Close range back to Far range. Each target knocked back this way must mark a Stress.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p>Slam the ground, knocking all targets within Very Close range back to Far range. Each target knocked back this way must mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"55hCZsJQhJNcZ0lX": { "55hCZsJQhJNcZ0lX": {
@ -272,7 +270,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -281,7 +280,16 @@
"effects": [], "effects": [],
"name": "Stress Damage", "name": "Stress Damage",
"img": "icons/magic/earth/barrier-stone-brown-green.webp", "img": "icons/magic/earth/barrier-stone-brown-green.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Ground Slam",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -296,7 +294,7 @@
"name": "Your Struggle is Pointless", "name": "Your Struggle is Pointless",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to weigh down the spirits of all PCs within Far range. All targets affected replace their Hope Die with a <strong>d8</strong> until they roll a success with Hope or their next rest.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to weigh down the spirits of all PCs within Far range. All targets affected replace their Hope Die with a <strong>d8</strong> until they roll a success with Hope or their next rest.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"n0RYO05pROFU6ov3": { "n0RYO05pROFU6ov3": {
@ -331,7 +329,16 @@
}, },
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/magic/death/skull-flames-white-blue.webp", "img": "icons/magic/death/skull-flames-white-blue.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Your Struggle is Pointless",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -411,7 +418,7 @@
"name": "Your Friends Will Fail You", "name": "Your Friends Will Fail You",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When a PC fails with Fear, you can <strong>mark a Stress</strong> to cause all other PCs within Close range to lose a Hope.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When a PC fails with Fear, you can <strong>mark a Stress</strong> to cause all other PCs within Close range to lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"urrp8SCFgqbmSTvm": { "urrp8SCFgqbmSTvm": {
@ -462,7 +469,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -471,7 +479,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/creatures/unholy/demon-fire-horned-mask.webp", "img": "icons/creatures/unholy/demon-fire-horned-mask.webp",
"range": "" "range": "",
"areas": [
{
"name": "Your Friends Will Fail You",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Terrifying", "name": "Terrifying",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range must lose a Hope and you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range must lose a Hope and you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"v3XbljQeHEyfuSXz": { "v3XbljQeHEyfuSXz": {
@ -278,7 +276,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -287,7 +286,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "" "range": "",
"areas": [
{
"name": "Terrifying",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -533,7 +541,7 @@
"name": "You Pale in Comparison", "name": "You Pale in Comparison",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When a PC fails a roll within Close range of the @Lookup[@name], they must mark a Stress.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When a PC fails a roll within Close range of the @Lookup[@name], they must mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"kuCPWb9cu3pZdAhh": { "kuCPWb9cu3pZdAhh": {
@ -577,7 +585,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -586,7 +595,16 @@
"effects": [], "effects": [],
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/magic/control/fear-fright-shadow-monster-red.webp", "img": "icons/magic/control/fear-fright-shadow-monster-red.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "You Pale in Comparison",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -139,12 +139,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -195,7 +192,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -221,7 +218,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -279,7 +277,7 @@
"name": "Rivalry", "name": "Rivalry",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When a creature within Close range takes damage from a different adversary, you can <strong>mark a Stress</strong> to add a <strong>d4</strong> to the damage roll.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When a creature within Close range takes damage from a different adversary, you can <strong>mark a Stress</strong> to add a <strong>d4</strong> to the damage roll.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"UU3H5aPQejOSoFZw": { "UU3H5aPQejOSoFZw": {
@ -309,7 +307,16 @@
}, },
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/magic/perception/eye-ringed-glow-angry-small-teal.webp", "img": "icons/magic/perception/eye-ringed-glow-angry-small-teal.webp",
"range": "" "range": "",
"areas": [
{
"name": "Rivalry",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -335,7 +342,7 @@
"name": "What's Yours Is Mine", "name": "What's Yours Is Mine",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When a PC takes Severe damage within Very Close range of the @Lookup[@name], you can <strong>spend a Fear</strong> to cause the target to make a Finesse Reaction Roll. On a failure, the @Lookup[@name] seizes one item or consumable of their choice from the targets inventory.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p>When a PC takes Severe damage within Very Close range of the @Lookup[@name], you can <strong>spend a Fear</strong> to cause the target to make a Finesse Reaction Roll. On a failure, the @Lookup[@name] seizes one item or consumable of their choice from the targets inventory.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"3cGZ2CofM9HUlELH": { "3cGZ2CofM9HUlELH": {
@ -353,7 +360,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -382,7 +390,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/perception/hand-eye-black.webp", "img": "icons/magic/perception/hand-eye-black.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "What's Yours Is Mine",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -139,12 +139,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -195,7 +192,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -221,7 +218,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -253,7 +251,7 @@
"name": "Battle Lust", "name": "Battle Lust",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to boil the blood of all PCs within Far range. They use a d20 as their Fear Die until the end of the scene.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to boil the blood of all PCs within Far range. They use a d20 as their Fear Die until the end of the scene.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"jKvzbQT0vp66DDOH": { "jKvzbQT0vp66DDOH": {
@ -294,7 +292,16 @@
"amount": null "amount": null
}, },
"name": "Spend Fear", "name": "Spend Fear",
"range": "far" "range": "far",
"areas": [
{
"name": "Battle Lust",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -374,7 +381,7 @@
"name": "Retalliation", "name": "Retalliation",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] takes damage from an attack within Close range, you can <strong>mark a Stress</strong> to make a standard attack against the attacker.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When the @Lookup[@name] takes damage from an attack within Close range, you can <strong>mark a Stress</strong> to make a standard attack against the attacker.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"hxrdtBm4dYN7KGZm": { "hxrdtBm4dYN7KGZm": {
@ -427,7 +434,8 @@
} }
}, },
"includeBase": false, "includeBase": false,
"direct": true "direct": true,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -456,7 +464,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/blood-slash-foam-red.webp", "img": "icons/skills/melee/blood-slash-foam-red.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Retalliation",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -252,7 +250,7 @@
"name": "Dreadhowl", "name": "Dreadhowl",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make all targets within Very Close range lose a Hope. If a target is not able to lose a Hope, they must instead mark 2 Stress.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to make all targets within Very Close range lose a Hope. If a target is not able to lose a Hope, they must instead mark 2 Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"XyLlX9RWSxciZ7oV": { "XyLlX9RWSxciZ7oV": {
@ -296,7 +294,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -305,7 +304,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/creatures/unholy/demons-horned-glowing-pink.webp", "img": "icons/creatures/unholy/demons-horned-glowing-pink.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Dreadhowl",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -137,12 +137,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -193,7 +190,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -219,7 +216,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -295,7 +293,7 @@
"name": "Screech", "name": "Screech",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to send a high-pitch screech out toward all targets in front of the @Lookup[@name] within Far range. Those targets must mark <strong>1d4</strong> Stress.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p><strong>Mark a Stress</strong> to send a high-pitch screech out toward all targets in front of the @Lookup[@name] within Far range. Those targets must mark <strong>1d4</strong> Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"2ILfoiBoMyBCtBsL": { "2ILfoiBoMyBCtBsL": {
@ -338,7 +336,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -347,7 +346,16 @@
"effects": [], "effects": [],
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/magic/sonic/projectile-sound-rings-wave.webp", "img": "icons/magic/sonic/projectile-sound-rings-wave.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Screech",
"type": "placed",
"shape": "inFront",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Bramble Patch", "name": "Bramble Patch",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to target a point within Far range. Create a patch of thorns that covers an area within Close range of that point. All targets within that area take <strong>2d6+2</strong> physical damage when they act. A target must succeed on a Finesse Roll or deal more than 20 damage to the @Lookup[@name] with an attack to leave the area.</p><p>@Template[type:circle|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to target a point within Far range. Create a patch of thorns that covers an area within Close range of that point. All targets within that area take <strong>2d6+2</strong> physical damage when they act. A target must succeed on a Finesse Roll or deal more than 20 damage to the @Lookup[@name] with an attack to leave the area.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"iCJdIs57hfh5Cb0u": { "iCJdIs57hfh5Cb0u": {
@ -252,7 +250,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -281,7 +280,16 @@
}, },
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/magic/nature/root-vines-grow-brown.webp", "img": "icons/magic/nature/root-vines-grow-brown.webp",
"range": "" "range": "",
"areas": [
{
"name": "Bramble Patch",
"type": "placed",
"shape": "circle",
"size": "close",
"effects": []
}
]
}, },
"cpZ5c9d3opSA4BN9": { "cpZ5c9d3opSA4BN9": {
"type": "damage", "type": "damage",
@ -414,7 +422,7 @@
"name": "We Are All One", "name": "We Are All One",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When an ally dies within Close range, you can spend a Fear to clear 2 HP and 2 Stress as the fallen allys life force is returned to the forest.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When an ally dies within Close range, you can spend a Fear to clear 2 HP and 2 Stress as the fallen allys life force is returned to the forest.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"SrhuW3mfOuqg1ys6": { "SrhuW3mfOuqg1ys6": {
@ -490,7 +498,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "self", "type": "self",
@ -514,7 +523,16 @@
}, },
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/magic/unholy/orb-hands-pink.webp", "img": "icons/magic/unholy/orb-hands-pink.webp",
"range": "self" "range": "self",
"areas": [
{
"name": "We Are All One",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Conflagration", "name": "Conflagration",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to unleash an all-consuming firestorm and make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d10+6</strong> direct magic damage.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Spend a Fear</strong> to unleash an all-consuming firestorm and make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d10+6</strong> direct magic damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"v7zZo52Dnj1e1i2G": { "v7zZo52Dnj1e1i2G": {
@ -279,7 +277,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -308,7 +307,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/fire/projectile-beams-salvo-red.webp", "img": "icons/magic/fire/projectile-beams-salvo-red.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Conflagration",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -465,14 +473,14 @@
"name": "Shackles of Guilt", "name": "Shackles of Guilt",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><em>Countdown (Loop 2d6)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. When it triggers, all targets within Far range become Vulnerable and must mark a Stress as they relive their greatest regrets. A target can break free from their regret with a successful Presence or Strength Roll. When a PC fails to break free, they lose a Hope.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><em>Countdown (Loop 2d6)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. When it triggers, all targets within Far range become Vulnerable and must mark a Stress as they relive their greatest regrets. A target can break free from their regret with a successful Presence or Strength Roll. When a PC fails to break free, they lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"7b0FkpAnWz9a5EWx": { "7b0FkpAnWz9a5EWx": {
"type": "damage", "type": "damage",
"_id": "7b0FkpAnWz9a5EWx", "_id": "7b0FkpAnWz9a5EWx",
"systemPath": "actions", "systemPath": "actions",
"description": "<p>When the countdown triggers, all targets within Far range become Vulnerable and must mark a Stress as they relive their greatest regrets. A target can break free from their regret with a successful Presence or Strength Roll. When a PC fails to break free, they lose a Hope.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When it triggers, all targets within Far range become Vulnerable and must mark a Stress as they relive their greatest regrets. A target can break free from their regret with a successful Presence or Strength Roll. When a PC fails to break free, they lose a Hope.</p>",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],
@ -509,7 +517,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -523,7 +532,16 @@
], ],
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/magic/unholy/strike-hand-glow-pink.webp", "img": "icons/magic/unholy/strike-hand-glow-pink.webp",
"range": "" "range": "",
"areas": [
{
"name": "Shackles of Guilt",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
}, },
"11PtfoxbgOXxNlkG": { "11PtfoxbgOXxNlkG": {
"type": "countdown", "type": "countdown",

View file

@ -173,12 +173,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -229,7 +226,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -255,7 +252,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -392,7 +390,7 @@
"name": "Tormenting Lash", "name": "Tormenting Lash",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make a standard attack against all targets within Very Close range. When a target uses armor to reduce damage from this attack, they must mark 2 Armor Slots.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to make a standard attack against all targets within Very Close range. When a target uses armor to reduce damage from this attack, they must mark 2 Armor Slots.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"zMVhUekP8pcyQGFR": { "zMVhUekP8pcyQGFR": {
@ -444,7 +442,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -473,7 +472,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/blood-slash-foam-red.webp", "img": "icons/skills/melee/blood-slash-foam-red.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Tormenting Lash",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -499,14 +507,14 @@
"name": "All-Consuming Rage", "name": "All-Consuming Rage",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><em>Countdown (Decreasing 8)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. When it triggers, create a torrent of incarnate rage that rends flesh from bone. All targets within Far range must make a Presence Reaction Roll. Targets who fail take <strong>2d6+10</strong> direct magic damage. Targets who succeed take half damage. For each HP marked from this damage, summon a @UUID[Compendium.daggerheart.adversaries.Actor.OsLG2BjaEdTZUJU9]{Fallen Shock Troop} within Very Close range of the target who marked that HP. If the countdown ever decreases its maximum value to 0, the @Lookup[@name] marks their remaining HP and all targets within Far range must mark all remaining HP and make a death move.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><em>Countdown (Decreasing 8)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. When it triggers, create a torrent of incarnate rage that rends flesh from bone. All targets within Far range must make a Presence Reaction Roll. Targets who fail take <strong>2d6+10</strong> direct magic damage. Targets who succeed take half damage. For each HP marked from this damage, summon a @UUID[Compendium.daggerheart.adversaries.Actor.OsLG2BjaEdTZUJU9]{Fallen Shock Troop} within Very Close range of the target who marked that HP. If the countdown ever decreases its maximum value to 0, the @Lookup[@name] marks their remaining HP and all targets within Far range must mark all remaining HP and make a death move.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"rgy5wXyXJWh6uWxC": { "rgy5wXyXJWh6uWxC": {
"type": "attack", "type": "attack",
"_id": "rgy5wXyXJWh6uWxC", "_id": "rgy5wXyXJWh6uWxC",
"systemPath": "actions", "systemPath": "actions",
"description": "<p>When it triggers, create a torrent of incarnate rage that rends flesh from bone. All targets within Far range must make a Presence Reaction Roll. Targets who fail take <strong>2d6+10</strong> direct magic damage. Targets who succeed take half damage. For each HP marked from this damage, summon a @UUID[Compendium.daggerheart.adversaries.Actor.OsLG2BjaEdTZUJU9]{Fallen Shock Troop} within Very Close range of the target who marked that HP. If the countdown ever decreases its maximum value to 0, the @Lookup[@name] marks their remaining HP and all targets within Far range must mark all remaining HP and make a death move.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When it triggers, create a torrent of incarnate rage that rends flesh from bone. All targets within Far range must make a Presence Reaction Roll. Targets who fail take <strong>2d6+10</strong> direct magic damage. Targets who succeed take half damage. For each HP marked from this damage, summon a @UUID[Compendium.daggerheart.adversaries.Actor.OsLG2BjaEdTZUJU9]{Fallen Shock Troop} within Very Close range of the target who marked that HP. If the countdown ever decreases its maximum value to 0, the @Lookup[@name] marks their remaining HP and all targets within Far range must mark all remaining HP and make a death move.</p>",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],
@ -544,7 +552,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -573,7 +582,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/control/fear-fright-monster-grin-red-orange.webp", "img": "icons/magic/control/fear-fright-monster-grin-red-orange.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "All-Consuming Rage",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
}, },
"8e3BHmOFLvRwPbTW": { "8e3BHmOFLvRwPbTW": {
"type": "countdown", "type": "countdown",
@ -636,7 +654,7 @@
"name": "Doombringer", "name": "Doombringer",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When a target marks HP from an attack by the @Lookup[@name], all PCs within Far range of the target must lose a Hope.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When a target marks HP from an attack by the @Lookup[@name], all PCs within Far range of the target must lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"WEBPJCbXfBeyHFJ4": { "WEBPJCbXfBeyHFJ4": {
@ -680,7 +698,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -689,7 +708,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "" "range": "",
"areas": [
{
"name": "Doombringer",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -391,7 +391,7 @@
"name": "Shattering Strike", "name": "Shattering Strike",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make a standard attack against all targets within Very Close range. PCs the @Lookup[@name] succeeds against lose a number of Hope equal to the HP they marked from this attack.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to make a standard attack against all targets within Very Close range. PCs the @Lookup[@name] succeeds against lose a number of Hope equal to the HP they marked from this attack.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"t1GhGnEhNYyJ7p2U": { "t1GhGnEhNYyJ7p2U": {
@ -436,7 +436,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -465,7 +466,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/sword-stuck-glowing-pink.webp", "img": "icons/skills/melee/sword-stuck-glowing-pink.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Shattering Strike",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -571,19 +581,25 @@
"max": "", "max": "",
"recovery": null "recovery": null
}, },
"effects": [ "effects": [],
{
"_id": "eZp1PSCHZzdb47oM",
"onSave": false
}
],
"target": { "target": {
"type": "any", "type": "any",
"amount": null "amount": null
}, },
"name": "Circle", "name": "Circle",
"img": "icons/magic/unholy/barrier-fire-pink.webp", "img": "icons/magic/unholy/barrier-fire-pink.webp",
"range": "" "range": "",
"areas": [
{
"name": "Circle of Defilement",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": [
"KlTKlZXjdXQ9v6qB"
]
}
]
}, },
"4x13WyksHU0u0j20": { "4x13WyksHU0u0j20": {
"type": "countdown", "type": "countdown",
@ -631,42 +647,58 @@
"img": "icons/magic/unholy/barrier-fire-pink.webp", "img": "icons/magic/unholy/barrier-fire-pink.webp",
"effects": [ "effects": [
{ {
"name": "Circle of Defilement", "name": "Circle Of Defilement",
"disabled": false,
"img": "icons/magic/unholy/barrier-fire-pink.webp", "img": "icons/magic/unholy/barrier-fire-pink.webp",
"origin": "Compendium.daggerheart.adversaries.Actor.RXkZTwBRi4dJ3JE5.Item.55P7ZijSbQeVHCw4", "description": "<p>You are <em>Vulnerable</em> until you leave the circle.</p>",
"transfer": false, "transfer": false,
"_id": "eZp1PSCHZzdb47oM", "statuses": [
"type": "base", "vulnerable"
],
"system": { "system": {
"rangeDependence": { "rangeDependence": {
"enabled": false, "enabled": false,
"type": "withinRange", "type": "withinRange",
"target": "hostile", "target": "hostile",
"range": "melee" "range": "melee"
} },
"changes": [],
"duration": {
"description": "",
"type": ""
},
"stacking": null,
"targetDispositions": [
1,
0
]
}, },
"changes": [], "_id": "KlTKlZXjdXQ9v6qB",
"disabled": false, "type": "base",
"duration": { "start": {
"startTime": null, "time": 0,
"combat": null, "combat": null,
"seconds": null, "combatant": null,
"rounds": null, "initiative": null,
"turns": null, "round": null,
"startRound": null, "turn": null
"startTurn": null
}, },
"description": "<p><em>Vulnerable</em> until you leave the circle. The circle can be removed by dealing Severe damage to the Undefeated Champion.</p>", "duration": {
"value": null,
"units": "seconds",
"expiry": null,
"expired": false
},
"origin": null,
"tint": "#ffffff", "tint": "#ffffff",
"statuses": [ "showIcon": 1,
"vulnerable" "folder": null,
],
"sort": 0, "sort": 0,
"flags": {}, "flags": {},
"_stats": { "_stats": {
"compendiumSource": null "compendiumSource": null
}, },
"_key": "!actors.items.effects!RXkZTwBRi4dJ3JE5.55P7ZijSbQeVHCw4.eZp1PSCHZzdb47oM" "_key": "!actors.items.effects!RXkZTwBRi4dJ3JE5.55P7ZijSbQeVHCw4.KlTKlZXjdXQ9v6qB"
} }
], ],
"folder": null, "folder": null,
@ -781,7 +813,7 @@
"name": "Doombringer", "name": "Doombringer",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When a target marks HP from an attack by the @Lookup[@name], all PCs within Far range of the target lose a Hope.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When a target marks HP from an attack by the @Lookup[@name], all PCs within Far range of the target lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"liwKSCTmQqZasAf6": { "liwKSCTmQqZasAf6": {
@ -825,7 +857,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -834,7 +867,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Doombringer",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Battering Ram", "name": "Battering Ram",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to have the @Lookup[@name] charge at an inanimate object within Close range they could feasibly smash (such as a wall, cart, or market stand) and destroy it. All targets within Very Close range of the object must succeed on an Agility Reaction Roll or take <strong>2d4+3</strong> physical damage from the shrapnel.</p><p>@Template[type:circle|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to have the @Lookup[@name] charge at an inanimate object within Close range they could feasibly smash (such as a wall, cart, or market stand) and destroy it. All targets within Very Close range of the object must succeed on an Agility Reaction Roll or take <strong>2d4+3</strong> physical damage from the shrapnel.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"zns57MqnZ6M1d4r0": { "zns57MqnZ6M1d4r0": {
@ -308,7 +306,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/skills/melee/shield-damaged-broken-orange.webp", "img": "icons/skills/melee/shield-damaged-broken-orange.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Battering Ram",
"type": "placed",
"shape": "circle",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -352,7 +350,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -381,7 +380,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/blood-slash-foam-red.webp", "img": "icons/skills/melee/blood-slash-foam-red.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Spinning Serpent",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -408,7 +416,7 @@
"_id": "LR5XHauNtWcl18CY", "_id": "LR5XHauNtWcl18CY",
"img": "icons/magic/acid/projectile-needles-salvo-green.webp", "img": "icons/magic/acid/projectile-needles-salvo-green.webp",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to introduce a <strong>d6</strong> Spitter Die. When the @Lookup[@name] is in the spotlight, roll this die. On a result of 5 or higher, all targets in front of the @Lookup[@name] within Far range must succeed on an Agility Reaction Roll or take <strong>1d4</strong> physical damage. The @Lookup[@name] can take the spotlight a second time this GM turn.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to introduce a <strong>d6</strong> Spitter Die. When the @Lookup[@name] is in the spotlight, roll this die. On a result of 5 or higher, all targets in front of the @Lookup[@name] within Far range must succeed on an Agility Reaction Roll or take <strong>1d4</strong> physical damage. The @Lookup[@name] can take the spotlight a second time this GM turn.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"yx5fjMLLwSnvSbqs": { "yx5fjMLLwSnvSbqs": {
@ -449,7 +457,7 @@
"type": "attack", "type": "attack",
"_id": "Ds6KlQKZCOhh5OMT", "_id": "Ds6KlQKZCOhh5OMT",
"systemPath": "actions", "systemPath": "actions",
"description": "<p>All targets in front of the @Lookup[@name] within Far range must succeed on an Agility Reaction Roll or take <strong>1d4</strong> physical damage.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p>All targets in front of the @Lookup[@name] within Far range must succeed on an Agility Reaction Roll or take <strong>1d4</strong> physical damage.</p>",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],
@ -487,7 +495,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -516,7 +525,16 @@
}, },
"name": "Spit Attack", "name": "Spit Attack",
"img": "icons/magic/acid/projectile-needles-salvo-green.webp", "img": "icons/magic/acid/projectile-needles-salvo-green.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Spitter",
"type": "placed",
"shape": "inFront",
"size": "far",
"effects": []
}
]
}, },
"xccwknU2xHUwQSdn": { "xccwknU2xHUwQSdn": {
"type": "attack", "type": "attack",
@ -584,18 +602,15 @@
"type": "withinRange", "type": "withinRange",
"target": "hostile", "target": "hostile",
"range": "melee" "range": "melee"
} },
"changes": []
}, },
"changes": [],
"disabled": false, "disabled": false,
"duration": { "duration": {
"startTime": null, "value": null,
"combat": null, "units": "seconds",
"seconds": null, "expiry": null,
"rounds": null, "expired": false
"turns": null,
"startRound": null,
"startTurn": null
}, },
"description": "<p>You have a <strong>d6</strong> Spitter Die. When the Snake is in the spotlight, roll this die. On a result of 5 or higher, all targets in front of the Snake within Far range must succeed on an Agility Reaction Roll or take <strong>1d4</strong> physical damage. The Snake can take the spotlight a second time this GM turn.</p>", "description": "<p>You have a <strong>d6</strong> Spitter Die. When the Snake is in the spotlight, roll this die. On a result of 5 or higher, all targets in front of the Snake within Far range must succeed on an Agility Reaction Roll or take <strong>1d4</strong> physical damage. The Snake can take the spotlight a second time this GM turn.</p>",
"tint": "#ffffff", "tint": "#ffffff",
@ -605,6 +620,9 @@
"_stats": { "_stats": {
"compendiumSource": null "compendiumSource": null
}, },
"start": null,
"showIcon": 1,
"folder": null,
"_key": "!actors.items.effects!8KWVLWXFhlY2kYx0.LR5XHauNtWcl18CY.Mchd23xNQ4nSWw9X" "_key": "!actors.items.effects!8KWVLWXFhlY2kYx0.LR5XHauNtWcl18CY.Mchd23xNQ4nSWw9X"
} }
], ],

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -398,7 +396,7 @@
"name": "Rockslide", "name": "Rockslide",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to create a rockslide that buries the land in front of @Lookup[@name] within Close range with rockfall. All targets in this area must make an Agility Reaction Roll (19). Targets who fail take <strong>2d12+5</strong> physical damage and become Vulnerable until their next roll with Hope. Targets who succeed take half damage.</p><p>@Template[type:inFront|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to create a rockslide that buries the land in front of @Lookup[@name] within Close range with rockfall. All targets in this area must make an Agility Reaction Roll (19). Targets who fail take <strong>2d12+5</strong> physical damage and become Vulnerable until their next roll with Hope. Targets who succeed take half damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"eLGIC3kVjLo8FEvy": { "eLGIC3kVjLo8FEvy": {
@ -450,7 +448,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -484,7 +483,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/earth/barrier-stone-brown-green.webp", "img": "icons/magic/earth/barrier-stone-brown-green.webp",
"range": "" "range": "",
"areas": [
{
"name": "Rockslide",
"type": "placed",
"shape": "inFront",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -377,7 +375,7 @@
"name": "Drowning Embrace", "name": "Drowning Embrace",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against become <em>Restrained</em> and <em>Vulnerable</em> as they begin drowning. A target can break free, ending both conditions, with a successful Strength or Instinct Roll.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Spend a Fear</strong> to make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against become <em>Restrained</em> and <em>Vulnerable</em> as they begin drowning. A target can break free, ending both conditions, with a successful Strength or Instinct Roll.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"ooYbiLrYjoWXIfe9": { "ooYbiLrYjoWXIfe9": {
@ -402,7 +400,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -436,7 +435,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/water/vortex-water-whirlpool-blue.webp", "img": "icons/magic/water/vortex-water-whirlpool-blue.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Drowning Embrace",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -143,12 +143,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -199,7 +196,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -225,7 +222,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -234,7 +232,7 @@
"_id": "SsgN2qSYpQLR43Cz", "_id": "SsgN2qSYpQLR43Cz",
"img": "icons/skills/movement/arrows-up-trio-red.webp", "img": "icons/skills/movement/arrows-up-trio-red.webp",
"system": { "system": {
"description": "<p><strong>Spend 2 Fear</strong> to spotlight the @Lookup[@name] and up to <strong>2d4</strong> allies within Far range.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Spend 2 Fear</strong> to spotlight the @Lookup[@name] and up to <strong>2d4</strong> allies within Far range.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"lI0lnRb3xrUjqIYX": { "lI0lnRb3xrUjqIYX": {
@ -259,7 +257,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -288,7 +287,16 @@
}, },
"name": "Rally", "name": "Rally",
"img": "icons/skills/movement/arrows-up-trio-red.webp", "img": "icons/skills/movement/arrows-up-trio-red.webp",
"range": "" "range": "",
"areas": [
{
"name": "Rally Guards",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -315,7 +323,7 @@
"_id": "YeJ7eJVCKsRxG8mk", "_id": "YeJ7eJVCKsRxG8mk",
"img": "icons/skills/ranged/target-bullseye-arrow-blue.webp", "img": "icons/skills/ranged/target-bullseye-arrow-blue.webp",
"system": { "system": {
"description": "<p><em>Countdown (5)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. It ticks down when a PC makes an attack roll. When it triggers, all Archer Guards within Far range make a standard attack with advantage against the nearest target within their range. If any attacks succeed on the same target, combine their damage.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><em>Countdown (5)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. It ticks down when a PC makes an attack roll. When it triggers, all Archer Guards within Far range make a standard attack with advantage against the nearest target within their range. If any attacks succeed on the same target, combine their damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"xyhaCmPGiVMsTViH": { "xyhaCmPGiVMsTViH": {
@ -353,7 +361,16 @@
], ],
"name": "Start Countdown", "name": "Start Countdown",
"img": "icons/skills/ranged/target-bullseye-arrow-blue.webp", "img": "icons/skills/ranged/target-bullseye-arrow-blue.webp",
"range": "" "range": "",
"areas": [
{
"name": "On My Signal",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Terrifying", "name": "Terrifying",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"Rf2ZL3EjCzudonRb": { "Rf2ZL3EjCzudonRb": {
@ -271,7 +269,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -280,7 +279,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Terrifying",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -525,7 +533,7 @@
"name": "Lifesuck", "name": "Lifesuck",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] is spotlighted, roll a <strong>d8</strong>. On a result of 6 or higher, all targets within Very Close range must mark a HP.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p>When the @Lookup[@name] is spotlighted, roll a <strong>d8</strong>. On a result of 6 or higher, all targets within Very Close range must mark a HP.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"DA8qT2omBcG4oryX": { "DA8qT2omBcG4oryX": {
@ -569,7 +577,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -598,7 +607,16 @@
}, },
"name": "Roll d8", "name": "Roll d8",
"img": "icons/magic/unholy/strike-beam-blood-small-red-purple.webp", "img": "icons/magic/unholy/strike-beam-blood-small-red-purple.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Lifesuck",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -377,7 +375,7 @@
"name": "Terrifying Chorus", "name": "Terrifying Chorus",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>All PCs within Far range lose 2 Hope.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>All PCs within Far range lose 2 Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"nJxpFR4Ul0e2RrL4": { "nJxpFR4Ul0e2RrL4": {
@ -421,7 +419,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -430,7 +429,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-white.webp", "img": "icons/magic/death/skull-energy-light-white.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Terrifying Chorus",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -137,12 +137,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -193,7 +190,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -219,7 +216,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -258,7 +256,16 @@
}, },
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/skills/movement/arrows-up-trio-red.webp", "img": "icons/skills/movement/arrows-up-trio-red.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Tactician",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -400,7 +398,7 @@
"name": "Mind Dance", "name": "Mind Dance",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to create a magically dazzling display that grapples the minds of nearby foes. All targets within Close range must make an Instinct Reaction Roll. For each target who failed, you gain a Fear and the @Lookup[@name] learns one of the targets fears.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to create a magically dazzling display that grapples the minds of nearby foes. All targets within Close range must make an Instinct Reaction Roll. For each target who failed, you gain a Fear and the @Lookup[@name] learns one of the targets fears.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"0wL3ieMrXEb2gcxe": { "0wL3ieMrXEb2gcxe": {
@ -418,7 +416,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -447,7 +446,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/light/explosion-glow-spiral-yellow.webp", "img": "icons/magic/light/explosion-glow-spiral-yellow.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Mind Dance",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -473,7 +481,7 @@
"name": "Hallucinatory Breath", "name": "Hallucinatory Breath",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>Countdown (Loop 1d6). When the @Lookup[@name] takes damage for the first time, activate the countdown. When it triggers, the @Lookup[@name] breathes hallucinatory gas on all targets in front of them up to Far range. Targets must succeed on an Instinct Reaction Roll or be tormented by fearful hallucinations. Targets whose fears are known to the @Lookup[@name] have disadvantage on this roll. Targets who fail must mark a Stress and lose a Hope.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p>Countdown (Loop 1d6). When the @Lookup[@name] takes damage for the first time, activate the countdown. When it triggers, the @Lookup[@name] breathes hallucinatory gas on all targets in front of them up to Far range. Targets must succeed on an Instinct Reaction Roll or be tormented by fearful hallucinations. Targets whose fears are known to the @Lookup[@name] have disadvantage on this roll. Targets who fail must mark a Stress and lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"USEkCakSzYcZbBwY": { "USEkCakSzYcZbBwY": {
@ -542,7 +550,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -571,7 +580,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/air/fog-gas-smoke-purple.webp", "img": "icons/magic/air/fog-gas-smoke-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Hallucinatory Breath",
"type": "placed",
"shape": "inFront",
"size": "far",
"effects": []
}
]
}, },
"n8ZuLjwTf2FJ7V6n": { "n8ZuLjwTf2FJ7V6n": {
"type": "countdown", "type": "countdown",

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -439,7 +437,7 @@
"name": "Boiling Blast", "name": "Boiling Blast",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to spew a line of boiling water at any number of targets in a line up to Far range. All targets must succeed on an Agility Reaction Roll or take <strong>4d6+9</strong> physical damage. If a target marks an Armor Slot to reduce the damage, they must also mark a Stress.</p><p>@Template[type:ray|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to spew a line of boiling water at any number of targets in a line up to Far range. All targets must succeed on an Agility Reaction Roll or take <strong>4d6+9</strong> physical damage. If a target marks an Armor Slot to reduce the damage, they must also mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"pHZUiZRSj4FuG0uK": { "pHZUiZRSj4FuG0uK": {
@ -484,7 +482,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -513,7 +512,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/water/projectile-icecicle-glowing.webp", "img": "icons/magic/water/projectile-icecicle-glowing.webp",
"range": "" "range": "",
"areas": [
{
"name": "Boiling Blast",
"type": "placed",
"shape": "line",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -325,7 +323,7 @@
"name": "Escape Plan", "name": "Escape Plan",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to reveal a snare trap set anywhere on the battlefield by the @Lookup[@name]. All targets within Very Close range of the trap must succeed on an Agility Reaction Roll (13) or be pulled off their feet and suspended upside down. A target is Restrained and Vulnerable until they break free, ending both conditions, with a successful Finesse or Strength Roll (13).</p><p>@Template[type:rect|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to reveal a snare trap set anywhere on the battlefield by the @Lookup[@name]. All targets within Very Close range of the trap must succeed on an Agility Reaction Roll (13) or be pulled off their feet and suspended upside down. A target is Restrained and Vulnerable until they break free, ending both conditions, with a successful Finesse or Strength Roll (13).</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"sq0q1l2Go4GduR3B": { "sq0q1l2Go4GduR3B": {
@ -377,7 +375,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/environment/traps/trap-jaw-tan.webp", "img": "icons/environment/traps/trap-jaw-tan.webp",
"range": "" "range": "",
"areas": [
{
"name": "Escape Plan",
"type": "placed",
"shape": "circle",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -293,7 +291,7 @@
"_id": "oAxhAawgcK7DAdpa", "_id": "oAxhAawgcK7DAdpa",
"img": "icons/magic/sonic/explosion-shock-sound-wave.webp", "img": "icons/magic/sonic/explosion-shock-sound-wave.webp",
"system": { "system": {
"description": "<p><strong>Mark a HP</strong> to force all targets within Close range to mark a Stress and become <em>Vulnerable</em> until their next rest or they clear a HP.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a HP</strong> to force all targets within Close range to mark a Stress and become <em>Vulnerable</em> until their next rest or they clear a HP.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"g4CVwjDeJgTJ2oCw": { "g4CVwjDeJgTJ2oCw": {
@ -344,7 +342,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -358,7 +357,16 @@
], ],
"name": "Mark HP", "name": "Mark HP",
"img": "icons/magic/sonic/explosion-shock-sound-wave.webp", "img": "icons/magic/sonic/explosion-shock-sound-wave.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Sickening Flux",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -434,7 +442,7 @@
"_id": "updQuIK8sybf4YmW", "_id": "updQuIK8sybf4YmW",
"img": "icons/magic/light/explosion-glow-spiral-teal.webp", "img": "icons/magic/light/explosion-glow-spiral-teal.webp",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to transform the area within Very Close range into a different biome. All targets within this area take <strong>2d6+3</strong> direct magic damage.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Spend a Fear</strong> to transform the area within Very Close range into a different biome. All targets within this area take <strong>2d6+3</strong> direct magic damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"QzuQIAtSrgz9Zd5V": { "QzuQIAtSrgz9Zd5V": {
@ -486,7 +494,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -495,7 +504,16 @@
"effects": [], "effects": [],
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/magic/light/explosion-glow-spiral-teal.webp", "img": "icons/magic/light/explosion-glow-spiral-teal.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Remake Reality",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -282,7 +280,7 @@
"_id": "kD9kO92V7t3IqZu8", "_id": "kD9kO92V7t3IqZu8",
"img": "icons/magic/unholy/strike-hand-glow-pink.webp", "img": "icons/magic/unholy/strike-hand-glow-pink.webp",
"system": { "system": {
"description": "<p>When a PC rolls a failure with Fear while within Close range of the @Lookup[@name], they lose a Hope.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When a PC rolls a failure with Fear while within Close range of the @Lookup[@name], they lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"XQ7QebA0iGvMti4A": { "XQ7QebA0iGvMti4A": {
@ -326,7 +324,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -335,7 +334,16 @@
"effects": [], "effects": [],
"name": "Hope Damage", "name": "Hope Damage",
"img": "icons/magic/unholy/strike-hand-glow-pink.webp", "img": "icons/magic/unholy/strike-hand-glow-pink.webp",
"range": "" "range": "",
"areas": [
{
"name": "All Must fall",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -361,7 +369,7 @@
"_id": "lA7vcvS7oGT9NTSy", "_id": "lA7vcvS7oGT9NTSy",
"img": "icons/magic/fire/projectile-beams-salvo-red.webp", "img": "icons/magic/fire/projectile-beams-salvo-red.webp",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to rain down hellfire within Far range. All targets within the area must make an Agility Reaction Roll. Targets who fail take <strong>1d20+3</strong> magic damage. Targets who succeed take half damage.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to rain down hellfire within Far range. All targets within the area must make an Agility Reaction Roll. Targets who fail take <strong>1d20+3</strong> magic damage. Targets who succeed take half damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"nOzLQ0NJzeB3vKiV": { "nOzLQ0NJzeB3vKiV": {
@ -413,7 +421,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -442,7 +451,16 @@
}, },
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/magic/fire/projectile-beams-salvo-red.webp", "img": "icons/magic/fire/projectile-beams-salvo-red.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Hellfire",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -273,7 +271,7 @@
"_id": "7AXE86WNd68OySkD", "_id": "7AXE86WNd68OySkD",
"img": "icons/magic/fire/explosion-flame-lightning-strike.webp", "img": "icons/magic/fire/explosion-flame-lightning-strike.webp",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to choose a point within Far range. The ground within Very Close range of that point immediately bursts into flames. All creatures within this area must make an Agility Reaction Roll. Targets who fail take <strong>2d8</strong> magic damage from the flames. Targets who succeed take half damage.</p><p>@Template[type:circle|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to choose a point within Far range. The ground within Very Close range of that point immediately bursts into flames. All creatures within this area must make an Agility Reaction Roll. Targets who fail take <strong>2d8</strong> magic damage from the flames. Targets who succeed take half damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"x1VCkfcSYiPyg8fk": { "x1VCkfcSYiPyg8fk": {
@ -354,7 +352,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/fire/explosion-flame-lightning-strike.webp", "img": "icons/magic/fire/explosion-flame-lightning-strike.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Scorched Earth",
"type": "placed",
"shape": "circle",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -381,14 +388,14 @@
"_id": "ESnu3I89BmUdBZEk", "_id": "ESnu3I89BmUdBZEk",
"img": "icons/magic/fire/explosion-fireball-large-red-orange.webp", "img": "icons/magic/fire/explosion-fireball-large-red-orange.webp",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to erupt in a fi ery explosion. Make an attack against all targets within Close range. Targets the Elemental succeeds against take <strong>1d8</strong> magic damage and are knocked back to Far range.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Spend a Fear</strong> to erupt in a fi ery explosion. Make an attack against all targets within Close range. Targets the Elemental succeeds against take <strong>1d8</strong> magic damage and are knocked back to Far range.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"JQgqyW8H7fugR7F0": { "JQgqyW8H7fugR7F0": {
"type": "attack", "type": "attack",
"_id": "JQgqyW8H7fugR7F0", "_id": "JQgqyW8H7fugR7F0",
"systemPath": "actions", "systemPath": "actions",
"description": "<p><strong>Spend a Fear</strong> to erupt in a fi ery explosion. Make an attack against all targets within Close range. Targets the Elemental succeeds against take <strong>1d8</strong> magic damage and are knocked back to Far range.</p><p>@Template[type:emanation|range:c]</p>", "description": "",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [ "cost": [
@ -433,7 +440,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -462,7 +470,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/fire/explosion-fireball-large-red-orange.webp", "img": "icons/magic/fire/explosion-fireball-large-red-orange.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Explosion",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -492,9 +509,11 @@
"description": "<p>Three times per scene, when the @Lookup[@name] moves onto objects that are highly flammable, consume them to clear a HP or a Stress.</p>", "description": "<p>Three times per scene, when the @Lookup[@name] moves onto objects that are highly flammable, consume them to clear a HP or a Stress.</p>",
"resource": { "resource": {
"type": "simple", "type": "simple",
"value": 0, "value": 3,
"max": "3", "max": "3",
"icon": "fa-solid fa-fire" "icon": "fa-solid fa-fire",
"progression": "decreasing",
"recovery": "scene"
}, },
"actions": { "actions": {
"CTWSVVisdgJgF7pd": { "CTWSVVisdgJgF7pd": {
@ -504,7 +523,16 @@
"description": "", "description": "",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [
{
"scalable": false,
"key": "resource",
"value": 1,
"itemId": "3u6wvKPJAS2v5nWV",
"step": null,
"consumeOnSuccess": false
}
],
"uses": { "uses": {
"value": null, "value": null,
"max": "", "max": "",
@ -538,7 +566,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "self", "type": "self",
@ -571,7 +600,16 @@
"description": "", "description": "",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [
{
"scalable": false,
"key": "resource",
"value": 1,
"itemId": "3u6wvKPJAS2v5nWV",
"step": null,
"consumeOnSuccess": false
}
],
"uses": { "uses": {
"value": null, "value": null,
"max": "", "max": "",
@ -605,7 +643,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "self", "type": "self",

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Terrifying", "name": "Terrifying",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"9T1g3FH38cnCRG8k": { "9T1g3FH38cnCRG8k": {
@ -271,7 +269,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -280,7 +279,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Terrifying",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -574,7 +582,7 @@
"name": "Rampage", "name": "Rampage",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><em>Countdown (Loop 1d6)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. When it triggers, move the @Lookup[@name] in a straight line to a point within Far range and make an attack against all targets in their path. Targets the @Lookup[@name] succeeds against take <strong>2d8+2</strong> physical damage.</p><p>@Template[type:ray|range:f]</p>", "description": "<p><em>Countdown (Loop 1d6)</em>. When the @Lookup[@name] is in the spotlight for the first time, activate the countdown. When it triggers, move the @Lookup[@name] in a straight line to a point within Far range and make an attack against all targets in their path. Targets the @Lookup[@name] succeeds against take <strong>2d8+2</strong> physical damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"VjiFxuzfAaq5N1jy": { "VjiFxuzfAaq5N1jy": {
@ -619,7 +627,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -648,7 +657,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/movement/trail-streak-zigzag-yellow.webp", "img": "icons/magic/movement/trail-streak-zigzag-yellow.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Rampage",
"type": "placed",
"shape": "line",
"size": "far",
"effects": []
}
]
}, },
"BhA3vxCuMs4UbbQU": { "BhA3vxCuMs4UbbQU": {
"type": "countdown", "type": "countdown",

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,14 +217,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Terrifying", "name": "Terrifying",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"VjdSO1lAdTIAlofM": { "VjdSO1lAdTIAlofM": {
@ -271,7 +269,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -280,7 +279,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Terrifying",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -367,7 +365,7 @@
"name": "Reality Quake", "name": "Reality Quake",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to rattle the edges of reality within Far range of the @Lookup[@name]. All targets within that area must succeed on a Knowledge Reaction Roll or become Unstuck from reality until the end of the scene. When an Unstuck target spends Hope or marks Armor Slots, HP, or Stress, they must double the amount spent or marked.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to rattle the edges of reality within Far range of the @Lookup[@name]. All targets within that area must succeed on a Knowledge Reaction Roll or become Unstuck from reality until the end of the scene. When an Unstuck target spends Hope or marks Armor Slots, HP, or Stress, they must double the amount spent or marked.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"7apNSLz8m7sxyLhU": { "7apNSLz8m7sxyLhU": {
@ -385,7 +383,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -419,7 +418,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/sonic/explosion-shock-sound-wave.webp", "img": "icons/magic/sonic/explosion-shock-sound-wave.webp",
"range": "" "range": "",
"areas": [
{
"name": "Reality Quake",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -299,7 +297,7 @@
"name": "Disgorge Realiy Flotsam", "name": "Disgorge Realiy Flotsam",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to spew partially digested portions of consumed realities at all targets within Close range. Targets must succeed on a Knowledge Reaction Roll or mark 2 Stress.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to spew partially digested portions of consumed realities at all targets within Close range. Targets must succeed on a Knowledge Reaction Roll or mark 2 Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"6vX6VHpXX7OiGSWH": { "6vX6VHpXX7OiGSWH": {
@ -343,7 +341,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -372,7 +371,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/unholy/barrier-shield-glowing-pink.webp", "img": "icons/magic/unholy/barrier-shield-glowing-pink.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Disgorge Realiy Flotsam",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -143,12 +143,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -199,7 +196,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -225,7 +222,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -317,9 +315,46 @@
"_id": "0fn7rVLwBnyCyvTA", "_id": "0fn7rVLwBnyCyvTA",
"img": "icons/skills/melee/strike-slashes-orange.webp", "img": "icons/skills/melee/strike-slashes-orange.webp",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a standard attack, they can attack all targets within Very Close range.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p>When the @Lookup[@name] makes a standard attack, they can attack all targets within Very Close range.</p>",
"resource": null, "resource": null,
"actions": {}, "actions": {
"ngl1xlJT4IOh3bkJ": {
"type": "effect",
"_id": "ngl1xlJT4IOh3bkJ",
"systemPath": "actions",
"baseAction": false,
"description": "",
"chatDisplay": true,
"originItem": {
"type": "itemCollection"
},
"actionType": "action",
"triggers": [],
"areas": [
{
"name": "Flailing Limbs",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
],
"cost": [],
"uses": {
"value": null,
"max": "",
"recovery": null,
"consumeOnSuccess": false
},
"effects": [],
"target": {
"type": "any",
"amount": null
},
"name": "",
"range": ""
}
},
"originItemType": null, "originItemType": null,
"subType": null, "subType": null,
"originId": null "originId": null
@ -463,7 +498,7 @@
"_id": "uTtQwNg46NAjgzuD", "_id": "uTtQwNg46NAjgzuD",
"img": "icons/magic/death/skeleton-skull-soul-blue.webp", "img": "icons/magic/death/skeleton-skull-soul-blue.webp",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to cause all PCs within Far range to make a Presence Reaction Roll (13). Targets who fail lose a Hope and you gain a Fear for each. Targets who succeed must mark a Stress.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Mark a Stress</strong> to cause all PCs within Far range to make a Presence Reaction Roll (13). Targets who fail lose a Hope and you gain a Fear for each. Targets who succeed must mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"2NYC0D7wkBNrUAKl": { "2NYC0D7wkBNrUAKl": {
@ -514,7 +549,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -543,7 +579,16 @@
}, },
"name": "Mark Stress", "name": "Mark Stress",
"img": "icons/magic/death/skeleton-skull-soul-blue.webp", "img": "icons/magic/death/skeleton-skull-soul-blue.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Tormented Screams",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,14 +211,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Terrifying", "name": "Terrifying",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"dquYnt5qiHZfnyD9": { "dquYnt5qiHZfnyD9": {
@ -265,7 +263,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -274,7 +273,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Terrifying",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -324,7 +332,7 @@
"name": "Perfect Strike", "name": "Perfect Strike",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress </strong>to make a standard attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against are <em>Vulnerable</em> until their next rest.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Mark a Stress </strong>to make a standard attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against are <em>Vulnerable</em> until their next rest.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"un9btM1mN53JHIgV": { "un9btM1mN53JHIgV": {
@ -376,7 +384,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -410,7 +419,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/strike-axe-energy-pink.webp", "img": "icons/skills/melee/strike-axe-energy-pink.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Perfect Strike",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,14 +211,15 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
"name": "Terrifying", "name": "Terrifying",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the @Lookup[@name] makes a successful attack, all PCs within Far range lose a Hope and you gain a Fear.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"NoEb6qR3ktIu9kRJ": { "NoEb6qR3ktIu9kRJ": {
@ -265,7 +263,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -274,7 +273,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/death/skull-energy-light-purple.webp", "img": "icons/magic/death/skull-energy-light-purple.webp",
"range": "" "range": "",
"areas": [
{
"name": "Terrifying",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -326,7 +324,7 @@
"name": "Enchanting Song", "name": "Enchanting Song",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to sing a song that affects all targets within Close range. Targets must succeed on an Instinct Reaction Roll or become Entranced until they mark 2 Stress. Other @Lookup[@name]s within Close range of the target can <strong>mark a Stress</strong> to each add a +1 bonus to the Difficulty of the reaction roll. While Entranced, a target cant act and is <em>Vulnerable</em>.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Spend a Fear</strong> to sing a song that affects all targets within Close range. Targets must succeed on an Instinct Reaction Roll or become Entranced until they mark 2 Stress. Other @Lookup[@name]s within Close range of the target can <strong>mark a Stress</strong> to each add a +1 bonus to the Difficulty of the reaction roll. While Entranced, a target cant act and is <em>Vulnerable</em>.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"FY8K8Nsg0TKAWok8": { "FY8K8Nsg0TKAWok8": {
@ -351,7 +349,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -385,7 +384,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/control/hypnosis-mesmerism-eye.webp", "img": "icons/magic/control/hypnosis-mesmerism-eye.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Enchanting Song",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -302,7 +300,7 @@
"_id": "WdVLwy9RNkVlZnCL", "_id": "WdVLwy9RNkVlZnCL",
"img": "icons/skills/melee/strike-sword-steel-yellow.webp", "img": "icons/skills/melee/strike-sword-steel-yellow.webp",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take <strong>1d8+2</strong> physical damage and must mark a Stress.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take <strong>1d8+2</strong> physical damage and must mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"vMv4monku9LOSxUZ": { "vMv4monku9LOSxUZ": {
@ -379,7 +377,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -408,7 +407,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/strike-sword-steel-yellow.webp", "img": "icons/skills/melee/strike-sword-steel-yellow.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Cut to the Bone",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -139,12 +139,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -195,7 +192,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -221,7 +218,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -256,7 +254,7 @@
"_id": "a76dNCrcoZOH1RRT", "_id": "a76dNCrcoZOH1RRT",
"img": "icons/magic/sonic/projectile-shock-wave-blue.webp", "img": "icons/magic/sonic/projectile-shock-wave-blue.webp",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> and target a group within Far range. All targets must succeed on an Agility Reaction Roll or take <strong>1d8+2</strong> magic damage. You gain a Fear for each target who marked HP from this attack.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Mark a Stress</strong> and target a group within Far range. All targets must succeed on an Agility Reaction Roll or take <strong>1d8+2</strong> magic damage. You gain a Fear for each target who marked HP from this attack.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"K4VnxigKTiu7hhZx": { "K4VnxigKTiu7hhZx": {
@ -308,7 +306,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -337,7 +336,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/magic/sonic/projectile-shock-wave-blue.webp", "img": "icons/magic/sonic/projectile-shock-wave-blue.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Supressing Blast",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -394,7 +402,16 @@
}, },
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/skills/movement/arrows-up-trio-red.webp", "img": "icons/skills/movement/arrows-up-trio-red.webp",
"range": "" "range": "",
"areas": [
{
"name": "Move as a Unit",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -306,7 +304,7 @@
"name": "Blade of the Forest", "name": "Blade of the Forest",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take physical damage equal to <strong>[[/r 3d4]]</strong> + the targets Major threshold.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Spend a Fear</strong> to make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take physical damage equal to <strong>[[/r 3d4]]</strong> + the targets Major threshold.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"xPSVwVVOC5gc2KTi": { "xPSVwVVOC5gc2KTi": {
@ -331,7 +329,8 @@
}, },
"damage": { "damage": {
"parts": {}, "parts": {},
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -360,7 +359,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/skills/melee/strike-blade-hooked-green-purple.webp", "img": "icons/skills/melee/strike-blade-hooked-green-purple.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Blade of the Forest",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -138,12 +138,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -194,7 +191,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -220,7 +217,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -411,7 +409,7 @@
"name": "Avalanche Roar", "name": "Avalanche Roar",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to roar while within a cave and cause a cave-in. All targets within Close range must succeed on an Agility Reaction Roll (14) or take <strong>2d10</strong> physical damage. The rubble can be cleared with a Progress Countdown (8).</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Spend a Fear</strong> to roar while within a cave and cause a cave-in. All targets within Close range must succeed on an Agility Reaction Roll (14) or take <strong>2d10</strong> physical damage. The rubble can be cleared with a Progress Countdown (8).</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"4UGEEuK9XY8leCBV": { "4UGEEuK9XY8leCBV": {
@ -463,7 +461,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -492,7 +491,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/sonic/projectile-sound-rings-wave.webp", "img": "icons/magic/sonic/projectile-sound-rings-wave.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Avalanche Roar",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
}, },
"UurIzyyMRAJc2DUX": { "UurIzyyMRAJc2DUX": {
"type": "countdown", "type": "countdown",

View file

@ -349,7 +349,7 @@
"name": "Mana Bolt", "name": "Mana Bolt",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to lob explosive magic at a point within Far range. All targets within Very Close range of that point must make an Agility Reaction Roll. Targets who fail take <strong>2d8+20</strong> magic damage and are knocked back to Close range. Targets who succeed take half damage and arent knocked back.</p><p>@Template[type:circle|range:vc]</p>", "description": "<p><strong>Spend a Fear</strong> to lob explosive magic at a point within Far range. All targets within Very Close range of that point must make an Agility Reaction Roll. Targets who fail take <strong>2d8+20</strong> magic damage and are knocked back to Close range. Targets who succeed take half damage and arent knocked back.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"mI9i9iwrM48NjzeE": { "mI9i9iwrM48NjzeE": {
@ -430,7 +430,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/sonic/projectile-shock-wave-blue.webp", "img": "icons/magic/sonic/projectile-shock-wave-blue.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Mana Bolt",
"type": "placed",
"shape": "circle",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -132,12 +132,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -188,7 +185,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -214,7 +211,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -412,7 +410,7 @@
"name": "Detonation", "name": "Detonation",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] is destroyed, they explode. All targets within Close range must make an Agility Reaction Roll. Targets who fail take <strong>3d20</strong> physical damage. Targets who succeed take half damage.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p>When the @Lookup[@name] is destroyed, they explode. All targets within Close range must make an Agility Reaction Roll. Targets who fail take <strong>3d20</strong> physical damage. Targets who succeed take half damage.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"i1PZ9ddYdOOs2xSb": { "i1PZ9ddYdOOs2xSb": {
@ -457,7 +455,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -486,7 +485,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/sonic/explosion-shock-wave-teal.webp", "img": "icons/magic/sonic/explosion-shock-wave-teal.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Detonation",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -163,12 +163,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -219,7 +216,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -245,7 +242,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -478,7 +476,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -487,7 +486,16 @@
"effects": [], "effects": [],
"name": "Lose Hope", "name": "Lose Hope",
"img": "icons/magic/fire/flame-burning-skull-orange.webp", "img": "icons/magic/fire/flame-burning-skull-orange.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Ashes to Ashes",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -512,7 +520,7 @@
"name": "Desperate Rampage", "name": "Desperate Rampage",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d20+2</strong> physical damage, are knocked back to Close range of where they were, and must mark a Stress.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>2d20+2</strong> physical damage, are knocked back to Close range of where they were, and must mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"3glUQAcsLBcCumnS": { "3glUQAcsLBcCumnS": {
@ -582,7 +590,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -611,7 +620,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/creatures/abilities/tail-swipe-green.webp", "img": "icons/creatures/abilities/tail-swipe-green.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Desperate Rampage",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -637,7 +655,7 @@
"name": "Ashen Cloud", "name": "Ashen Cloud",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to smash the ground and kick up ash within Far range. While within the ash cloud, a target has disadvantage on action rolls. The ash cloud clears the next time an adversary is spotlighted.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><strong>Spend a Fear</strong> to smash the ground and kick up ash within Far range. While within the ash cloud, a target has disadvantage on action rolls. The ash cloud clears the next time an adversary is spotlighted.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"UrD4A68IBJgyfvvt": { "UrD4A68IBJgyfvvt": {
@ -667,7 +685,16 @@
}, },
"name": "Spend Fear", "name": "Spend Fear",
"img": "icons/magic/air/fog-gas-smoke-brown.webp", "img": "icons/magic/air/fog-gas-smoke-brown.webp",
"range": "" "range": "",
"areas": [
{
"name": "Ashen Cloud",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -693,14 +720,14 @@
"name": "Apocalyptic Thrasing", "name": "Apocalyptic Thrasing",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><em>Countdown (1d12)</em>. <strong>Spend a Fear</strong> to activate. It ticks down when a PC rolls with Fear. When it triggers, the @Lookup[@name] thrashes about, causing environmental damage (such as an earthquake, avalanche, or collapsing walls). All targets within Far range must make a Strength Reaction Roll. Targets who fail take 2d10+10 physical damage and are Restrained by the rubble until they break free with a successful Strength Roll. Targets who succeed take half damage. If the @Lookup[@name] is defeated while this countdown is active, trigger the countdown immediately as the destruction caused by their death throes.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p><em>Countdown (1d12)</em>. <strong>Spend a Fear</strong> to activate. It ticks down when a PC rolls with Fear. When it triggers, the @Lookup[@name] thrashes about, causing environmental damage (such as an earthquake, avalanche, or collapsing walls). All targets within Far range must make a Strength Reaction Roll. Targets who fail take 2d10+10 physical damage and are Restrained by the rubble until they break free with a successful Strength Roll. Targets who succeed take half damage. If the @Lookup[@name] is defeated while this countdown is active, trigger the countdown immediately as the destruction caused by their death throes.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"OznXxmwiPwzuFPQZ": { "OznXxmwiPwzuFPQZ": {
"type": "attack", "type": "attack",
"_id": "OznXxmwiPwzuFPQZ", "_id": "OznXxmwiPwzuFPQZ",
"systemPath": "actions", "systemPath": "actions",
"description": "<p>When the countdown triggers, the @Lookup[@name] thrashes about, causing environmental damage (such as an earthquake, avalanche, or collapsing walls). All targets within Far range must make a Strength Reaction Roll. Targets who fail take 2d10+10 physical damage and are Restrained by the rubble until they break free with a successful Strength Roll. Targets who succeed take half damage. If the @Lookup[@name] is defeated while this countdown is active, trigger the countdown immediately as the destruction caused by their death throes.</p><p>@Template[type:emanation|range:f]</p>", "description": "<p>When the countdown triggers, the @Lookup[@name] thrashes about, causing environmental damage (such as an earthquake, avalanche, or collapsing walls). All targets within Far range must make a Strength Reaction Roll. Targets who fail take 2d10+10 physical damage and are Restrained by the rubble until they break free with a successful Strength Roll. Targets who succeed take half damage. If the @Lookup[@name] is defeated while this countdown is active, trigger the countdown immediately as the destruction caused by their death throes.</p>",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],
@ -738,7 +765,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -772,7 +800,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/creatures/abilities/mouth-teeth-fire-orange.webp", "img": "icons/creatures/abilities/mouth-teeth-fire-orange.webp",
"range": "" "range": "",
"areas": [
{
"name": "Apocalyptic Thrasing",
"type": "placed",
"shape": "emanation",
"size": "far",
"effects": []
}
]
}, },
"rZ7IwBnDzw7VmBT6": { "rZ7IwBnDzw7VmBT6": {
"type": "countdown", "type": "countdown",

View file

@ -163,12 +163,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -219,7 +216,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -245,7 +242,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -442,7 +440,7 @@
"name": "Eruption", "name": "Eruption",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Spend a Fear</strong> to erupt lava from beneath the @Lookup[@name]s scales, filling the area within Very Close range with molten lava. All targets in that area must succeed on an Agility Reaction Roll or take <strong>4d6+6</strong> physical damage and be knocked back to Close range. This area remains lava. When a creature other than the @Lookup[@name] enters that area or acts while inside of it, they must mark 6 HP.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p><strong>Spend a Fear</strong> to erupt lava from beneath the @Lookup[@name]s scales, filling the area within Very Close range with molten lava. All targets in that area must succeed on an Agility Reaction Roll or take <strong>4d6+6</strong> physical damage and be knocked back to Close range. This area remains lava. When a creature other than the @Lookup[@name] enters that area or acts while inside of it, they must mark 6 HP.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"OpwKa8tQQoaEIZiS": { "OpwKa8tQQoaEIZiS": {
@ -487,7 +485,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -516,7 +515,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/fire/blast-jet-stream-embers-red.webp", "img": "icons/magic/fire/blast-jet-stream-embers-red.webp",
"range": "veryClose" "range": "veryClose",
"areas": [
{
"name": "Eruption",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -542,7 +550,7 @@
"name": "Volcanic Breath", "name": "Volcanic Breath",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>When the @Lookup[@name] takes Major damage, roll a <strong>d10</strong>. On a result of 8 or higher, the @Lookup[@name] breathes a flow of lava in front of them within Far range. All targets in that area must make an Agility Reaction Roll. Targets who fail take <strong>2d10+4</strong> physical damage, mark <strong>1d4</strong> Stress, and are Vulnerable until they clear a Stress. Targets who succeed take half damage and must mark a Stress.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p>When the @Lookup[@name] takes Major damage, roll a <strong>d10</strong>. On a result of 8 or higher, the @Lookup[@name] breathes a flow of lava in front of them within Far range. All targets in that area must make an Agility Reaction Roll. Targets who fail take <strong>2d10+4</strong> physical damage, mark <strong>1d4</strong> Stress, and are Vulnerable until they clear a Stress. Targets who succeed take half damage and must mark a Stress.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"OhrssSQhmciZt1Rm": { "OhrssSQhmciZt1Rm": {
@ -602,7 +610,7 @@
"type": "attack", "type": "attack",
"_id": "LBNvfABGWcrygpQM", "_id": "LBNvfABGWcrygpQM",
"systemPath": "actions", "systemPath": "actions",
"description": "<p>The @Lookup[@name] breathes a flow of lava in front of them within Far range. All targets in that area must make an Agility Reaction Roll. Targets who fail take <strong>2d10+4</strong> physical damage, mark <strong>1d4</strong> Stress, and are Vulnerable until they clear a Stress. Targets who succeed take half damage and must mark a Stress.</p><p>@Template[type:inFront|range:f]</p>", "description": "<p><span style=\"color: rgb(239, 230, 216); font-family: Montserrat, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;\">The </span><span style=\"box-sizing: border-box; scrollbar-width: thin; scrollbar-color: rgb(93, 20, 43) rgba(0, 0, 0, 0); font-family: Montserrat, sans-serif; color: rgb(239, 230, 216); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;\">@Lookup[@name] </span><span style=\"color: rgb(239, 230, 216); font-family: Montserrat, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;\">breathes a flow of lava in front of them within Far range. All targets in that area must make an Agility Reaction Roll. Targets who fail take </span><span style=\"box-sizing: border-box; scrollbar-width: thin; scrollbar-color: rgb(93, 20, 43) rgba(0, 0, 0, 0); color: rgb(239, 230, 216); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; font-family: &#x27;Montserrat, sans-serif&#x27;\">2d10+4</span><span style=\"color: rgb(239, 230, 216); font-family: Montserrat, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;\"> physical damage, mark </span><span style=\"box-sizing: border-box; scrollbar-width: thin; scrollbar-color: rgb(93, 20, 43) rgba(0, 0, 0, 0); color: rgb(239, 230, 216); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; font-family: &#x27;Montserrat, sans-serif&#x27;\">1d4</span><span style=\"color: rgb(239, 230, 216); font-family: Montserrat, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgba(24, 22, 46, 0.565); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;\"> Stress, and are Vulnerable until they clear a Stress. Targets who succeed take half damage and must mark a Stress.</span></p>",
"chatDisplay": true, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],
@ -664,7 +672,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -698,7 +707,16 @@
}, },
"name": "Roll Save", "name": "Roll Save",
"img": "icons/magic/fire/blast-jet-stream-embers-orange.webp", "img": "icons/magic/fire/blast-jet-stream-embers-orange.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Volcanic Breath",
"type": "placed",
"shape": "inFront",
"size": "far",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

View file

@ -163,12 +163,9 @@
"src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg", "src": "systems/daggerheart/assets/icons/documents/actors/dragon-head.svg",
"anchorX": 0.5, "anchorX": 0.5,
"anchorY": 0.5, "anchorY": 0.5,
"offsetX": 0,
"offsetY": 0,
"fit": "contain", "fit": "contain",
"scaleX": 1, "scaleX": 1,
"scaleY": 1, "scaleY": 1,
"rotation": 0,
"tint": "#ffffff", "tint": "#ffffff",
"alphaThreshold": 0.75 "alphaThreshold": 0.75
}, },
@ -219,7 +216,7 @@
"saturation": 0, "saturation": 0,
"contrast": 0 "contrast": 0
}, },
"detectionModes": [], "detectionModes": {},
"occludable": { "occludable": {
"radius": 0 "radius": 0
}, },
@ -245,7 +242,8 @@
"flags": {}, "flags": {},
"randomImg": false, "randomImg": false,
"appendNumber": false, "appendNumber": false,
"prependAdjective": false "prependAdjective": false,
"depth": 1
}, },
"items": [ "items": [
{ {
@ -448,7 +446,7 @@
"name": "Avalanche Tail", "name": "Avalanche Tail",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>4d6+4</strong> physical damage and are knocked.</p><p>@Template[type:emanation|range:c]</p>", "description": "<p><strong>Mark a Stress</strong> to make an attack against all targets within Close range. Targets the @Lookup[@name] succeeds against take <strong>4d6+4</strong> physical damage and are knocked.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"23y0BoufIgNq62j9": { "23y0BoufIgNq62j9": {
@ -491,7 +489,8 @@
} }
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -525,7 +524,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/creatures/abilities/tail-swipe-green.webp", "img": "icons/creatures/abilities/tail-swipe-green.webp",
"range": "close" "range": "close",
"areas": [
{
"name": "Avalanche Tail",
"type": "placed",
"shape": "emanation",
"size": "close",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,
@ -548,18 +556,15 @@
"type": "withinRange", "type": "withinRange",
"target": "hostile", "target": "hostile",
"range": "melee" "range": "melee"
} },
"changes": []
}, },
"changes": [],
"disabled": false, "disabled": false,
"duration": { "duration": {
"startTime": null, "value": null,
"combat": null, "units": "seconds",
"seconds": null, "expiry": null,
"rounds": null, "expired": false
"turns": null,
"startRound": null,
"startTurn": null
}, },
"description": "<p> <em>Vulnerable</em> until your next roll with Hope.</p>", "description": "<p> <em>Vulnerable</em> until your next roll with Hope.</p>",
"tint": "#ffffff", "tint": "#ffffff",
@ -571,6 +576,9 @@
"_stats": { "_stats": {
"compendiumSource": null "compendiumSource": null
}, },
"start": null,
"showIcon": 1,
"folder": null,
"_key": "!actors.items.effects!ladm7wykhZczYzrQ.8bMOItTuL7PfAYcJ.qtIaAZDW8QsjILgb" "_key": "!actors.items.effects!ladm7wykhZczYzrQ.8bMOItTuL7PfAYcJ.qtIaAZDW8QsjILgb"
} }
], ],
@ -590,7 +598,7 @@
"name": "Dive-Bomb", "name": "Dive-Bomb",
"type": "feature", "type": "feature",
"system": { "system": {
"description": "<p>If the @Lookup[@name] is flying, mark a <strong>Stress</strong> to choose a point within Far range. Move to that point and make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take <strong>2d10+6</strong> physical damage and must mark a Stress and lose a Hope.</p><p>@Template[type:emanation|range:vc]</p>", "description": "<p>If the @Lookup[@name] is flying, mark a <strong>Stress</strong> to choose a point within Far range. Move to that point and make an attack against all targets within Very Close range. Targets the @Lookup[@name] succeeds against take <strong>2d10+6</strong> physical damage and must mark a Stress and lose a Hope.</p>",
"resource": null, "resource": null,
"actions": { "actions": {
"OpAT9nxlbgvnhdBg": { "OpAT9nxlbgvnhdBg": {
@ -685,7 +693,8 @@
"type": [] "type": []
} }
}, },
"includeBase": false "includeBase": false,
"groupAttack": ""
}, },
"target": { "target": {
"type": "any", "type": "any",
@ -714,7 +723,16 @@
}, },
"name": "Attack", "name": "Attack",
"img": "icons/creatures/reptiles/dragon-winged-blue.webp", "img": "icons/creatures/reptiles/dragon-winged-blue.webp",
"range": "far" "range": "far",
"areas": [
{
"name": "Dive-Bomb",
"type": "placed",
"shape": "emanation",
"size": "veryClose",
"effects": []
}
]
} }
}, },
"originItemType": null, "originItemType": null,

Some files were not shown because too many files have changed in this diff Show more