Merge branch 'development' into feature/628-allow-override-range-measurement-settings

This commit is contained in:
Chris Ryan 2025-08-18 14:31:24 +10:00
commit fcf35ac17e
1080 changed files with 9771 additions and 4326 deletions

2
.env.example Normal file
View file

@ -0,0 +1,2 @@
FOUNDRY_MAIN_PATH=/path/to/foundry/resources/app/main.js
FOUNDRY_DATA_PATH=/path/to/foundry/data

View file

@ -1,10 +1,10 @@
--- ---
name: Bug report name: Bug report
about: Create a report to help us improve about: Create a bug report to help us identify issues and resolve them
title: "[BUG] - " title: "[Bug] <Insert Title here> "
labels: bug labels: bug
type: bug
assignees: '' assignees: ''
--- ---
**Describe the bug** **Describe the bug**
@ -24,10 +24,10 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem. If applicable, add screenshots to help explain your problem.
**Setup Information:** **Setup Information:**
- OS: [e.g. iOS] - OS: [e.g. iOS, Windows]
- Browser [e.g. chrome, safari] - Browser [e.g. chrome, safari]
- Foundry Version [e.g. v13 b342] - Foundry Version [e.g. v13 b342]
- System Version [e.g. main-3593f44] - System Version [e.g. v.1.0, v.1.0.1]
**Additional context** **Additional context**

View file

@ -0,0 +1,14 @@
---
name: Feature report
about: Create a feature report for suggestions on improving the system
title: "[Feature] <Insert Title here> "
labels: enhancement, discussion, maybe
type: feature
assignees: ''
---
**Description**
A clear and concise description of what feature needs to be implemented.
**Screenshots**
If applicable, add screenshots to help explain the feature that needs to be implemented.

9
.github/ISSUE_TEMPLATE/typo_report.md vendored Normal file
View file

@ -0,0 +1,9 @@
---
name: Typo report
about: Create a new issue to report a compendium typo
title: "[TYPO] - "
labels: compendium, typo
type: bug
assignees: ''
---

View file

@ -0,0 +1,55 @@
---
name: Pull Request
about: Create a new pull request
title: "[Community PR] <Insert Title here>"
labels: community pr
assignees: ''
---
## Description
Please include a summary of the change and which issue is fixed (if applicable). Also include relevant context or motivation for the change.
- Fixes #(issue)
- Closes #(issue)
## Type of Change
Please check the relevant options:
- [ ] Bug fix
- [ ] New feature
- [ ] Code cleanup/refactor
- [ ] Documentation update
- [ ] Test coverage
- [ ] Dependency update
- [ ] Configuration change
- [ ] Other (please describe):
## How Has This Been Tested?
Please describe the tests you ran to verify your changes:
- [ ] Manual testing
- [ ] Other:
## Screenshots (if applicable)
Include screenshots or GIFs to help explain your changes visually.
## Checklist
- [ ] My code follows the project style guidelines
- [ ] I have performed a self-review of my code
- [ ] I have commented my code where necessary
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings or errors
- [ ] I have added tests that prove my fix or feature works
- [ ] New and existing tests pass locally with my changes
## Additional Comments
Add any other context or questions here.
---
> Thank you for your contribution! 🎉

1
.gitignore vendored
View file

@ -1,4 +1,5 @@
.vscode .vscode
.env
node_modules node_modules
/packs /packs
Build Build

View file

@ -24,23 +24,40 @@ You can find the documentation here: https://github.com/Foundryborne/daggerheart
## Development Setup ## Development Setup
- Open a terminal in the directory with the repo `cd <path>/<to>/<repo>` 1. **Navigate to the repo directory:**
- NOTE: The repo should be placed in the system files are or somewhere else and a link (if on linux) is placed in the system directory
- NOTE: Linux link can be made using `ln -snf <path to development folder> daggerheart` inside the system folder
- Install npm `npm install`
- Update package.json to match your profile
```
"start": "concurrently \"rollup -c --watch\" \"node C:/FoundryDev/resources/app/main.js --dataPath=C:/FoundryDevFiles --noupnp\" \"gulp\"",
"start-test": "node C:/FoundryDev/resources/app/main.js --dataPath=C:/FoundryDevFiles && rollup -c --watch && gulp",
```bash
cd <path>/<to>/<repo>
``` ```
- Replace `C:/FoundryDev/resources/app/main.js` with `<your>/<path>/<to>/<foundry>/<main.js>` 2. **Install dependencies:**
- The main is likely in `<Foundry Install Location>/resouces/app/main.js`
- Replace `--dataPath=C:/FoundryDevFiles` with `<your>/<path>/<to>/<foundry>/<data>`
Now you should be able to build the app using `npm start` ```bash
npm install
```
3. **Configure your Foundry paths:**
```bash
npm run setup:dev -- --foundry-path="/path/to/foundry/main.js" --data-path="/path/to/data"
```
4. **Start developing:**
```bash
npm start
```
### Available Scripts
- `npm start` - Start development with file watching and Foundry launching
- `npm run build` - One-time build
- `npm run setup:dev -- --foundry-path="<path>" --data-path="<path>"` - Configure development environment
### Notes
- The repo should be placed in your Foundry `Data/systems/` directory or symlinked there
- Linux symlink can be made using `ln -snf <path to development folder> daggerheart` inside the systems folder
- Your `.env` file is ignored by git, so each developer can have their own configuration
[Foundry VTT Website][1] [Foundry VTT Website][1]
[1]: https://foundryvtt.com/ [1]: https://foundryvtt.com/

View file

@ -193,7 +193,8 @@
"companionLevelup": { "companionLevelup": {
"confirmTitle": "Companion Levelup", "confirmTitle": "Companion Levelup",
"confirmText": "Would you like to level up your companion {name} by {levelChange} levels at this time? (You can do it manually later)" "confirmText": "Would you like to level up your companion {name} by {levelChange} levels at this time? (You can do it manually later)"
} },
"viewLevelups": "View Levelups"
}, },
"Companion": { "Companion": {
"FIELDS": { "FIELDS": {
@ -236,6 +237,9 @@
} }
}, },
"APPLICATIONS": { "APPLICATIONS": {
"Attribution": {
"title": "Attribution"
},
"CharacterCreation": { "CharacterCreation": {
"tabs": { "tabs": {
"ancestry": "Ancestry", "ancestry": "Ancestry",
@ -490,7 +494,8 @@
"pretext": "When you level up, record it on your character sheet, then choose two from the list below or any unmarked from the previous tier.", "pretext": "When you level up, record it on your character sheet, then choose two from the list below or any unmarked from the previous tier.",
"posttext": "Take an additional domain card of your level or lower from a domain you have access to." "posttext": "Take an additional domain card of your level or lower from a domain you have access to."
}, },
"title": "{actor} Level Up" "title": "{actor} Level Up",
"viewModeTitle": "{actor} Level Up (View Mode)"
}, },
"MulticlassChoice": { "MulticlassChoice": {
"title": "Multiclassing - {actor}", "title": "Multiclassing - {actor}",
@ -1905,6 +1910,7 @@
"armorScore": "Armor Score", "armorScore": "Armor Score",
"activeEffects": "Active Effects", "activeEffects": "Active Effects",
"armorSlots": "Armor Slots", "armorSlots": "Armor Slots",
"artistAttribution": "Artwork By: {artist}",
"attack": "Attack", "attack": "Attack",
"basics": "Basics", "basics": "Basics",
"bonus": "Bonus", "bonus": "Bonus",
@ -1995,7 +2001,7 @@
"true": "True", "true": "True",
"type": "Type", "type": "Type",
"unarmed": "Unarmed", "unarmed": "Unarmed",
"unarmedStrike": "Unarmed Strike", "unarmedAttack": "Unarmed Attack",
"unarmored": "Unarmored", "unarmored": "Unarmored",
"use": "Use", "use": "Use",
"used": "Used", "used": "Used",
@ -2005,6 +2011,11 @@
}, },
"ITEMS": { "ITEMS": {
"FIELDS": { "FIELDS": {
"attribution": {
"source": { "label": "Source" },
"page": { "label": "Page" },
"artist": { "label": "Artist" }
},
"resource": { "resource": {
"amount": { "label": "Amount" }, "amount": { "label": "Amount" },
"dieFaces": { "label": "Die Faces" }, "dieFaces": { "label": "Die Faces" },
@ -2102,12 +2113,18 @@
"FIELDS": { "FIELDS": {
"displayFear": { "label": "Fear Display" }, "displayFear": { "label": "Fear Display" },
"dualityColorScheme": { "label": "Chat Style" }, "dualityColorScheme": { "label": "Chat Style" },
"showGenericStatusEffects": { "label": "Show Foundry Status Effects" }, "hideAttribution": { "label": "Hide Attribution" },
"expandedTitle": "Auto-expand Descriptions", "expandedTitle": "Auto-expand Descriptions",
"extendCharacterDescriptions": { "label": "Characters" }, "extendCharacterDescriptions": { "label": "Characters" },
"extendAdversaryDescriptions": { "label": "Adversaries" }, "extendAdversaryDescriptions": { "label": "Adversaries" },
"extendEnvironmentDescriptions": { "label": "Environments" }, "extendEnvironmentDescriptions": { "label": "Environments" },
"extendItemDescriptions": { "label": "Items" } "extendItemDescriptions": { "label": "Items" },
"expandRollMessage": "Auto-expand Message Sections",
"expandRollMessageDesc": { "label": "Description" },
"expandRollMessageRoll": { "label": "Formula" },
"expandRollMessageDamage": { "label": "Damage/Healing" },
"expandRollMessageTarget": { "label": "Target" },
"showGenericStatusEffects": { "label": "Show Foundry Status Effects" }
}, },
"fearDisplay": { "fearDisplay": {
"token": "Tokens", "token": "Tokens",
@ -2406,7 +2423,8 @@
"rulesOff": "Rules Off", "rulesOff": "Rules Off",
"remainingUses": "Uses refresh on {type}", "remainingUses": "Uses refresh on {type}",
"rightClickExtand": "Right-Click to extand", "rightClickExtand": "Right-Click to extand",
"companionPartnerLevelBlock": "The companion needs an assigned partner to level up." "companionPartnerLevelBlock": "The companion needs an assigned partner to level up.",
"configureAttribution": "Configure Attribution"
} }
} }
} }

View file

@ -1,3 +1,4 @@
export { default as AttributionDialog } from './attributionDialog.mjs';
export { default as BeastformDialog } from './beastformDialog.mjs'; export { default as BeastformDialog } from './beastformDialog.mjs';
export { default as d20RollDialog } from './d20RollDialog.mjs'; export { default as d20RollDialog } from './d20RollDialog.mjs';
export { default as DamageDialog } from './damageDialog.mjs'; export { default as DamageDialog } from './damageDialog.mjs';

View file

@ -0,0 +1,93 @@
import autocomplete from 'autocompleter';
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
export default class AttriubtionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
constructor(item) {
super({});
this.item = item;
this.sources = Object.keys(CONFIG.DH.GENERAL.attributionSources).flatMap(groupKey => {
const group = CONFIG.DH.GENERAL.attributionSources[groupKey];
return group.values.map(x => ({ group: group.label, ...x }));
});
}
get title() {
return game.i18n.localize('DAGGERHEART.APPLICATIONS.Attribution.title');
}
static DEFAULT_OPTIONS = {
tag: 'form',
classes: ['daggerheart', 'dh-style', 'dialog', 'views', 'attribution'],
position: { width: 'auto', height: 'auto' },
window: { icon: 'fa-solid fa-signature' },
form: { handler: this.updateData, submitOnChange: false, closeOnSubmit: true }
};
static PARTS = {
main: { template: 'systems/daggerheart/templates/dialogs/attribution.hbs' }
};
_attachPartListeners(partId, htmlElement, options) {
super._attachPartListeners(partId, htmlElement, options);
const sources = this.sources;
htmlElement.querySelectorAll('.attribution-input').forEach(element => {
autocomplete({
input: element,
fetch: function (text, update) {
if (!text) {
update(sources);
} else {
text = text.toLowerCase();
var suggestions = sources.filter(n => n.label.toLowerCase().includes(text));
update(suggestions);
}
},
render: function (item, search) {
const label = game.i18n.localize(item.label);
const matchIndex = label.toLowerCase().indexOf(search);
const beforeText = label.slice(0, matchIndex);
const matchText = label.slice(matchIndex, matchIndex + search.length);
const after = label.slice(matchIndex + search.length, label.length);
const element = document.createElement('li');
element.innerHTML = `${beforeText}${matchText ? `<strong>${matchText}</strong>` : ''}${after}`;
if (item.hint) {
element.dataset.tooltip = game.i18n.localize(item.hint);
}
return element;
},
renderGroup: function (label) {
const itemElement = document.createElement('div');
itemElement.textContent = game.i18n.localize(label);
return itemElement;
},
onSelect: function (item) {
element.value = item.label;
},
click: e => e.fetch(),
customize: function (_input, _inputRect, container) {
container.style.zIndex = foundry.applications.api.ApplicationV2._maxZ;
},
minLength: 0
});
});
}
async _prepareContext(_options) {
const context = await super._prepareContext(_options);
context.item = this.item;
context.data = this.item.system.attribution;
return context;
}
static async updateData(_event, _element, formData) {
await this.item.update({ 'system.attribution': formData.object });
this.item.sheet.refreshFrame();
}
}

View file

@ -1,3 +1,4 @@
export { default as CharacterLevelup } from './characterLevelup.mjs'; export { default as CharacterLevelup } from './characterLevelup.mjs';
export { default as CompanionLevelup } from './companionLevelup.mjs'; export { default as CompanionLevelup } from './companionLevelup.mjs';
export { default as Levelup } from './levelup.mjs'; export { default as Levelup } from './levelup.mjs';
export { default as LevelupViewMode } from './levelupViewMode.mjs';

View file

@ -0,0 +1,95 @@
import { chunkify } from '../../helpers/utils.mjs';
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
export default class DhlevelUpViewMode extends HandlebarsApplicationMixin(ApplicationV2) {
constructor(actor) {
super({});
this.actor = actor;
}
get title() {
return game.i18n.format('DAGGERHEART.APPLICATIONS.Levelup.viewModeTitle', { actor: this.actor.name });
}
static DEFAULT_OPTIONS = {
classes: ['daggerheart', 'dialog', 'dh-style', 'levelup'],
position: { width: 1000, height: 'auto' },
window: {
resizable: true,
icon: 'fa-solid fa-arrow-turn-up'
}
};
static PARTS = {
main: { template: 'systems/daggerheart/templates/levelup/tabs/viewMode.hbs' }
};
async _prepareContext(_options) {
const context = await super._prepareContext(_options);
const { tiers } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers);
const tierKeys = Object.keys(tiers);
const selections = Object.keys(this.actor.system.levelData.levelups).reduce(
(acc, key) => {
const level = this.actor.system.levelData.levelups[key];
Object.keys(level.selections).forEach(optionKey => {
const choice = level.selections[optionKey];
if (!acc[choice.tier][choice.optionKey]) acc[choice.tier][choice.optionKey] = {};
acc[choice.tier][choice.optionKey][choice.checkboxNr] = choice;
});
return acc;
},
tierKeys.reduce((acc, key) => {
acc[key] = {};
return acc;
}, {})
);
context.tiers = tierKeys.map((tierKey, tierIndex) => {
const tier = tiers[tierKey];
return {
name: tier.name,
active: true,
groups: Object.keys(tier.options).map(optionKey => {
const option = tier.options[optionKey];
const checkboxes = [...Array(option.checkboxSelections).keys()].flatMap(index => {
const checkboxNr = index + 1;
const checkboxData = selections[tierKey]?.[optionKey]?.[checkboxNr];
const checkbox = { ...option, checkboxNr, tier: tierKey, disabled: true };
if (checkboxData) {
checkbox.level = checkboxData.level;
checkbox.selected = true;
}
return checkbox;
});
let label = game.i18n.localize(option.label);
return {
label: label,
checkboxGroups: chunkify(checkboxes, option.minCost, chunkedBoxes => {
const anySelected = chunkedBoxes.some(x => x.selected);
const anyDisabled = chunkedBoxes.some(x => x.disabled);
return {
multi: option.minCost > 1,
checkboxes: chunkedBoxes.map(x => ({
...x,
selected: anySelected,
disabled: anyDisabled
}))
};
})
};
})
};
});
return context;
}
}

View file

@ -4,6 +4,7 @@ import DHBaseActorSheet from '../api/base-actor.mjs';
/**@typedef {import('@client/applications/_types.mjs').ApplicationClickAction} ApplicationClickAction */ /**@typedef {import('@client/applications/_types.mjs').ApplicationClickAction} ApplicationClickAction */
export default class AdversarySheet extends DHBaseActorSheet { export default class AdversarySheet extends DHBaseActorSheet {
/** @inheritDoc */
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
classes: ['adversary'], classes: ['adversary'],
position: { width: 660, height: 766 }, position: { width: 660, height: 766 },
@ -12,7 +13,14 @@ export default class AdversarySheet extends DHBaseActorSheet {
reactionRoll: AdversarySheet.#reactionRoll reactionRoll: AdversarySheet.#reactionRoll
}, },
window: { window: {
resizable: true resizable: true,
controls: [
{
icon: 'fa-solid fa-signature',
label: 'DAGGERHEART.UI.Tooltip.configureAttribution',
action: 'editAttribution'
}
]
} }
}; };

View file

@ -1,7 +1,7 @@
import DHBaseActorSheet from '../api/base-actor.mjs'; import DHBaseActorSheet from '../api/base-actor.mjs';
import DhpDeathMove from '../../dialogs/deathMove.mjs'; import DhpDeathMove from '../../dialogs/deathMove.mjs';
import { abilities } from '../../../config/actorConfig.mjs'; import { abilities } from '../../../config/actorConfig.mjs';
import DhCharacterlevelUp from '../../levelup/characterLevelup.mjs'; import { CharacterLevelup, LevelupViewMode } from '../../levelup/_module.mjs';
import DhCharacterCreation from '../../characterCreation/characterCreation.mjs'; import DhCharacterCreation from '../../characterCreation/characterCreation.mjs';
import FilterMenu from '../../ux/filter-menu.mjs'; import FilterMenu from '../../ux/filter-menu.mjs';
import { getDocFromElement, getDocFromElementSync } from '../../../helpers/utils.mjs'; import { getDocFromElement, getDocFromElementSync } from '../../../helpers/utils.mjs';
@ -23,6 +23,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
openPack: CharacterSheet.#openPack, openPack: CharacterSheet.#openPack,
makeDeathMove: CharacterSheet.#makeDeathMove, makeDeathMove: CharacterSheet.#makeDeathMove,
levelManagement: CharacterSheet.#levelManagement, levelManagement: CharacterSheet.#levelManagement,
viewLevelups: CharacterSheet.#viewLevelups,
toggleEquipItem: CharacterSheet.#toggleEquipItem, toggleEquipItem: CharacterSheet.#toggleEquipItem,
toggleResourceDice: CharacterSheet.#toggleResourceDice, toggleResourceDice: CharacterSheet.#toggleResourceDice,
handleResourceDice: CharacterSheet.#handleResourceDice, handleResourceDice: CharacterSheet.#handleResourceDice,
@ -30,7 +31,14 @@ export default class CharacterSheet extends DHBaseActorSheet {
tempBrowser: CharacterSheet.#tempBrowser tempBrowser: CharacterSheet.#tempBrowser
}, },
window: { window: {
resizable: true resizable: true,
controls: [
{
icon: 'fa-solid fa-angles-up',
label: 'DAGGERHEART.ACTORS.Character.viewLevelups',
action: 'viewLevelups'
}
]
}, },
dragDrop: [ dragDrop: [
{ {
@ -585,7 +593,14 @@ export default class CharacterSheet extends DHBaseActorSheet {
if (!value || !subclass) if (!value || !subclass)
return ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.missingClassOrSubclass')); return ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.missingClassOrSubclass'));
new DhCharacterlevelUp(this.document).render({ force: true }); new CharacterLevelup(this.document).render({ force: true });
}
/**
* Opens the charater level management window in viewMode.
*/
static #viewLevelups() {
new LevelupViewMode(this.document).render({ force: true });
} }
/** /**

View file

@ -8,10 +8,17 @@ export default class DhpEnvironment extends DHBaseActorSheet {
classes: ['environment'], classes: ['environment'],
position: { position: {
width: 500, width: 500,
height: 725 height: 740
}, },
window: { window: {
resizable: true resizable: true,
controls: [
{
icon: 'fa-solid fa-signature',
label: 'DAGGERHEART.UI.Tooltip.configureAttribution',
action: 'editAttribution'
}
]
}, },
actions: {}, actions: {},
dragDrop: [{ dragSelector: '.action-section .inventory-item', dropSelector: null }] dragDrop: [{ dragSelector: '.action-section .inventory-item', dropSelector: null }]
@ -42,6 +49,7 @@ export default class DhpEnvironment extends DHBaseActorSheet {
switch (partId) { switch (partId) {
case 'header': case 'header':
await this._prepareHeaderContext(context, options); await this._prepareHeaderContext(context, options);
break; break;
case 'notes': case 'notes':
await this._prepareNotesContext(context, options); await this._prepareNotesContext(context, options);

View file

@ -44,9 +44,8 @@ export default class DHBaseActorSettings extends DHApplicationMixin(DocumentShee
const context = await super._prepareContext(options); const context = await super._prepareContext(options);
context.isNPC = this.actor.isNPC; context.isNPC = this.actor.isNPC;
if (context.systemFields.attack) { if (context.systemFields.attack)
context.systemFields.attack.fields = this.actor.system.attack.schema.fields; context.systemFields.attack.fields = this.actor.system.attack.schema.fields;
}
return context; return context;
} }

View file

@ -85,6 +85,8 @@ export default function DHApplicationMixin(Base) {
this._dragDrop = this._createDragDropHandlers(); this._dragDrop = this._createDragDropHandlers();
} }
#nonHeaderAttribution = ['environment', 'ancestry', 'community', 'domainCard'];
/** /**
* The default options for the sheet. * The default options for the sheet.
* @type {DHSheetV2Configuration} * @type {DHSheetV2Configuration}
@ -101,7 +103,8 @@ export default function DHApplicationMixin(Base) {
toggleEffect: DHSheetV2.#toggleEffect, toggleEffect: DHSheetV2.#toggleEffect,
toggleExtended: DHSheetV2.#toggleExtended, toggleExtended: DHSheetV2.#toggleExtended,
addNewItem: DHSheetV2.#addNewItem, addNewItem: DHSheetV2.#addNewItem,
browseItem: DHSheetV2.#browseItem browseItem: DHSheetV2.#browseItem,
editAttribution: DHSheetV2.#editAttribution
}, },
contextMenus: [ contextMenus: [
{ {
@ -125,6 +128,43 @@ export default function DHApplicationMixin(Base) {
tagifyConfigs: [] tagifyConfigs: []
}; };
/**@inheritdoc */
async _renderFrame(options) {
const frame = await super._renderFrame(options);
const hideAttribution = game.settings.get(
CONFIG.DH.id,
CONFIG.DH.SETTINGS.gameSettings.appearance
).hideAttribution;
const headerAttribution = !this.#nonHeaderAttribution.includes(this.document.type);
if (!hideAttribution && this.document.system.metadata.hasAttribution && headerAttribution) {
const { source, page } = this.document.system.attribution;
const attribution = [source, page ? `pg ${page}.` : null].filter(x => x).join('. ');
const element = `<label class="attribution-header-label">${attribution}</label>`;
this.window.controls.insertAdjacentHTML('beforebegin', element);
}
return frame;
}
/**
* Refresh the custom parts of the application frame
*/
refreshFrame() {
const hideAttribution = game.settings.get(
CONFIG.DH.id,
CONFIG.DH.SETTINGS.gameSettings.appearance
).hideAttribution;
const headerAttribution = !this.#nonHeaderAttribution.includes(this.document.type);
if (!hideAttribution && this.document.system.metadata.hasAttribution && headerAttribution) {
const { source, page } = this.document.system.attribution;
const attribution = [source, page ? `pg ${page}.` : null].filter(x => x).join('. ');
const label = this.window.header.querySelector('.attribution-header-label');
label.innerHTML = attribution;
}
}
/** /**
* Related documents that should cause a rerender of this application when updated. * Related documents that should cause a rerender of this application when updated.
*/ */
@ -548,6 +588,14 @@ export default function DHApplicationMixin(Base) {
return new ItemBrowser({ presets }).render({ force: true }); return new ItemBrowser({ presets }).render({ force: true });
} }
/**
* Open the attribution dialog
* @type {ApplicationClickAction}
*/
static async #editAttribution() {
new game.system.api.applications.dialogs.AttributionDialog(this.document).render({ force: true });
}
/** /**
* Create an embedded document. * Create an embedded document.
* @type {ApplicationClickAction} * @type {ApplicationClickAction}

View file

@ -55,6 +55,9 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
async _prepareContext(_options) { async _prepareContext(_options) {
const context = await super._prepareContext(_options); const context = await super._prepareContext(_options);
context.isNPC = this.document.isNPC; context.isNPC = this.document.isNPC;
context.showAttribution = !game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance)
.hideAttribution;
return context; return context;
} }

View file

@ -13,7 +13,16 @@ export default class DHBaseItemSheet extends DHApplicationMixin(ItemSheetV2) {
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
classes: ['item'], classes: ['item'],
position: { width: 600 }, position: { width: 600 },
window: { resizable: true }, window: {
resizable: true,
controls: [
{
icon: 'fa-solid fa-signature',
label: 'DAGGERHEART.UI.Tooltip.configureAttribution',
action: 'editAttribution'
}
]
},
form: { form: {
submitOnChange: true submitOnChange: true
}, },
@ -55,6 +64,15 @@ export default class DHBaseItemSheet extends DHApplicationMixin(ItemSheetV2) {
/* Prepare Context */ /* Prepare Context */
/* -------------------------------------------- */ /* -------------------------------------------- */
/**@inheritdoc */
async _prepareContext(options) {
const context = super._prepareContext(options);
context.showAttribution = !game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance)
.hideAttribution;
return context;
}
/**@inheritdoc */ /**@inheritdoc */
async _preparePartContext(partId, context, options) { async _preparePartContext(partId, context, options) {
await super._preparePartContext(partId, context, options); await super._preparePartContext(partId, context, options);

View file

@ -108,7 +108,7 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
async onRollDamage(event, message) { async onRollDamage(event, message) {
event.stopPropagation(); event.stopPropagation();
const actor = await this.getActor(message.system.source.actor); const actor = await this.getActor(message.system.source.actor);
if (game.user.character?.id !== actor.id && !game.user.isGM) return true; if(!actor.isOwner) return true;
if (message.system.source.item && message.system.source.action) { if (message.system.source.item && message.system.source.action) {
const action = this.getAction(actor, message.system.source.item, message.system.source.action); const action = this.getAction(actor, message.system.source.item, message.system.source.action);
if (!action || !action?.rollDamage) return; if (!action || !action?.rollDamage) return;

View file

@ -624,6 +624,13 @@ export const rollTypes = {
} }
}; };
export const attributionSources = {
daggerheart: {
label: 'Daggerheart',
values: [{ label: 'Daggerheart SRD' }]
}
};
export const fearDisplay = { export const fearDisplay = {
token: { value: 'token', label: 'DAGGERHEART.SETTINGS.Appearance.fearDisplay.token' }, token: { value: 'token', label: 'DAGGERHEART.SETTINGS.Appearance.fearDisplay.token' },
bar: { value: 'bar', label: 'DAGGERHEART.SETTINGS.Appearance.fearDisplay.bar' }, bar: { value: 'bar', label: 'DAGGERHEART.SETTINGS.Appearance.fearDisplay.bar' },

View file

@ -10,7 +10,8 @@ export default class DhpAdversary extends BaseDataActor {
return foundry.utils.mergeObject(super.metadata, { return foundry.utils.mergeObject(super.metadata, {
label: 'TYPES.Actor.adversary', label: 'TYPES.Actor.adversary',
type: 'adversary', type: 'adversary',
settingSheet: DHAdversarySettings settingSheet: DHAdversarySettings,
hasAttribution: true
}); });
} }

View file

@ -1,5 +1,5 @@
import DHBaseActorSettings from '../../applications/sheets/api/actor-setting.mjs'; import DHBaseActorSettings from '../../applications/sheets/api/actor-setting.mjs';
import { createScrollText, getScrollTextData } from '../../helpers/utils.mjs'; import { getScrollTextData } from '../../helpers/utils.mjs';
const resistanceField = (resistanceLabel, immunityLabel, reductionLabel) => const resistanceField = (resistanceLabel, immunityLabel, reductionLabel) =>
new foundry.data.fields.SchemaField({ new foundry.data.fields.SchemaField({
@ -39,7 +39,8 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel {
type: 'base', type: 'base',
isNPC: true, isNPC: true,
settingSheet: null, settingSheet: null,
hasResistances: true hasResistances: true,
hasAttribution: false
}; };
} }
@ -53,6 +54,13 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel {
const fields = foundry.data.fields; const fields = foundry.data.fields;
const schema = {}; const schema = {};
if (this.metadata.hasAttribution) {
schema.attribution = new fields.SchemaField({
source: new fields.StringField(),
page: new fields.NumberField(),
artist: new fields.StringField()
});
}
if (this.metadata.isNPC) schema.description = new fields.HTMLField({ required: true, nullable: true }); if (this.metadata.isNPC) schema.description = new fields.HTMLField({ required: true, nullable: true });
if (this.metadata.hasResistances) if (this.metadata.hasResistances)
schema.resistance = new fields.SchemaField({ schema.resistance = new fields.SchemaField({
@ -78,6 +86,13 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel {
*/ */
static DEFAULT_ICON = null; static DEFAULT_ICON = null;
get attributionLabel() {
if (!this.attribution) return;
const { source, page } = this.attribution;
return [source, page ? `pg ${page}.` : null].filter(x => x).join('. ');
}
/* -------------------------------------------- */ /* -------------------------------------------- */
/** /**
@ -133,6 +148,6 @@ export default class BaseDataActor extends foundry.abstract.TypeDataModel {
_onUpdate(changes, options, userId) { _onUpdate(changes, options, userId) {
super._onUpdate(changes, options, userId); super._onUpdate(changes, options, userId);
createScrollText(this.parent, options.scrollingTextData); if (options.scrollingTextData) this.parent.queueScrollText(options.scrollingTextData);
} }
} }

View file

@ -95,7 +95,7 @@ export default class DhCharacter extends BaseDataActor {
}), }),
attack: new ActionField({ attack: new ActionField({
initial: { initial: {
name: 'Unarmed Attack', name: 'DAGGERHEART.GENERAL.unarmedAttack',
img: 'icons/skills/melee/unarmed-punch-fist-yellow-red.webp', img: 'icons/skills/melee/unarmed-punch-fist-yellow-red.webp',
_id: foundry.utils.randomID(), _id: foundry.utils.randomID(),
systemPath: 'attack', systemPath: 'attack',

View file

@ -12,7 +12,8 @@ export default class DhEnvironment extends BaseDataActor {
label: 'TYPES.Actor.environment', label: 'TYPES.Actor.environment',
type: 'environment', type: 'environment',
settingSheet: DHEnvironmentSettings, settingSheet: DHEnvironmentSettings,
hasResistances: false hasResistances: false,
hasAttribution: true
}); });
} }

View file

@ -38,4 +38,13 @@ export default class ForeignDocumentUUIDField extends foundry.data.fields.Docume
toObject(value) { toObject(value) {
return value?.uuid ?? value; return value?.uuid ?? value;
} }
/** @override */
_cast(value) {
if (typeof value === 'string') return value;
if (value instanceof foundry.abstract.Document) return value.uuid;
throw new Error(
`The value provided to a ForeignDocumentUUIDField must be a ${foundry.abstract.Document.name} instance or a UUID string.`
);
}
} }

View file

@ -26,7 +26,8 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
hasResource: false, hasResource: false,
isQuantifiable: false, isQuantifiable: false,
isInventoryItem: false, isInventoryItem: false,
hasActions: false hasActions: false,
hasAttribution: true
}; };
} }
@ -37,7 +38,13 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
/** @inheritDoc */ /** @inheritDoc */
static defineSchema() { static defineSchema() {
const schema = {}; const schema = {
attribution: new fields.SchemaField({
source: new fields.StringField(),
page: new fields.NumberField(),
artist: new fields.StringField()
})
};
if (this.metadata.hasDescription) schema.description = new fields.HTMLField({ required: true, nullable: true }); if (this.metadata.hasDescription) schema.description = new fields.HTMLField({ required: true, nullable: true });
@ -110,6 +117,13 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
return []; return [];
} }
get attributionLabel() {
if (!this.attribution) return;
const { source, page } = this.attribution;
return [source, page ? `pg ${page}.` : null].filter(x => x).join('. ');
}
/** /**
* Obtain a data object used to evaluate any dice rolls associated with this Item Type * Obtain a data object used to evaluate any dice rolls associated with this Item Type
* @param {object} [options] - Options which modify the getRollData method. * @param {object} [options] - Options which modify the getRollData method.
@ -207,6 +221,8 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
super._onUpdate(changed, options, userId); super._onUpdate(changed, options, userId);
updateLinkedItemApps(options, this.parent.sheet); updateLinkedItemApps(options, this.parent.sheet);
createScrollText(this.parent?.parent, options.scrollingTextData);
if (this.parent?.parent && options.scrollingTextData)
this.parent.parent.queueScrollText(options.scrollingTextData);
} }
} }

View file

@ -71,6 +71,29 @@ export default class DhAppearance extends foundry.abstract.DataModel {
extendItemDescriptions: new fields.BooleanField({ extendItemDescriptions: new fields.BooleanField({
initial: false, initial: false,
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.extendItemDescriptions.label' label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.extendItemDescriptions.label'
}),
expandRollMessage: new fields.SchemaField({
desc: new fields.BooleanField({
initial: false,
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.expandRollMessageDesc.label'
}),
roll: new fields.BooleanField({
initial: false,
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.expandRollMessageRoll.label'
}),
damage: new fields.BooleanField({
initial: false,
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.expandRollMessageDamage.label'
}),
target: new fields.BooleanField({
initial: false,
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.expandRollMessageTarget.label'
})
}),
hideAttribution: new fields.BooleanField({
required: true,
initial: false,
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.hideAttribution.label'
}) })
}; };
} }

View file

@ -1,10 +1,13 @@
import { emitAsGM, GMUpdateEvent } from '../systemRegistration/socket.mjs'; import { emitAsGM, GMUpdateEvent } from '../systemRegistration/socket.mjs';
import { LevelOptionType } from '../data/levelTier.mjs'; import { LevelOptionType } from '../data/levelTier.mjs';
import DHFeature from '../data/item/feature.mjs'; import DHFeature from '../data/item/feature.mjs';
import { damageKeyToNumber } from '../helpers/utils.mjs'; import { createScrollText, damageKeyToNumber } from '../helpers/utils.mjs';
import DhCompanionLevelUp from '../applications/levelup/companionLevelup.mjs'; import DhCompanionLevelUp from '../applications/levelup/companionLevelup.mjs';
export default class DhpActor extends Actor { export default class DhpActor extends Actor {
#scrollTextQueue = [];
#scrollTextInterval;
/** /**
* Return the first Actor active owner. * Return the first Actor active owner.
*/ */
@ -27,7 +30,7 @@ export default class DhpActor extends Actor {
/** @inheritDoc */ /** @inheritDoc */
static migrateData(source) { static migrateData(source) {
if(source.system?.attack && !source.system.attack.type) source.system.attack.type = "attack"; if (source.system?.attack && !source.system.attack.type) source.system.attack.type = 'attack';
return super.migrateData(source); return super.migrateData(source);
} }
@ -574,17 +577,13 @@ export default class DhpActor extends Actor {
updates.find(u => u.key === 'hitPoints').value = modifiedDamage; updates.find(u => u.key === 'hitPoints').value = modifiedDamage;
if (armorSpent) { if (armorSpent) {
const armorUpdate = updates.find(u => u.key === 'armor'); const armorUpdate = updates.find(u => u.key === 'armor');
if(armorUpdate) if (armorUpdate) armorUpdate.value += armorSpent;
armorUpdate.value += armorSpent; else updates.push({ value: armorSpent, key: 'armor' });
else
updates.push({ value: armorSpent, key: 'armor' });
} }
if (stressSpent) { if (stressSpent) {
const stressUpdate = updates.find(u => u.key === 'stress'); const stressUpdate = updates.find(u => u.key === 'stress');
if(stressUpdate) if (stressUpdate) stressUpdate.value += stressSpent;
stressUpdate.value += stressSpent; else updates.push({ value: stressSpent, key: 'stress' });
else
updates.push({ value: stressSpent, key: 'stress' });
} }
} }
} }
@ -754,4 +753,23 @@ export default class DhpActor extends Actor {
} }
} }
} }
queueScrollText(scrollingTextData) {
this.#scrollTextQueue.push(...scrollingTextData.map(data => () => createScrollText(this, data)));
if (!this.#scrollTextInterval) {
const scrollFunc = this.#scrollTextQueue.pop();
scrollFunc?.();
const intervalFunc = () => {
const scrollFunc = this.#scrollTextQueue.pop();
scrollFunc?.();
if (this.#scrollTextQueue.length === 0) {
clearInterval(this.#scrollTextInterval);
this.#scrollTextInterval = null;
}
};
this.#scrollTextInterval = setInterval(intervalFunc.bind(this), 600);
}
}
} }

View file

@ -54,7 +54,8 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
e.setAttribute('data-use-perm', document.testUserPermission(game.user, 'OWNER')); e.setAttribute('data-use-perm', document.testUserPermission(game.user, 'OWNER'));
}); });
if (this.isContentVisible && this.type === 'dualityRoll') { if (this.isContentVisible) {
if(this.type === 'dualityRoll') {
html.classList.add('duality'); html.classList.add('duality');
switch (this.system.roll?.result?.duality) { switch (this.system.roll?.result?.duality) {
case 1: case 1:
@ -69,6 +70,22 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
} }
} }
const autoExpandRoll = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance).expandRollMessage,
rollSections = html.querySelectorAll(".roll-part"),
itemDesc = html.querySelector(".domain-card-move");
rollSections.forEach(s => {
if(s.classList.contains("roll-section")) {
const toExpand = s.querySelector('[data-action="expandRoll"]');
toExpand.classList.toggle("expanded", autoExpandRoll.roll);
} else if(s.classList.contains("damage-section"))
s.classList.toggle("expanded", autoExpandRoll.damage);
else if(s.classList.contains("target-section"))
s.classList.toggle("expanded", autoExpandRoll.target);
});
if(itemDesc && autoExpandRoll.desc)
itemDesc.setAttribute("open", "");
}
if(!game.user.isGM) { if(!game.user.isGM) {
const applyButtons = html.querySelector(".apply-buttons"); const applyButtons = html.querySelector(".apply-buttons");
applyButtons?.remove(); applyButtons?.remove();

View file

@ -28,6 +28,14 @@ export default class DHItem extends foundry.documents.Item {
return doc; return doc;
} }
/* -------------------------------------------- */
/** @inheritDoc */
static migrateData(source) {
if(source.system?.attack && !source.system.attack.type) source.system.attack.type = "attack";
return super.migrateData(source);
}
/** /**
* @inheritdoc * @inheritdoc
* @param {object} options - Options which modify the getRollData method. * @param {object} options - Options which modify the getRollData method.

View file

@ -177,7 +177,7 @@ Roll.replaceFormulaData = function (formula, data = {}, { missing, warn = false
return nativeReplaceFormulaData(formula, data, { missing, warn }); return nativeReplaceFormulaData(formula, data, { missing, warn });
}; };
foundry.dice.terms.Die.MODIFIERS.sc = 'selfCorrecting'; foundry.utils.setProperty(foundry, 'dice.terms.Die.MODIFIERS.sc', 'selfCorrecting');
/** /**
* Return the configured value as result if 1 is rolled * Return the configured value as result if 1 is rolled
@ -371,10 +371,9 @@ export function getScrollTextData(resources, resource, key) {
return { text, stroke, fill, direction }; return { text, stroke, fill, direction };
} }
export function createScrollText(actor, optionsData) { export function createScrollText(actor, data) {
if (actor && optionsData?.length) { if (actor) {
actor.getActiveTokens().forEach(token => { actor.getActiveTokens().forEach(token => {
optionsData.forEach(data => {
const { text, ...options } = data; const { text, ...options } = data;
canvas.interface.createScrollingText(token.getCenterPoint(), data.text, { canvas.interface.createScrollingText(token.getCenterPoint(), data.text, {
duration: 2000, duration: 2000,
@ -383,7 +382,6 @@ export function createScrollText(actor, optionsData) {
...options ...options
}); });
}); });
});
} }
} }

View file

@ -7,7 +7,7 @@
"rollup": "^4.40.0" "rollup": "^4.40.0"
}, },
"scripts": { "scripts": {
"start": "concurrently \"rollup -c --watch\" \"node ../../../../FoundryDev/main.js --dataPath=../../../ --noupnp\" \"gulp\"", "start": "node ./tools/run-start.mjs",
"start-test": "node ./resources/app/main.js --dataPath=./ && rollup -c --watch && gulp", "start-test": "node ./resources/app/main.js --dataPath=./ && rollup -c --watch && gulp",
"build": "npm run rollup && npm run gulp", "build": "npm run rollup && npm run gulp",
"rollup": "rollup -c", "rollup": "rollup -c",
@ -16,7 +16,8 @@
"pushLDBtoYML": "node ./tools/pushLDBtoYML.mjs", "pushLDBtoYML": "node ./tools/pushLDBtoYML.mjs",
"pullYMLtoLDB": "node ./tools/pullYMLtoLDB.mjs", "pullYMLtoLDB": "node ./tools/pullYMLtoLDB.mjs",
"pullYMLtoLDBBuild": "node ./tools/pullYMLtoLDBBuild.mjs", "pullYMLtoLDBBuild": "node ./tools/pullYMLtoLDBBuild.mjs",
"createSymlink": "node ./tools/create-symlink.mjs" "createSymlink": "node ./tools/create-symlink.mjs",
"setup:dev": "node ./tools/dev-setup.mjs"
}, },
"devDependencies": { "devDependencies": {
"@foundryvtt/foundryvtt-cli": "^1.0.2", "@foundryvtt/foundryvtt-cli": "^1.0.2",

View file

@ -1,3 +1,12 @@
---
name: Pull Request
about: Create a new pull request
title: "[PR] <Insert Title here>"
labels: pr
assignees: ''
---
Is this a community PR? Please go to preview tab and click [here](?expand=1&template=community_pull_request_template.md). If not, delete this line.
## Description ## Description
Please include a summary of the change and which issue is fixed (if applicable). Also include relevant context or motivation for the change. Please include a summary of the change and which issue is fixed (if applicable). Also include relevant context or motivation for the change.

View file

@ -143,6 +143,11 @@
"difficulty": null, "difficulty": null,
"damageMod": "none" "damageMod": "none"
} }
},
"attribution": {
"source": "Daggerheart SRD",
"page": 75,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -152,9 +157,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1754010222829, "createdTime": 1754010222829,
"modifiedTime": 1755259462470, "modifiedTime": 1755384241210,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"ownership": { "ownership": {

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 91,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784219, "createdTime": 1753922784219,
"modifiedTime": 1755259462665, "modifiedTime": 1755385356620,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "G7jiltRjgvVhZewm", "_id": "G7jiltRjgvVhZewm",

View file

@ -105,6 +105,11 @@
"img": "icons/weapons/daggers/dagger-bone-black.webp", "img": "icons/weapons/daggers/dagger-bone-black.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 84,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -114,9 +119,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784220, "createdTime": 1753922784220,
"modifiedTime": 1755259462932, "modifiedTime": 1755384980487,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "vNIbYQ4YSzNf0WPE", "_id": "vNIbYQ4YSzNf0WPE",

View file

@ -117,6 +117,11 @@
"img": "icons/magic/unholy/beam-ringed-impact-purple.webp", "img": "icons/magic/unholy/beam-ringed-impact-purple.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 97,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -126,9 +131,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784221, "createdTime": 1753922784221,
"modifiedTime": 1755259462752, "modifiedTime": 1755385620034,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "WPEOIGfclNJxWb87", "_id": "WPEOIGfclNJxWb87",

View file

@ -111,6 +111,11 @@
"img": "icons/weapons/bows/longbow-recurve-leather-brown.webp", "img": "icons/weapons/bows/longbow-recurve-leather-brown.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 77,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784222, "createdTime": 1753922784222,
"modifiedTime": 1755259462476, "modifiedTime": 1755384306205,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "JRhrrEg5UroURiAD", "_id": "JRhrrEg5UroURiAD",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 84,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784223, "createdTime": 1753922784223,
"modifiedTime": 1755259462516, "modifiedTime": 1755384973132,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "0ts6CGd93lLqGZI5", "_id": "0ts6CGd93lLqGZI5",

View file

@ -112,6 +112,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 84,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784224, "createdTime": 1753922784224,
"modifiedTime": 1755259462844, "modifiedTime": 1755384989183,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "h5RuhzGL17dW5FBT", "_id": "h5RuhzGL17dW5FBT",

View file

@ -112,6 +112,11 @@
"range": "melee", "range": "melee",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 85,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784224, "createdTime": 1753922784224,
"modifiedTime": 1755264708230, "modifiedTime": 1755385012352,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "dgH3fW9FTYLaIDvS", "_id": "dgH3fW9FTYLaIDvS",

View file

@ -117,6 +117,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 75,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -126,9 +131,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784226, "createdTime": 1753922784226,
"modifiedTime": 1755259462479, "modifiedTime": 1755384265295,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "71qKDLKO3CsrNkdy", "_id": "71qKDLKO3CsrNkdy",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 77,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784226, "createdTime": 1753922784226,
"modifiedTime": 1755259462481, "modifiedTime": 1755384320981,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "B4LZcGuBAHzyVdzy", "_id": "B4LZcGuBAHzyVdzy",

View file

@ -115,6 +115,11 @@
"img": "icons/skills/melee/unarmed-punch-fist-yellow-red.webp", "img": "icons/skills/melee/unarmed-punch-fist-yellow-red.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 83,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -124,9 +129,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784231, "createdTime": 1753922784231,
"modifiedTime": 1755259462487, "modifiedTime": 1755384340788,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "2UeZ0tEe7AzgSJNd", "_id": "2UeZ0tEe7AzgSJNd",

View file

@ -111,6 +111,11 @@
"img": "icons/weapons/clubs/club-banded-barbed-black.webp", "img": "icons/weapons/clubs/club-banded-barbed-black.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 75,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784233, "createdTime": 1753922784233,
"modifiedTime": 1755259462491, "modifiedTime": 1755384280132,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "8Zkqk1jU09nKL2fy", "_id": "8Zkqk1jU09nKL2fy",

View file

@ -106,6 +106,11 @@
"img": "icons/magic/light/beam-rays-magenta.webp", "img": "icons/magic/light/beam-rays-magenta.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 85,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784233, "createdTime": 1753922784233,
"modifiedTime": 1755259462855, "modifiedTime": 1755385025439,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "jDmHqGvzg5wjgmxE", "_id": "jDmHqGvzg5wjgmxE",

View file

@ -99,6 +99,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 85,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -108,9 +113,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784234, "createdTime": 1753922784234,
"modifiedTime": 1755259462618, "modifiedTime": 1755385032835,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "99TqczuQipBmaB8i", "_id": "99TqczuQipBmaB8i",

View file

@ -106,6 +106,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 75,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784236, "createdTime": 1753922784236,
"modifiedTime": 1755259462495, "modifiedTime": 1755384289735,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "uOP5oT9QzXPlnf3p", "_id": "uOP5oT9QzXPlnf3p",

View file

@ -117,6 +117,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 85,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -126,9 +131,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784237, "createdTime": 1753922784237,
"modifiedTime": 1755264799637, "modifiedTime": 1755385040425,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "ZxWaWPdzFIUPNC62", "_id": "ZxWaWPdzFIUPNC62",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 76,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784237, "createdTime": 1753922784237,
"modifiedTime": 1755259462499, "modifiedTime": 1755384362436,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "CBBuEXAlLKFMJdjg", "_id": "CBBuEXAlLKFMJdjg",

View file

@ -117,6 +117,11 @@
"img": "icons/weapons/staves/staff-ornate-purple.webp", "img": "icons/weapons/staves/staff-ornate-purple.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 85,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -126,9 +131,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784239, "createdTime": 1753922784239,
"modifiedTime": 1755259462512, "modifiedTime": 1755385049086,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "0NxCSugvKQ4W8OYZ", "_id": "0NxCSugvKQ4W8OYZ",

View file

@ -106,6 +106,11 @@
"range": "melee", "range": "melee",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 86,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784239, "createdTime": 1753922784239,
"modifiedTime": 1755264898243, "modifiedTime": 1755385067530,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "tyBOpLfigAhI9bU3", "_id": "tyBOpLfigAhI9bU3",

View file

@ -99,6 +99,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 86,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -108,9 +113,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784240, "createdTime": 1753922784240,
"modifiedTime": 1755264925295, "modifiedTime": 1755385079522,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "zx99sOGTXicP4SSD", "_id": "zx99sOGTXicP4SSD",

View file

@ -111,6 +111,11 @@
"img": "icons/magic/nature/root-vines-grow-brown.webp", "img": "icons/magic/nature/root-vines-grow-brown.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 76,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784246, "createdTime": 1753922784246,
"modifiedTime": 1755259462506, "modifiedTime": 1755384371297,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "9x2xY9zwc3xzbXo5", "_id": "9x2xY9zwc3xzbXo5",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 91,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784247, "createdTime": 1753922784247,
"modifiedTime": 1755265775161, "modifiedTime": 1755385363507,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "pnyjIGxxvurcWmTv", "_id": "pnyjIGxxvurcWmTv",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "far", "range": "far",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 92,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784248, "createdTime": 1753922784248,
"modifiedTime": 1755266281854, "modifiedTime": 1755385375748,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "kE4dfhqmIQpNd44e", "_id": "kE4dfhqmIQpNd44e",

View file

@ -112,6 +112,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 92,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784249, "createdTime": 1753922784249,
"modifiedTime": 1755259462532, "modifiedTime": 1755385382792,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "2VN3BftageoTTIzu", "_id": "2VN3BftageoTTIzu",

View file

@ -112,6 +112,11 @@
"img": "icons/magic/symbols/rune-sigil-rough-white-teal.webp", "img": "icons/magic/symbols/rune-sigil-rough-white-teal.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 92,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784249, "createdTime": 1753922784249,
"modifiedTime": 1755259462726, "modifiedTime": 1755385392005,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "SxSOkM4bcVOFyjbo", "_id": "SxSOkM4bcVOFyjbo",

View file

@ -112,6 +112,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 92,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784252, "createdTime": 1753922784252,
"modifiedTime": 1755259462568, "modifiedTime": 1755385398938,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "5lphJAgzoqZI3VoG", "_id": "5lphJAgzoqZI3VoG",

View file

@ -112,6 +112,11 @@
"range": "melee", "range": "melee",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 86,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784253, "createdTime": 1753922784253,
"modifiedTime": 1755264935543, "modifiedTime": 1755385087255,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "NoRZ1PqB8N5wcIw0", "_id": "NoRZ1PqB8N5wcIw0",

View file

@ -111,6 +111,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 93,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784253, "createdTime": 1753922784253,
"modifiedTime": 1755266383523, "modifiedTime": 1755385409189,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "tBWHW00epmMnkawe", "_id": "tBWHW00epmMnkawe",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 76,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784257, "createdTime": 1753922784257,
"modifiedTime": 1755259591554, "modifiedTime": 1755384380804,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "wNzeuQLfLUMvgHlQ", "_id": "wNzeuQLfLUMvgHlQ",

View file

@ -112,6 +112,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 93,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784258, "createdTime": 1753922784258,
"modifiedTime": 1755259462937, "modifiedTime": 1755385415645,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "wR7cFKrHvRzbzhBT", "_id": "wR7cFKrHvRzbzhBT",

View file

@ -106,6 +106,11 @@
"range": "melee", "range": "melee",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 86,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784258, "createdTime": 1753922784258,
"modifiedTime": 1755264962798, "modifiedTime": 1755385098856,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "TLzY1nDw0Bu9Ud40", "_id": "TLzY1nDw0Bu9Ud40",

View file

@ -99,6 +99,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 93,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -108,9 +113,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784259, "createdTime": 1753922784259,
"modifiedTime": 1755259462705, "modifiedTime": 1755385425940,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "P7h54ZePFPHpYwvB", "_id": "P7h54ZePFPHpYwvB",

View file

@ -138,6 +138,11 @@
"difficulty": null, "difficulty": null,
"damageMod": "none" "damageMod": "none"
} }
},
"attribution": {
"source": "Daggerheart SRD",
"page": 86,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -147,9 +152,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1754090776362, "createdTime": 1754090776362,
"modifiedTime": 1755259462811, "modifiedTime": 1755385106827,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"ownership": { "ownership": {

View file

@ -112,6 +112,11 @@
"range": "melee", "range": "melee",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 86,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784262, "createdTime": 1753922784262,
"modifiedTime": 1755265009751, "modifiedTime": 1755385114729,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "ChwwVqowFw8hJQwT", "_id": "ChwwVqowFw8hJQwT",

View file

@ -99,6 +99,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 97,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -108,9 +113,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784264, "createdTime": 1753922784264,
"modifiedTime": 1755259462703, "modifiedTime": 1755385629418,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "OsLG2BjaEdTZUJU9", "_id": "OsLG2BjaEdTZUJU9",

View file

@ -112,6 +112,11 @@
"img": "icons/weapons/staves/staff-animal-skull-bull.webp", "img": "icons/weapons/staves/staff-animal-skull-bull.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 97,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784265, "createdTime": 1753922784265,
"modifiedTime": 1755259462708, "modifiedTime": 1755385635754,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "PELRry1vqjBzSAlr", "_id": "PELRry1vqjBzSAlr",

View file

@ -155,7 +155,12 @@
} }
} }
}, },
"motivesAndTactics": "Corrupt, dominate, punish, break the weak" "motivesAndTactics": "Corrupt, dominate, punish, break the weak",
"attribution": {
"source": "Daggerheart SRD",
"page": 97,
"artist": ""
}
}, },
"prototypeToken": { "prototypeToken": {
"name": "Fallen Warlord: Realm Breaker", "name": "Fallen Warlord: Realm Breaker",
@ -742,9 +747,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753929378070, "createdTime": 1753929378070,
"modifiedTime": 1755259462847, "modifiedTime": 1755385644142,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_key": "!actors!hxZ0sgoFJubh5aj6" "_key": "!actors!hxZ0sgoFJubh5aj6"

View file

@ -156,7 +156,12 @@
}, },
"chatDisplay": false "chatDisplay": false
}, },
"motivesAndTactics": "Dispatch merciless death, punish the defi ant, secure victory at any cost" "motivesAndTactics": "Dispatch merciless death, punish the defi ant, secure victory at any cost",
"attribution": {
"source": "Daggerheart SRD",
"page": 98,
"artist": ""
}
}, },
"prototypeToken": { "prototypeToken": {
"name": "Fallen Warlord: Undefeated Champion", "name": "Fallen Warlord: Undefeated Champion",
@ -800,9 +805,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753929476879, "createdTime": 1753929476879,
"modifiedTime": 1755259462720, "modifiedTime": 1755385652290,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_key": "!actors!RXkZTwBRi4dJ3JE5" "_key": "!actors!RXkZTwBRi4dJ3JE5"

View file

@ -112,6 +112,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 87,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784268, "createdTime": 1753922784268,
"modifiedTime": 1755259462604, "modifiedTime": 1755385128275,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "8VZIgU12cB3cvlyH", "_id": "8VZIgU12cB3cvlyH",

View file

@ -112,6 +112,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 87,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784268, "createdTime": 1753922784268,
"modifiedTime": 1755259462794, "modifiedTime": 1755385135374,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "YnObCleGjPT7yqEc", "_id": "YnObCleGjPT7yqEc",

View file

@ -138,6 +138,11 @@
"difficulty": null, "difficulty": null,
"damageMod": "none" "damageMod": "none"
} }
},
"attribution": {
"source": "Daggerheart SRD",
"page": 87,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -147,9 +152,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1754090770908, "createdTime": 1754090770908,
"modifiedTime": 1755265221515, "modifiedTime": 1755385144098,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"ownership": { "ownership": {

View file

@ -112,6 +112,11 @@
"range": "melee", "range": "melee",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 76,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784269, "createdTime": 1753922784269,
"modifiedTime": 1755259619874, "modifiedTime": 1755384391635,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "IIWV4ysJPFPnTP7W", "_id": "IIWV4ysJPFPnTP7W",

View file

@ -105,6 +105,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 76,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -114,9 +119,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784270, "createdTime": 1753922784270,
"modifiedTime": 1755259636506, "modifiedTime": 1755384399993,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "4PfLnaCrOcMdb4dK", "_id": "4PfLnaCrOcMdb4dK",

View file

@ -99,6 +99,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 87,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -108,9 +113,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784271, "createdTime": 1753922784271,
"modifiedTime": 1755259462570, "modifiedTime": 1755385156358,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "5s8wSvpyC5rxY5aD", "_id": "5s8wSvpyC5rxY5aD",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 76,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784272, "createdTime": 1753922784272,
"modifiedTime": 1755259666128, "modifiedTime": 1755384410923,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "fmfntuJ8mHRCAktP", "_id": "fmfntuJ8mHRCAktP",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 77,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784273, "createdTime": 1753922784273,
"modifiedTime": 1755259462600, "modifiedTime": 1755384427339,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "8KWVLWXFhlY2kYx0", "_id": "8KWVLWXFhlY2kYx0",

View file

@ -112,6 +112,11 @@
"img": "icons/weapons/bows/shortbow-recurve-yellow.webp", "img": "icons/weapons/bows/shortbow-recurve-yellow.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 88,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784274, "createdTime": 1753922784274,
"modifiedTime": 1755259462608, "modifiedTime": 1755385192601,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "8mJYMpbLTb8qIOrr", "_id": "8mJYMpbLTb8qIOrr",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 93,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784275, "createdTime": 1753922784275,
"modifiedTime": 1755259462829, "modifiedTime": 1755385432586,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "dsfB3YhoL5SudvS2", "_id": "dsfB3YhoL5SudvS2",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 93,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784278, "createdTime": 1753922784278,
"modifiedTime": 1755259462945, "modifiedTime": 1755385438845,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "xIICT6tEdnA7dKDV", "_id": "xIICT6tEdnA7dKDV",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 80,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784278, "createdTime": 1753922784278,
"modifiedTime": 1755259726565, "modifiedTime": 1755384442882,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "SHXedd9zZPVfUgUa", "_id": "SHXedd9zZPVfUgUa",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 98,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784279, "createdTime": 1753922784279,
"modifiedTime": 1755259462863, "modifiedTime": 1755385664307,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "kabueAo6BALApWqp", "_id": "kabueAo6BALApWqp",

View file

@ -99,6 +99,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 98,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -108,9 +113,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784279, "createdTime": 1753922784279,
"modifiedTime": 1755266855456, "modifiedTime": 1755385672764,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "VENwg7xEFcYObjmT", "_id": "VENwg7xEFcYObjmT",

View file

@ -111,6 +111,11 @@
"img": "icons/weapons/polearms/spear-hooked-rounded.webp", "img": "icons/weapons/polearms/spear-hooked-rounded.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 77,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784281, "createdTime": 1753922784281,
"modifiedTime": 1755259462930, "modifiedTime": 1755384460991,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "uRtghKE9mHlII4rs", "_id": "uRtghKE9mHlII4rs",

View file

@ -117,6 +117,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 77,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -126,9 +131,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784282, "createdTime": 1753922784282,
"modifiedTime": 1755259874457, "modifiedTime": 1755384472544,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "mK3A5FTx6k8iPU3F", "_id": "mK3A5FTx6k8iPU3F",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 95,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784283, "createdTime": 1753922784283,
"modifiedTime": 1755266472641, "modifiedTime": 1755385468446,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "i2UNbRvgyoSs07M6", "_id": "i2UNbRvgyoSs07M6",

View file

@ -112,6 +112,11 @@
"img": "icons/skills/melee/strike-blade-hooked-orange-blue.webp", "img": "icons/skills/melee/strike-blade-hooked-orange-blue.webp",
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 98,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784283, "createdTime": 1753922784283,
"modifiedTime": 1755259462909, "modifiedTime": 1755385681541,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "r1mbfSSwKWdcFdAU", "_id": "r1mbfSSwKWdcFdAU",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 94,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784284, "createdTime": 1753922784284,
"modifiedTime": 1755266545039, "modifiedTime": 1755385452708,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "6hbqmxDXFOzZJDk4", "_id": "6hbqmxDXFOzZJDk4",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 94,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784285, "createdTime": 1753922784285,
"modifiedTime": 1755259462679, "modifiedTime": 1755385485548,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "MI126iMOOobQ1Obn", "_id": "MI126iMOOobQ1Obn",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 77,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784290, "createdTime": 1753922784290,
"modifiedTime": 1755259904640, "modifiedTime": 1755384483511,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "5Lh1T0zaT8Pkr2U2", "_id": "5Lh1T0zaT8Pkr2U2",

View file

@ -111,6 +111,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 78,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784291, "createdTime": 1753922784291,
"modifiedTime": 1755259462688, "modifiedTime": 1755384496776,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "MbBPIOxaxXYNApXz", "_id": "MbBPIOxaxXYNApXz",

View file

@ -117,6 +117,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 78,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -126,9 +131,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784292, "createdTime": 1753922784292,
"modifiedTime": 1755259941370, "modifiedTime": 1755384505324,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "CBKixLH3yhivZZuL", "_id": "CBKixLH3yhivZZuL",

View file

@ -105,6 +105,11 @@
"stress": { "stress": {
"max": 1 "max": 1
} }
},
"attribution": {
"source": "Daggerheart SRD",
"page": 78,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -114,9 +119,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784293, "createdTime": 1753922784293,
"modifiedTime": 1755259961931, "modifiedTime": 1755384512770,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "C0OMQqV7pN6t7ouR", "_id": "C0OMQqV7pN6t7ouR",

View file

@ -111,6 +111,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 78,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784294, "createdTime": 1753922784294,
"modifiedTime": 1755259462803, "modifiedTime": 1755384520025,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "aTljstqteGoLpCBq", "_id": "aTljstqteGoLpCBq",

View file

@ -112,6 +112,11 @@
"type": "attack", "type": "attack",
"range": "melee", "range": "melee",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 78,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -121,9 +126,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "1.0.4", "systemVersion": "1.0.5",
"createdTime": 1753922784295, "createdTime": 1753922784295,
"modifiedTime": 1755260040062, "modifiedTime": 1755384529543,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "XF4tYTq9nPJAy2ox", "_id": "XF4tYTq9nPJAy2ox",

View file

@ -111,6 +111,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 78,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -120,9 +125,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784296, "createdTime": 1753922784296,
"modifiedTime": 1755259462527, "modifiedTime": 1755384539312,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "1zuyof1XuIfi3aMG", "_id": "1zuyof1XuIfi3aMG",

View file

@ -106,6 +106,11 @@
}, },
"type": "attack", "type": "attack",
"chatDisplay": false "chatDisplay": false
},
"attribution": {
"source": "Daggerheart SRD",
"page": 88,
"artist": ""
} }
}, },
"flags": {}, "flags": {},
@ -115,9 +120,9 @@
"exportSource": null, "exportSource": null,
"coreVersion": "13.347", "coreVersion": "13.347",
"systemId": "daggerheart", "systemId": "daggerheart",
"systemVersion": "0.0.1", "systemVersion": "1.0.5",
"createdTime": 1753922784297, "createdTime": 1753922784297,
"modifiedTime": 1755259462684, "modifiedTime": 1755385201114,
"lastModifiedBy": "VZIeX2YDvX338Zvr" "lastModifiedBy": "VZIeX2YDvX338Zvr"
}, },
"_id": "MYXmTx2FHcIjdfYZ", "_id": "MYXmTx2FHcIjdfYZ",

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