mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
Merge branch 'main' into feature/1-Embedding-Rolls
This commit is contained in:
commit
eeede65443
331 changed files with 12154 additions and 811 deletions
|
|
@ -3,3 +3,5 @@ package-lock.json
|
|||
package.json
|
||||
.github
|
||||
*.hbs
|
||||
styles/daggerheart.css
|
||||
src/packs
|
||||
|
|
@ -81,6 +81,7 @@ Hooks.once('init', () => {
|
|||
CONFIG.ChatMessage.dataModels = {
|
||||
dualityRoll: models.DhpDualityRoll,
|
||||
adversaryRoll: models.DhpAdversaryRoll,
|
||||
damageRoll: models.DhpDamageRoll,
|
||||
abilityUse: models.DhpAbilityUse
|
||||
};
|
||||
CONFIG.ChatMessage.documentClass = applications.DhpChatMessage;
|
||||
|
|
|
|||
27
lang/en.json
27
lang/en.json
|
|
@ -86,7 +86,8 @@
|
|||
"SecondaryEquipWhileTwohanded": "A secondary weapon can't be equipped together with a Two-Handed weapon.",
|
||||
"TwohandedEquipWhileSecondary": "Can't equip a Two-Handed weapon together with a secondary weapon.",
|
||||
"SelectClassBeforeSubclass": "Select a Class before selecting a Subclass.",
|
||||
"SubclassNotOfClass": "This Subclass doesn't belong to your current Class."
|
||||
"SubclassNotOfClass": "This Subclass doesn't belong to your current Class.",
|
||||
"AttackTargetDoesNotExist": "The target token no longer exists"
|
||||
},
|
||||
"Error": {
|
||||
"NoClassSelected": "Your character has no class selected!",
|
||||
|
|
@ -104,8 +105,14 @@
|
|||
"Duality": "Duality",
|
||||
"Check": "{check} Check",
|
||||
"CriticalSuccess": "Critical Success",
|
||||
"Advantage": "Advantage",
|
||||
"Disadvantage": "Disadvantage",
|
||||
"Advantage": {
|
||||
"Full": "Advantage",
|
||||
"Short": "Adv"
|
||||
},
|
||||
"Disadvantage": {
|
||||
"Full": "Disadvantage",
|
||||
"Short": "Dis"
|
||||
},
|
||||
"OK": "OK",
|
||||
"Cancel": "Cancel",
|
||||
"Or": "Or",
|
||||
|
|
@ -707,6 +714,9 @@
|
|||
"Title": "{actor} - Death Move",
|
||||
"TakeMove": "Take Death Move"
|
||||
},
|
||||
"RollSelection": {
|
||||
"Title": "Roll Options"
|
||||
},
|
||||
"Settings": {
|
||||
"Title": "Daggerheart Settings"
|
||||
},
|
||||
|
|
@ -728,9 +738,14 @@
|
|||
},
|
||||
"Chat": {
|
||||
"DualityRoll": {
|
||||
"AdvantageChooseTitle": "Select Hope Dice"
|
||||
"AbilityCheckTitle": "{ability} Check"
|
||||
},
|
||||
"AttackRoll": {
|
||||
"Title": "Attack - {attack}"
|
||||
},
|
||||
"DamageRoll": {
|
||||
"Title": "Damage - {damage}",
|
||||
"DealDamageToTargets": "Damage Hit Targets",
|
||||
"DealDamage": "Deal Damage"
|
||||
},
|
||||
"HealingRoll": {
|
||||
|
|
@ -882,8 +897,8 @@
|
|||
"Stress": "Stress",
|
||||
"Experience": "Experience",
|
||||
"Experiences": "Experiences",
|
||||
"Moves": "Moves",
|
||||
"NewMove": "New Move"
|
||||
"Features": "Features",
|
||||
"NewFeature": "New Feature"
|
||||
},
|
||||
"Environment": {
|
||||
"ToneAndFeel": "Tone And feel",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
export default class DhpChatMesssage extends ChatMessage {
|
||||
async renderHTML() {
|
||||
if (this.type === 'dualityRoll' || this.type === 'adversaryRoll' || this.type === 'abilityUse') {
|
||||
if (
|
||||
this.type === 'dualityRoll' ||
|
||||
this.type === 'adversaryRoll' ||
|
||||
this.type === 'damageRoll' ||
|
||||
this.type === 'abilityUse'
|
||||
) {
|
||||
this.content = await foundry.applications.handlebars.renderTemplate(this.content, this.system);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
|
||||
export default class DamageSelectionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
constructor(rollString, bonusDamage, hope, resolve) {
|
||||
constructor(rollString, bonusDamage, resolve, hope = 0) {
|
||||
super({});
|
||||
|
||||
this.data = {
|
||||
|
|
@ -122,64 +122,3 @@ export default class DamageSelectionDialog extends HandlebarsApplicationMixin(Ap
|
|||
this.close();
|
||||
}
|
||||
}
|
||||
|
||||
// export default class DamageSelectionDialog extends FormApplication {
|
||||
// constructor(rollString, bonusDamage, resolve){
|
||||
// super({}, {});
|
||||
|
||||
// this.data = {
|
||||
// rollString,
|
||||
// bonusDamage: bonusDamage.map(x => ({
|
||||
// ...x,
|
||||
// hopeUses: 0
|
||||
// })),
|
||||
// }
|
||||
// this.resolve = resolve;
|
||||
// }
|
||||
|
||||
// get title (){
|
||||
// return 'Damage Options';
|
||||
// }
|
||||
|
||||
// static get defaultOptions() {
|
||||
// const defaults = super.defaultOptions;
|
||||
// const overrides = {
|
||||
// height: 'auto',
|
||||
// width: 400,
|
||||
// id: 'damage-selection',
|
||||
// template: 'systems/daggerheart/templates/views/damageSelection.hbs',
|
||||
// closeOnSubmit: false,
|
||||
// classes: ["daggerheart", "views", "damage-selection"],
|
||||
// };
|
||||
|
||||
// const mergedOptions = foundry.utils.mergeObject(defaults, overrides);
|
||||
|
||||
// return mergedOptions;
|
||||
// }
|
||||
|
||||
// async getData(){
|
||||
// const context = super.getData();
|
||||
// context.rollString = this.data.rollString;
|
||||
// context.bonusDamage = this.data.bonusDamage;
|
||||
|
||||
// return context;
|
||||
// }
|
||||
|
||||
// activateListeners(html) {
|
||||
// super.activateListeners(html);
|
||||
|
||||
// html.find('.roll-button').click(this.finish.bind(this));
|
||||
// html.find('.').change();
|
||||
// }
|
||||
|
||||
// // async _updateObject(_, formData) {
|
||||
// // const data = foundry.utils.expandObject(formData);
|
||||
// // this.data = foundry.utils.mergeObject(this.data, data);
|
||||
// // this.render(true);
|
||||
// // }
|
||||
|
||||
// finish(){
|
||||
// this.resolve(this.data);
|
||||
// this.close();
|
||||
// }
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -1,81 +1,79 @@
|
|||
export default class NpcRollSelectionDialog extends FormApplication {
|
||||
constructor(experiences, resolve, isNpc) {
|
||||
super({}, {});
|
||||
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
||||
|
||||
export default class NpcRollSelectionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
constructor(experiences, resolve, reject) {
|
||||
super({});
|
||||
|
||||
this.experiences = experiences;
|
||||
this.resolve = resolve;
|
||||
this.reject = reject;
|
||||
this.selectedExperiences = [];
|
||||
this.data = {
|
||||
nrDice: 1,
|
||||
advantage: null
|
||||
};
|
||||
}
|
||||
|
||||
get title() {
|
||||
return 'Roll Options';
|
||||
return game.i18n.localize('DAGGERHEART.Application.Settings.Title');
|
||||
}
|
||||
|
||||
static get defaultOptions() {
|
||||
const defaults = super.defaultOptions;
|
||||
const overrides = {
|
||||
height: 'auto',
|
||||
width: 400,
|
||||
static DEFAULT_OPTIONS = {
|
||||
tag: 'form',
|
||||
id: 'roll-selection',
|
||||
template: 'systems/daggerheart/templates/views/npcRollSelection.hbs',
|
||||
closeOnSubmit: false,
|
||||
submitOnChange: true,
|
||||
classes: ['daggerheart', 'views', 'npc-roll-selection']
|
||||
classes: ['daggerheart', 'views', 'npc-roll-selection'],
|
||||
position: { width: '500', height: 'auto' },
|
||||
actions: {
|
||||
updateIsAdvantage: this.updateIsAdvantage,
|
||||
selectExperience: this.selectExperience
|
||||
},
|
||||
form: { handler: this.updateData, submitOnChange: false }
|
||||
};
|
||||
|
||||
const mergedOptions = foundry.utils.mergeObject(defaults, overrides);
|
||||
|
||||
return mergedOptions;
|
||||
static PARTS = {
|
||||
main: {
|
||||
id: 'main',
|
||||
template: 'systems/daggerheart/templates/views/npcRollSelection.hbs'
|
||||
}
|
||||
};
|
||||
|
||||
async getData() {
|
||||
const context = super.getData();
|
||||
context.nrDice = this.data.nrDice;
|
||||
async _prepareContext(_options) {
|
||||
const context = await super._prepareContext(_options);
|
||||
context.advantage = this.data.advantage;
|
||||
context.experiences = this.experiences.map(x => ({
|
||||
context.experiences = Object.values(this.experiences).map(x => ({
|
||||
...x,
|
||||
selected: this.selectedExperiences.find(selected => selected.id === x.id)
|
||||
selected: this.selectedExperiences.find(selected => selected.id === x.id),
|
||||
value: `${x.value >= 0 ? '+' : '-'}${x.value}`
|
||||
}));
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
html.find('.increase').click(_ => this.updateNrDice(1));
|
||||
html.find('.decrease').click(_ => this.updateNrDice(-1));
|
||||
html.find('.advantage').click(_ => this.updateIsAdvantage(true));
|
||||
html.find('.disadvantage').click(_ => this.updateIsAdvantage(false));
|
||||
html.find('.roll-button').click(this.finish.bind(this));
|
||||
html.find('.roll-dialog-chip').click(this.selectExperience.bind(this));
|
||||
}
|
||||
|
||||
updateNrDice(value) {
|
||||
this.data.nrDice += value;
|
||||
this.render();
|
||||
}
|
||||
|
||||
updateIsAdvantage(advantage) {
|
||||
static updateIsAdvantage(_, button) {
|
||||
const advantage = Boolean(button.dataset.advantage);
|
||||
this.data.advantage = this.data.advantage === advantage ? null : advantage;
|
||||
this.render();
|
||||
}
|
||||
|
||||
selectExperience(event) {
|
||||
const experience = this.experiences[event.currentTarget.dataset.key];
|
||||
this.selectedExperiences = this.selectedExperiences.find(x => x.name === experience.name)
|
||||
? this.selectedExperiences.filter(x => x.name !== experience.name)
|
||||
static selectExperience(_, button) {
|
||||
const experience = Object.values(this.experiences).find(experience => experience.id === button.id);
|
||||
this.selectedExperiences = this.selectedExperiences.find(x => x.id === experience.id)
|
||||
? this.selectedExperiences.filter(x => x.id !== experience.id)
|
||||
: [...this.selectedExperiences, experience];
|
||||
|
||||
this.render();
|
||||
}
|
||||
|
||||
finish() {
|
||||
static async updateData() {
|
||||
this.resolve({ ...this.data, experiences: this.selectedExperiences });
|
||||
this.close();
|
||||
this.close({ updateClose: true });
|
||||
}
|
||||
|
||||
async close(options = {}) {
|
||||
const { updateClose, ...baseOptions } = options;
|
||||
if (!updateClose) {
|
||||
this.reject();
|
||||
}
|
||||
|
||||
await super.close(baseOptions);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export default class RollSelectionDialog extends HandlebarsApplicationMixin(Appl
|
|||
};
|
||||
|
||||
get title() {
|
||||
return `Roll Options`;
|
||||
return game.i18n.localize('DAGGERHEART.Application.RollSelection.Title');
|
||||
}
|
||||
|
||||
async _prepareContext(_options) {
|
||||
|
|
@ -157,134 +157,3 @@ export default class RollSelectionDialog extends HandlebarsApplicationMixin(Appl
|
|||
this.close();
|
||||
}
|
||||
}
|
||||
|
||||
// V1.3
|
||||
// const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
|
||||
// export default class RollSelectionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
// constructor(experiences, bonusDamage, hopeResource, resolve, isNpc){
|
||||
// super({}, {});
|
||||
|
||||
// this.experiences = experiences;
|
||||
// this.resolve = resolve;
|
||||
// this.isNpc;
|
||||
// this.selectedExperiences = [];
|
||||
// this.data = {
|
||||
// diceOptions: [{ name: 'd12', value: 'd12' }, { name: 'd20', value: 'd20' }],
|
||||
// hope: ['d12'],
|
||||
// fear: ['d12'],
|
||||
// advantage: null,
|
||||
// disadvantage: null,
|
||||
// bonusDamage: bonusDamage.reduce((acc, x) => {
|
||||
// if(x.appliesOn === SYSTEM.EFFECTS.applyLocations.attackRoll.id){
|
||||
// acc.push(({
|
||||
// ...x,
|
||||
// hopeUses: 0
|
||||
// }));
|
||||
// }
|
||||
|
||||
// return acc;
|
||||
// }, []),
|
||||
// hopeResource: hopeResource,
|
||||
// };
|
||||
// }
|
||||
|
||||
// static DEFAULT_OPTIONS = {
|
||||
// tag: 'form',
|
||||
// classes: ["daggerheart", "views", "roll-selection"],
|
||||
// position: {
|
||||
// width: 400,
|
||||
// height: "auto"
|
||||
// },
|
||||
// actions: {
|
||||
// selectExperience: this.selectExperience,
|
||||
// decreaseHopeUse: this.decreaseHopeUse,
|
||||
// increaseHopeUse: this.increaseHopeUse,
|
||||
// finish: this.finish,
|
||||
// },
|
||||
// form: {
|
||||
// handler: this.updateSelection,
|
||||
// submitOnChange: true,
|
||||
// closeOnSubmit: false,
|
||||
// }
|
||||
// };
|
||||
|
||||
// /** @override */
|
||||
// static PARTS = {
|
||||
// damageSelection: {
|
||||
// id: "damageSelection",
|
||||
// template: "systems/daggerheart/templates/views/rollSelection.hbs"
|
||||
// }
|
||||
// }
|
||||
|
||||
// get title() {
|
||||
// return `Roll Options`;
|
||||
// }
|
||||
|
||||
// async _prepareContext(_options) {
|
||||
// const context = await super._prepareContext(_options);
|
||||
// context.isNpc = this.isNpc;
|
||||
// context.diceOptions = this.data.diceOptions;
|
||||
// context.hope = this.data.hope;
|
||||
// context.fear = this.data.fear;
|
||||
// context.advantage = this.data.advantage;
|
||||
// context.disadvantage = this.data.disadvantage;
|
||||
// context.experiences = this.experiences.map(x => ({ ...x, selected: this.selectedExperiences.find(selected => selected.id === x.id) }));
|
||||
// context.bonusDamage = this.data.bonusDamage;
|
||||
// context.hopeResource = this.data.hopeResource+1;
|
||||
// context.hopeUsed = this.getHopeUsed();
|
||||
|
||||
// return context;
|
||||
// }
|
||||
|
||||
// static updateSelection(event, _, formData){
|
||||
// const { bonusDamage, ...rest } = foundry.utils.expandObject(formData.object);
|
||||
|
||||
// for(var index in bonusDamage){
|
||||
// this.data.bonusDamage[index].initiallySelected = bonusDamage[index].initiallySelected;
|
||||
// if(bonusDamage[index].hopeUses){
|
||||
// const value = Number.parseInt(bonusDamage[index].hopeUses);
|
||||
// if(!Number.isNaN(value)) this.data.bonusDamage[index].hopeUses = value;
|
||||
// }
|
||||
// }
|
||||
|
||||
// this.data = foundry.utils.mergeObject(this.data, rest);
|
||||
// this.render(true);
|
||||
// }
|
||||
|
||||
// static selectExperience(_, button){
|
||||
// if(this.selectedExperiences.find(x => x.id === button.dataset.key)){
|
||||
// this.selectedExperiences = this.selectedExperiences.filter(x => x.id !== button.dataset.key);
|
||||
// } else {
|
||||
// this.selectedExperiences = [...this.selectedExperiences, this.experiences.find(x => x.id === button.dataset.key)];
|
||||
// }
|
||||
|
||||
// this.render();
|
||||
// }
|
||||
|
||||
// getHopeUsed(){
|
||||
// return this.data.bonusDamage.reduce((acc, x) => acc+x.hopeUses, 0);
|
||||
// }
|
||||
|
||||
// static decreaseHopeUse(_, button){
|
||||
// const index = Number.parseInt(button.dataset.index);
|
||||
// if(this.data.bonusDamage[index].hopeUses - 1 >= 0) {
|
||||
// this.data.bonusDamage[index].hopeUses -= 1;
|
||||
// this.render(true);
|
||||
// }
|
||||
// }
|
||||
|
||||
// static increaseHopeUse(_, button){
|
||||
// const index = Number.parseInt(button.dataset.index);
|
||||
// if(this.data.bonusDamage[index].hopeUses <= this.data.hopeResource+1) {
|
||||
// this.data.bonusDamage[index].hopeUses += 1;
|
||||
// this.render(true);
|
||||
// }
|
||||
// }
|
||||
|
||||
// static finish(){
|
||||
// const { diceOptions, ...rest } = this.data;
|
||||
// this.resolve({ ...rest, experiences: this.selectedExperiences, hopeUsed: this.getHopeUsed(), bonusDamage: this.data.bonusDamage.reduce((acc, x) => acc.concat(` + ${1+x.hopeUses}${x.value}`), "") });
|
||||
// this.close();
|
||||
// }
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -349,7 +349,7 @@ export default class AdversarySheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
static async attackRoll(event, button) {
|
||||
const modifier = Number.parseInt(button.dataset.value);
|
||||
|
||||
const { roll, diceResults, modifiers } = await this.actor.diceRoll(
|
||||
const { roll, dice, advantageState, modifiers } = await this.actor.diceRoll(
|
||||
{ title: `${this.actor.name} - Attack Roll`, value: modifier },
|
||||
event.shiftKey
|
||||
);
|
||||
|
|
@ -365,11 +365,15 @@ export default class AdversarySheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
const cls = getDocumentClass('ChatMessage');
|
||||
const msg = new cls({
|
||||
type: 'adversaryRoll',
|
||||
sound: CONFIG.sounds.dice,
|
||||
system: {
|
||||
title: button.dataset.name,
|
||||
origin: this.document.id,
|
||||
roll: roll._formula,
|
||||
advantageState,
|
||||
total: roll._total,
|
||||
modifiers: modifiers,
|
||||
diceResults: diceResults,
|
||||
dice: dice,
|
||||
targets: targets,
|
||||
damage: { value: button.dataset.damage, type: button.dataset.damageType }
|
||||
},
|
||||
|
|
@ -381,16 +385,15 @@ export default class AdversarySheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
}
|
||||
|
||||
static async addExperience() {
|
||||
const experienceId = foundry.utils.randomID();
|
||||
await this.document.update({
|
||||
'system.experiences': [...this.document.system.experiences, { name: 'Experience', value: 1 }]
|
||||
[`system.experiences.${experienceId}`]: { id: experienceId, name: 'Experience', value: 1 }
|
||||
});
|
||||
}
|
||||
|
||||
static async removeExperience(_, button) {
|
||||
await this.document.update({
|
||||
'system.experiences': this.document.system.experiences.filter(
|
||||
(_, index) => index !== Number.parseInt(button.dataset.experience)
|
||||
)
|
||||
[`system.experiences.-=${button.dataset.experience}`]: null
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ import DaggerheartSheet from './daggerheart-sheet.mjs';
|
|||
import Tagify from '@yaireo/tagify';
|
||||
|
||||
const { ItemSheetV2 } = foundry.applications.sheets;
|
||||
const { TextEditor } = foundry.applications.ux;
|
||||
export default class ClassSheet extends DaggerheartSheet(ItemSheetV2) {
|
||||
static DEFAULT_OPTIONS = {
|
||||
tag: 'form',
|
||||
|
|
|
|||
|
|
@ -4,8 +4,10 @@ import DhpDowntime from '../downtime.mjs';
|
|||
import DhpLevelup from '../levelup.mjs';
|
||||
import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs';
|
||||
import DaggerheartSheet from './daggerheart-sheet.mjs';
|
||||
import { abilities } from '../../config/actorConfig.mjs';
|
||||
|
||||
const { ActorSheetV2 } = foundry.applications.sheets;
|
||||
const { TextEditor } = foundry.applications.ux;
|
||||
export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||
constructor(options = {}) {
|
||||
super(options);
|
||||
|
|
@ -480,9 +482,9 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
this.render();
|
||||
}
|
||||
|
||||
static async rollAttribute(event, target) {
|
||||
static async rollAttribute(event, button) {
|
||||
const { roll, hope, fear, advantage, disadvantage, modifiers } = await this.document.dualityRoll(
|
||||
{ title: 'Attribute Bonus', value: event.target.dataset.value },
|
||||
{ title: 'Attribute Bonus', value: button.dataset.value },
|
||||
event.shiftKey
|
||||
);
|
||||
|
||||
|
|
@ -490,6 +492,10 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
const msgData = {
|
||||
type: 'dualityRoll',
|
||||
system: {
|
||||
title: game.i18n.format('DAGGERHEART.Chat.DualityRoll.AbilityCheckTitle', {
|
||||
ability: game.i18n.localize(abilities[button.dataset.attribute].label)
|
||||
}),
|
||||
origin: this.document.id,
|
||||
roll: roll._formula,
|
||||
modifiers: modifiers,
|
||||
hope: hope,
|
||||
|
|
@ -550,8 +556,8 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
await this.document.update({ [update]: newValue });
|
||||
}
|
||||
|
||||
static async attackRoll(_, event) {
|
||||
const weapon = await fromUuid(event.currentTarget.dataset.weapon);
|
||||
static async attackRoll(event, button) {
|
||||
const weapon = await fromUuid(button.dataset.weapon);
|
||||
const damage = {
|
||||
value: `${this.document.system.proficiency.value}${weapon.system.damage.value}`,
|
||||
type: weapon.system.damage.type,
|
||||
|
|
@ -579,7 +585,10 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
|||
const cls = getDocumentClass('ChatMessage');
|
||||
const msg = new cls({
|
||||
type: 'dualityRoll',
|
||||
sound: CONFIG.sounds.dice,
|
||||
system: {
|
||||
title: weapon.name,
|
||||
origin: this.document.id,
|
||||
roll: roll._formula,
|
||||
modifiers: modifiers,
|
||||
hope: hope,
|
||||
|
|
|
|||
|
|
@ -87,193 +87,193 @@ export const armorFeatures = {
|
|||
|
||||
export const weaponFeatures = {
|
||||
barrier: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Barrier.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Barrier.Description',
|
||||
label: 'DAGGERHEART.WeaponFeature.Barrier.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Barrier.Description',
|
||||
override: {
|
||||
armorBonus: 1
|
||||
}
|
||||
},
|
||||
bonded: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Bonded.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Bonded.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Bonded.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Bonded.Description'
|
||||
},
|
||||
bouncing: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Bouncing.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Bouncing.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Bouncing.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Bouncing.Description'
|
||||
},
|
||||
brave: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Brave.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Brave.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Brave.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Brave.Description'
|
||||
},
|
||||
brutal: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Brutal.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Brutal.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Brutal.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Brutal.Description'
|
||||
},
|
||||
charged: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Charged.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Charged.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Charged.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Charged.Description'
|
||||
},
|
||||
concussive: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Concussive.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Concussive.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Concussive.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Concussive.Description'
|
||||
},
|
||||
cumbersome: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Cumbersome.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Cumbersome.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Cumbersome.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Cumbersome.Description'
|
||||
},
|
||||
deadly: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Deadly.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Deadly.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Deadly.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Deadly.Description'
|
||||
},
|
||||
deflecting: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Deflecting.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Deflecting.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Deflecting.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Deflecting.Description'
|
||||
},
|
||||
destructive: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Destructive.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Destructive.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Destructive.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Destructive.Description'
|
||||
},
|
||||
devastating: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Devastating.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Devastating.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Devastating.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Devastating.Description'
|
||||
},
|
||||
doubleduty: {
|
||||
label: 'DAGGERHEART.ArmorFeature.DoubleDuty.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.DoubleDuty.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.DoubleDuty.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.DoubleDuty.Description'
|
||||
},
|
||||
doubledup: {
|
||||
label: 'DAGGERHEART.ArmorFeature.DoubledUp.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.DoubledUp.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.DoubledUp.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.DoubledUp.Description'
|
||||
},
|
||||
dueling: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Dueling.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Dueling.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Dueling.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Dueling.Description'
|
||||
},
|
||||
eruptive: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Eruptive.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Eruptive.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Eruptive.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Eruptive.Description'
|
||||
},
|
||||
grappling: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Grappling.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Grappling.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Grappling.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Grappling.Description'
|
||||
},
|
||||
greedy: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Greedy.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Greedy.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Greedy.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Greedy.Description'
|
||||
},
|
||||
heavy: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Heavy.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Heavy.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Heavy.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Heavy.Description'
|
||||
},
|
||||
hooked: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Hooked.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Hooked.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Hooked.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Hooked.Description'
|
||||
},
|
||||
hot: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Hot.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Hot.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Hot.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Hot.Description'
|
||||
},
|
||||
invigorating: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Invigorating.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Invigorating.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Invigorating.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Invigorating.Description'
|
||||
},
|
||||
lifestealing: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Lifestealing.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Lifestealing.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Lifestealing.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Lifestealing.Description'
|
||||
},
|
||||
lockedon: {
|
||||
label: 'DAGGERHEART.ArmorFeature.LockedOn.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.LockedOn.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.LockedOn.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.LockedOn.Description'
|
||||
},
|
||||
long: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Long.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Long.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Long.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Long.Description'
|
||||
},
|
||||
massive: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Massive.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Massive.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Massive.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Massive.Description'
|
||||
},
|
||||
painful: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Painful.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Painful.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Painful.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Painful.Description'
|
||||
},
|
||||
paired: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Paired.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Paired.Description',
|
||||
label: 'DAGGERHEART.WeaponFeature.Paired.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Paired.Description',
|
||||
override: {
|
||||
bonusDamage: 1
|
||||
}
|
||||
},
|
||||
parry: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Parry.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Parry.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Parry.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Parry.Description'
|
||||
},
|
||||
persuasive: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Persuasive.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Persuasive.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Persuasive.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Persuasive.Description'
|
||||
},
|
||||
pompous: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Pompous.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Pompous.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Pompous.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Pompous.Description'
|
||||
},
|
||||
powerful: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Powerful.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Powerful.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Powerful.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Powerful.Description'
|
||||
},
|
||||
protective: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Protective.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Protective.Description',
|
||||
label: 'DAGGERHEART.WeaponFeature.Protective.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Protective.Description',
|
||||
override: {
|
||||
armorBonus: 1
|
||||
}
|
||||
},
|
||||
quick: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Quick.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Quick.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Quick.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Quick.Description'
|
||||
},
|
||||
reliable: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Reliable.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Reliable.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Reliable.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Reliable.Description'
|
||||
},
|
||||
reloading: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Reloading.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Reloading.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Reloading.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Reloading.Description'
|
||||
},
|
||||
retractable: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Retractable.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Retractable.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Retractable.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Retractable.Description'
|
||||
},
|
||||
returning: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Returning.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Returning.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Returning.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Returning.Description'
|
||||
},
|
||||
scary: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Scary.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Scary.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Scary.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Scary.Description'
|
||||
},
|
||||
serrated: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Serrated.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Serrated.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Serrated.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Serrated.Description'
|
||||
},
|
||||
sharpwing: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Sharpwing.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Sharpwing.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Sharpwing.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Sharpwing.Description'
|
||||
},
|
||||
sheltering: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Sheltering.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Sheltering.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Sheltering.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Sheltering.Description'
|
||||
},
|
||||
startling: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Startling.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Startling.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Startling.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Startling.Description'
|
||||
},
|
||||
timebending: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Timebending.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Timebending.Description'
|
||||
label: 'DAGGERHEART.WeaponFeature.Timebending.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Timebending.Description'
|
||||
},
|
||||
versatile: {
|
||||
label: 'DAGGERHEART.ArmorFeature.Versatile.Name',
|
||||
description: 'DAGGERHEART.ArmorFeature.Versatile.Description',
|
||||
label: 'DAGGERHEART.WeaponFeature.Versatile.Name',
|
||||
description: 'DAGGERHEART.WeaponFeature.Versatile.Description',
|
||||
versatile: {
|
||||
characterTrait: '',
|
||||
range: '',
|
||||
|
|
|
|||
|
|
@ -14,5 +14,6 @@ export { default as DhpWeapon } from './weapon.mjs';
|
|||
export { default as DhpArmor } from './armor.mjs';
|
||||
export { default as DhpDualityRoll } from './dualityRoll.mjs';
|
||||
export { default as DhpAdversaryRoll } from './adversaryRoll.mjs';
|
||||
export { default as DhpDamageRoll } from './damageRoll.mjs';
|
||||
export { default as DhpAbilityUse } from './abilityUse.mjs';
|
||||
export { default as DhpEnvironment } from './environment.mjs';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import { MappingField } from './fields.mjs';
|
||||
|
||||
export default class DhpAdversary extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
|
|
@ -35,20 +33,20 @@ export default class DhpAdversary extends foundry.abstract.TypeDataModel {
|
|||
}),
|
||||
difficulty: new fields.NumberField({ initial: 1, integer: true }),
|
||||
damageThresholds: new fields.SchemaField({
|
||||
minor: new fields.NumberField({ initial: 0, integer: true }),
|
||||
major: new fields.NumberField({ initial: 0, integer: true }),
|
||||
severe: new fields.NumberField({ initial: 0, integer: true })
|
||||
}),
|
||||
experiences: new fields.ArrayField(
|
||||
experiences: new fields.TypedObjectField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.StringField({}),
|
||||
id: new fields.StringField({ required: true }),
|
||||
name: new fields.StringField(),
|
||||
value: new fields.NumberField({ integer: true, nullable: true, initial: null })
|
||||
})
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
get moves() {
|
||||
get features() {
|
||||
return this.parent.items.filter(x => x.type === 'feature');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ export default class DhpAdversaryRoll extends foundry.abstract.TypeDataModel {
|
|||
const fields = foundry.data.fields;
|
||||
|
||||
return {
|
||||
title: new fields.StringField(),
|
||||
origin: new fields.StringField({ required: true }),
|
||||
roll: new fields.StringField({}),
|
||||
total: new fields.NumberField({ integer: true }),
|
||||
modifiers: new fields.ArrayField(
|
||||
|
|
@ -12,12 +14,8 @@ export default class DhpAdversaryRoll extends foundry.abstract.TypeDataModel {
|
|||
title: new fields.StringField({})
|
||||
})
|
||||
),
|
||||
diceResults: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
value: new fields.NumberField({ integer: true }),
|
||||
discarded: new fields.BooleanField({ initial: false })
|
||||
})
|
||||
),
|
||||
advantageState: new fields.NumberField({ required: true, choices: [0, 1, 2], initial: 0 }),
|
||||
dice: new fields.EmbeddedDataField(DhpAdversaryRollDice),
|
||||
targets: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
id: new fields.StringField({}),
|
||||
|
|
@ -39,17 +37,18 @@ export default class DhpAdversaryRoll extends foundry.abstract.TypeDataModel {
|
|||
}
|
||||
|
||||
prepareDerivedData() {
|
||||
const diceKeys = Object.keys(this.diceResults);
|
||||
const highestIndex = 0;
|
||||
for (var index in diceKeys) {
|
||||
const resultIndex = Number.parseInt(index);
|
||||
if (highestIndex === resultIndex) continue;
|
||||
|
||||
const current = this.diceResults[resultIndex];
|
||||
const highest = this.diceResults[highestIndex];
|
||||
|
||||
if (current.value > highest.value) this.diceResults[highestIndex].discarded = true;
|
||||
else this.diceResults[resultIndex].discarded = true;
|
||||
const diceKeys = Object.keys(this.dice.rolls);
|
||||
const highestDiceIndex =
|
||||
diceKeys.length < 2
|
||||
? null
|
||||
: this.dice.rolls[diceKeys[0]].value > this.dice.rolls[diceKeys[1]].value
|
||||
? 0
|
||||
: 1;
|
||||
if (highestDiceIndex !== null) {
|
||||
this.dice.rolls = this.dice.rolls.map((roll, index) => ({
|
||||
...roll,
|
||||
discarded: this.advantageState === 1 ? index !== highestDiceIndex : index === highestDiceIndex
|
||||
}));
|
||||
}
|
||||
|
||||
this.targets.forEach(target => {
|
||||
|
|
@ -57,3 +56,23 @@ export default class DhpAdversaryRoll extends foundry.abstract.TypeDataModel {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
class DhpAdversaryRollDice extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
return {
|
||||
type: new fields.StringField({ required: true }),
|
||||
rolls: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
value: new fields.NumberField({ required: true, integer: true }),
|
||||
discarded: new fields.BooleanField({ initial: false })
|
||||
})
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
get rollTotal() {
|
||||
return this.rolls.reduce((acc, roll) => acc + (!roll.discarded ? roll.value : 0), 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
43
module/data/damageRoll.mjs
Normal file
43
module/data/damageRoll.mjs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
export default class DhpDamageRoll extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
return {
|
||||
title: new fields.StringField(),
|
||||
roll: new fields.StringField({ required: true }),
|
||||
damage: new fields.SchemaField({
|
||||
total: new fields.NumberField({ required: true, integer: true }),
|
||||
type: new fields.StringField({ choices: Object.keys(SYSTEM.GENERAL.damageTypes), integer: false })
|
||||
}),
|
||||
dice: new fields.ArrayField(new fields.EmbeddedDataField(DhpDamageDice)),
|
||||
modifiers: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
value: new fields.NumberField({ required: true, integer: true }),
|
||||
operator: new fields.StringField({ required: true, choices: ['+', '-', '*', '/'] })
|
||||
})
|
||||
),
|
||||
targets: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
id: new fields.StringField({ required: true }),
|
||||
name: new fields.StringField(),
|
||||
img: new fields.StringField()
|
||||
})
|
||||
)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class DhpDamageDice extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
return {
|
||||
type: new fields.StringField({ required: true }),
|
||||
rolls: new fields.ArrayField(new fields.NumberField({ required: true, integer: true }))
|
||||
};
|
||||
}
|
||||
|
||||
get rollTotal() {
|
||||
return this.rolls.reduce((acc, roll) => acc + roll, 0);
|
||||
}
|
||||
}
|
||||
|
|
@ -8,6 +8,8 @@ const diceField = () =>
|
|||
export default class DhpDualityRoll extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
return {
|
||||
title: new fields.StringField(),
|
||||
origin: new fields.StringField({ required: true }),
|
||||
roll: new fields.StringField({}),
|
||||
modifiers: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
|
|
@ -20,7 +22,6 @@ export default class DhpDualityRoll extends foundry.abstract.TypeDataModel {
|
|||
fear: diceField(),
|
||||
advantage: diceField(),
|
||||
disadvantage: diceField(),
|
||||
advantageSelected: new fields.NumberField({ initial: 0 }),
|
||||
targets: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
id: new fields.StringField({}),
|
||||
|
|
@ -57,8 +58,16 @@ export default class DhpDualityRoll extends foundry.abstract.TypeDataModel {
|
|||
|
||||
get total() {
|
||||
const modifiers = this.modifiers.reduce((acc, x) => acc + x.value, 0);
|
||||
const advantage = (this.advantage.value ?? this.disadvantage.value) ? -this.disadvantage.value : 0;
|
||||
return this.hope.value + this.fear.value + advantage + modifiers;
|
||||
const advantage = this.advantage.value
|
||||
? this.advantage.value
|
||||
: this.disadvantage.value
|
||||
? -this.disadvantage.value
|
||||
: 0;
|
||||
return this.highestRoll + advantage + modifiers;
|
||||
}
|
||||
|
||||
get highestRoll() {
|
||||
return Math.max(this.hope.value, this.fear.value);
|
||||
}
|
||||
|
||||
get totalLabel() {
|
||||
|
|
@ -75,6 +84,9 @@ export default class DhpDualityRoll extends foundry.abstract.TypeDataModel {
|
|||
prepareDerivedData() {
|
||||
const total = this.total;
|
||||
|
||||
this.hope.discarded = this.hope.value < this.fear.value;
|
||||
this.fear.discarded = this.fear.value < this.hope.value;
|
||||
|
||||
this.targets.forEach(target => {
|
||||
target.hit = target.difficulty ? total >= target.difficulty : total >= target.evasion;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import { getTier } from '../helpers/utils.mjs';
|
||||
import DaggerheartAction from './action.mjs';
|
||||
import { MappingField } from './fields.mjs';
|
||||
import DhpEffect from './interface/effects.mjs';
|
||||
|
||||
export default class DhpFeature extends DhpEffect {
|
||||
|
|
@ -26,7 +25,7 @@ export default class DhpFeature extends DhpEffect {
|
|||
initial: Object.keys(SYSTEM.ACTOR.featureProperties).find(x => x === 'spellcastingTrait')
|
||||
}),
|
||||
max: new fields.NumberField({ initial: 1, integer: true }),
|
||||
numbers: new MappingField(
|
||||
numbers: new fields.TypedObjectField(
|
||||
new fields.SchemaField({
|
||||
value: new fields.NumberField({ integer: true }),
|
||||
used: new fields.BooleanField({ initial: false })
|
||||
|
|
@ -45,7 +44,7 @@ export default class DhpFeature extends DhpEffect {
|
|||
multiclass: new fields.NumberField({ initial: null, nullable: true, integer: true }),
|
||||
disabled: new fields.BooleanField({ initial: false }),
|
||||
description: new fields.HTMLField({}),
|
||||
effects: new MappingField(
|
||||
effects: new fields.TypedObjectField(
|
||||
new fields.SchemaField({
|
||||
type: new fields.StringField({ choices: SYSTEM.EFFECTS.effectTypes }),
|
||||
valueType: new fields.StringField({ choices: SYSTEM.EFFECTS.valueTypes }),
|
||||
|
|
@ -63,7 +62,7 @@ export default class DhpFeature extends DhpEffect {
|
|||
{ choices: SYSTEM.EFFECTS.applyLocations },
|
||||
{ nullable: true, initial: null }
|
||||
),
|
||||
applyLocationChoices: new MappingField(new fields.StringField({}), {
|
||||
applyLocationChoices: new fields.TypedObjectField(new fields.StringField({}), {
|
||||
nullable: true,
|
||||
initial: null
|
||||
}),
|
||||
|
|
@ -97,10 +96,4 @@ export default class DhpFeature extends DhpEffect {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// prepareDerivedData(){
|
||||
// if(this.featureType.type === SYSTEM.ITEM.valueTypes.dice.id){
|
||||
// this.featureType.numbers = ;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,109 +0,0 @@
|
|||
export class MappingField extends foundry.data.fields.ObjectField {
|
||||
constructor(model, options) {
|
||||
if (!(model instanceof foundry.data.fields.DataField)) {
|
||||
throw new Error('MappingField must have a DataField as its contained element');
|
||||
}
|
||||
super(options);
|
||||
|
||||
/**
|
||||
* The embedded DataField definition which is contained in this field.
|
||||
* @type {DataField}
|
||||
*/
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
static get _defaults() {
|
||||
return foundry.utils.mergeObject(super._defaults, {
|
||||
initialKeys: null,
|
||||
initialValue: null,
|
||||
initialKeysOnly: false
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
_cleanType(value, options) {
|
||||
Object.entries(value).forEach(([k, v]) => (value[k] = this.model.clean(v, options)));
|
||||
return value;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
getInitialValue(data) {
|
||||
let keys = this.initialKeys;
|
||||
const initial = super.getInitialValue(data);
|
||||
if (!keys || !foundry.utils.isEmpty(initial)) return initial;
|
||||
if (!(keys instanceof Array)) keys = Object.keys(keys);
|
||||
for (const key of keys) initial[key] = this._getInitialValueForKey(key);
|
||||
return initial;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Get the initial value for the provided key.
|
||||
* @param {string} key Key within the object being built.
|
||||
* @param {object} [object] Any existing mapping data.
|
||||
* @returns {*} Initial value based on provided field type.
|
||||
*/
|
||||
_getInitialValueForKey(key, object) {
|
||||
const initial = this.model.getInitialValue();
|
||||
return this.initialValue?.(key, initial, object) ?? initial;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
_validateType(value, options = {}) {
|
||||
if (foundry.utils.getType(value) !== 'Object') throw new Error('must be an Object');
|
||||
const errors = this._validateValues(value, options);
|
||||
if (!foundry.utils.isEmpty(errors)) throw new foundry.data.fields.ModelValidationError(errors);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Validate each value of the object.
|
||||
* @param {object} value The object to validate.
|
||||
* @param {object} options Validation options.
|
||||
* @returns {Object<Error>} An object of value-specific errors by key.
|
||||
*/
|
||||
_validateValues(value, options) {
|
||||
const errors = {};
|
||||
for (const [k, v] of Object.entries(value)) {
|
||||
const error = this.model.validate(v, options);
|
||||
if (error) errors[k] = error;
|
||||
}
|
||||
return errors;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
initialize(value, model, options = {}) {
|
||||
if (!value) return value;
|
||||
const obj = {};
|
||||
const initialKeys = this.initialKeys instanceof Array ? this.initialKeys : Object.keys(this.initialKeys ?? {});
|
||||
const keys = this.initialKeysOnly ? initialKeys : Object.keys(value);
|
||||
for (const key of keys) {
|
||||
const data = value[key] ?? this._getInitialValueForKey(key, value);
|
||||
obj[key] = this.model.initialize(data, model, options);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
_getField(path) {
|
||||
if (path.length === 0) return this;
|
||||
else if (path.length === 1) return this.model;
|
||||
path.shift();
|
||||
return this.model._getField(path);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,10 @@
|
|||
import DaggerheartAction from '../action.mjs';
|
||||
import { MappingField } from '../fields.mjs';
|
||||
|
||||
export default class DhpEffects extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
return {
|
||||
effects: new MappingField(
|
||||
effects: new fields.TypedObjectField(
|
||||
new fields.SchemaField({
|
||||
type: new fields.StringField({ choices: Object.keys(SYSTEM.EFFECTS.effectTypes) }),
|
||||
valueType: new fields.StringField({ choices: Object.keys(SYSTEM.EFFECTS.valueTypes) }),
|
||||
|
|
@ -23,7 +22,7 @@ export default class DhpEffects extends foundry.abstract.TypeDataModel {
|
|||
{ choices: Object.keys(SYSTEM.EFFECTS.applyLocations) },
|
||||
{ nullable: true, initial: null }
|
||||
),
|
||||
applyLocationChoices: new MappingField(new fields.StringField({}), {
|
||||
applyLocationChoices: new fields.TypedObjectField(new fields.StringField({}), {
|
||||
nullable: true,
|
||||
initial: null
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import { getPathValue, getTier } from '../helpers/utils.mjs';
|
||||
import { MappingField } from './fields.mjs';
|
||||
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
|
|
@ -17,38 +16,21 @@ const attributeField = () =>
|
|||
});
|
||||
|
||||
const levelUpTier = () => ({
|
||||
attributes: new MappingField(new fields.BooleanField()),
|
||||
hitPointSlots: new MappingField(new fields.BooleanField()),
|
||||
stressSlots: new MappingField(new fields.BooleanField()),
|
||||
experiences: new MappingField(new fields.ArrayField(new fields.StringField({}))),
|
||||
proficiency: new MappingField(new fields.BooleanField()),
|
||||
armorOrEvasionSlot: new MappingField(new fields.StringField({})),
|
||||
majorDamageThreshold2: new MappingField(new fields.BooleanField()),
|
||||
severeDamageThreshold2: new MappingField(new fields.BooleanField()),
|
||||
severeDamageThreshold3: new MappingField(new fields.BooleanField()),
|
||||
severeDamageThreshold4: new MappingField(new fields.BooleanField()),
|
||||
subclass: new MappingField(
|
||||
attributes: new fields.TypedObjectField(new fields.BooleanField()),
|
||||
hitPointSlots: new fields.TypedObjectField(new fields.BooleanField()),
|
||||
stressSlots: new fields.TypedObjectField(new fields.BooleanField()),
|
||||
experiences: new fields.TypedObjectField(new fields.ArrayField(new fields.StringField({}))),
|
||||
proficiency: new fields.TypedObjectField(new fields.BooleanField()),
|
||||
armorOrEvasionSlot: new fields.TypedObjectField(new fields.StringField({})),
|
||||
subclass: new fields.TypedObjectField(
|
||||
new fields.SchemaField({
|
||||
multiclass: new fields.BooleanField(),
|
||||
feature: new fields.StringField({})
|
||||
})
|
||||
),
|
||||
multiclass: new MappingField(new fields.BooleanField())
|
||||
multiclass: new fields.TypedObjectField(new fields.BooleanField())
|
||||
});
|
||||
|
||||
// const weapon = () => new fields.SchemaField({
|
||||
// name: new fields.StringField({}),
|
||||
// trait: new fields.StringField({}),
|
||||
// range: new fields.StringField({}),
|
||||
// damage: new fields.SchemaField({
|
||||
// value: new fields.StringField({}),
|
||||
// type: new fields.StringField({}),
|
||||
// }),
|
||||
// feature: new fields.StringField({}),
|
||||
// img: new fields.StringField({}),
|
||||
// uuid: new fields.StringField({}),
|
||||
// }, { initial: null, nullable: true });
|
||||
|
||||
export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
return {
|
||||
|
|
@ -92,16 +74,7 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
|||
min: new fields.NumberField({ initial: 1, integer: true }),
|
||||
max: new fields.NumberField({ initial: 6, integer: true })
|
||||
}),
|
||||
damageThresholds: new fields.SchemaField({
|
||||
minor: new fields.NumberField({ initial: 0, integer: true }),
|
||||
major: new fields.NumberField({ initial: 0, integer: true }),
|
||||
severe: new fields.NumberField({ initial: 0, integer: true })
|
||||
}),
|
||||
evasion: new fields.NumberField({ initial: 0, integer: true }),
|
||||
// armor: new fields.SchemaField({
|
||||
// value: new fields.NumberField({ initial: 0, integer: true }),
|
||||
// customValue: new fields.NumberField({ initial: null, nullable: true }),
|
||||
// }),
|
||||
experiences: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
id: new fields.StringField({ required: true }),
|
||||
|
|
@ -130,7 +103,7 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
|||
levelData: new fields.SchemaField({
|
||||
currentLevel: new fields.NumberField({ initial: 1, integer: true }),
|
||||
changedLevel: new fields.NumberField({ initial: 1, integer: true }),
|
||||
levelups: new MappingField(
|
||||
levelups: new fields.TypedObjectField(
|
||||
new fields.SchemaField({
|
||||
level: new fields.NumberField({ required: true, integer: true }),
|
||||
tier1: new fields.SchemaField({
|
||||
|
|
@ -389,21 +362,35 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
|||
|
||||
this.evasion = this.class?.system?.evasion ?? 0;
|
||||
// this.armor.value = this.activeArmor?.baseScore ?? 0;
|
||||
this.damageThresholds = this.class?.system?.damageThresholds ?? { minor: 0, major: 0, severe: 0 };
|
||||
this.damageThresholds = this.computeDamageThresholds();
|
||||
|
||||
this.applyLevels();
|
||||
this.applyEffects();
|
||||
}
|
||||
|
||||
computeDamageThresholds() {
|
||||
// TODO: missing weapon features and domain cards calculation
|
||||
if (!this.armor) {
|
||||
return {
|
||||
major: this.levelData.currentLevel,
|
||||
severe: this.levelData.currentLevel * 2
|
||||
};
|
||||
}
|
||||
const {
|
||||
baseThresholds: { major = 0, severe = 0 }
|
||||
} = this.armor.system;
|
||||
return {
|
||||
major: major + this.levelData.currentLevel,
|
||||
severe: severe + this.levelData.currentLevel
|
||||
};
|
||||
}
|
||||
|
||||
applyLevels() {
|
||||
let healthBonus = 0,
|
||||
stressBonus = 0,
|
||||
proficiencyBonus = 0,
|
||||
evasionBonus = 0,
|
||||
armorBonus = 0,
|
||||
minorThresholdBonus = 0,
|
||||
majorThresholdBonus = 0,
|
||||
severeThresholdBonus = 0;
|
||||
armorBonus = 0;
|
||||
let experienceBonuses = {};
|
||||
let advancementFirst = null,
|
||||
advancementSecond = null;
|
||||
|
|
@ -439,11 +426,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
|||
armorBonus += Object.keys(tierData.armorOrEvasionSlot).filter(
|
||||
x => tierData.armorOrEvasionSlot[x] === 'armor'
|
||||
).length;
|
||||
|
||||
majorThresholdBonus += Object.keys(tierData.majorDamageThreshold2).length * 2;
|
||||
severeThresholdBonus += Object.keys(tierData.severeDamageThreshold2).length * 2;
|
||||
severeThresholdBonus += Object.keys(tierData.severeDamageThreshold3).length * 3;
|
||||
severeThresholdBonus += Object.keys(tierData.severeDamageThreshold4).length * 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -456,9 +438,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
|||
max: this.armor ? this.armor.system.marks.max + armorBonus : 0,
|
||||
value: this.armor ? this.armor.system.marks.value : 0
|
||||
};
|
||||
this.damageThresholds.minor += minorThresholdBonus;
|
||||
this.damageThresholds.major += majorThresholdBonus;
|
||||
this.damageThresholds.severe += severeThresholdBonus;
|
||||
|
||||
this.experiences = this.experiences.map(x => ({ ...x, value: x.value + (experienceBonuses[x.id] ?? 0) }));
|
||||
|
||||
|
|
@ -495,20 +474,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
|||
this.domainData.maxLoadout = Math.min(this.domainData.maxLoadout + 1, 5);
|
||||
this.domainData.maxCards += 1;
|
||||
}
|
||||
|
||||
switch (tier) {
|
||||
case 'tier1':
|
||||
this.damageThresholds.severe += 2;
|
||||
break;
|
||||
case 'tier2':
|
||||
this.damageThresholds.major += 1;
|
||||
this.damageThresholds.severe += 3;
|
||||
break;
|
||||
case 'tier3':
|
||||
this.damageThresholds.major += 2;
|
||||
this.damageThresholds.severe += 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,6 @@ export default class DhpActor extends Actor {
|
|||
}
|
||||
|
||||
async npcRoll(modifier, shiftKey) {
|
||||
let nrDice = 1;
|
||||
let advantage = null;
|
||||
|
||||
const modifiers = [
|
||||
|
|
@ -84,7 +83,6 @@ export default class DhpActor extends Actor {
|
|||
});
|
||||
const result = await dialogClosed;
|
||||
|
||||
nrDice = result.nrDice;
|
||||
advantage = result.advantage;
|
||||
result.experiences.forEach(x =>
|
||||
modifiers.push({
|
||||
|
|
@ -95,13 +93,20 @@ export default class DhpActor extends Actor {
|
|||
);
|
||||
}
|
||||
|
||||
const roll = new Roll(
|
||||
`${nrDice}d20${advantage === true ? 'kh' : advantage === false ? 'kl' : ''} ${modifiers.map(x => `+ ${x.value}`).join(' ')}`
|
||||
const roll = Roll.create(
|
||||
`${advantage === true || advantage === false ? 2 : 1}d20${advantage === true ? 'kh' : advantage === false ? 'kl' : ''} ${modifiers.map(x => `+ ${x.value}`).join(' ')}`
|
||||
);
|
||||
let rollResult = await roll.evaluate();
|
||||
const diceResults = rollResult.dice.flatMap(x => x.results.flatMap(result => ({ value: result.result })));
|
||||
const dice = [];
|
||||
for (var i = 0; i < rollResult.terms.length; i++) {
|
||||
const term = rollResult.terms[i];
|
||||
if (term.faces) {
|
||||
dice.push({ type: `d${term.faces}`, rolls: term.results.map(x => ({ value: x.result })) });
|
||||
}
|
||||
}
|
||||
|
||||
return { roll, diceResults: diceResults, modifiers: modifiers };
|
||||
// There is Only ever one dice term here
|
||||
return { roll, dice: dice[0], modifiers, advantageState: advantage === true ? 1 : advantage === false ? 2 : 0 };
|
||||
}
|
||||
|
||||
async dualityRoll(modifier, shiftKey, bonusDamage = []) {
|
||||
|
|
@ -202,10 +207,9 @@ export default class DhpActor extends Actor {
|
|||
}
|
||||
|
||||
const hope = rollResult.dice[0].results[0].result;
|
||||
const advantage = advantageDice ? rollResult.dice[1].results[0].result : null;
|
||||
const disadvantage = disadvantageDice ? rollResult.dice[1].results[0].result : null;
|
||||
const fear =
|
||||
advantage || disadvantage ? rollResult.dice[2].results[0].result : rollResult.dice[1].results[0].result;
|
||||
const fear = rollResult.dice[1].results[0].result;
|
||||
const advantage = advantageDice ? rollResult.dice[2].results[0].result : null;
|
||||
const disadvantage = disadvantageDice ? rollResult.dice[2].results[0].result : null;
|
||||
|
||||
if (disadvantage) {
|
||||
rollResult = { ...rollResult, total: rollResult.total - Math.max(hope, disadvantage) };
|
||||
|
|
@ -245,14 +249,12 @@ export default class DhpActor extends Actor {
|
|||
};
|
||||
}
|
||||
|
||||
async damageRoll(damage, shiftKey) {
|
||||
async damageRoll(title, damage, targets, shiftKey) {
|
||||
let rollString = damage.value;
|
||||
let bonusDamage = damage.bonusDamage?.filter(x => x.initiallySelected) ?? [];
|
||||
if (!shiftKey) {
|
||||
const dialogClosed = new Promise((resolve, _) => {
|
||||
new DamageSelectionDialog(rollString, bonusDamage, this.system.resources.hope.value, resolve).render(
|
||||
true
|
||||
);
|
||||
new DamageSelectionDialog(rollString, bonusDamage, resolve).render(true);
|
||||
});
|
||||
const result = await dialogClosed;
|
||||
bonusDamage = result.bonusDamage;
|
||||
|
|
@ -274,23 +276,31 @@ export default class DhpActor extends Actor {
|
|||
for (var i = 0; i < rollResult.terms.length; i++) {
|
||||
const term = rollResult.terms[i];
|
||||
if (term.faces) {
|
||||
dice.push({ type: `d${term.faces}`, value: term.total });
|
||||
dice.push({ type: `d${term.faces}`, rolls: term.results.map(x => x.result) });
|
||||
} else if (term.operator) {
|
||||
} else if (term.number) {
|
||||
const operator = i === 0 ? '' : rollResult.terms[i - 1].operator;
|
||||
modifiers.push(`${operator}${term.number}`);
|
||||
modifiers.push({ value: term.number, operator: operator });
|
||||
}
|
||||
}
|
||||
|
||||
const cls = getDocumentClass('ChatMessage');
|
||||
const msg = new cls({
|
||||
type: 'damageRoll',
|
||||
user: game.user.id,
|
||||
content: await renderTemplate('systems/daggerheart/templates/chat/damage-roll.hbs', {
|
||||
sound: CONFIG.sounds.dice,
|
||||
system: {
|
||||
title: game.i18n.format('DAGGERHEART.Chat.DamageRoll.Title', { damage: title }),
|
||||
roll: rollString,
|
||||
damage: {
|
||||
total: rollResult.total,
|
||||
type: damage.type
|
||||
},
|
||||
dice: dice,
|
||||
modifiers: modifiers
|
||||
}),
|
||||
modifiers: modifiers,
|
||||
targets: targets
|
||||
},
|
||||
content: 'systems/daggerheart/templates/chat/damage-roll.hbs',
|
||||
rolls: [roll]
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -17,16 +17,21 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
|||
html.querySelectorAll('.roll-damage-button').forEach(element =>
|
||||
element.addEventListener('click', event => this.onRollDamage(event, data.message))
|
||||
);
|
||||
html.querySelectorAll('.target-container').forEach(element =>
|
||||
element.addEventListener('hover', hover(this.hoverTarget, this.unhoverTarget))
|
||||
); // ????
|
||||
// html.find('.target-container').mouseout(this.unhoverTarget);
|
||||
html.querySelectorAll('.damage-button').forEach(element => element.addEventListener('click', this.onDamage));
|
||||
html.querySelectorAll('.target-container').forEach(element => {
|
||||
element.addEventListener('mouseenter', this.hoverTarget);
|
||||
element.addEventListener('mouseleave', this.unhoverTarget);
|
||||
element.addEventListener('click', this.clickTarget);
|
||||
});
|
||||
html.querySelectorAll('.damage-button').forEach(element =>
|
||||
element.addEventListener('click', event => this.onDamage(event, data.message))
|
||||
);
|
||||
html.querySelectorAll('.healing-button').forEach(element => element.addEventListener('click', this.onHealing));
|
||||
html.querySelectorAll('.target-indicator').forEach(element =>
|
||||
element.addEventListener('click', this.onToggleTargets)
|
||||
);
|
||||
html.querySelectorAll('.advantage').forEach(element => element.hover(this.hoverAdvantage)); // ??
|
||||
html.querySelectorAll('.advantage').forEach(element =>
|
||||
element.addEventListener('mouseenter', this.hoverAdvantage)
|
||||
);
|
||||
html.querySelectorAll('.advantage').forEach(element =>
|
||||
element.addEventListener('click', event => this.selectAdvantage.bind(this)(event, data.message))
|
||||
);
|
||||
|
|
@ -46,31 +51,50 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
|||
|
||||
onRollDamage = async (event, message) => {
|
||||
event.stopPropagation();
|
||||
const actor = game.actors.get(message.system.origin);
|
||||
if (!actor || !game.user.isGM) return true;
|
||||
|
||||
await game.user.character.damageRoll(message.system.damage, event.shiftKey);
|
||||
await actor.damageRoll(
|
||||
message.system.title,
|
||||
message.system.damage,
|
||||
message.system.targets.filter(x => x.hit).map(x => ({ id: x.id, name: x.name, img: x.img })),
|
||||
event.shiftKey
|
||||
);
|
||||
};
|
||||
|
||||
hoverTarget = event => {
|
||||
event.stopPropagation();
|
||||
const token = canvas.tokens.get(event.currentTarget.dataset.token);
|
||||
if (!token.controlled) token._onHoverIn(event, { hoverOutOthers: true });
|
||||
if (!token?.controlled) token._onHoverIn(event, { hoverOutOthers: true });
|
||||
};
|
||||
|
||||
unhoverTarget = event => {
|
||||
const token = canvas.tokens.get(event.currentTarget.dataset.token);
|
||||
if (!token.controlled) token._onHoverOut(event);
|
||||
if (!token?.controlled) token._onHoverOut(event);
|
||||
};
|
||||
|
||||
onDamage = async event => {
|
||||
clickTarget = event => {
|
||||
event.stopPropagation();
|
||||
const damage = Number.parseInt(event.currentTarget.dataset.value);
|
||||
const targets = Array.from(game.user.targets);
|
||||
const token = canvas.tokens.get(event.currentTarget.dataset.token);
|
||||
if (!token) {
|
||||
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.AttackTargetDoesNotExist'));
|
||||
return;
|
||||
}
|
||||
|
||||
game.canvas.pan(token);
|
||||
};
|
||||
|
||||
onDamage = async (event, message) => {
|
||||
event.stopPropagation();
|
||||
const targets = event.currentTarget.dataset.targetHit
|
||||
? message.system.targets.map(target => game.canvas.tokens.get(target.id))
|
||||
: Array.from(game.user.targets);
|
||||
|
||||
if (targets.length === 0)
|
||||
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
||||
|
||||
for (var target of targets) {
|
||||
await target.actor.takeDamage(damage, event.currentTarget.dataset.type);
|
||||
await target.actor.takeDamage(message.system.damage.total, message.system.damage.type);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Chainmail Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_1/chainmail_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "heavy",
|
||||
"baseThresholds": {
|
||||
"major": 7,
|
||||
"severe": 15
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008741139,
|
||||
"modifiedTime": 1748028173861,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "s7PUmApOFX0YryDG",
|
||||
"sort": 100000,
|
||||
"_key": "!items!s7PUmApOFX0YryDG"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Full Plate Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_1/full_plate_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "veryHeavy",
|
||||
"baseThresholds": {
|
||||
"major": 8,
|
||||
"severe": 17
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008742116,
|
||||
"modifiedTime": 1748028187244,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "LLL9gflIUF8ZFkzZ",
|
||||
"sort": 300000,
|
||||
"_key": "!items!LLL9gflIUF8ZFkzZ"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Gambeson Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_1/gambeson_armor.png",
|
||||
"system": {
|
||||
"baseScore": 3,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "light",
|
||||
"baseThresholds": {
|
||||
"major": 5,
|
||||
"severe": 11
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008742848,
|
||||
"modifiedTime": 1748028147106,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "alp2w20UmD7jKXOL",
|
||||
"sort": 400000,
|
||||
"_key": "!items!alp2w20UmD7jKXOL"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Leather Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_1/leather_armor.png",
|
||||
"system": {
|
||||
"baseScore": 3,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "",
|
||||
"baseThresholds": {
|
||||
"major": 6,
|
||||
"severe": 13
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008743698,
|
||||
"modifiedTime": 1748028160837,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "QMCh4ooGamb9oIGz",
|
||||
"sort": 200000,
|
||||
"_key": "!items!QMCh4ooGamb9oIGz"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Elundrian Chain Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/elundrian_chain_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "warded",
|
||||
"baseThresholds": {
|
||||
"major": 9,
|
||||
"severe": 21
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008765138,
|
||||
"modifiedTime": 1748028270334,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "ED8RhELKD9Pgnxgb",
|
||||
"sort": 100000,
|
||||
"_key": "!items!ED8RhELKD9Pgnxgb"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Harrowbone Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/harrowbone_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "resistant",
|
||||
"baseThresholds": {
|
||||
"major": 9,
|
||||
"severe": 21
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008765925,
|
||||
"modifiedTime": 1748028291278,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "Rl8dZeOnM3foAnth",
|
||||
"sort": 300000,
|
||||
"_key": "!items!Rl8dZeOnM3foAnth"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Improved Chainmail Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/improved_chainmail_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "heavy",
|
||||
"baseThresholds": {
|
||||
"major": 11,
|
||||
"severe": 24
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008766641,
|
||||
"modifiedTime": 1748028242876,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "kVpH1vvbdK5prOT5",
|
||||
"sort": 400000,
|
||||
"_key": "!items!kVpH1vvbdK5prOT5"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Improved Full Plate Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/improved_full_plate_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "veryHeavy",
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 28
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008767365,
|
||||
"modifiedTime": 1748028257241,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "E6asa0VMozd4zZbV",
|
||||
"sort": 500000,
|
||||
"_key": "!items!E6asa0VMozd4zZbV"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Improved Gambeson Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/improved_gambeson_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "<p><strong>Flexible</strong>: +1 to Evasion</p>",
|
||||
"feature": "light",
|
||||
"baseThresholds": {
|
||||
"major": 7,
|
||||
"severe": 16
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008768058,
|
||||
"modifiedTime": 1748028207851,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "ou0he5rHyi06dqO3",
|
||||
"sort": 600000,
|
||||
"_key": "!items!ou0he5rHyi06dqO3"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Improved Leather Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/improved_leather_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "",
|
||||
"baseThresholds": {
|
||||
"major": 9,
|
||||
"severe": 20
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008768829,
|
||||
"modifiedTime": 1748028224201,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "Lx94Q7Cl7wMwcl58",
|
||||
"sort": 700000,
|
||||
"_key": "!items!Lx94Q7Cl7wMwcl58"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Irontree Breastplate Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/irontree_breastplate_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "reinforced",
|
||||
"baseThresholds": {
|
||||
"major": 9,
|
||||
"severe": 20
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008769590,
|
||||
"modifiedTime": 1748028314955,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "4ImHfMsKbDzIFRNF",
|
||||
"sort": 800000,
|
||||
"_key": "!items!4ImHfMsKbDzIFRNF"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Rosewild Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/rosewild_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "hopeful",
|
||||
"baseThresholds": {
|
||||
"major": 11,
|
||||
"severe": 23
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008770268,
|
||||
"modifiedTime": 1748028371396,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "Cd0jzt1EBUiihcEQ",
|
||||
"sort": 900000,
|
||||
"_key": "!items!Cd0jzt1EBUiihcEQ"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Runetan Floating Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/runetan_floating_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "sharp",
|
||||
"baseThresholds": {
|
||||
"major": 9,
|
||||
"severe": 20
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008770925,
|
||||
"modifiedTime": 1748028339907,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "VUYFNEt6xNVHw9Yd",
|
||||
"sort": 1000000,
|
||||
"_key": "!items!VUYFNEt6xNVHw9Yd"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Tyris Soft Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_2/tyris_soft_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "quiet",
|
||||
"baseThresholds": {
|
||||
"major": 8,
|
||||
"severe": 18
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008771577,
|
||||
"modifiedTime": 1748028353841,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "0mqF7VUJvEUq2Umv",
|
||||
"sort": 200000,
|
||||
"_key": "!items!0mqF7VUJvEUq2Umv"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Chainmail Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/advanced_chainmail_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "heavy",
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 31
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008781137,
|
||||
"modifiedTime": 1748028510367,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "X5k7Stier3vxz4V0",
|
||||
"sort": 100000,
|
||||
"_key": "!items!X5k7Stier3vxz4V0"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Full Plate Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/advanced_full_plate_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "veryHeavy",
|
||||
"baseThresholds": {
|
||||
"major": 15,
|
||||
"severe": 35
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008781890,
|
||||
"modifiedTime": 1748028521542,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "IaHC7MKRdxUh1VqK",
|
||||
"sort": 300000,
|
||||
"_key": "!items!IaHC7MKRdxUh1VqK"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Gambeson Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/advanced_gambeson_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "light",
|
||||
"baseThresholds": {
|
||||
"major": 9,
|
||||
"severe": 23
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008782599,
|
||||
"modifiedTime": 1748028482409,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "45Ecu1PgMahpKbsN",
|
||||
"sort": 400000,
|
||||
"_key": "!items!45Ecu1PgMahpKbsN"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Leather Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/advanced_leather_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "",
|
||||
"baseThresholds": {
|
||||
"major": 11,
|
||||
"severe": 27
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008783273,
|
||||
"modifiedTime": 1748028496110,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "v6V96UsXSuyx1UV7",
|
||||
"sort": 500000,
|
||||
"_key": "!items!v6V96UsXSuyx1UV7"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Bellamoi Fine Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/bellamoi_fine_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "gilded",
|
||||
"baseThresholds": {
|
||||
"major": 11,
|
||||
"severe": 27
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008783947,
|
||||
"modifiedTime": 1748028554404,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "iBbmRG7cNXmqs4ga",
|
||||
"sort": 600000,
|
||||
"_key": "!items!iBbmRG7cNXmqs4ga"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Bladefare Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/bladefare_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "physical",
|
||||
"baseThresholds": {
|
||||
"major": 16,
|
||||
"severe": 39
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008784769,
|
||||
"modifiedTime": 1748028597257,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "YVfTNS1YD5sbKx3S",
|
||||
"sort": 700000,
|
||||
"_key": "!items!YVfTNS1YD5sbKx3S"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Dragonscale Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/dragonscale_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "impenetrable",
|
||||
"baseThresholds": {
|
||||
"major": 11,
|
||||
"severe": 27
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008785541,
|
||||
"modifiedTime": 1748028567955,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "XeoC52EJA4dV9l6W",
|
||||
"sort": 800000,
|
||||
"_key": "!items!XeoC52EJA4dV9l6W"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Monett's Cloak",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/monetts_cloak.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "magic",
|
||||
"baseThresholds": {
|
||||
"major": 16,
|
||||
"severe": 39
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008786218,
|
||||
"modifiedTime": 1748028612656,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "eqdjA5Z2eiu3w9z3",
|
||||
"sort": 900000,
|
||||
"_key": "!items!eqdjA5Z2eiu3w9z3"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Runes of Fortification",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/runes_of_fortification.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "painful",
|
||||
"baseThresholds": {
|
||||
"major": 17,
|
||||
"severe": 43
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008787018,
|
||||
"modifiedTime": 1748028627292,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "FBUDL6gCPh9HiOSu",
|
||||
"sort": 1000000,
|
||||
"_key": "!items!FBUDL6gCPh9HiOSu"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Spiked Plate Armor",
|
||||
"type": "armor",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_3/spiked_plate_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"description": "",
|
||||
"feature": "sharp",
|
||||
"baseThresholds": {
|
||||
"major": 10,
|
||||
"severe": 25
|
||||
}
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3,
|
||||
"JKaKJsbixtjbUa07": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748008787719,
|
||||
"modifiedTime": 1748028581947,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_id": "Enscb2W5lei9FGuc",
|
||||
"sort": 200000,
|
||||
"_key": "!items!Enscb2W5lei9FGuc"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Channeling Armor",
|
||||
"type": "armor",
|
||||
"_id": "oceDrXoEGSTQXeJd",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/channeling_armor.png",
|
||||
"system": {
|
||||
"baseScore": 5,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 36
|
||||
},
|
||||
"description": "",
|
||||
"feature": "channeling"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027971730,
|
||||
"modifiedTime": 1748027988576,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!oceDrXoEGSTQXeJd"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Dunamis Silkchain",
|
||||
"type": "armor",
|
||||
"_id": "ffIEaWPRHLlWy1Ft",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/dunamis_silkchain.png",
|
||||
"system": {
|
||||
"baseScore": 7,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 36
|
||||
},
|
||||
"description": "",
|
||||
"feature": "timeslowing"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027943461,
|
||||
"modifiedTime": 1748027965045,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!ffIEaWPRHLlWy1Ft"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Emberwoven Armor",
|
||||
"type": "armor",
|
||||
"_id": "8YhysA01kwSSX8Vg",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/emberwoven_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 36
|
||||
},
|
||||
"description": "",
|
||||
"feature": "burning"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027998531,
|
||||
"modifiedTime": 1748028013331,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!8YhysA01kwSSX8Vg"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Full Fortified Armor",
|
||||
"type": "armor",
|
||||
"_id": "Zk0WWk1WTc5X4DSv",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/full_fortified_armor.png",
|
||||
"system": {
|
||||
"baseScore": 4,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 15,
|
||||
"severe": 40
|
||||
},
|
||||
"description": "",
|
||||
"feature": ""
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748028024206,
|
||||
"modifiedTime": 1748028050721,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!Zk0WWk1WTc5X4DSv"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Legendary Chainmail Armor",
|
||||
"type": "armor",
|
||||
"_id": "CiH20oR05hKNUdp3",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/legendary_chainmail_armor.png",
|
||||
"system": {
|
||||
"baseScore": 7,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 15,
|
||||
"severe": 40
|
||||
},
|
||||
"description": "",
|
||||
"feature": "heavy"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027874542,
|
||||
"modifiedTime": 1748027898156,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!CiH20oR05hKNUdp3"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Legendary Full Plate Armor",
|
||||
"type": "armor",
|
||||
"_id": "h172qCAmBNvPhE25",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/legendary_full_plate_armor.png",
|
||||
"system": {
|
||||
"baseScore": 7,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 17,
|
||||
"severe": 44
|
||||
},
|
||||
"description": "",
|
||||
"feature": "veryHeavy"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027908657,
|
||||
"modifiedTime": 1748027926684,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!h172qCAmBNvPhE25"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Legendary Gambeson Armor",
|
||||
"type": "armor",
|
||||
"_id": "CJLU4txFc0QYJF7G",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/legendary_gambeson_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 11,
|
||||
"severe": 32
|
||||
},
|
||||
"description": "",
|
||||
"feature": ""
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027753507,
|
||||
"modifiedTime": 1748027822574,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!CJLU4txFc0QYJF7G"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Legendary Leather Armor",
|
||||
"type": "armor",
|
||||
"_id": "XguKW7nNTCOqyWRw",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/legendary_leather_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 36
|
||||
},
|
||||
"description": "",
|
||||
"feature": ""
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748027838790,
|
||||
"modifiedTime": 1748027856107,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!XguKW7nNTCOqyWRw"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Savior Chainmail",
|
||||
"type": "armor",
|
||||
"_id": "ixcNkPjIPpLgPuaA",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/savior_chainmail.png",
|
||||
"system": {
|
||||
"baseScore": 8,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 18,
|
||||
"severe": 48
|
||||
},
|
||||
"description": "",
|
||||
"feature": "difficult"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748028096316,
|
||||
"modifiedTime": 1748028114965,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!ixcNkPjIPpLgPuaA"
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "Veritas Oal Armor",
|
||||
"type": "armor",
|
||||
"_id": "QM9sfBKRcrKXZXHV",
|
||||
"img": "systems/daggerheart/assets/icons/armor/tier_4/veritas_opal_armor.png",
|
||||
"system": {
|
||||
"baseScore": 6,
|
||||
"marks": {
|
||||
"max": 6,
|
||||
"value": 0
|
||||
},
|
||||
"baseThresholds": {
|
||||
"major": 13,
|
||||
"severe": 36
|
||||
},
|
||||
"description": "",
|
||||
"feature": "truthseeking"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"ei8OkswTzyDp4IGC": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1748028069751,
|
||||
"modifiedTime": 1748028084978,
|
||||
"lastModifiedBy": "ei8OkswTzyDp4IGC"
|
||||
},
|
||||
"_key": "!items!QM9sfBKRcrKXZXHV"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Arcane Gauntlets",
|
||||
"type": "weapon",
|
||||
"_id": "YZ6rEX9nDsMy4aSK",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_arcane_gauntlets.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+9",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988845243,
|
||||
"modifiedTime": 1747988860214,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!YZ6rEX9nDsMy4aSK"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Battleaxe",
|
||||
"type": "weapon",
|
||||
"_id": "dKl2EXaTKUS4eH2m",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_battleaxe.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987617406,
|
||||
"modifiedTime": 1747987634618,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!dKl2EXaTKUS4eH2m"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Broadsword",
|
||||
"type": "weapon",
|
||||
"_id": "AG91AzjFmKwBELst",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_broadsword.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+6",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "reliable"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987557617,
|
||||
"modifiedTime": 1747987580626,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!AG91AzjFmKwBELst"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Crossbow",
|
||||
"type": "weapon",
|
||||
"_id": "SxWOgH5BUgR8bmcZ",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_crossbow.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "far",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988153303,
|
||||
"modifiedTime": 1747988178060,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!SxWOgH5BUgR8bmcZ"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Cutlass",
|
||||
"type": "weapon",
|
||||
"_id": "ANmFKsNEmAoSC9cI",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_cutlass.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "presence",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987908578,
|
||||
"modifiedTime": 1747987922978,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!ANmFKsNEmAoSC9cI"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Dagger",
|
||||
"type": "weapon",
|
||||
"_id": "t9LLpnTQ1uw1agjV",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_dagger.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987854428,
|
||||
"modifiedTime": 1747987874248,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!t9LLpnTQ1uw1agjV"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Dualstaff",
|
||||
"type": "weapon",
|
||||
"_id": "YB2IqevpBAsFAGGH",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_dualstaff.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+9",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "instinct",
|
||||
"range": "far",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989263143,
|
||||
"modifiedTime": 1747989288909,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!YB2IqevpBAsFAGGH"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Glowing Rings",
|
||||
"type": "weapon",
|
||||
"_id": "9jpVSmzYpqXBK8NA",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_glowing_rings.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+8",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "veryClose",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988897863,
|
||||
"modifiedTime": 1747988913363,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!9jpVSmzYpqXBK8NA"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Greatstaff",
|
||||
"type": "weapon",
|
||||
"_id": "adq1OwOknvfhkmEc",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_greatstaff.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+6",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "knowledge",
|
||||
"range": "veryFar",
|
||||
"burden": "twoHanded",
|
||||
"feature": "powerful"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989350920,
|
||||
"modifiedTime": 1747989369138,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!adq1OwOknvfhkmEc"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Greatsword",
|
||||
"type": "weapon",
|
||||
"_id": "TVsDORHfXs4ogW6w",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_greatsword.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded",
|
||||
"feature": "massive"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987646690,
|
||||
"modifiedTime": 1747987668738,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!TVsDORHfXs4ogW6w"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Halberd",
|
||||
"type": "weapon",
|
||||
"_id": "ySK1c9H0384D2Osx",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_halberd.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+8",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "veryClose",
|
||||
"burden": "twoHanded",
|
||||
"feature": "cumbersome"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988002843,
|
||||
"modifiedTime": 1747988024433,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!ySK1c9H0384D2Osx"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Hallowed Axe",
|
||||
"type": "weapon",
|
||||
"_id": "Dj2Mepa7VnRchju1",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_hallowed_axe.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988871282,
|
||||
"modifiedTime": 1747988887363,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!Dj2Mepa7VnRchju1"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Hand Runes",
|
||||
"type": "weapon",
|
||||
"_id": "aAljOewyWfbMU1mQ",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_hand_runes.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+6",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "instinct",
|
||||
"range": "veryClose",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988922902,
|
||||
"modifiedTime": 1747988940731,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!aAljOewyWfbMU1mQ"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Longbow",
|
||||
"type": "weapon",
|
||||
"_id": "BfKjIK0A9mDVWntg",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_longbow.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "veryFar",
|
||||
"burden": "twoHanded",
|
||||
"feature": "cumbersome"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988185736,
|
||||
"modifiedTime": 1747988212515,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!BfKjIK0A9mDVWntg"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Longsword",
|
||||
"type": "weapon",
|
||||
"_id": "HnEZjiBt4lNAbbZj",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_longsword.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987589599,
|
||||
"modifiedTime": 1747987606154,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!HnEZjiBt4lNAbbZj"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Mace",
|
||||
"type": "weapon",
|
||||
"_id": "esocQdA22XWUkQ8n",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_mace.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987678478,
|
||||
"modifiedTime": 1747987694119,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!esocQdA22XWUkQ8n"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Quarterstaff",
|
||||
"type": "weapon",
|
||||
"_id": "cFmDMl0bFFK8XKvt",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_quarterstaff.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "instinct",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987881903,
|
||||
"modifiedTime": 1747987898698,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!cFmDMl0bFFK8XKvt"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Rapier",
|
||||
"type": "weapon",
|
||||
"_id": "xsE7LlyCxySE1cgG",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_rapier.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "presence",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "quick"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987967108,
|
||||
"modifiedTime": 1747987992444,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!xsE7LlyCxySE1cgG"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Returning Blade",
|
||||
"type": "weapon",
|
||||
"_id": "7Npd8JLIrQ6JmmsW",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_returning_blade.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+6",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "close",
|
||||
"burden": "oneHanded",
|
||||
"feature": "retrieve"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988985388,
|
||||
"modifiedTime": 1747989013062,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!7Npd8JLIrQ6JmmsW"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Scepter",
|
||||
"type": "weapon",
|
||||
"_id": "gWN2ujNDkD53yhhc",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_scepter.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+6",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "presence",
|
||||
"range": "far",
|
||||
"burden": "twoHanded",
|
||||
"feature": "versatile"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989299631,
|
||||
"modifiedTime": 1747989316089,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!gWN2ujNDkD53yhhc"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Shortbow",
|
||||
"type": "weapon",
|
||||
"_id": "xjiJpCeCDNLMqNbp",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_shortbow.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "far",
|
||||
"burden": "twoHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988105894,
|
||||
"modifiedTime": 1747988124440,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!xjiJpCeCDNLMqNbp"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Shortstaff",
|
||||
"type": "weapon",
|
||||
"_id": "KfPfygzU4zj7YUby",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_shortstaff.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "instinct",
|
||||
"range": "close",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989233909,
|
||||
"modifiedTime": 1747989252391,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!KfPfygzU4zj7YUby"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Spear",
|
||||
"type": "weapon",
|
||||
"_id": "6vBnRFRofNcR3ch6",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_spear.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+8",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "veryClose",
|
||||
"burden": "twoHanded",
|
||||
"feature": "cumbersome"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988071381,
|
||||
"modifiedTime": 1747988089008,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!6vBnRFRofNcR3ch6"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "Advanced Wand",
|
||||
"type": "weapon",
|
||||
"_id": "1nqyLMdvFE8WOMt6",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/advanced_wand.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "knowledge",
|
||||
"range": "far",
|
||||
"burden": "oneHanded"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989327277,
|
||||
"modifiedTime": 1747989342340,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!1nqyLMdvFE8WOMt6"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Advanced Warhammer",
|
||||
"type": "weapon",
|
||||
"_id": "Q7hmQuxzlU0wTZo5",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/advanced_warhammer.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d12+9",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded",
|
||||
"feature": "heavy"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747987705689,
|
||||
"modifiedTime": 1747987733833,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!Q7hmQuxzlU0wTZo5"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Axe of Fortunis",
|
||||
"type": "weapon",
|
||||
"_id": "rdtbKI6PpOlJv24z",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/axe_of_fortunis.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+8",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded",
|
||||
"feature": "lucky"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989384191,
|
||||
"modifiedTime": 1747989403391,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!rdtbKI6PpOlJv24z"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Black Powder Revolver",
|
||||
"type": "weapon",
|
||||
"_id": "i77P3DNvdgrJmrgy",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/black_powder_revolver.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+8",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "far",
|
||||
"burden": "oneHanded",
|
||||
"feature": "reloading"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988751494,
|
||||
"modifiedTime": 1747988767956,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!i77P3DNvdgrJmrgy"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Blessed Anlace",
|
||||
"type": "weapon",
|
||||
"_id": "593VRjaHGyqLtxqu",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/blessed_anlace.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+6",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "instinct",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "healing"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989418576,
|
||||
"modifiedTime": 1747989444239,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!593VRjaHGyqLtxqu"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Bravesword",
|
||||
"type": "weapon",
|
||||
"_id": "L38wCuX6EXSyhrQ2",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/bravesword.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d12+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded",
|
||||
"feature": "barrier"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988294215,
|
||||
"modifiedTime": 1747988377212,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!L38wCuX6EXSyhrQ2"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Double Flail",
|
||||
"type": "weapon",
|
||||
"_id": "9Ov0VMRJ0NFfyuul",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/double_flail.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+8",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "veryClose",
|
||||
"burden": "twoHanded",
|
||||
"feature": "powerful"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988655918,
|
||||
"modifiedTime": 1747988705389,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!9Ov0VMRJ0NFfyuul"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Firestaff",
|
||||
"type": "weapon",
|
||||
"_id": "AlnfhwnIlFsETzMs",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/firestaff.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "instinct",
|
||||
"range": "far",
|
||||
"burden": "twoHanded",
|
||||
"feature": "burn"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989647918,
|
||||
"modifiedTime": 1747989673619,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!AlnfhwnIlFsETzMs"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Flickerfly Blade",
|
||||
"type": "weapon",
|
||||
"_id": "tQBXeberaULAyDvH",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/flickerfly_blade.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d8+5",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "sheltering"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988227660,
|
||||
"modifiedTime": 1747988260944,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!tQBXeberaULAyDvH"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Ghostblade",
|
||||
"type": "weapon",
|
||||
"_id": "x62U2X6CsgsXTCQm",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/ghostblade.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "presence",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "otherwordly"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989458690,
|
||||
"modifiedTime": 1747989482860,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!x62U2X6CsgsXTCQm"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Gilded Bow",
|
||||
"type": "weapon",
|
||||
"_id": "3AnkArj95kwR5xDm",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/guilded_bow.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "far",
|
||||
"burden": "twoHanded",
|
||||
"feature": "selfCorrecting"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989619963,
|
||||
"modifiedTime": 1747989637673,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!3AnkArj95kwR5xDm"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Hammer of Wrath",
|
||||
"type": "weapon",
|
||||
"_id": "MMYYguOmhoo4ytDI",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/hammer_of_wrath.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded",
|
||||
"feature": "devastating"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988406922,
|
||||
"modifiedTime": 1747988429894,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!MMYYguOmhoo4ytDI"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Ilmari's Rifle",
|
||||
"type": "weapon",
|
||||
"_id": "P6MDr1tDHB2rzA39",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/ilmaris_rifle.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+6",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "veryFar",
|
||||
"burden": "oneHanded",
|
||||
"feature": "reloading"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989731386,
|
||||
"modifiedTime": 1747989749201,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!P6MDr1tDHB2rzA39"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Labrys Axe",
|
||||
"type": "weapon",
|
||||
"_id": "zReTMjOxmSwDbrn9",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/labrys_axe.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "strength",
|
||||
"range": "melee",
|
||||
"burden": "twoHanded",
|
||||
"feature": "protective"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988447879,
|
||||
"modifiedTime": 1747988481507,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!zReTMjOxmSwDbrn9"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Mage Orb",
|
||||
"type": "weapon",
|
||||
"_id": "TUEydRo4XV3B7Lls",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/mage_orb.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+7",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "knowledge",
|
||||
"range": "far",
|
||||
"burden": "oneHanded",
|
||||
"feature": "powerful"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989683025,
|
||||
"modifiedTime": 1747989719601,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!TUEydRo4XV3B7Lls"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Meridian Cutlass",
|
||||
"type": "weapon",
|
||||
"_id": "jjjGt7Hf4IwMR2vc",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/meridian_cutlass.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+5",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "presence",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "doubleDuty"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988541196,
|
||||
"modifiedTime": 1747988582864,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!jjjGt7Hf4IwMR2vc"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Retractable Saber",
|
||||
"type": "weapon",
|
||||
"_id": "ckxwHZX8Mq0qjPn5",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/retractable_saber.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "presence",
|
||||
"range": "melee",
|
||||
"burden": "oneHanded",
|
||||
"feature": "retractable"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988614020,
|
||||
"modifiedTime": 1747988637545,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!ckxwHZX8Mq0qjPn5"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Runes of Ruination",
|
||||
"type": "weapon",
|
||||
"_id": "QyvqYtJtII34l00S",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/runes_of_ruination.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d20+4",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "knowledge",
|
||||
"range": "veryClose",
|
||||
"burden": "oneHanded",
|
||||
"feature": "painful"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989498106,
|
||||
"modifiedTime": 1747989524339,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!QyvqYtJtII34l00S"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Spiked Bow",
|
||||
"type": "weapon",
|
||||
"_id": "0FYRW7WAYmfb0QHt",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/spiked_bow.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d6+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "agility",
|
||||
"range": "veryFar",
|
||||
"burden": "twoHanded",
|
||||
"feature": "versatile"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988774732,
|
||||
"modifiedTime": 1747988791189,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!0FYRW7WAYmfb0QHt"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Talon Blades",
|
||||
"type": "weapon",
|
||||
"_id": "rKROT91BD6p7QJTJ",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/physical/talon_blades.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+7",
|
||||
"type": "physical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "finesse",
|
||||
"range": "close",
|
||||
"burden": "twoHanded",
|
||||
"feature": "brutal"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747988716459,
|
||||
"modifiedTime": 1747988739839,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!rKROT91BD6p7QJTJ"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name": "Widogast Pendant",
|
||||
"type": "weapon",
|
||||
"_id": "l0LaIyqLbbNnIlbQ",
|
||||
"img": "systems/daggerheart/assets/icons/weapons/primary/tier_3/magical/widogast_pendant.png",
|
||||
"system": {
|
||||
"active": false,
|
||||
"inventoryWeapon": null,
|
||||
"secondary": false,
|
||||
"damage": {
|
||||
"value": "d10+5",
|
||||
"type": "magical"
|
||||
},
|
||||
"quantity": 1,
|
||||
"description": "",
|
||||
"trait": "knowledge",
|
||||
"range": "close",
|
||||
"burden": "oneHanded",
|
||||
"feature": "timebender"
|
||||
},
|
||||
"effects": [],
|
||||
"folder": null,
|
||||
"sort": 0,
|
||||
"ownership": {
|
||||
"default": 0,
|
||||
"NqO2eQGMjrvUO6v9": 3
|
||||
},
|
||||
"flags": {},
|
||||
"_stats": {
|
||||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.344",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "0.0.1",
|
||||
"createdTime": 1747989579323,
|
||||
"modifiedTime": 1747989601802,
|
||||
"lastModifiedBy": "NqO2eQGMjrvUO6v9"
|
||||
},
|
||||
"_key": "!items!l0LaIyqLbbNnIlbQ"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue