mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-11 19:25:21 +01:00
Merged with main
This commit is contained in:
commit
2c6aabb97a
31 changed files with 175 additions and 122 deletions
15
lang/en.json
15
lang/en.json
|
|
@ -501,18 +501,21 @@
|
||||||
},
|
},
|
||||||
"takeLevelUp": "Finish Level Up",
|
"takeLevelUp": "Finish Level Up",
|
||||||
"tier2": {
|
"tier2": {
|
||||||
|
"name": "Tier 2",
|
||||||
"label": "Levels 2-4",
|
"label": "Levels 2-4",
|
||||||
"infoLabel": "At Level 2, gain an additional Experience at +2 and gain a +1 bonus to your Proficiency.",
|
"infoLabel": "At Level 2, gain an additional Experience at +2 and gain a +1 bonus to your Proficiency.",
|
||||||
"pretext": "Choose two options from the list below",
|
"pretext": "Choose two options from the list below",
|
||||||
"posttext": "Take an additional domain card of your level or lower from a domain you have access to."
|
"posttext": "Take an additional domain card of your level or lower from a domain you have access to."
|
||||||
},
|
},
|
||||||
"tier3": {
|
"tier3": {
|
||||||
|
"name": "Tier 3",
|
||||||
"label": "Levels 5-7",
|
"label": "Levels 5-7",
|
||||||
"infoLabel": "At Level 5, take an additional Experience and clear all marks on Character Traits.",
|
"infoLabel": "At Level 5, take an additional Experience and clear all marks on Character Traits.",
|
||||||
"pretext": "When you level up, record it on your character sheet, then choose two from the list below or any unmarked from the previous tier.",
|
"pretext": "When you level up, record it on your character sheet, then choose two from the list below or any unmarked from the previous tier.",
|
||||||
"posttext": "Take an additional domain card of your level or lower from a domain you have access to."
|
"posttext": "Take an additional domain card of your level or lower from a domain you have access to."
|
||||||
},
|
},
|
||||||
"tier4": {
|
"tier4": {
|
||||||
|
"name": "Tier 4",
|
||||||
"label": "Levels 8-10",
|
"label": "Levels 8-10",
|
||||||
"infoLabel": "At Level 8, take an additional Experience and clear all marks on Character Traits.",
|
"infoLabel": "At Level 8, take an additional Experience and clear all marks on Character Traits.",
|
||||||
"pretext": "When you level up, record it on your character sheet, then choose two from the list below or any unmarked from the previous tier.",
|
"pretext": "When you level up, record it on your character sheet, then choose two from the list below or any unmarked from the previous tier.",
|
||||||
|
|
@ -1026,6 +1029,12 @@
|
||||||
"selectType": "Select Action Type",
|
"selectType": "Select Action Type",
|
||||||
"selectAction": "Action Selection"
|
"selectAction": "Action Selection"
|
||||||
},
|
},
|
||||||
|
"TargetTypes": {
|
||||||
|
"any": "Any",
|
||||||
|
"friendly": "Friendly",
|
||||||
|
"hostile": "Hostile",
|
||||||
|
"self": "Self"
|
||||||
|
},
|
||||||
"TemplateTypes": {
|
"TemplateTypes": {
|
||||||
"circle": "Circle",
|
"circle": "Circle",
|
||||||
"cone": "Cone",
|
"cone": "Cone",
|
||||||
|
|
@ -1918,7 +1927,9 @@
|
||||||
"rules": "Rules",
|
"rules": "Rules",
|
||||||
"types": "Types",
|
"types": "Types",
|
||||||
"itemFeatures": "Item Features",
|
"itemFeatures": "Item Features",
|
||||||
"questions": "Questions"
|
"questions": "Questions",
|
||||||
|
"configuration": "Configuration",
|
||||||
|
"base": "Base"
|
||||||
},
|
},
|
||||||
"Tiers": {
|
"Tiers": {
|
||||||
"singular": "Tier",
|
"singular": "Tier",
|
||||||
|
|
@ -2028,6 +2039,8 @@
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"scalable": "Scalable",
|
"scalable": "Scalable",
|
||||||
"situationalBonus": "Situational Bonus",
|
"situationalBonus": "Situational Bonus",
|
||||||
|
"spent": "Spent",
|
||||||
|
"step": "Step",
|
||||||
"stress": "Stress",
|
"stress": "Stress",
|
||||||
"subclasses": "Subclasses",
|
"subclasses": "Subclasses",
|
||||||
"success": "Success",
|
"success": "Success",
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ export default class DHActionConfig extends DaggerheartSheet(ApplicationV2) {
|
||||||
group: 'primary',
|
group: 'primary',
|
||||||
id: 'base',
|
id: 'base',
|
||||||
icon: null,
|
icon: null,
|
||||||
label: 'Base'
|
label: 'DAGGERHEART.GENERAL.Tabs.base'
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
active: false,
|
active: false,
|
||||||
|
|
@ -74,7 +74,7 @@ export default class DHActionConfig extends DaggerheartSheet(ApplicationV2) {
|
||||||
group: 'primary',
|
group: 'primary',
|
||||||
id: 'config',
|
id: 'config',
|
||||||
icon: null,
|
icon: null,
|
||||||
label: 'Configuration'
|
label: 'DAGGERHEART.GENERAL.Tabs.configuration'
|
||||||
},
|
},
|
||||||
effect: {
|
effect: {
|
||||||
active: false,
|
active: false,
|
||||||
|
|
@ -82,7 +82,7 @@ export default class DHActionConfig extends DaggerheartSheet(ApplicationV2) {
|
||||||
group: 'primary',
|
group: 'primary',
|
||||||
id: 'effect',
|
id: 'effect',
|
||||||
icon: null,
|
icon: null,
|
||||||
label: 'Effect'
|
label: 'DAGGERHEART.GENERAL.Tabs.effects'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -232,7 +232,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
async _prepareLoadoutContext(context, _options) {
|
async _prepareLoadoutContext(context, _options) {
|
||||||
context.cardView = !game.user.getFlag(CONFIG.DH.id, CONFIG.DH.FLAGS.displayDomainCardsAsList);
|
context.cardView = game.user.getFlag(CONFIG.DH.id, CONFIG.DH.FLAGS.displayDomainCardsAsCard);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -722,8 +722,8 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
* @type {ApplicationClickAction}
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #toggleLoadoutView(_, button) {
|
static async #toggleLoadoutView(_, button) {
|
||||||
const newAbilityView = button.dataset.value !== 'true';
|
const newAbilityView = button.dataset.value === 'true';
|
||||||
await game.user.setFlag(CONFIG.DH.id, CONFIG.DH.FLAGS.displayDomainCardsAsList, newAbilityView);
|
await game.user.setFlag(CONFIG.DH.id, CONFIG.DH.FLAGS.displayDomainCardsAsCard, newAbilityView);
|
||||||
this.render();
|
this.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -455,7 +455,7 @@ export default function DHApplicationMixin(Base) {
|
||||||
options.push({
|
options.push({
|
||||||
name: 'DAGGERHEART.APPLICATIONS.ContextMenu.sendToChat',
|
name: 'DAGGERHEART.APPLICATIONS.ContextMenu.sendToChat',
|
||||||
icon: 'fa-solid fa-message',
|
icon: 'fa-solid fa-message',
|
||||||
callback: async target => (await getDocFromElement(target)).toChat(this.document.id)
|
callback: async target => (await getDocFromElement(target)).toChat(this.document.uuid)
|
||||||
});
|
});
|
||||||
|
|
||||||
if (deletable)
|
if (deletable)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
export const displayDomainCardsAsList = 'displayDomainCardsAsList';
|
export const displayDomainCardsAsCard = 'displayDomainCardsAsCard';
|
||||||
export const narrativeCountdown = {
|
export const narrativeCountdown = {
|
||||||
simple: 'countdown-narrative-simple',
|
simple: 'countdown-narrative-simple',
|
||||||
position: 'countdown-narrative-position'
|
position: 'countdown-narrative-position'
|
||||||
|
|
|
||||||
|
|
@ -90,22 +90,22 @@ export const rangeInclusion = {
|
||||||
export const otherTargetTypes = {
|
export const otherTargetTypes = {
|
||||||
friendly: {
|
friendly: {
|
||||||
id: 'friendly',
|
id: 'friendly',
|
||||||
label: 'Friendly'
|
label: 'DAGGERHEART.CONFIG.TargetTypes.friendly'
|
||||||
},
|
},
|
||||||
hostile: {
|
hostile: {
|
||||||
id: 'hostile',
|
id: 'hostile',
|
||||||
label: 'Hostile'
|
label: 'DAGGERHEART.CONFIG.TargetTypes.hostile'
|
||||||
},
|
},
|
||||||
any: {
|
any: {
|
||||||
id: 'any',
|
id: 'any',
|
||||||
label: 'Any'
|
label: 'DAGGERHEART.CONFIG.TargetTypes.any'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const targetTypes = {
|
export const targetTypes = {
|
||||||
self: {
|
self: {
|
||||||
id: 'self',
|
id: 'self',
|
||||||
label: 'Self'
|
label: 'DAGGERHEART.CONFIG.TargetTypes.self'
|
||||||
},
|
},
|
||||||
...otherTargetTypes
|
...otherTargetTypes
|
||||||
};
|
};
|
||||||
|
|
@ -587,17 +587,17 @@ export const abilityCosts = {
|
||||||
},
|
},
|
||||||
hope: {
|
hope: {
|
||||||
id: 'hope',
|
id: 'hope',
|
||||||
label: 'Hope',
|
label: 'DAGGERHEART.CONFIG.HealingType.hope.name',
|
||||||
group: 'TYPES.Actor.character'
|
group: 'TYPES.Actor.character'
|
||||||
},
|
},
|
||||||
armor: {
|
armor: {
|
||||||
id: 'armor',
|
id: 'armor',
|
||||||
label: 'Armor Slot',
|
label: 'DAGGERHEART.CONFIG.HealingType.armor.name',
|
||||||
group: 'TYPES.Actor.character'
|
group: 'TYPES.Actor.character'
|
||||||
},
|
},
|
||||||
fear: {
|
fear: {
|
||||||
id: 'fear',
|
id: 'fear',
|
||||||
label: 'Fear',
|
label: 'DAGGERHEART.CONFIG.HealingType.fear.name',
|
||||||
group: 'TYPES.Actor.adversary'
|
group: 'TYPES.Actor.adversary'
|
||||||
},
|
},
|
||||||
resource: itemAbilityCosts.resource
|
resource: itemAbilityCosts.resource
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
actionType: new fields.StringField({
|
actionType: new fields.StringField({
|
||||||
choices: CONFIG.DH.ITEM.actionTypes,
|
choices: CONFIG.DH.ITEM.actionTypes,
|
||||||
initial: 'action',
|
initial: 'action',
|
||||||
nullable: true
|
nullable: false,
|
||||||
|
required: true
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,8 @@ export default class CostField extends fields.ArrayField {
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static getRealCosts(costs) {
|
static getRealCosts(costs) {
|
||||||
const realCosts = costs?.length ? costs.filter(c => c.enabled) : [];
|
const cloneCosts = foundry.utils.deepClone(costs),
|
||||||
|
realCosts = cloneCosts?.length ? cloneCosts.filter(c => c.enabled) : [];
|
||||||
let mergedCosts = [];
|
let mergedCosts = [];
|
||||||
realCosts.forEach(c => {
|
realCosts.forEach(c => {
|
||||||
const getCost = Object.values(mergedCosts).find(gc => gc.key === c.key);
|
const getCost = Object.values(mergedCosts).find(gc => gc.key === c.key);
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,9 @@ export class DHActionDiceData extends foundry.abstract.DataModel {
|
||||||
multiplier: new fields.StringField({
|
multiplier: new fields.StringField({
|
||||||
choices: CONFIG.DH.GENERAL.multiplierTypes,
|
choices: CONFIG.DH.GENERAL.multiplierTypes,
|
||||||
initial: 'prof',
|
initial: 'prof',
|
||||||
label: 'DAGGERHEART.ACTIONS.Config.damage.multiplier'
|
label: 'DAGGERHEART.ACTIONS.Config.damage.multiplier',
|
||||||
|
nullable: false,
|
||||||
|
required: true
|
||||||
}),
|
}),
|
||||||
flatMultiplier: new fields.NumberField({
|
flatMultiplier: new fields.NumberField({
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
|
@ -186,7 +188,9 @@ export class DHActionDiceData extends foundry.abstract.DataModel {
|
||||||
dice: new fields.StringField({
|
dice: new fields.StringField({
|
||||||
choices: CONFIG.DH.GENERAL.diceTypes,
|
choices: CONFIG.DH.GENERAL.diceTypes,
|
||||||
initial: 'd6',
|
initial: 'd6',
|
||||||
label: 'DAGGERHEART.GENERAL.Dice.single'
|
label: 'DAGGERHEART.GENERAL.Dice.single',
|
||||||
|
nullable: false,
|
||||||
|
required: true
|
||||||
}),
|
}),
|
||||||
bonus: new fields.NumberField({ nullable: true, initial: null, label: 'DAGGERHEART.GENERAL.bonus' }),
|
bonus: new fields.NumberField({ nullable: true, initial: null, label: 'DAGGERHEART.GENERAL.bonus' }),
|
||||||
custom: new fields.SchemaField({
|
custom: new fields.SchemaField({
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,17 @@ export class DHActionRollData extends foundry.abstract.DataModel {
|
||||||
bonus: new fields.NumberField({ nullable: true, initial: null, integer: true }),
|
bonus: new fields.NumberField({ nullable: true, initial: null, integer: true }),
|
||||||
advState: new fields.StringField({
|
advState: new fields.StringField({
|
||||||
choices: CONFIG.DH.ACTIONS.advantageState,
|
choices: CONFIG.DH.ACTIONS.advantageState,
|
||||||
initial: 'neutral'
|
initial: 'neutral',
|
||||||
|
nullable: false,
|
||||||
|
required: true
|
||||||
}),
|
}),
|
||||||
diceRolling: new fields.SchemaField({
|
diceRolling: new fields.SchemaField({
|
||||||
multiplier: new fields.StringField({
|
multiplier: new fields.StringField({
|
||||||
choices: CONFIG.DH.GENERAL.diceSetNumbers,
|
choices: CONFIG.DH.GENERAL.diceSetNumbers,
|
||||||
initial: 'prof',
|
initial: 'prof',
|
||||||
label: 'DAGGERHEART.ACTIONS.RollField.diceRolling.multiplier'
|
label: 'DAGGERHEART.ACTIONS.RollField.diceRolling.multiplier',
|
||||||
|
nullable: false,
|
||||||
|
required: true
|
||||||
}),
|
}),
|
||||||
flatMultiplier: new fields.NumberField({
|
flatMultiplier: new fields.NumberField({
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
|
@ -31,7 +35,9 @@ export class DHActionRollData extends foundry.abstract.DataModel {
|
||||||
dice: new fields.StringField({
|
dice: new fields.StringField({
|
||||||
choices: CONFIG.DH.GENERAL.diceTypes,
|
choices: CONFIG.DH.GENERAL.diceTypes,
|
||||||
initial: CONFIG.DH.GENERAL.diceTypes.d6,
|
initial: CONFIG.DH.GENERAL.diceTypes.d6,
|
||||||
label: 'DAGGERHEART.ACTIONS.RollField.diceRolling.dice'
|
label: 'DAGGERHEART.ACTIONS.RollField.diceRolling.dice',
|
||||||
|
nullable: false,
|
||||||
|
required: true
|
||||||
}),
|
}),
|
||||||
compare: new fields.StringField({
|
compare: new fields.StringField({
|
||||||
choices: CONFIG.DH.ACTIONS.diceCompare,
|
choices: CONFIG.DH.ACTIONS.diceCompare,
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,9 @@ export default class SaveField extends fields.SchemaField {
|
||||||
difficulty: new fields.NumberField({ nullable: true, initial: null, integer: true, min: 0 }),
|
difficulty: new fields.NumberField({ nullable: true, initial: null, integer: true, min: 0 }),
|
||||||
damageMod: new fields.StringField({
|
damageMod: new fields.StringField({
|
||||||
initial: CONFIG.DH.ACTIONS.damageOnSave.none.id,
|
initial: CONFIG.DH.ACTIONS.damageOnSave.none.id,
|
||||||
choices: CONFIG.DH.ACTIONS.damageOnSave
|
choices: CONFIG.DH.ACTIONS.damageOnSave,
|
||||||
|
nullable: false,
|
||||||
|
required: true
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
super(saveFields, options, context);
|
super(saveFields, options, context);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ export default class TargetField extends fields.SchemaField {
|
||||||
type: new fields.StringField({
|
type: new fields.StringField({
|
||||||
choices: CONFIG.DH.GENERAL.targetTypes,
|
choices: CONFIG.DH.GENERAL.targetTypes,
|
||||||
initial: CONFIG.DH.GENERAL.targetTypes.any.id,
|
initial: CONFIG.DH.GENERAL.targetTypes.any.id,
|
||||||
nullable: true
|
nullable: true,
|
||||||
|
blank: true
|
||||||
}),
|
}),
|
||||||
amount: new fields.NumberField({ nullable: true, initial: null, integer: true, min: 0 })
|
amount: new fields.NumberField({ nullable: true, initial: null, integer: true, min: 0 })
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ export const defaultLevelTiers = {
|
||||||
tiers: {
|
tiers: {
|
||||||
2: {
|
2: {
|
||||||
tier: 2,
|
tier: 2,
|
||||||
name: 'Tier 2',
|
name: 'DAGGERHEART.APPLICATIONS.Levelup.tier2.name',
|
||||||
levels: {
|
levels: {
|
||||||
start: 2,
|
start: 2,
|
||||||
end: 4
|
end: 4
|
||||||
|
|
@ -232,7 +232,7 @@ export const defaultLevelTiers = {
|
||||||
},
|
},
|
||||||
3: {
|
3: {
|
||||||
tier: 3,
|
tier: 3,
|
||||||
name: 'Tier 3',
|
name: 'DAGGERHEART.APPLICATIONS.Levelup.tier3.name',
|
||||||
levels: {
|
levels: {
|
||||||
start: 5,
|
start: 5,
|
||||||
end: 7
|
end: 7
|
||||||
|
|
@ -313,7 +313,7 @@ export const defaultLevelTiers = {
|
||||||
},
|
},
|
||||||
4: {
|
4: {
|
||||||
tier: 4,
|
tier: 4,
|
||||||
name: 'Tier 4',
|
name: 'DAGGERHEART.APPLICATIONS.Levelup.tier4.name',
|
||||||
levels: {
|
levels: {
|
||||||
start: 8,
|
start: 8,
|
||||||
end: 10
|
end: 10
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ export class DhLevelup extends foundry.abstract.DataModel {
|
||||||
const subclassInTier = subclasses.some(x => x.tier === Number(tierKey));
|
const subclassInTier = subclasses.some(x => x.tier === Number(tierKey));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: tier.name,
|
name: game.i18n.localize(tier.name),
|
||||||
active: this.currentLevel >= Math.min(...tier.belongingLevels),
|
active: this.currentLevel >= Math.min(...tier.belongingLevels),
|
||||||
groups: Object.keys(tier.options).map(optionKey => {
|
groups: Object.keys(tier.options).map(optionKey => {
|
||||||
const option = tier.options[optionKey];
|
const option = tier.options[optionKey];
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,12 @@ export default function DhDualityRollEnricher(match, _options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDualityMessage(roll, flavor) {
|
function getDualityMessage(roll, flavor) {
|
||||||
const trait = roll.trait && abilities[roll.trait] ? game.i18n.localize(abilities[roll.trait].label) : null;
|
const trait = roll?.trait && abilities[roll.trait] ? game.i18n.localize(abilities[roll.trait].label) : null;
|
||||||
const label =
|
const label =
|
||||||
flavor ??
|
flavor ??
|
||||||
(roll.trait
|
(roll?.trait
|
||||||
? game.i18n.format('DAGGERHEART.GENERAL.rollWith', { roll: trait })
|
? game.i18n.format('DAGGERHEART.GENERAL.rollWith', { roll: trait })
|
||||||
: roll.reaction
|
: roll?.reaction
|
||||||
? game.i18n.localize('DAGGERHEART.GENERAL.reactionRoll')
|
? game.i18n.localize('DAGGERHEART.GENERAL.reactionRoll')
|
||||||
: game.i18n.localize('DAGGERHEART.GENERAL.duality'));
|
: game.i18n.localize('DAGGERHEART.GENERAL.duality'));
|
||||||
|
|
||||||
|
|
@ -22,9 +22,9 @@ function getDualityMessage(roll, flavor) {
|
||||||
? game.i18n.localize(abilities[roll.trait].label)
|
? game.i18n.localize(abilities[roll.trait].label)
|
||||||
: game.i18n.localize('DAGGERHEART.GENERAL.duality');
|
: game.i18n.localize('DAGGERHEART.GENERAL.duality');
|
||||||
|
|
||||||
const advantage = roll.advantage
|
const advantage = roll?.advantage
|
||||||
? CONFIG.DH.ACTIONS.advantageState.advantage.value
|
? CONFIG.DH.ACTIONS.advantageState.advantage.value
|
||||||
: roll.disadvantage
|
: roll?.disadvantage
|
||||||
? CONFIG.DH.ACTIONS.advantageState.disadvantage.value
|
? CONFIG.DH.ACTIONS.advantageState.disadvantage.value
|
||||||
: undefined;
|
: undefined;
|
||||||
const advantageLabel =
|
const advantageLabel =
|
||||||
|
|
@ -36,21 +36,21 @@ function getDualityMessage(roll, flavor) {
|
||||||
|
|
||||||
const dualityElement = document.createElement('span');
|
const dualityElement = document.createElement('span');
|
||||||
dualityElement.innerHTML = `
|
dualityElement.innerHTML = `
|
||||||
<button type="button" class="duality-roll-button${roll.inline ? ' inline' : ''}"
|
<button type="button" class="duality-roll-button${roll?.inline ? ' inline' : ''}"
|
||||||
data-title="${label}"
|
data-title="${label}"
|
||||||
data-label="${dataLabel}"
|
data-label="${dataLabel}"
|
||||||
data-reaction="${roll.reaction ? 'true' : 'false'}"
|
data-reaction="${roll?.reaction ? 'true' : 'false'}"
|
||||||
data-hope="${roll.hope ?? 'd12'}"
|
data-hope="${roll?.hope ?? 'd12'}"
|
||||||
data-fear="${roll.fear ?? 'd12'}"
|
data-fear="${roll?.fear ?? 'd12'}"
|
||||||
${advantage ? `data-advantage="${advantage}"` : ''}
|
${advantage ? `data-advantage="${advantage}"` : ''}
|
||||||
${roll.difficulty !== undefined ? `data-difficulty="${roll.difficulty}"` : ''}
|
${roll?.difficulty !== undefined ? `data-difficulty="${roll.difficulty}"` : ''}
|
||||||
${roll.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''}
|
${roll?.trait && abilities[roll.trait] ? `data-trait="${roll.trait}"` : ''}
|
||||||
${roll.advantage ? 'data-advantage="true"' : ''}
|
${roll?.advantage ? 'data-advantage="true"' : ''}
|
||||||
${roll.disadvantage ? 'data-disadvantage="true"' : ''}
|
${roll?.disadvantage ? 'data-disadvantage="true"' : ''}
|
||||||
>
|
>
|
||||||
${roll.reaction ? '<i class="fa-solid fa-reply"></i>' : '<i class="fa-solid fa-circle-half-stroke"></i>'}
|
${roll?.reaction ? '<i class="fa-solid fa-reply"></i>' : '<i class="fa-solid fa-circle-half-stroke"></i>'}
|
||||||
${label}
|
${label}
|
||||||
${!flavor && (roll.difficulty || advantageLabel) ? `(${[roll.difficulty, advantageLabel ? game.i18n.localize(`DAGGERHEART.GENERAL.${advantageLabel}.short`) : null].filter(x => x).join(' ')})` : ''}
|
${!flavor && (roll?.difficulty || advantageLabel) ? `(${[roll.difficulty, advantageLabel ? game.i18n.localize(`DAGGERHEART.GENERAL.${advantageLabel}.short`) : null].filter(x => x).join(' ')})` : ''}
|
||||||
</button>
|
</button>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -438,14 +438,14 @@
|
||||||
"_id": "UpFsnlbZkyvM2Ftv",
|
"_id": "UpFsnlbZkyvM2Ftv",
|
||||||
"img": "icons/magic/acid/projectile-smoke-glowing.webp",
|
"img": "icons/magic/acid/projectile-smoke-glowing.webp",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p>Make an attack against all targets in front of the Burrower within Close range. Targets the Burrower succeeds against take <strong>2d6</strong> physical damage and must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP and you gain a Fear.</p><p>@Template[type:inFront|range:c]</p>",
|
"description": "<p>Make an attack against all targets in front of the Burrower within Close range. Targets the Burrower succeeds against take <strong>2d6</strong> physical damage and must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP and you gain a Fear.</p><p>@Template[type:inFront|range:c]</p>",
|
||||||
"resource": null,
|
"resource": null,
|
||||||
"actions": {
|
"actions": {
|
||||||
"yd10HwK6Wa3OEvv2": {
|
"yd10HwK6Wa3OEvv2": {
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"_id": "yd10HwK6Wa3OEvv2",
|
"_id": "yd10HwK6Wa3OEvv2",
|
||||||
"systemPath": "actions",
|
"systemPath": "actions",
|
||||||
"description": "<p>Make an attack against all targets in front of the Burrower within Close range. Targets the Burrower succeeds against take <strong>2d6</strong> physical damage and must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP and you gain a Fear.</p><p>@Template[type:inFront|range:c]</p>",
|
"description": "<p>Make an attack against all targets in front of the Burrower within Close range. Targets the Burrower succeeds against take <strong>2d6</strong> physical damage and must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP and you gain a Fear.</p><p>@Template[type:inFront|range:c]</p>",
|
||||||
"chatDisplay": true,
|
"chatDisplay": true,
|
||||||
"actionType": "action",
|
"actionType": "action",
|
||||||
"cost": [],
|
"cost": [],
|
||||||
|
|
@ -557,11 +557,11 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "1.1.2",
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8",
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg",
|
||||||
"modifiedTime": 1754143653876
|
"modifiedTime": 1756510879809
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!89yAh30vaNQOALlz.UpFsnlbZkyvM2Ftv"
|
"_key": "!actors.items!89yAh30vaNQOALlz.UpFsnlbZkyvM2Ftv"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -269,14 +269,14 @@
|
||||||
"name": "Crushing Blows",
|
"name": "Crushing Blows",
|
||||||
"type": "feature",
|
"type": "feature",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p>When the Elemental makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
"description": "<p>When the Elemental makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
||||||
"resource": null,
|
"resource": null,
|
||||||
"actions": {
|
"actions": {
|
||||||
"0sXciTiPc30v8czv": {
|
"0sXciTiPc30v8czv": {
|
||||||
"type": "damage",
|
"type": "damage",
|
||||||
"_id": "0sXciTiPc30v8czv",
|
"_id": "0sXciTiPc30v8czv",
|
||||||
"systemPath": "actions",
|
"systemPath": "actions",
|
||||||
"description": "<p>When the Elemental makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
"description": "<p>When the Elemental makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
||||||
"chatDisplay": true,
|
"chatDisplay": true,
|
||||||
"actionType": "action",
|
"actionType": "action",
|
||||||
"cost": [],
|
"cost": [],
|
||||||
|
|
@ -342,12 +342,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "1.1.2",
|
||||||
"createdTime": 1754127683751,
|
"createdTime": 1754127683751,
|
||||||
"modifiedTime": 1754127795809,
|
"modifiedTime": 1756511006257,
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!dsfB3YhoL5SudvS2.NnCkXIuATO0s3tSR"
|
"_key": "!actors.items!dsfB3YhoL5SudvS2.NnCkXIuATO0s3tSR"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -275,14 +275,14 @@
|
||||||
"name": "Acidic Form",
|
"name": "Acidic Form",
|
||||||
"type": "feature",
|
"type": "feature",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
||||||
"resource": null,
|
"resource": null,
|
||||||
"actions": {
|
"actions": {
|
||||||
"gtT2oHSyZg9OHHJD": {
|
"gtT2oHSyZg9OHHJD": {
|
||||||
"type": "damage",
|
"type": "damage",
|
||||||
"_id": "gtT2oHSyZg9OHHJD",
|
"_id": "gtT2oHSyZg9OHHJD",
|
||||||
"systemPath": "actions",
|
"systemPath": "actions",
|
||||||
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
||||||
"chatDisplay": true,
|
"chatDisplay": true,
|
||||||
"actionType": "action",
|
"actionType": "action",
|
||||||
"cost": [],
|
"cost": [],
|
||||||
|
|
@ -348,12 +348,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "1.1.2",
|
||||||
"createdTime": 1754129153649,
|
"createdTime": 1754129153649,
|
||||||
"modifiedTime": 1754129204931,
|
"modifiedTime": 1756510982337,
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!6hbqmxDXFOzZJDk4.BQsVuuwFYByKwesR"
|
"_key": "!actors.items!6hbqmxDXFOzZJDk4.BQsVuuwFYByKwesR"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -110,19 +110,20 @@
|
||||||
"source": "Daggerheart SRD",
|
"source": "Daggerheart SRD",
|
||||||
"page": 95,
|
"page": 95,
|
||||||
"artist": ""
|
"artist": ""
|
||||||
}
|
},
|
||||||
|
"motivesAndTactics": "Hide in plain sight, preserve the forest, root down, swing branches"
|
||||||
},
|
},
|
||||||
"flags": {},
|
"flags": {},
|
||||||
"_stats": {
|
"_stats": {
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.347",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "1.0.5",
|
"systemVersion": "1.1.2",
|
||||||
"createdTime": 1753922784314,
|
"createdTime": 1753922784314,
|
||||||
"modifiedTime": 1755385515496,
|
"modifiedTime": 1757057641714,
|
||||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_id": "XK78QUfY8c8Go8Uv",
|
"_id": "XK78QUfY8c8Go8Uv",
|
||||||
"sort": 3400000,
|
"sort": 3400000,
|
||||||
|
|
|
||||||
|
|
@ -431,7 +431,7 @@
|
||||||
"_key": "!actors.items!3aAS2Qm3R6cgaYfE.tQgxiSS48TJ3X1Dl"
|
"_key": "!actors.items!3aAS2Qm3R6cgaYfE.tQgxiSS48TJ3X1Dl"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Avalance Roar",
|
"name": "Avalanche Roar",
|
||||||
"type": "feature",
|
"type": "feature",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p><strong>Spend a Fear</strong> to roar while within a cave and cause a cave-in. All targets within Close range must succeed on an Agility Reaction Roll (14) or take <strong>2d10</strong> physical damage. The rubble can be cleared with a Progress Countdown (8).</p><p>@Template[type:emanation|range:c]</p>",
|
"description": "<p><strong>Spend a Fear</strong> to roar while within a cave and cause a cave-in. All targets within Close range must succeed on an Agility Reaction Roll (14) or take <strong>2d10</strong> physical damage. The rubble can be cleared with a Progress Countdown (8).</p><p>@Template[type:emanation|range:c]</p>",
|
||||||
|
|
@ -535,12 +535,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.347",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1754085059319,
|
"createdTime": 1754085059319,
|
||||||
"modifiedTime": 1754143365810,
|
"modifiedTime": 1756256613353,
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8"
|
"lastModifiedBy": "CEZZA7TXd7uT8O2c"
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!3aAS2Qm3R6cgaYfE.9Z0i0uURfBMVIapJ"
|
"_key": "!actors.items!3aAS2Qm3R6cgaYfE.9Z0i0uURfBMVIapJ"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -229,14 +229,14 @@
|
||||||
"_id": "WpOh5kHHx7lcTvEY",
|
"_id": "WpOh5kHHx7lcTvEY",
|
||||||
"img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp",
|
"img": "icons/magic/acid/dissolve-drip-droplet-smoke.webp",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
||||||
"resource": null,
|
"resource": null,
|
||||||
"actions": {
|
"actions": {
|
||||||
"HfK0u0c7NRppuF1Q": {
|
"HfK0u0c7NRppuF1Q": {
|
||||||
"type": "damage",
|
"type": "damage",
|
||||||
"_id": "HfK0u0c7NRppuF1Q",
|
"_id": "HfK0u0c7NRppuF1Q",
|
||||||
"systemPath": "actions",
|
"systemPath": "actions",
|
||||||
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefi ts (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
"description": "<p>When the Ooze makes a successful attack, the target must mark an Armor Slot without receiving its benefits (they can still use armor to reduce the damage). If they can’t mark an Armor Slot, they must mark an additional HP.</p>",
|
||||||
"chatDisplay": true,
|
"chatDisplay": true,
|
||||||
"actionType": "action",
|
"actionType": "action",
|
||||||
"cost": [],
|
"cost": [],
|
||||||
|
|
@ -301,12 +301,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "1.1.2",
|
||||||
"createdTime": 1754055148507,
|
"createdTime": 1754055148507,
|
||||||
"modifiedTime": 1754145130460,
|
"modifiedTime": 1756510967769,
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!aLkLFuVoKz2NLoBK.WpOh5kHHx7lcTvEY"
|
"_key": "!actors.items!aLkLFuVoKz2NLoBK.WpOh5kHHx7lcTvEY"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -552,7 +552,7 @@
|
||||||
"_key": "!actors.items!UGPiPLJsPvMTSKEF.QV2ytK4b1VWF71OS"
|
"_key": "!actors.items!UGPiPLJsPvMTSKEF.QV2ytK4b1VWF71OS"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Avalance",
|
"name": "Avalanche",
|
||||||
"type": "feature",
|
"type": "feature",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p><strong>Spend a Fear</strong> to have the Dragon unleash a huge downfall of snow and ice, covering all other creatures within Far range. All targets within this area must succeed on an Instinct Reaction Roll or be buried in snow and rocks, becoming <em>Vulnerable</em> until they dig themselves out from the debris. For each PC that fails the reaction roll, you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>",
|
"description": "<p><strong>Spend a Fear</strong> to have the Dragon unleash a huge downfall of snow and ice, covering all other creatures within Far range. All targets within this area must succeed on an Instinct Reaction Roll or be buried in snow and rocks, becoming <em>Vulnerable</em> until they dig themselves out from the debris. For each PC that fails the reaction roll, you gain a Fear.</p><p>@Template[type:emanation|range:f]</p>",
|
||||||
|
|
@ -681,12 +681,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.347",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1754131703390,
|
"createdTime": 1754131703390,
|
||||||
"modifiedTime": 1754131790034,
|
"modifiedTime": 1756256581072,
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8"
|
"lastModifiedBy": "CEZZA7TXd7uT8O2c"
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!UGPiPLJsPvMTSKEF.CcRTxCDCJskiu3fI"
|
"_key": "!actors.items!UGPiPLJsPvMTSKEF.CcRTxCDCJskiu3fI"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@
|
||||||
"_key": "!actors.items!acMu9wJrMZZzLSTJ.cIAMenvMXHPTpOFn"
|
"_key": "!actors.items!acMu9wJrMZZzLSTJ.cIAMenvMXHPTpOFn"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Avalance",
|
"name": "Avalanche",
|
||||||
"type": "feature",
|
"type": "feature",
|
||||||
"system": {
|
"system": {
|
||||||
"description": "<p>Spend a Fear to carve the mountain with an icy torrent, causing an avalanche. All PCs in its path must succeed on an Agility or Strength Reaction Roll or be bowled over and carried down the mountain. A PC using rope, pitons, or other climbing gear gains advantage on this roll. Targets who fail are knocked down the mountain to Far range, take <strong>2d20</strong> physical damage, and must mark a Stress. Targets who succeed must mark a Stress. </p><section id=\"secret-3gM8fEJj1vD9W88k\" class=\"secret\"><p><em>How do the PCs try to weather the avalanche? What approach do the characters take to fi nd one another when their companions go hurtling down the mountainside?</em></p></section>",
|
"description": "<p>Spend a Fear to carve the mountain with an icy torrent, causing an avalanche. All PCs in its path must succeed on an Agility or Strength Reaction Roll or be bowled over and carried down the mountain. A PC using rope, pitons, or other climbing gear gains advantage on this roll. Targets who fail are knocked down the mountain to Far range, take <strong>2d20</strong> physical damage, and must mark a Stress. Targets who succeed must mark a Stress. </p><section id=\"secret-3gM8fEJj1vD9W88k\" class=\"secret\"><p><em>How do the PCs try to weather the avalanche? What approach do the characters take to fi nd one another when their companions go hurtling down the mountainside?</em></p></section>",
|
||||||
|
|
@ -257,12 +257,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.347",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1754217019442,
|
"createdTime": 1754217019442,
|
||||||
"modifiedTime": 1754217102897,
|
"modifiedTime": 1756256534443,
|
||||||
"lastModifiedBy": "MQSznptE5yLT7kj8"
|
"lastModifiedBy": "CEZZA7TXd7uT8O2c"
|
||||||
},
|
},
|
||||||
"_key": "!actors.items!acMu9wJrMZZzLSTJ.jkm03DXYYajsRk2j"
|
"_key": "!actors.items!acMu9wJrMZZzLSTJ.jkm03DXYYajsRk2j"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -110,13 +110,14 @@
|
||||||
"effects": [
|
"effects": [
|
||||||
{
|
{
|
||||||
"name": "Protective",
|
"name": "Protective",
|
||||||
"description": "Add your character's Tier to your Armor Score",
|
"description": "<p>Add the item's Tier to your Armor Score</p>",
|
||||||
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.armorScore",
|
"key": "system.armorScore",
|
||||||
"mode": 2,
|
"mode": 2,
|
||||||
"value": "ITEM.@system.tier"
|
"value": "ITEM.@system.tier",
|
||||||
|
"priority": null
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_id": "i5HfkF5aKQuUCTEG",
|
"_id": "i5HfkF5aKQuUCTEG",
|
||||||
|
|
@ -125,7 +126,12 @@
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
"combat": null
|
"combat": null,
|
||||||
|
"seconds": null,
|
||||||
|
"rounds": null,
|
||||||
|
"turns": null,
|
||||||
|
"startRound": null,
|
||||||
|
"startTurn": null
|
||||||
},
|
},
|
||||||
"origin": null,
|
"origin": null,
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
|
|
@ -137,12 +143,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1753794875150,
|
"createdTime": 1753794875150,
|
||||||
"modifiedTime": 1753794875150,
|
"modifiedTime": 1756682958806,
|
||||||
"lastModifiedBy": "FecEtPuoQh6MpjQ0"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!items.effects!hiEOGF2reabGLUoi.i5HfkF5aKQuUCTEG"
|
"_key": "!items.effects!hiEOGF2reabGLUoi.i5HfkF5aKQuUCTEG"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,13 +110,14 @@
|
||||||
"effects": [
|
"effects": [
|
||||||
{
|
{
|
||||||
"name": "Protective",
|
"name": "Protective",
|
||||||
"description": "Add your character's Tier to your Armor Score",
|
"description": "<p>Add the item's Tier to your Armor Score</p>",
|
||||||
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.armorScore",
|
"key": "system.armorScore",
|
||||||
"mode": 2,
|
"mode": 2,
|
||||||
"value": "ITEM.@system.tier"
|
"value": "ITEM.@system.tier",
|
||||||
|
"priority": null
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_id": "cXWSV50apzaNQkdA",
|
"_id": "cXWSV50apzaNQkdA",
|
||||||
|
|
@ -125,7 +126,12 @@
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
"combat": null
|
"combat": null,
|
||||||
|
"seconds": null,
|
||||||
|
"rounds": null,
|
||||||
|
"turns": null,
|
||||||
|
"startRound": null,
|
||||||
|
"startTurn": null
|
||||||
},
|
},
|
||||||
"origin": null,
|
"origin": null,
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
|
|
@ -137,12 +143,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1753794098464,
|
"createdTime": 1753794098464,
|
||||||
"modifiedTime": 1753794098464,
|
"modifiedTime": 1756682973559,
|
||||||
"lastModifiedBy": "FecEtPuoQh6MpjQ0"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!items.effects!DlinEBGZfIlvreO3.cXWSV50apzaNQkdA"
|
"_key": "!items.effects!DlinEBGZfIlvreO3.cXWSV50apzaNQkdA"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,13 +110,14 @@
|
||||||
"effects": [
|
"effects": [
|
||||||
{
|
{
|
||||||
"name": "Protective",
|
"name": "Protective",
|
||||||
"description": "Add your character's Tier to your Armor Score",
|
"description": "<p>Add the item's Tier to your Armor Score</p>",
|
||||||
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.armorScore",
|
"key": "system.armorScore",
|
||||||
"mode": 2,
|
"mode": 2,
|
||||||
"value": "ITEM.@system.tier"
|
"value": "ITEM.@system.tier",
|
||||||
|
"priority": null
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_id": "Z2p00q5h6x6seXys",
|
"_id": "Z2p00q5h6x6seXys",
|
||||||
|
|
@ -125,7 +126,12 @@
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
"combat": null
|
"combat": null,
|
||||||
|
"seconds": null,
|
||||||
|
"rounds": null,
|
||||||
|
"turns": null,
|
||||||
|
"startRound": null,
|
||||||
|
"startTurn": null
|
||||||
},
|
},
|
||||||
"origin": null,
|
"origin": null,
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
|
|
@ -137,12 +143,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1753796983285,
|
"createdTime": 1753796983285,
|
||||||
"modifiedTime": 1753796983285,
|
"modifiedTime": 1756682777682,
|
||||||
"lastModifiedBy": "FecEtPuoQh6MpjQ0"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!items.effects!A28WL9E2lJ3iLZHW.Z2p00q5h6x6seXys"
|
"_key": "!items.effects!A28WL9E2lJ3iLZHW.Z2p00q5h6x6seXys"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,13 +110,14 @@
|
||||||
"effects": [
|
"effects": [
|
||||||
{
|
{
|
||||||
"name": "Protective",
|
"name": "Protective",
|
||||||
"description": "Add your character's Tier to your Armor Score",
|
"description": "<p>Add the item's Tier to your Armor Score.</p>",
|
||||||
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
"img": "icons/skills/melee/shield-block-gray-orange.webp",
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
"key": "system.armorScore",
|
"key": "system.armorScore",
|
||||||
"mode": 2,
|
"mode": 2,
|
||||||
"value": "ITEM.@system.tier"
|
"value": "ITEM.@system.tier",
|
||||||
|
"priority": null
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_id": "M70a81e0Mg66jHRL",
|
"_id": "M70a81e0Mg66jHRL",
|
||||||
|
|
@ -125,7 +126,12 @@
|
||||||
"disabled": false,
|
"disabled": false,
|
||||||
"duration": {
|
"duration": {
|
||||||
"startTime": null,
|
"startTime": null,
|
||||||
"combat": null
|
"combat": null,
|
||||||
|
"seconds": null,
|
||||||
|
"rounds": null,
|
||||||
|
"turns": null,
|
||||||
|
"startRound": null,
|
||||||
|
"startTurn": null
|
||||||
},
|
},
|
||||||
"origin": null,
|
"origin": null,
|
||||||
"tint": "#ffffff",
|
"tint": "#ffffff",
|
||||||
|
|
@ -137,12 +143,12 @@
|
||||||
"compendiumSource": null,
|
"compendiumSource": null,
|
||||||
"duplicateSource": null,
|
"duplicateSource": null,
|
||||||
"exportSource": null,
|
"exportSource": null,
|
||||||
"coreVersion": "13.346",
|
"coreVersion": "13.348",
|
||||||
"systemId": "daggerheart",
|
"systemId": "daggerheart",
|
||||||
"systemVersion": "0.0.1",
|
"systemVersion": "0.0.1",
|
||||||
"createdTime": 1753794114980,
|
"createdTime": 1753794114980,
|
||||||
"modifiedTime": 1753794114980,
|
"modifiedTime": 1756682994216,
|
||||||
"lastModifiedBy": "FecEtPuoQh6MpjQ0"
|
"lastModifiedBy": "mdk78Q6pOyHh6aBg"
|
||||||
},
|
},
|
||||||
"_key": "!items.effects!mxwWKDujgsRcZWPT.M70a81e0Mg66jHRL"
|
"_key": "!items.effects!mxwWKDujgsRcZWPT.M70a81e0Mg66jHRL"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<fieldset class="one-column" data-key="cost">
|
<fieldset class="one-column" data-key="cost">
|
||||||
<legend>
|
<legend>
|
||||||
Cost
|
{{localize "DAGGERHEART.GENERAL.Cost.single"}}
|
||||||
<a><i class="fa-solid fa-plus icon-button" data-action="addElement"></i></a>
|
<a><i class="fa-solid fa-plus icon-button" data-action="addElement"></i></a>
|
||||||
</legend>
|
</legend>
|
||||||
{{#each source as |cost index|}}
|
{{#each source as |cost index|}}
|
||||||
|
|
@ -8,10 +8,10 @@
|
||||||
{{formField ../fields.consumeOnSuccess value=cost.consumeOnSuccess name=(concat "cost." index ".consumeOnSuccess") classes="checkbox" rootId=partId localize=true}}
|
{{formField ../fields.consumeOnSuccess value=cost.consumeOnSuccess name=(concat "cost." index ".consumeOnSuccess") classes="checkbox" rootId=partId localize=true}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="nest-inputs">
|
<div class="nest-inputs">
|
||||||
{{formField ../fields.scalable label="Scalable" value=cost.scalable name=(concat "cost." index ".scalable") classes="checkbox"}}
|
{{formField ../fields.scalable label="DAGGERHEART.GENERAL.scalable" value=cost.scalable name=(concat "cost." index ".scalable") classes="checkbox" localize=true}}
|
||||||
{{formField ../fields.key choices=(@root.disableOption index @root.costOptions ../source) label="Resource" value=cost.key name=(concat "cost." index ".key") localize=true blank=false}}
|
{{formField ../fields.key choices=(@root.disableOption index @root.costOptions ../source) label="DAGGERHEART.GENERAL.resource" value=cost.key name=(concat "cost." index ".key") localize=true blank=false}}
|
||||||
{{formField ../fields.value label="Amount" value=cost.value name=(concat "cost." index ".value")}}
|
{{formField ../fields.value label="DAGGERHEART.GENERAL.amount" value=cost.value name=(concat "cost." index ".value") localize=true}}
|
||||||
{{formField ../fields.step label="Step" value=cost.step name=(concat "cost." index ".step") disabled=(not cost.scalable)}}
|
{{formField ../fields.step label="DAGGERHEART.GENERAL.step" value=cost.step name=(concat "cost." index ".step") disabled=(not cost.scalable) localize=true}}
|
||||||
<a class="btn" data-tooltip="{{localize "CONTROLS.CommonDelete"}}" data-action="removeElement" data-index="{{index}}"><i class="fas fa-trash"></i></a>
|
<a class="btn" data-tooltip="{{localize "CONTROLS.CommonDelete"}}" data-action="removeElement" data-index="{{index}}"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
<fieldset class="one-column">
|
<fieldset class="one-column">
|
||||||
<legend>{{localize "DAGGERHEART.GENERAL.range"}}{{#if fields.target}} & {{localize "DAGGERHEART.GENERAL.Target.single"}}{{/if}}</legend>
|
<legend>{{localize "DAGGERHEART.GENERAL.range"}}{{#if fields.target}} & {{localize "DAGGERHEART.GENERAL.Target.single"}}{{/if}}</legend>
|
||||||
{{formField fields.range value=source.range label="Range" name=(concat path "range") localize=true}}
|
{{formField fields.range value=source.range label="DAGGERHEART.GENERAL.range" name=(concat path "range") localize=true}}
|
||||||
{{#if fields.target}}
|
{{#if fields.target}}
|
||||||
<div class="nest-inputs">
|
<div class="nest-inputs">
|
||||||
{{#if (and source.target.type (not (eq source.target.type 'self')))}}
|
{{#if (and source.target.type (not (eq source.target.type 'self')))}}
|
||||||
{{ formField fields.target.amount value=source.target.amount label="Amount" name=(concat path "target.amount") }}
|
{{ formField fields.target.amount value=source.target.amount label="DAGGERHEART.GENERAL.amount" name=(concat path "target.amount") localize=true}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{ formField fields.target.type value=source.target.type label="Target" name=(concat path "target.type") localize=true }}
|
{{ formField fields.target.type value=source.target.type label="DAGGERHEART.GENERAL.Target.single" name=(concat path "target.type") localize=true }}
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
{{formField fields.consumeOnSuccess value=source.consumeOnSuccess name="uses.consumeOnSuccess" classes="checkbox" rootId=partId localize=true}}
|
{{formField fields.consumeOnSuccess value=source.consumeOnSuccess name="uses.consumeOnSuccess" classes="checkbox" rootId=partId localize=true}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="nest-inputs">
|
<div class="nest-inputs">
|
||||||
{{formField fields.value label="Spent" value=source.value name="uses.value" rootId=partId}}
|
{{formField fields.value label="DAGGERHEART.GENERAL.spent" value=source.value name="uses.value" rootId=partId localize=true}}
|
||||||
{{formField fields.max label="Max" value=source.max name="uses.max" rootId=partId}}
|
{{formField fields.max label="DAGGERHEART.GENERAL.max" value=source.max name="uses.max" rootId=partId localize=true}}
|
||||||
</div>
|
</div>
|
||||||
{{formField fields.recovery label="Recovery" value=source.recovery name="uses.recovery" rootId=partId localize=true}}
|
{{formField fields.recovery label="DAGGERHEART.GENERAL.recovery" value=source.recovery name="uses.recovery" rootId=partId localize=true}}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
@ -146,7 +146,7 @@
|
||||||
<select class="roll-mode-select" name="selectedRollMode">
|
<select class="roll-mode-select" name="selectedRollMode">
|
||||||
{{selectOptions rollModes selected=selectedRollMode valueAttr="action" labelAttr="label" localize=true}}
|
{{selectOptions rollModes selected=selectedRollMode valueAttr="action" labelAttr="label" localize=true}}
|
||||||
</select>
|
</select>
|
||||||
<button class="sunmit-btn" data-action="submitRoll"{{#unless canRoll}} disabled{{/unless}}>
|
<button class="submit-btn" data-action="submitRoll"{{#unless canRoll}} disabled{{/unless}}>
|
||||||
<i class="fa-solid fa-dice"></i>
|
<i class="fa-solid fa-dice"></i>
|
||||||
<span class="label">
|
<span class="label">
|
||||||
{{#if @root.rollConfig.roll.difficulty}}
|
{{#if @root.rollConfig.roll.difficulty}}
|
||||||
|
|
@ -162,7 +162,7 @@
|
||||||
{{> 'systems/daggerheart/templates/dialogs/dice-roll/costSelection.hbs'}}
|
{{> 'systems/daggerheart/templates/dialogs/dice-roll/costSelection.hbs'}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="roll-dialog-controls">
|
<div class="roll-dialog-controls">
|
||||||
<button class="sunmit-btn" data-action="submitRoll"{{#unless canRoll}} disabled{{/unless}}>
|
<button class="submit-btn" data-action="submitRoll"{{#unless canRoll}} disabled{{/unless}}>
|
||||||
<span class="label">{{localize "DAGGERHEART.GENERAL.continue"}}</span>
|
<span class="label">{{localize "DAGGERHEART.GENERAL.continue"}}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue