mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-11 19:25:21 +01:00
Merge branch 'main' into feature/313-preset-measured-templates
This commit is contained in:
commit
7d2de14709
81 changed files with 611 additions and 446 deletions
13
lang/en.json
13
lang/en.json
|
|
@ -218,7 +218,8 @@
|
|||
},
|
||||
"viewLevelups": "View Levelups",
|
||||
"InvalidOldCharacterImportTitle": "Old Character Import",
|
||||
"InvalidOldCharacterImportText": "Character data exported prior to system version 1.1 will not generate a complete character. Do you wish to continue?"
|
||||
"InvalidOldCharacterImportText": "Character data exported prior to system version 1.1 will not generate a complete character. Do you wish to continue?",
|
||||
"cancelBeastform": "Cancel Beastform"
|
||||
},
|
||||
"Companion": {
|
||||
"FIELDS": {
|
||||
|
|
@ -318,8 +319,7 @@
|
|||
"toLoadout": "Send to Loadout",
|
||||
"toVault": "Send to Vault",
|
||||
"unequip": "Unequip",
|
||||
"useItem": "Use Item",
|
||||
"cancelBeastform": "Cancel Beastform"
|
||||
"useItem": "Use Item"
|
||||
},
|
||||
"Countdown": {
|
||||
"addCountdown": "Add Countdown",
|
||||
|
|
@ -2372,7 +2372,6 @@
|
|||
"maxDomains": { "label": "Max Class Domains", "hint": "Max domains you can set on a class" }
|
||||
},
|
||||
"currency": {
|
||||
"enabled": "Enable Overrides",
|
||||
"title": "Currency Overrides",
|
||||
"currencyName": "Currency Name",
|
||||
"coinName": "Coin Name",
|
||||
|
|
@ -2576,6 +2575,7 @@
|
|||
"evasionMin": "Evasion (Min)",
|
||||
"evasionMax": "Evasion (Max)",
|
||||
"subtype": "Subtype",
|
||||
"missing": "<i>Missing</i>",
|
||||
"folders": {
|
||||
"characters": "Characters",
|
||||
"adversaries": "Adversaries",
|
||||
|
|
@ -2629,7 +2629,7 @@
|
|||
"cardTooHighLevel": "The card is too high level!",
|
||||
"duplicateCard": "You cannot select the same card more than once.",
|
||||
"duplicateCharacter": "This actor is already registered in the party members list.",
|
||||
"onlyCharactersInPartySheet": "You can drag only characters to a party sheet.",
|
||||
"onlyCharactersInPartySheet": "You can only drag characters, companions and adverasries to the party sheet.",
|
||||
"notPrimary": "The weapon is not a primary weapon!",
|
||||
"notSecondary": "The weapon is not a secondary weapon!",
|
||||
"itemTooHighTier": "The item must be from Tier1",
|
||||
|
|
@ -2666,7 +2666,8 @@
|
|||
"subclassAlreadyLinked": "{name} is already a subclass in the class {class}. Remove it from there if you want it to be a subclass to this class.",
|
||||
"gmRequired": "This action requires an online GM",
|
||||
"gmOnly": "This can only be accessed by the GM",
|
||||
"noActorOwnership": "You do not have permissions for this character"
|
||||
"noActorOwnership": "You do not have permissions for this character",
|
||||
"documentIsMissing": "The {documentType} is missing from the world."
|
||||
},
|
||||
"Sidebar": {
|
||||
"daggerheartMenu": {
|
||||
|
|
|
|||
|
|
@ -178,10 +178,17 @@ export default class DhpDowntime extends HandlebarsApplicationMixin(ApplicationV
|
|||
}
|
||||
|
||||
static async takeDowntime() {
|
||||
const moves = Object.values(this.moveData).flatMap(category => {
|
||||
return Object.values(category.moves)
|
||||
.filter(x => x.selected)
|
||||
.flatMap(move => [...Array(move.selected).keys()].map(_ => move));
|
||||
const moves = Object.keys(this.moveData).flatMap(categoryKey => {
|
||||
const category = this.moveData[categoryKey];
|
||||
return Object.keys(category.moves)
|
||||
.filter(x => category.moves[x].selected)
|
||||
.flatMap(key => {
|
||||
const move = category.moves[key];
|
||||
return [...Array(move.selected).keys()].map(_ => ({
|
||||
...move,
|
||||
movePath: `${categoryKey}.moves.${key}`
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
const cls = getDocumentClass('ChatMessage');
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ export default class ImageSelectDialog extends HandlebarsApplicationMixin(Applic
|
|||
tag: 'form',
|
||||
classes: ['daggerheart', 'dialog', 'dh-style', 'image-select'],
|
||||
position: {
|
||||
width: 600,
|
||||
width: 612,
|
||||
height: 'auto'
|
||||
},
|
||||
window: {
|
||||
|
|
@ -30,7 +30,10 @@ export default class ImageSelectDialog extends HandlebarsApplicationMixin(Applic
|
|||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: { template: 'systems/daggerheart/templates/dialogs/image-select/main.hbs' },
|
||||
main: {
|
||||
template: 'systems/daggerheart/templates/dialogs/image-select/main.hbs',
|
||||
scrollable: ['.images-container']
|
||||
},
|
||||
footer: { template: 'systems/daggerheart/templates/dialogs/image-select/footer.hbs' }
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac
|
|||
CONFIG.DH.SETTINGS.gameSettings.appearance
|
||||
).showGenericStatusEffects;
|
||||
if (!useGeneric) {
|
||||
partContext.statuses = Object.values(CONFIG.DH.GENERAL.conditions).map(status => ({
|
||||
partContext.statuses = Object.values(CONFIG.DH.GENERAL.conditions()).map(status => ({
|
||||
value: status.id,
|
||||
label: game.i18n.localize(status.name)
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
toggleEquipItem: CharacterSheet.#toggleEquipItem,
|
||||
toggleResourceDice: CharacterSheet.#toggleResourceDice,
|
||||
handleResourceDice: CharacterSheet.#handleResourceDice,
|
||||
cancelBeastform: CharacterSheet.#cancelBeastform,
|
||||
useDowntime: this.useDowntime
|
||||
},
|
||||
window: {
|
||||
|
|
@ -209,24 +210,33 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
context.resources.stress.emptyPips =
|
||||
context.resources.stress.max < maxResource ? maxResource - context.resources.stress.max : 0;
|
||||
|
||||
context.inventory = {
|
||||
currency: {
|
||||
title: game.i18n.localize('DAGGERHEART.CONFIG.Gold.title'),
|
||||
coins: game.i18n.localize('DAGGERHEART.CONFIG.Gold.coins'),
|
||||
handfuls: game.i18n.localize('DAGGERHEART.CONFIG.Gold.handfuls'),
|
||||
bags: game.i18n.localize('DAGGERHEART.CONFIG.Gold.bags'),
|
||||
chests: game.i18n.localize('DAGGERHEART.CONFIG.Gold.chests')
|
||||
}
|
||||
};
|
||||
|
||||
const homebrewCurrency = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).currency;
|
||||
if (homebrewCurrency.enabled) {
|
||||
context.inventory.currency = homebrewCurrency;
|
||||
context.inventory = { currencies: {} };
|
||||
const { title, ...currencies } = game.settings.get(
|
||||
CONFIG.DH.id,
|
||||
CONFIG.DH.SETTINGS.gameSettings.Homebrew
|
||||
).currency;
|
||||
for (let key in currencies) {
|
||||
context.inventory.currencies[key] = {
|
||||
...currencies[key],
|
||||
field: context.systemFields.gold.fields[key],
|
||||
value: context.source.system.gold[key]
|
||||
};
|
||||
}
|
||||
// context.inventory = {
|
||||
// currency: {
|
||||
// title: game.i18n.localize('DAGGERHEART.CONFIG.Gold.title'),
|
||||
// coins: game.i18n.localize('DAGGERHEART.CONFIG.Gold.coins'),
|
||||
// handfuls: game.i18n.localize('DAGGERHEART.CONFIG.Gold.handfuls'),
|
||||
// bags: game.i18n.localize('DAGGERHEART.CONFIG.Gold.bags'),
|
||||
// chests: game.i18n.localize('DAGGERHEART.CONFIG.Gold.chests')
|
||||
// }
|
||||
// };
|
||||
|
||||
if (context.inventory.length === 0) {
|
||||
context.inventory = Array(1).fill(Array(5).fill([]));
|
||||
}
|
||||
context.beastformActive = this.document.effects.find(x => x.type === 'beastform');
|
||||
|
||||
// if (context.inventory.length === 0) {
|
||||
// context.inventory = Array(1).fill(Array(5).fill([]));
|
||||
// }
|
||||
|
||||
return context;
|
||||
}
|
||||
|
|
@ -848,6 +858,15 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
static async #cancelBeastform(_, target) {
|
||||
const item = await getDocFromElement(target);
|
||||
if (!item) return;
|
||||
game.system.api.fields.ActionFields.BeastformField.handleActiveTransformations.call(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the downtime application.
|
||||
* @type {ApplicationClickAction}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { socketEvent } from '../../../systemRegistration/socket.mjs';
|
|||
import GroupRollDialog from '../../dialogs/group-roll-dialog.mjs';
|
||||
import DhpActor from '../../../documents/actor.mjs';
|
||||
import DHItem from '../../../documents/item.mjs';
|
||||
import DhParty from '../../../data/actor/party.mjs';
|
||||
|
||||
export default class Party extends DHBaseActorSheet {
|
||||
constructor(options) {
|
||||
|
|
@ -19,7 +20,8 @@ export default class Party extends DHBaseActorSheet {
|
|||
static DEFAULT_OPTIONS = {
|
||||
classes: ['party'],
|
||||
position: {
|
||||
width: 550
|
||||
width: 550,
|
||||
height: 900,
|
||||
},
|
||||
window: {
|
||||
resizable: true
|
||||
|
|
@ -79,6 +81,9 @@ export default class Party extends DHBaseActorSheet {
|
|||
}
|
||||
};
|
||||
|
||||
static ALLOWED_ACTOR_TYPES = ['character', 'companion', 'adversary'];
|
||||
static DICE_ROLL_ACTOR_TYPES = ['character'];
|
||||
|
||||
async _onRender(context, options) {
|
||||
await super._onRender(context, options);
|
||||
this._createFilterMenus();
|
||||
|
|
@ -92,23 +97,17 @@ export default class Party extends DHBaseActorSheet {
|
|||
async _prepareContext(_options) {
|
||||
const context = await super._prepareContext(_options);
|
||||
|
||||
context.inventory = {
|
||||
currency: {
|
||||
title: game.i18n.localize('DAGGERHEART.CONFIG.Gold.title'),
|
||||
coins: game.i18n.localize('DAGGERHEART.CONFIG.Gold.coins'),
|
||||
handfuls: game.i18n.localize('DAGGERHEART.CONFIG.Gold.handfuls'),
|
||||
bags: game.i18n.localize('DAGGERHEART.CONFIG.Gold.bags'),
|
||||
chests: game.i18n.localize('DAGGERHEART.CONFIG.Gold.chests')
|
||||
}
|
||||
};
|
||||
|
||||
const homebrewCurrency = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).currency;
|
||||
if (homebrewCurrency.enabled) {
|
||||
context.inventory.currency = homebrewCurrency;
|
||||
}
|
||||
|
||||
if (context.inventory.length === 0) {
|
||||
context.inventory = Array(1).fill(Array(5).fill([]));
|
||||
context.inventory = { currencies: {} };
|
||||
const { title, ...currencies } = game.settings.get(
|
||||
CONFIG.DH.id,
|
||||
CONFIG.DH.SETTINGS.gameSettings.Homebrew
|
||||
).currency;
|
||||
for (let key in currencies) {
|
||||
context.inventory.currencies[key] = {
|
||||
...currencies[key],
|
||||
field: context.systemFields.gold.fields[key],
|
||||
value: context.source.system.gold[key]
|
||||
};
|
||||
}
|
||||
|
||||
return context;
|
||||
|
|
@ -277,13 +276,17 @@ export default class Party extends DHBaseActorSheet {
|
|||
}
|
||||
|
||||
static async #tagTeamRoll() {
|
||||
new game.system.api.applications.dialogs.TagTeamDialog(this.document.system.partyMembers).render({
|
||||
new game.system.api.applications.dialogs.TagTeamDialog(
|
||||
this.document.system.partyMembers.filter(x => Party.DICE_ROLL_ACTOR_TYPES.includes(x.type))
|
||||
).render({
|
||||
force: true
|
||||
});
|
||||
}
|
||||
|
||||
static async #groupRoll(params) {
|
||||
new GroupRollDialog(this.document.system.partyMembers).render({ force: true });
|
||||
static async #groupRoll(_params) {
|
||||
new GroupRollDialog(
|
||||
this.document.system.partyMembers.filter(x => Party.DICE_ROLL_ACTOR_TYPES.includes(x.type))
|
||||
).render({ force: true });
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -453,17 +456,17 @@ export default class Party extends DHBaseActorSheet {
|
|||
event.stopPropagation();
|
||||
|
||||
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event);
|
||||
const item = await foundry.utils.fromUuid(data.uuid);
|
||||
const document = await foundry.utils.fromUuid(data.uuid);
|
||||
|
||||
if (item instanceof DhpActor) {
|
||||
if (document instanceof DhpActor && Party.ALLOWED_ACTOR_TYPES.includes(document.type)) {
|
||||
const currentMembers = this.document.system.partyMembers.map(x => x.uuid);
|
||||
if (currentMembers.includes(data.uuid)) {
|
||||
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.duplicateCharacter'));
|
||||
}
|
||||
|
||||
await this.document.update({ 'system.partyMembers': [...currentMembers, item.uuid] });
|
||||
} else if (item instanceof DHItem) {
|
||||
this.document.createEmbeddedDocuments('Item', [item.toObject()]);
|
||||
await this.document.update({ 'system.partyMembers': [...currentMembers, document.uuid] });
|
||||
} else if (document instanceof DHItem) {
|
||||
this.document.createEmbeddedDocuments('Item', [document.toObject()]);
|
||||
} else {
|
||||
ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.onlyCharactersInPartySheet'));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -420,19 +420,6 @@ export default function DHApplicationMixin(Base) {
|
|||
];
|
||||
|
||||
if (usable) {
|
||||
options.unshift({
|
||||
name: 'DAGGERHEART.APPLICATIONS.ContextMenu.cancelBeastform',
|
||||
icon: 'fa-solid fa-ban',
|
||||
condition: target => {
|
||||
const doc = getDocFromElementSync(target);
|
||||
return doc && doc.system?.actions?.some(a => a.type === 'beastform');
|
||||
},
|
||||
callback: async target =>
|
||||
game.system.api.fields.ActionFields.BeastformField.handleActiveTransformations.call(
|
||||
await getDocFromElement(target)
|
||||
)
|
||||
});
|
||||
|
||||
options.unshift({
|
||||
name: 'DAGGERHEART.GENERAL.damage',
|
||||
icon: 'fa-solid fa-explosion',
|
||||
|
|
|
|||
|
|
@ -132,12 +132,21 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
|||
}
|
||||
|
||||
async actionUseButton(event, message) {
|
||||
const { moveIndex, actionIndex } = event.currentTarget.dataset;
|
||||
const { moveIndex, actionIndex, movePath } = event.currentTarget.dataset;
|
||||
const parent = await foundry.utils.fromUuid(message.system.actor);
|
||||
const actionType = message.system.moves[moveIndex].actions[actionIndex];
|
||||
const cls = game.system.api.models.actions.actionsTypes[actionType.type];
|
||||
const action = new cls(
|
||||
{ ...actionType, _id: foundry.utils.randomID(), name: game.i18n.localize(actionType.name) },
|
||||
{
|
||||
...actionType,
|
||||
_id: foundry.utils.randomID(),
|
||||
name: game.i18n.localize(actionType.name),
|
||||
originItem: {
|
||||
type: CONFIG.DH.ITEM.originItemType.restMove,
|
||||
itemPath: movePath,
|
||||
actionIndex: actionIndex
|
||||
}
|
||||
},
|
||||
{ parent: parent.system }
|
||||
);
|
||||
|
||||
|
|
@ -192,9 +201,18 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
|||
|
||||
async groupRollButton(event, message) {
|
||||
const path = event.currentTarget.dataset.path;
|
||||
const isLeader = path === 'leader';
|
||||
const { actor: actorData, trait } = foundry.utils.getProperty(message.system, path);
|
||||
const actor = game.actors.get(actorData._id);
|
||||
|
||||
if (!actor) {
|
||||
return ui.notifications.error(
|
||||
game.i18n.format('DAGGERHEART.UI.Notifications.documentIsMissing', {
|
||||
documentType: game.i18n.localize('TYPES.Actor.character')
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (!actor.testUserPermission(game.user, 'OWNER')) {
|
||||
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.UI.Notifications.noActorOwnership'));
|
||||
}
|
||||
|
|
@ -214,7 +232,7 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
|||
hasRoll: true,
|
||||
skips: {
|
||||
createMessage: true,
|
||||
resources: true
|
||||
resources: !isLeader
|
||||
}
|
||||
};
|
||||
const result = await actor.diceRoll({
|
||||
|
|
@ -225,6 +243,9 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
|||
})
|
||||
});
|
||||
|
||||
if (!result) return;
|
||||
await game.system.api.fields.ActionFields.CostField.execute.call({ actor }, result);
|
||||
|
||||
const newMessageData = foundry.utils.deepClone(message.system);
|
||||
foundry.utils.setProperty(newMessageData, `${path}.result`, result.roll);
|
||||
const renderData = { system: new game.system.api.models.chatMessages.config.groupRoll(newMessageData) };
|
||||
|
|
|
|||
|
|
@ -88,6 +88,17 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application
|
|||
this.toggleCollapsedPosition(undefined, !ui.sidebar.expanded);
|
||||
}
|
||||
|
||||
/** Returns countdown data filtered by ownership */
|
||||
#getCountdowns() {
|
||||
const setting = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns);
|
||||
const values = Object.entries(setting.countdowns).map(([key, countdown]) => ({
|
||||
key,
|
||||
countdown,
|
||||
ownership: DhCountdowns.#getPlayerOwnership(game.user, setting, countdown)
|
||||
}));
|
||||
return values.filter((v) => v.ownership !== CONST.DOCUMENT_OWNERSHIP_LEVELS.NONE);
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext(options) {
|
||||
const context = await super._prepareContext(options);
|
||||
|
|
@ -98,11 +109,7 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application
|
|||
CONFIG.DH.GENERAL.countdownAppMode.iconOnly;
|
||||
|
||||
const setting = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns);
|
||||
context.countdowns = Object.keys(setting.countdowns).reduce((acc, key) => {
|
||||
const countdown = setting.countdowns[key];
|
||||
const ownership = DhCountdowns.#getPlayerOwnership(game.user, setting, countdown);
|
||||
if (ownership === CONST.DOCUMENT_OWNERSHIP_LEVELS.NONE) return acc;
|
||||
|
||||
context.countdowns = this.#getCountdowns().reduce((acc, { key, countdown, ownership }) => {
|
||||
const playersWithAccess = game.users.reduce((acc, user) => {
|
||||
const ownership = DhCountdowns.#getPlayerOwnership(user, setting, countdown);
|
||||
if (!user.isGM && ownership && ownership !== CONST.DOCUMENT_OWNERSHIP_LEVELS.NONE) {
|
||||
|
|
@ -238,4 +245,9 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application
|
|||
});
|
||||
Hooks.callAll(socketEvent.Refresh, data);
|
||||
}
|
||||
|
||||
async _onRender(context, options) {
|
||||
await super._onRender(context, options);
|
||||
this.element.hidden = !game.user.isGM && this.#getCountdowns().length === 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||
const property = foundry.utils.getProperty(item, field.key);
|
||||
if (Array.isArray(property)) property.join(', ');
|
||||
if (typeof field.format !== 'function') return property ?? '-';
|
||||
return field.format(property);
|
||||
return game.i18n.localize(field.format(property));
|
||||
}
|
||||
|
||||
formatChoices(data) {
|
||||
|
|
@ -430,7 +430,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||
if (matchesMenu) this.#filteredItems.browser.input.add(item.id);
|
||||
|
||||
const { search } = this.#filteredItems.browser;
|
||||
li.hidden = !(search.has(item.id) && matchesMenu);
|
||||
li.hidden = !((this.#search.browser.query.length === 0 || search.has(item.id)) && matchesMenu);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -469,6 +469,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||
|
||||
static resetFilters() {
|
||||
this.render({ force: true });
|
||||
this.loadItems();
|
||||
}
|
||||
|
||||
static getFolderConfig(folder, property = 'columns') {
|
||||
|
|
|
|||
|
|
@ -363,7 +363,7 @@ export const typeConfig = {
|
|||
{
|
||||
key: 'system.linkedClass',
|
||||
label: 'Class',
|
||||
format: linkedClass => linkedClass.name
|
||||
format: linkedClass => linkedClass?.name ?? 'DAGGERHEART.UI.ItemBrowser.missing'
|
||||
},
|
||||
{
|
||||
key: 'system.spellcastingTrait',
|
||||
|
|
@ -375,10 +375,12 @@ export const typeConfig = {
|
|||
key: 'system.linkedClass.uuid',
|
||||
label: 'Class',
|
||||
choices: items => {
|
||||
const list = items.map(item => ({
|
||||
value: item.system.linkedClass.uuid,
|
||||
label: item.system.linkedClass.name
|
||||
}));
|
||||
const list = items
|
||||
.filter(item => item.system.linkedClass)
|
||||
.map(item => ({
|
||||
value: item.system.linkedClass.uuid,
|
||||
label: item.system.linkedClass.name
|
||||
}));
|
||||
return list.reduce((a, c) => {
|
||||
if (!a.find(i => i.value === c.value)) a.push(c);
|
||||
return a;
|
||||
|
|
|
|||
|
|
@ -1547,3 +1547,8 @@ export const beastformTypes = {
|
|||
label: 'DAGGERHEART.CONFIG.BeastformType.hybrid'
|
||||
}
|
||||
};
|
||||
|
||||
export const originItemType = {
|
||||
itemCollection: 'itemCollection',
|
||||
restMove: 'restMove'
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import DhpActor from '../../documents/actor.mjs';
|
||||
import D20RollDialog from '../../applications/dialogs/d20RollDialog.mjs';
|
||||
import { ActionMixin } from '../fields/actionField.mjs';
|
||||
import { originItemField } from '../chat-message/actorRoll.mjs';
|
||||
|
||||
const fields = foundry.data.fields;
|
||||
|
||||
|
|
@ -25,6 +26,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
description: new fields.HTMLField(),
|
||||
img: new fields.FilePathField({ initial: undefined, categories: ['IMAGE'], base64: false }),
|
||||
chatDisplay: new fields.BooleanField({ initial: true, label: 'DAGGERHEART.ACTIONS.Config.displayInChat' }),
|
||||
originItem: originItemField(),
|
||||
actionType: new fields.StringField({
|
||||
choices: CONFIG.DH.ITEM.actionTypes,
|
||||
initial: 'action',
|
||||
|
|
@ -215,6 +217,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
title: `${this.item instanceof CONFIG.Actor.documentClass ? '' : `${this.item.name}: `}${game.i18n.localize(this.name)}`,
|
||||
source: {
|
||||
item: this.item._id,
|
||||
originItem: this.originItem,
|
||||
action: this._id,
|
||||
actor: this.actor.uuid
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,10 +6,12 @@ export default class BeastformEffect extends BaseEffect {
|
|||
const fields = foundry.data.fields;
|
||||
return {
|
||||
characterTokenData: new fields.SchemaField({
|
||||
usesDynamicToken: new fields.BooleanField({ initial: false }),
|
||||
tokenImg: new fields.FilePathField({
|
||||
categories: ['IMAGE'],
|
||||
base64: false,
|
||||
nullable: true
|
||||
nullable: true,
|
||||
wildcard: true
|
||||
}),
|
||||
tokenRingImg: new fields.FilePathField({
|
||||
initial: 'icons/svg/mystery-man.svg',
|
||||
|
|
@ -38,20 +40,39 @@ export default class BeastformEffect extends BaseEffect {
|
|||
|
||||
async _preDelete() {
|
||||
if (this.parent.parent.type === 'character') {
|
||||
const update = {
|
||||
const baseUpdate = {
|
||||
height: this.characterTokenData.tokenSize.height,
|
||||
width: this.characterTokenData.tokenSize.width,
|
||||
width: this.characterTokenData.tokenSize.width
|
||||
};
|
||||
const update = {
|
||||
...baseUpdate,
|
||||
texture: {
|
||||
src: this.characterTokenData.tokenImg
|
||||
},
|
||||
ring: {
|
||||
enabled: this.characterTokenData.usesDynamicToken,
|
||||
subject: {
|
||||
texture: this.characterTokenData.tokenRingImg
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
await updateActorTokens(this.parent.parent, update);
|
||||
const updateToken = token => ({
|
||||
...baseUpdate,
|
||||
'texture': {
|
||||
enabled: this.characterTokenData.usesDynamicToken,
|
||||
src: token.flags.daggerheart?.beastformTokenImg ?? this.characterTokenData.tokenImg
|
||||
},
|
||||
'ring': {
|
||||
subject: {
|
||||
texture:
|
||||
token.flags.daggerheart?.beastformSubjectTexture ?? this.characterTokenData.tokenRingImg
|
||||
}
|
||||
},
|
||||
'flags.daggerheart': { '-=beastformTokenImg': null, '-=beastformSubjectTexture': null }
|
||||
});
|
||||
|
||||
await updateActorTokens(this.parent.parent, update, updateToken);
|
||||
|
||||
await this.parent.parent.deleteEmbeddedDocuments('Item', this.featureIds);
|
||||
await this.parent.parent.deleteEmbeddedDocuments('ActiveEffect', this.effectIds);
|
||||
|
|
|
|||
|
|
@ -675,6 +675,8 @@ export default class DhCharacter extends BaseDataActor {
|
|||
}
|
||||
|
||||
_getTags() {
|
||||
return [this.class.value?.name, this.class.subclass?.name, this.community?.name, this.ancestry?.name].filter((t) => !!t);
|
||||
return [this.class.value?.name, this.class.subclass?.name, this.community?.name, this.ancestry?.name].filter(
|
||||
t => !!t
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ export default class DhParty extends BaseDataActor {
|
|||
const fields = foundry.data.fields;
|
||||
return {
|
||||
...super.defineSchema(),
|
||||
partyMembers: new ForeignDocumentUUIDArrayField({ type: 'Actor' }),
|
||||
partyMembers: new ForeignDocumentUUIDArrayField({ type: 'Actor' }, { prune: true }),
|
||||
notes: new fields.HTMLField(),
|
||||
gold: new fields.SchemaField({
|
||||
coins: new fields.NumberField({ initial: 0, integer: true }),
|
||||
|
|
@ -27,7 +27,6 @@ export default class DhParty extends BaseDataActor {
|
|||
|
||||
prepareBaseData() {
|
||||
super.prepareBaseData();
|
||||
this.partyMembers = this.partyMembers.filter(p => !!p);
|
||||
|
||||
// Register this party to all members
|
||||
if (game.actors.get(this.parent.id) === this.parent) {
|
||||
|
|
@ -42,7 +41,7 @@ export default class DhParty extends BaseDataActor {
|
|||
|
||||
// Clear this party from all members that aren't deleted
|
||||
for (const member of this.partyMembers) {
|
||||
member.parties?.delete(this.parent);
|
||||
member?.parties?.delete(this.parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,16 @@ const targetsField = () =>
|
|||
})
|
||||
);
|
||||
|
||||
export const originItemField = () =>
|
||||
new fields.SchemaField({
|
||||
type: new fields.StringField({
|
||||
choices: CONFIG.DH.ITEM.originItemType,
|
||||
initial: CONFIG.DH.ITEM.originItemType.itemCollection
|
||||
}),
|
||||
itemPath: new fields.StringField(),
|
||||
actionIndex: new fields.StringField()
|
||||
});
|
||||
|
||||
export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
return {
|
||||
|
|
@ -35,6 +45,7 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
|||
source: new fields.SchemaField({
|
||||
actor: new fields.StringField(),
|
||||
item: new fields.StringField(),
|
||||
originItem: originItemField(),
|
||||
action: new fields.StringField()
|
||||
}),
|
||||
damage: new fields.ObjectField(),
|
||||
|
|
@ -51,14 +62,23 @@ export default class DHActorRoll extends foundry.abstract.TypeDataModel {
|
|||
get actionItem() {
|
||||
const actionActor = this.actionActor;
|
||||
if (!actionActor || !this.source.item) return null;
|
||||
return actionActor.items.get(this.source.item);
|
||||
|
||||
switch (this.source.originItem.type) {
|
||||
case CONFIG.DH.ITEM.originItemType.restMove:
|
||||
const restMoves = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Homebrew).restMoves;
|
||||
return Array.from(foundry.utils.getProperty(restMoves, `${this.source.originItem.itemPath}`).actions)[
|
||||
this.source.originItem.actionIndex
|
||||
];
|
||||
default:
|
||||
const item = actionActor.items.get(this.source.item);
|
||||
return item ? item.system.actionsList?.find(a => a.id === this.source.action) : null;
|
||||
}
|
||||
}
|
||||
|
||||
get action() {
|
||||
const actionActor = this.actionActor,
|
||||
actionItem = this.actionItem;
|
||||
const { actionActor, actionItem: itemAction } = this;
|
||||
if (!this.source.action) return null;
|
||||
if (actionItem) return actionItem.system.actionsList?.find(a => a.id === this.source.action);
|
||||
if (itemAction) return itemAction;
|
||||
else if (actionActor?.system.attack?._id === this.source.action) return actionActor.system.attack;
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,9 +41,6 @@ export default class BeastformField extends fields.SchemaField {
|
|||
* @param {object} config Object that contains workflow datas. Usually made from Action Fields prepareConfig methods.
|
||||
*/
|
||||
static async execute(config) {
|
||||
// Should not be useful anymore here
|
||||
await BeastformField.handleActiveTransformations.call(this);
|
||||
|
||||
const { selected, evolved, hybrid } = await BeastformDialog.configure(config, this.item);
|
||||
if (!selected) return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,9 @@ export default class DamageField extends fields.SchemaField {
|
|||
});
|
||||
}
|
||||
|
||||
const token = game.scenes.find(x => x.active).tokens.find(x => x.id === target.id);
|
||||
const token = target.id
|
||||
? game.scenes.find(x => x.active).tokens.find(x => x.id === target.id)
|
||||
: actor.prototypeToken;
|
||||
if (config.hasHealing)
|
||||
damagePromises.push(
|
||||
actor.takeHealing(config.damage).then(updates => targetDamage.push({ token, updates }))
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ export default class TargetField extends fields.SchemaField {
|
|||
if (!this.target?.type) return (config.targets = []);
|
||||
config.hasTarget = true;
|
||||
let targets;
|
||||
// If the Action is configured as self-targeted, set targets as the owner.
|
||||
// If the Action is configured as self-targeted, set targets as the owner. Probably better way than to fallback to getDependentTokens
|
||||
if (this.target?.type === CONFIG.DH.GENERAL.targetTypes.self.id)
|
||||
targets = [this.actor.token ?? this.actor.prototypeToken];
|
||||
else {
|
||||
|
|
@ -72,17 +72,17 @@ export default class TargetField extends fields.SchemaField {
|
|||
|
||||
/**
|
||||
* Format actor to useful datas for Action roll workflow.
|
||||
* @param {*} actor Actor object to format.
|
||||
* @param {*} token Token object to format.
|
||||
* @returns {*} Formatted Actor.
|
||||
*/
|
||||
static formatTarget(actor) {
|
||||
static formatTarget(token) {
|
||||
return {
|
||||
id: actor.id,
|
||||
actorId: actor.actor.uuid,
|
||||
name: actor.actor.name,
|
||||
img: actor.actor.img,
|
||||
difficulty: actor.actor.system.difficulty,
|
||||
evasion: actor.actor.system.evasion,
|
||||
id: token.id,
|
||||
actorId: token.actor.uuid,
|
||||
name: token.actor.name,
|
||||
img: token.actor.img,
|
||||
difficulty: token.actor.system.difficulty,
|
||||
evasion: token.actor.system.evasion,
|
||||
saved: {
|
||||
value: null,
|
||||
success: null
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ export default class ForeignDocumentUUIDArrayField extends foundry.data.fields.A
|
|||
/** @inheritdoc */
|
||||
initialize(value, model, options = {}) {
|
||||
const v = super.initialize(value, model, options);
|
||||
return () => v.map(entry => (typeof entry === 'function' ? entry() : entry));
|
||||
return () => {
|
||||
const data = v.map(entry => (typeof entry === 'function' ? entry() : entry));
|
||||
return this.options.prune ? data.filter(d => !!d) : data;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ export default class DHBeastform extends BaseDataItem {
|
|||
this.parent.effects.filter(x => x.type !== 'beastform').map(x => x.toObject())
|
||||
);
|
||||
|
||||
const tokenImages = await this.parent.parent.getTokenImages();
|
||||
const beastformEffect = this.parent.effects.find(x => x.type === 'beastform');
|
||||
await beastformEffect.updateSource({
|
||||
changes: [
|
||||
|
|
@ -175,7 +174,8 @@ export default class DHBeastform extends BaseDataItem {
|
|||
],
|
||||
system: {
|
||||
characterTokenData: {
|
||||
tokenImg: tokenImages[0],
|
||||
usesDynamicToken: this.parent.parent.prototypeToken.ring.enabled,
|
||||
tokenImg: this.parent.parent.prototypeToken.texture.src,
|
||||
tokenRingImg: this.parent.parent.prototypeToken.ring.subject.texture,
|
||||
tokenSize: {
|
||||
height: this.parent.parent.prototypeToken.height,
|
||||
|
|
@ -190,7 +190,7 @@ export default class DHBeastform extends BaseDataItem {
|
|||
|
||||
await this.parent.parent.createEmbeddedDocuments('ActiveEffect', [beastformEffect.toObject()]);
|
||||
|
||||
await updateActorTokens(this.parent.parent, {
|
||||
const prototypeTokenUpdate = {
|
||||
height: this.tokenSize.height,
|
||||
width: this.tokenSize.width,
|
||||
texture: {
|
||||
|
|
@ -201,22 +201,20 @@ export default class DHBeastform extends BaseDataItem {
|
|||
texture: this.tokenRingImg
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const tokenUpdate = token => ({
|
||||
...prototypeTokenUpdate,
|
||||
flags: {
|
||||
daggerheart: {
|
||||
beastformTokenImg: token.texture.src,
|
||||
beastformSubjectTexture: token.ring.subject.texture
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
await updateActorTokens(this.parent.parent, prototypeTokenUpdate, tokenUpdate);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
_onCreate(_data, _options, userId) {
|
||||
if (userId !== game.user.id) return;
|
||||
|
||||
if (!this.parent.effects.find(x => x.type === 'beastform')) {
|
||||
this.parent.createEmbeddedDocuments('ActiveEffect', [
|
||||
{
|
||||
type: 'beastform',
|
||||
name: game.i18n.localize('DAGGERHEART.ITEMS.Beastform.beastformEffect'),
|
||||
img: 'icons/creatures/abilities/paw-print-pair-purple.webp'
|
||||
}
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,16 @@
|
|||
import { defaultRestOptions } from '../../config/generalConfig.mjs';
|
||||
import { ActionsField } from '../fields/actionField.mjs';
|
||||
|
||||
const currencyField = (initial, label) =>
|
||||
new foundry.data.fields.SchemaField({
|
||||
enabled: new foundry.data.fields.BooleanField({ required: true, initial: true }),
|
||||
label: new foundry.data.fields.StringField({
|
||||
required: true,
|
||||
initial,
|
||||
label
|
||||
})
|
||||
});
|
||||
|
||||
export default class DhHomebrew extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
|
|
@ -30,36 +40,15 @@ export default class DhHomebrew extends foundry.abstract.DataModel {
|
|||
initial: () => [2, 1, 1, 0, 0, -1]
|
||||
}),
|
||||
currency: new fields.SchemaField({
|
||||
enabled: new fields.BooleanField({
|
||||
required: true,
|
||||
initial: false,
|
||||
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.enabled'
|
||||
}),
|
||||
title: new fields.StringField({
|
||||
required: true,
|
||||
initial: 'Gold',
|
||||
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.currencyName'
|
||||
}),
|
||||
coins: new fields.StringField({
|
||||
required: true,
|
||||
initial: 'Coins',
|
||||
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.coinName'
|
||||
}),
|
||||
handfuls: new fields.StringField({
|
||||
required: true,
|
||||
initial: 'Handfuls',
|
||||
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.handfulName'
|
||||
}),
|
||||
bags: new fields.StringField({
|
||||
required: true,
|
||||
initial: 'Bags',
|
||||
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.bagName'
|
||||
}),
|
||||
chests: new fields.StringField({
|
||||
required: true,
|
||||
initial: 'Chests',
|
||||
label: 'DAGGERHEART.SETTINGS.Homebrew.currency.chestName'
|
||||
})
|
||||
coins: currencyField('Coins', 'DAGGERHEART.SETTINGS.Homebrew.currency.coinName'),
|
||||
handfuls: currencyField('Handfuls', 'DAGGERHEART.SETTINGS.Homebrew.currency.handfulName'),
|
||||
bags: currencyField('Bags', 'DAGGERHEART.SETTINGS.Homebrew.currency.bagName'),
|
||||
chests: currencyField('Chests', 'DAGGERHEART.SETTINGS.Homebrew.currency.chestName')
|
||||
}),
|
||||
restMoves: new fields.SchemaField({
|
||||
longRest: new fields.SchemaField({
|
||||
|
|
@ -146,4 +135,26 @@ export default class DhHomebrew extends foundry.abstract.DataModel {
|
|||
})
|
||||
};
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
_initializeSource(source, options = {}) {
|
||||
source = super._initializeSource(source, options);
|
||||
source.currency.coins = {
|
||||
enabled: source.currency.coins.enabled ?? true,
|
||||
label: source.currency.coins.label || source.currency.coins
|
||||
};
|
||||
source.currency.handfuls = {
|
||||
enabled: source.currency.handfuls.enabled ?? true,
|
||||
label: source.currency.handfuls.label || source.currency.handfuls
|
||||
};
|
||||
source.currency.bags = {
|
||||
enabled: source.currency.bags.enabled ?? true,
|
||||
label: source.currency.bags.label || source.currency.bags
|
||||
};
|
||||
source.currency.chests = {
|
||||
enabled: source.currency.chests.enabled ?? true,
|
||||
label: source.currency.chests.label || source.currency.chests
|
||||
};
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,11 @@ export default class DHRoll extends Roll {
|
|||
config.hooks = [...this.getHooks(), ''];
|
||||
config.dialog ??= {};
|
||||
|
||||
const actorIdSplit = config.source.actor.split('.');
|
||||
const tagTeamSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll);
|
||||
config.tagTeamSelected = tagTeamSettings.members[actorIdSplit[actorIdSplit.length - 1]];
|
||||
const actorIdSplit = config.source?.actor?.split('.');
|
||||
if (actorIdSplit) {
|
||||
const tagTeamSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.TagTeamRoll);
|
||||
config.tagTeamSelected = tagTeamSettings.members[actorIdSplit[actorIdSplit.length - 1]];
|
||||
}
|
||||
|
||||
for (const hook of config.hooks) {
|
||||
if (Hooks.call(`${CONFIG.DH.id}.preRoll${hook.capitalize()}`, config, message) === false) return null;
|
||||
|
|
|
|||
|
|
@ -145,9 +145,11 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
|
|||
});
|
||||
|
||||
html.querySelectorAll('.token-target-container').forEach(element => {
|
||||
element.addEventListener('pointerover', this.hoverTarget);
|
||||
element.addEventListener('pointerout', this.unhoverTarget);
|
||||
element.addEventListener('click', this.clickTarget);
|
||||
if (element.dataset.token) {
|
||||
element.addEventListener('pointerover', this.hoverTarget);
|
||||
element.addEventListener('pointerout', this.unhoverTarget);
|
||||
element.addEventListener('click', this.clickTarget);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -251,15 +251,22 @@ export const adjustRange = (rangeVal, decrease) => {
|
|||
return range[rangeKeys[newIndex]];
|
||||
};
|
||||
|
||||
export const updateActorTokens = async (actor, update) => {
|
||||
/**
|
||||
*
|
||||
* @param {DhActor} actor - The actor for which all tokens will run a data update.
|
||||
* @param {string} update - The data update to be applied to all tokens.
|
||||
* @param {func} updateToken - Optional, specific data update for the non-prototype tokens as a function using the token data. Useful to handle wildcard images where each token has a different image but the prototype has a wildcard path.
|
||||
*/
|
||||
export const updateActorTokens = async (actor, update, updateToken) => {
|
||||
await actor.prototypeToken.update({ ...update });
|
||||
|
||||
/* Update the tokens in all scenes belonging to Actor */
|
||||
for (let token of actor.getDependentTokens()) {
|
||||
const tokenActor = token.baseActor ?? token.actor;
|
||||
if (tokenActor?.id === actor.id) {
|
||||
if (token.id && tokenActor?.id === actor.id) {
|
||||
await token.update({
|
||||
...update
|
||||
...(updateToken ? updateToken(token) : update),
|
||||
_id: token.id
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ export async function runMigrations() {
|
|||
let lastMigrationVersion = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion);
|
||||
if (!lastMigrationVersion) lastMigrationVersion = game.system.version;
|
||||
|
||||
//#region old migrations
|
||||
if (foundry.utils.isNewerVersion('1.1.0', lastMigrationVersion)) {
|
||||
const lockedPacks = [];
|
||||
const compendiumActors = [];
|
||||
|
|
@ -190,6 +191,7 @@ export async function runMigrations() {
|
|||
|
||||
lastMigrationVersion = '1.2.0';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion, lastMigrationVersion);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Clanks are sentient mechanical beings built from a variety of materials, including metal, wood, and stone.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"cf73a44a-bad6-493d-9d72-4007c4b803e7\">They can resemble humanoids, animals, or even inanimate objects. Like organic beings, their bodies come in a wide array of sizes. Because of their bespoke construction, many clanks have highly specialized physical configurations. Examples include clawed hands for grasping, wheels for movement, or built-in weaponry.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"89241f41-6ba6-40db-a272-c23b400e26e8\">Many clanks embrace body modifications for style as well as function, and members of other ancestries often turn to clank artisans to construct customized mobility aids and physical adornments. Other ancestries can create clanks, even using their own physical characteristics as inspiration, but it’s also common for clanks to build one another. A clank’s lifespan extends as long as they’re able to acquire or craft new parts, making their physical form effectively immortal. That said, their minds are subject to the effects of time, and deteriorate as the magic that powers them loses potency.</p></p>",
|
||||
"description": "<p>Clanks are sentient mechanical beings built from a variety of materials, including metal, wood, and stone. They can resemble humanoids, animals, or even inanimate objects. Like organic beings, their bodies come in a wide array of sizes. Because of their bespoke construction, many clanks have highly specialized physical configurations. Examples include clawed hands for grasping, wheels for movement, or built-in weaponry.</p><p class=\"green Body-Styles_Body\">Many clanks embrace body modifications for style as well as function, and members of other ancestries often turn to clank artisans to construct customized mobility aids and physical adornments. Other ancestries can create clanks, even using their own physical characteristics as inspiration, but it’s also common for clanks to build one another. A clank’s lifespan extends as long as they’re able to acquire or craft new parts, making their physical form effectively immortal. That said, their minds are subject to the effects of time, and deteriorate as the magic that powers them loses potency.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Purposeful Design:</strong></em> Decide who made you and for what purpose. At character creation, choose one of your Experiences that best aligns with this purpose and gain a permanent +1 bonus to it.</p><p><em><strong>Efficient:</strong></em> When you take a short rest, you can choose a long rest move instead of a short rest move.</p><p></p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784381,
|
||||
"modifiedTime": 1755394032819,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995047410,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "ed8BoLR4SHOpeV00",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Drakona resemble wingless dragons in humanoid form and possess a powerful elemental breath.<br><br><p>All drakona have thick scales that provide excellent natural armor against both attacks and the forces of nature. They are large in size, ranging from 5 feet to 7 feet on average, with long sharp teeth. New teeth grow throughout a Drakona’s approximately 350-year lifespan, so they are never in danger of permanently losing an incisor. Unlike their dragon ancestors, drakona don’t have wings and can’t fly without magical aid. Members of this ancestry pass down the element of their breath through generations, though in rare cases, a drakona’s elemental power will differ from the rest of their family’s.</p></p>",
|
||||
"description": "<p>Drakona resemble wingless dragons in humanoid form and possess a powerful elemental breath. All drakona have thick scales that provide excellent natural armor against both attacks and the forces of nature. They are large in size, ranging from 5 feet to 7 feet on average, with long sharp teeth. New teeth grow throughout a Drakona’s approximately 350-year lifespan, so they are never in danger of permanently losing an incisor. Unlike their dragon ancestors, drakona don’t have wings and can’t fly without magical aid. Members of this ancestry pass down the element of their breath through generations, though in rare cases, a drakona’s elemental power will differ from the rest of their family’s.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Scales:</strong></em> Your scales act as natural protection. When you would take Severe damage, you can <strong>mark a Stress</strong> to mark 1 fewer Hit Points.</p><p><em><strong>Elemental Breath:</strong></em> Choose an element for your breath (such as electricity, fire, or ice). You can use this breath against a target or group of targets within Very Close range, treating it as an Instinct weapon that deals <strong>d8</strong> magic damage using your Proficiency.</p><p></p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784382,
|
||||
"modifiedTime": 1755394105939,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995216730,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "VLeOEqkLS0RbF0tB",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Dwarves are most easily recognized as short humanoids with square frames, dense musculature, and thick hair.<br><br><p>Their average height ranges from 4 to 5 ½ feet, and they are often broad in proportion to their stature. Their skin and nails contain a high amount of keratin, making them naturally resilient. This allows dwarves to embed gemstones into their bodies and decorate themselves with tattoos or piercings. Their hair grows thickly—usually on their heads, but some dwarves have thick hair across their bodies as well. Dwarves of all genders can grow facial hair, which they often style in elaborate arrangements. Typically, dwarves live up to 250 years of age, maintaining their muscle mass well into later life.</p></p>",
|
||||
"description": "<p>Dwarves are most easily recognized as short humanoids with square frames, dense musculature, and thick hair. Their average height ranges from 4 to 5 ½ feet, and they are often broad in proportion to their stature. Their skin and nails contain a high amount of keratin, making them naturally resilient. This allows dwarves to embed gemstones into their bodies and decorate themselves with tattoos or piercings. Their hair grows thickly—usually on their heads, but some dwarves have thick hair across their bodies as well. Dwarves of all genders can grow facial hair, which they often style in elaborate arrangements. Typically, dwarves live up to 250 years of age, maintaining their muscle mass well into later life.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Thick Skin:</strong></em> When you take Minor damage, you can <strong>mark 2 Stress</strong> instead of marking a Hit Point.</p><p><em><strong>Increased Fortitude:</strong></em> <strong>Spend 3 Hope</strong> to halve incoming physical damage.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784382,
|
||||
"modifiedTime": 1755394117175,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995338819,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "pDt6fI6otv2E2odf",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Elves are typically tall humanoids with pointed ears and acutely attuned senses.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"977fe91c-fa57-4a66-83e1-1f62a922f018\">Their ears vary in size and pointed shape, and as they age, the tips begin to droop. While elves come in a wide range of body types, they are all fairly tall, with heights ranging from about 6 to 6 ½ feet. All elves have the ability to drop into a celestial trance, rather than sleep. This allows them to rest effectively in a short amount of time.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"95498747-ff6e-4842-8706-a912c907bab6\">Some elves possess what is known as a “mystic form,” which occurs when an elf has dedicated themself to the study or protection of the natural world so deeply that their physical form changes. These characteristics can include celestial freckles, the presence of leaves, vines, or flowers in their hair, eyes that flicker like fire, and more. Sometimes these traits are inherited from parents, but if an elf changes their environment or magical focus, their appearance changes over time. Because elves live for about 350 years, these traits can shift more than once throughout their lifespan.</p><</p>",
|
||||
"description": "<p>Elves are typically tall humanoids with pointed ears and acutely attuned senses. Their ears vary in size and pointed shape, and as they age, the tips begin to droop. While elves come in a wide range of body types, they are all fairly tall, with heights ranging from about 6 to 6 ½ feet. All elves have the ability to drop into a celestial trance, rather than sleep. This allows them to rest effectively in a short amount of time.</p><p class=\"green Body-Styles_Body\">Some elves possess what is known as a “mystic form,” which occurs when an elf has dedicated themself to the study or protection of the natural world so deeply that their physical form changes. These characteristics can include celestial freckles, the presence of leaves, vines, or flowers in their hair, eyes that flicker like fire, and more. Sometimes these traits are inherited from parents, but if an elf changes their environment or magical focus, their appearance changes over time. Because elves live for about 350 years, these traits can shift more than once throughout their lifespan.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Quick Reactions:</strong></em> <strong>Mark a Stress</strong> to gain advantage on a reaction roll.</p><p><em><strong>Celestial Trance:</strong></em> During a rest, you can drop into a trance to choose an additional downtime move.</p><p></p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784382,
|
||||
"modifiedTime": 1755394127340,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995467472,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "q2l6g3Ssa04K84GO",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Faeries are winged humanoid creatures with insectile features.<br><br><p>These characteristics cover a broad spectrum from humanoid to insectoid—some possess additional arms, compound eyes, lantern organs, chitinous exoskeletons, or stingers. Because of their close ties to the natural world, they also frequently possess attributes that allow them to blend in with various plants. The average height of a faerie ranges from about 2 feet to 5 feet, but some faeries grow up to 7 feet tall. All faeries possess membranous wings and they each go through a process of metamorphosis. The process and changes differ from faerie to faerie, but during this transformation each individual manifests the unique appearance they will carry throughout the rest of their approximately 50-year lifespan.</p></p>",
|
||||
"description": "<p>Faeries are winged humanoid creatures with insectile features. These characteristics cover a broad spectrum from humanoid to insectoid—some possess additional arms, compound eyes, lantern organs, chitinous exoskeletons, or stingers. Because of their close ties to the natural world, they also frequently possess attributes that allow them to blend in with various plants. The average height of a faerie ranges from about 2 feet to 5 feet, but some faeries grow up to 7 feet tall. All faeries possess membranous wings and they each go through a process of metamorphosis. The process and changes differ from faerie to faerie, but during this transformation each individual manifests the unique appearance they will carry throughout the rest of their approximately 50-year lifespan.</p><p></p><h4>ANCESTRY FEATURE</h4><p><em><strong>Luckbender:</strong></em> Once per session, after you or a willing ally within Close range makes an action roll, you can <strong>spend 3 Hope</strong> to reroll the Duality Dice.</p><p><em><strong>Wings:</strong></em> You can fly. While flying, you can <strong>mark a Stress</strong> after an adversary makes an attack against you to gain a +2 bonus to your Evasion against that attack.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784383,
|
||||
"modifiedTime": 1755394136677,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995596403,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "XzJVbb5NT9k79ykR",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Fauns resemble humanoid goats with curving horns, square pupils, and cloven hooves.<br><br><p>Though their appearances may vary, most fauns have a humanoid torso and a goatlike lower body covered in dense fur. Faun faces can be more caprine or more humanlike, and they have a wide variety of ear and horn shapes. Faun horns range from short with minimal curvature to much larger with a distinct curl. The average faun ranges from 4 feet to 6 ½ feet tall, but their height can change dramatically from one moment to the next based on their stance. The majority of fauns have proportionately long limbs, no matter their size or shape, and are known for their ability to deliver powerful blows with their split hooves. Fauns live for roughly 225 years, and as they age, their appearance can become increasingly goatlike.</p></p>",
|
||||
"description": "<p>Fauns resemble humanoid goats with curving horns, square pupils, and cloven hooves. Though their appearances may vary, most fauns have a humanoid torso and a goatlike lower body covered in dense fur. Faun faces can be more caprine or more humanlike, and they have a wide variety of ear and horn shapes. Faun horns range from short with minimal curvature to much larger with a distinct curl. The average faun ranges from 4 feet to 6 ½ feet tall, but their height can change dramatically from one moment to the next based on their stance. The majority of fauns have proportionately long limbs, no matter their size or shape, and are known for their ability to deliver powerful blows with their split hooves. Fauns live for roughly 225 years, and as they age, their appearance can become increasingly goatlike.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Caprine Leap:</strong></em> You can leap anywhere within Close range as though you were using normal movement, allowing you to vault obstacles, jump across gaps, or scale barriers with ease.</p><p><em><strong>Kick:</strong></em> When you succeed on an attack against a target within Melee range, you can <strong>mark a Stress</strong> to kick yourself off them, dealing an extra <strong>2d6</strong> damage and knocking back either yourself or the target to Very Close range.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784383,
|
||||
"modifiedTime": 1755394142374,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995737722,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "HaYhe6WqoXW5EbRl",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Firbolgs are bovine humanoids typically recognized by their broad noses and long, drooping ears.<br><br><p>Some have faces that are a blend of humanoid and bison, ox, cow, or other bovine creatures. Others, often referred to as minotaurs, have heads that entirely resemble cattle. They are tall and muscular creatures, with heights ranging from around 5 feet to 7 feet, and possess remarkable strength no matter their age. Some firbolgs are known to use this strength to charge their adversaries, an action that is particuarly effective for those who have one of the many varieties of horn styles commonly found in this ancestry. Though their unique characteristics can vary, all firbolgs are covered in fur, which can be muted and earth-toned in color, or come in a variety of pastels, such as soft pinks and blues. On average, firbolgs live for about 150 years.</p></p>",
|
||||
"description": "<p>Firbolgs are bovine humanoids typically recognized by their broad noses and long, drooping ears. Some have faces that are a blend of humanoid and bison, ox, cow, or other bovine creatures. Others, often referred to as minotaurs, have heads that entirely resemble cattle. They are tall and muscular creatures, with heights ranging from around 5 feet to 7 feet, and possess remarkable strength no matter their age. Some firbolgs are known to use this strength to charge their adversaries, an action that is particuarly effective for those who have one of the many varieties of horn styles commonly found in this ancestry. Though their unique characteristics can vary, all firbolgs are covered in fur, which can be muted and earth-toned in color, or come in a variety of pastels, such as soft pinks and blues. On average, firbolgs live for about 150 years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Charge:</strong></em> When you succeed on an Agility Roll to move from Far or Very Far range into Melee range with one or more targets, you can <strong>mark a Stress</strong> to deal <strong>1d12</strong> physical damage to all targets within Melee range.</p><p><em><strong>Unshakable:</strong></em> When you would mark a Stress, roll a <strong>d6</strong>. On a result of 6, don’t mark it.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784384,
|
||||
"modifiedTime": 1755394148626,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762995854689,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "hzKmydI8sR3uk4CO",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Fungril resemble humanoid mushrooms.<br><br><p>They can be either more humanoid or more fungal in appearance, and they come in an assortment of colors, from earth tones to bright reds, yellows, purples, and blues. Fungril display an incredible variety of bodies, faces, and limbs, as there’s no single common shape among them. Even their heights range from a tiny 2 feet tall to a staggering 7 feet tall. While the common lifespan of a fungril is about 300 years, some have been reported to live much longer. They can communicate nonverbally, and many members of this ancestry use a mycelial array to chemically exchange information with other fungril across long distances.</p></p>",
|
||||
"description": "<p>Fungril resemble humanoid mushrooms. They can be either more humanoid or more fungal in appearance, and they come in an assortment of colors, from earth tones to bright reds, yellows, purples, and blues. Fungril display an incredible variety of bodies, faces, and limbs, as there’s no single common shape among them. Even their heights range from a tiny 2 feet tall to a staggering 7 feet tall. While the common lifespan of a fungril is about 300 years, some have been reported to live much longer. They can communicate nonverbally, and many members of this ancestry use a mycelial array to chemically exchange information with other fungril across long distances.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Fungril Network:</strong></em> Make an <strong>Instinct Roll (12)</strong> to use your mycelial array to speak with others of your ancestry. On a success, you can communicate across any distance.</p><p><em><strong>Death Connection:</strong></em> While touching a corpse that died recently, you can <strong>mark a Stress</strong> to extract one memory from the corpse related to a specific emotion or sensation of your choice.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784385,
|
||||
"modifiedTime": 1755394159775,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996011587,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "J1hX7nBBc5jQiHli",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Galapa resemble anthropomorphic turtles with large, domed shells into which they can retract.<br><br><p>On average, they range from 4 feet to 6 feet in height, and their head and body shapes can resemble any type of turtle. Galapa come in a variety of earth tones—most often shades of green and brown— and possess unique patterns on their shells. Members of this ancestry can draw their head, arms, and legs into their shell for protection to use it as a natural shield when defensive measures are needed. Some supplement their shell's strength or appearance by attaching armor or carving unique designs, but the process is exceedingly painful. Most galapa move slowly no matter their age, and they can live approximately 150 years.</p></p>",
|
||||
"description": "<p>Galapa resemble anthropomorphic turtles with large, domed shells into which they can retract. On average, they range from 4 feet to 6 feet in height, and their head and body shapes can resemble any type of turtle. Galapa come in a variety of earth tones—most often shades of green and brown— and possess unique patterns on their shells. Members of this ancestry can draw their head, arms, and legs into their shell for protection to use it as a natural shield when defensive measures are needed. Some supplement their shell's strength or appearance by attaching armor or carving unique designs, but the process is exceedingly painful. Most galapa move slowly no matter their age, and they can live approximately 150 years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Shell:</strong></em> Gain a bonus to your damage thresholds equal to your Proficiency.</p><p><em><strong>Retract:</strong></em> <strong>Mark a Stress</strong> to retract into your shell. While in your shell, you have resistance to physical damage, you have disadvantage on action rolls, and you can’t move.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784385,
|
||||
"modifiedTime": 1755394165825,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996127495,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "eZNG5Iv0yfbHs5CO",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Giants are towering humanoids with broad shoulders, long arms, and one to three eyes.<br><br><p>Adult giants range from 6 ½ to 8 ½ feet tall and are naturally muscular, regardless of body type. They are easily recognized by their wide frames and elongated arms and necks. Though they can have up to three eyes, all giants are born with none and remain sightless for their first year of life. Until a giant reaches the age of 10 and their features fully develop, the formation of their eyes may fluctuate. Those with a single eye are commonly known as cyclops. The average giant lifespan is about 75 years.</p></p>",
|
||||
"description": "<p>Giants are towering humanoids with broad shoulders, long arms, and one to three eyes. Adult giants range from 6 ½ to 8 ½ feet tall and are naturally muscular, regardless of body type. They are easily recognized by their wide frames and elongated arms and necks. Though they can have up to three eyes, all giants are born with none and remain sightless for their first year of life. Until a giant reaches the age of 10 and their features fully develop, the formation of their eyes may fluctuate. Those with a single eye are commonly known as cyclops. The average giant lifespan is about 75 years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Endurance:</strong></em> Gain an additional Hit Point slot at character creation.</p><p><em><strong>Reach:</strong></em> Treat any weapon, ability, spell, or other feature that has a Melee range as though it has a Very Close range instead.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784386,
|
||||
"modifiedTime": 1755394174325,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996412468,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "3U8CncG92a7ERIJ0",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Goblins are small humanoids easily recognizable by their large eyes and massive membranous ears.<br><br><p>With keen hearing and sharp eyesight, they perceive details both at great distances and in darkness, allowing them to move through less-optimal environments with ease. Their skin and eye colors are incredibly varied, with no one hue, either vibrant or subdued, more dominant than another. A typical goblin stands between 3 feet and 4 feet tall, and each of their ears is about the size of their head. Goblins are known to use ear positions to very specific effect when communicating nonverbally. A goblin’s lifespan is roughly 100 years, and many maintain their keen hearing and sight well into advanced age.</p></p>",
|
||||
"description": "<p>Goblins are small humanoids easily recognizable by their large eyes and massive membranous ears. With keen hearing and sharp eyesight, they perceive details both at great distances and in darkness, allowing them to move through less-optimal environments with ease. Their skin and eye colors are incredibly varied, with no one hue, either vibrant or subdued, more dominant than another. A typical goblin stands between 3 feet and 4 feet tall, and each of their ears is about the size of their head. Goblins are known to use ear positions to very specific effect when communicating nonverbally. A goblin’s lifespan is roughly 100 years, and many maintain their keen hearing and sight well into advanced age.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Surefooted:</strong></em> You ignore disadvantage on Agility Rolls.</p><p><em><strong>Danger Sense:</strong></em> Once per rest, <strong>mark a Stress</strong> to force an adversary to reroll an attack against you or an ally within Very Close range.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784386,
|
||||
"modifiedTime": 1755394180109,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996520218,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "EKPEdIz9lA9grPqH",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Halflings are small humanoids with large hairy feet and prominent rounded ears.<br><br><p>On average, halflings are 3 to 4 feet in height, and their ears, nose, and feet are larger in proportion to the rest of their body. Members of this ancestry live for around 150 years, and a halfling’s appearance is likely to remain youthful even as they progress from adulthood into old age. Halflings are naturally attuned to the magnetic fields of the Mortal Realm, granting them a strong internal compass. They also possess acute senses of hearing and smell, and can often detect those who are familiar to them by the sound of their movements.</p></p>",
|
||||
"description": "<p>Halflings are small humanoids with large hairy feet and prominent rounded ears. On average, halflings are 3 to 4 feet in height, and their ears, nose, and feet are larger in proportion to the rest of their body. Members of this ancestry live for around 150 years, and a halfling’s appearance is likely to remain youthful even as they progress from adulthood into old age. Halflings are naturally attuned to the magnetic fields of the Mortal Realm, granting them a strong internal compass. They also possess acute senses of hearing and smell, and can often detect those who are familiar to them by the sound of their movements.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Luckbringer:</strong></em> At the start of each session, everyone in your party gains a Hope.</p><p><em><strong>Internal Compass:</strong></em> When you roll a 1 on your Hope Die, you can reroll it.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784387,
|
||||
"modifiedTime": 1755394186643,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996659689,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "CtL2jDjvPOJxNJKm",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Humans are most easily recognized by their dexterous hands, rounded ears, and bodies built for endurance.<br><br><p>Their average height ranges from just under 5 feet to about 6 ½ feet. They have a wide variety of builds, with some being quite broad, others lithe, and many inhabiting the spectrum in between. Humans are physically adaptable and adjust to harsh climates with relative ease. In general, humans live to an age of about 100, with their bodies changing dramatically between their youngest and oldest years.</p></p>",
|
||||
"description": "<p>Humans are most easily recognized by their dexterous hands, rounded ears, and bodies built for endurance. Their average height ranges from just under 5 feet to about 6 ½ feet. They have a wide variety of builds, with some being quite broad, others lithe, and many inhabiting the spectrum in between. Humans are physically adaptable and adjust to harsh climates with relative ease. In general, humans live to an age of about 100, with their bodies changing dramatically between their youngest and oldest years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>High Stamina:</strong></em> Gain an additional Stress slot at character creation.</p><p><em><strong>Adaptability:</strong></em> When you fail a roll that utilized one of your Experiences, you can <strong>mark a Stress</strong> to reroll.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784388,
|
||||
"modifiedTime": 1755394199176,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996876543,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "wtJ5V5qRppLQn61n",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Infernis are humanoids who possess sharp canine teeth, pointed ears, and horns. They are the descendants of demons from the Circles Below.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"2472bb3d-27fb-4638-a3e6-210e0f852235\">On average, infernis range in height from 5 feet to 7 feet and are known to have long fingers and pointed nails. Some have long, thin, and smooth tails that end in points, forks, or arrowheads. It’s common for infernis to have two or four horns—though some have crowns of many horns, or only one. These horns can also grow asymmetrically, forming unique, often curving, shapes that infernis enhance with carving and ornamentation. Their skin, hair, and horns come in an assortment of colors that can include soft pastels, stark tones, or vibrant hues, such as rosy scarlet, deep purple, and pitch black.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"d470cbaf-01bb-42ad-bb35-ac20f32b4825\">Infernis possess a “dread visage” that manifests both involuntarily, such as when they experience fear or other strong emotions, or purposefully, such as when they wish to intimidate an adversary. This visage can briefly modify their appearance in a variety of ways, including lengthening their teeth and nails, changing the colors of their eyes, twisting their horns, or enhancing their height. On average, infernis live up to 350 years, with some attributing this lifespan to their demonic lineage.</p></p>",
|
||||
"description": "<p>Infernis are humanoids who possess sharp canine teeth, pointed ears, and horns. They are the descendants of demons from the Circles Below. On average, infernis range in height from 5 feet to 7 feet and are known to have long fingers and pointed nails. Some have long, thin, and smooth tails that end in points, forks, or arrowheads. It’s common for infernis to have two or four horns—though some have crowns of many horns, or only one. These horns can also grow asymmetrically, forming unique, often curving, shapes that infernis enhance with carving and ornamentation. Their skin, hair, and horns come in an assortment of colors that can include soft pastels, stark tones, or vibrant hues, such as rosy scarlet, deep purple, and pitch black.</p><p class=\"green Body-Styles_Body\">Infernis possess a “dread visage” that manifests both involuntarily, such as when they experience fear or other strong emotions, or purposefully, such as when they wish to intimidate an adversary. This visage can briefly modify their appearance in a variety of ways, including lengthening their teeth and nails, changing the colors of their eyes, twisting their horns, or enhancing their height. On average, infernis live up to 350 years, with some attributing this lifespan to their demonic lineage.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Fearless:</strong></em> When you roll with Fear, you can <strong>mark 2 Stress</strong> to change it into a roll with Hope instead.</p><p><em><strong>Dread Visage:</strong></em> You have advantage on rolls to intimidate hostile creatures.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784388,
|
||||
"modifiedTime": 1755394204627,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762996965311,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "hyxcuF2I0xcZSGkm",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Katari are feline humanoids with retractable claws, vertically slit pupils, and high, triangular ears.<br><br><p>They can also have small, pointed canine teeth, soft fur, and long whiskers that assist their perception and navigation. Their ears can swivel nearly 180 degrees to detect sound, adding to their heightened senses. Katari may look more or less feline or humanoid, with catlike attributes in the form of hair, whiskers, and a muzzle. About half of the katari population have tails. Their skin and fur come in a wide range of hues and patterns, including solid colors, calico tones, tabby stripes, and an array of spots, patches, marbling, or bands. Their height ranges from about 3 feet to 6 ½ feet, and they live to around 150 years.</p></p>",
|
||||
"description": "<p>Katari are feline humanoids with retractable claws, vertically slit pupils, and high, triangular ears. They can also have small, pointed canine teeth, soft fur, and long whiskers that assist their perception and navigation. Their ears can swivel nearly 180 degrees to detect sound, adding to their heightened senses. Katari may look more or less feline or humanoid, with catlike attributes in the form of hair, whiskers, and a muzzle. About half of the katari population have tails. Their skin and fur come in a wide range of hues and patterns, including solid colors, calico tones, tabby stripes, and an array of spots, patches, marbling, or bands. Their height ranges from about 3 feet to 6 ½ feet, and they live to around 150 years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Feline Instincts:</strong></em> When you make an Agility Roll, you can <strong>spend 2 Hope</strong> to reroll your Hope Die.</p><p><em><strong>Retracting Claws:</strong></em> Make an <strong>Agility Roll</strong> to scratch a target within Melee range. On a success, they become temporarily <em>Vulnerable</em>.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784388,
|
||||
"modifiedTime": 1755394210762,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762997128106,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "yyW0UM8srD9WuwW7",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Orcs are humanoids most easily recognized by their square features and boar-like tusks that protrude from their lower jaw.<br><br><p>Tusks come in various sizes, and though they extend from the mouth, they aren’t used for consuming food. Instead, many orcs choose to decorate their tusks with significant ornamentation. Orcs typically live for 125 years, and unless altered, their tusks continue to grow throughout the course of their lives. Their ears are pointed, and their hair and skin typically have green, blue, pink, or gray tones. Orcs tend toward a muscular build, and their average height ranges from 5 feet to 6 ½ feet.</p></p>",
|
||||
"description": "<p>Orcs are humanoids most easily recognized by their square features and boar-like tusks that protrude from their lower jaw. Tusks come in various sizes, and though they extend from the mouth, they aren’t used for consuming food. Instead, many orcs choose to decorate their tusks with significant ornamentation. Orcs typically live for 125 years, and unless altered, their tusks continue to grow throughout the course of their lives. Their ears are pointed, and their hair and skin typically have green, blue, pink, or gray tones. Orcs tend toward a muscular build, and their average height ranges from 5 feet to 6 ½ feet.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Sturdy:</strong></em> When you have 1 Hit Point remaining, attacks against you have disadvantage.</p><p><em><strong>Tusks:</strong></em> When you succeed on an attack against a target within Melee range, you can <strong>spend a Hope</strong> to gore the target with your tusks, dealing an extra <strong>1d6</strong> damage.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784389,
|
||||
"modifiedTime": 1755394218178,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762997234733,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "D1RbUsRV9HpTrPuF",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Ribbets resemble anthropomorphic frogs with protruding eyes and webbed hands and feet.<br><br><p>They have smooth (though sometimes warty) moist skin and eyes positioned on either side of their head. Some ribbets have hind legs more than twice the length of their torso, while others have short limbs. No matter their size (which ranges from about 3 feet to 4 ½ feet), ribbets primarily move by hopping. All ribbets have webbed appendages, allowing them to swim with ease. Some ribbets possess a natural green-and-brown camouflage, while others are vibrantly colored with bold patterns. No matter their appearance, all ribbets are born from eggs laid in the water, hatch into tadpoles, and after about 6 to 7 years, grow into amphibians that can move around on land. Ribbets live for approximately 100 years.</p></p>",
|
||||
"description": "<p>Ribbets resemble anthropomorphic frogs with protruding eyes and webbed hands and feet. They have smooth (though sometimes warty) moist skin and eyes positioned on either side of their head. Some ribbets have hind legs more than twice the length of their torso, while others have short limbs. No matter their size (which ranges from about 3 feet to 4 ½ feet), ribbets primarily move by hopping. All ribbets have webbed appendages, allowing them to swim with ease. Some ribbets possess a natural green-and-brown camouflage, while others are vibrantly colored with bold patterns. No matter their appearance, all ribbets are born from eggs laid in the water, hatch into tadpoles, and after about 6 to 7 years, grow into amphibians that can move around on land. Ribbets live for approximately 100 years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Amphibious:</strong></em> You can breathe and move naturally underwater.</p><p><em><strong>Long Tongue:</strong></em> You can use your long tongue to grab onto things within Close range. <strong>Mark a Stress</strong> to use your tongue as a Finesse Close weapon that deals <strong>d12</strong> physical damage using your Proficiency.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784389,
|
||||
"modifiedTime": 1755394245530,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762997435423,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "HwOoBKXOL9Tf5j85",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "ancestry",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Simiah resemble anthropomorphic monkeys and apes with long limbs and prehensile feet.<br><br><p>While their appearance reflects all simian creatures, from the largest gorilla to the smallest marmoset, their size does not align with their animal counterparts, and they can be anywhere from 2 to 6 feet tall. All simiah can use their dexterous feet for nonverbal communication, work, and combat. Additionally, some also have prehensile tails that can grasp objects or help with balance during difficult maneuvers. These traits grant members of this ancestry unique agility that aids them in a variety of physical tasks. In particular, simiah are skilled climbers and can easily transition from bipedal movement to knuckle-walking and climbing, and back again. On average, simiah live for about 100 years.</p></p>",
|
||||
"description": "<p>Simiah resemble anthropomorphic monkeys and apes with long limbs and prehensile feet. While their appearance reflects all simian creatures, from the largest gorilla to the smallest marmoset, their size does not align with their animal counterparts, and they can be anywhere from 2 to 6 feet tall. All simiah can use their dexterous feet for nonverbal communication, work, and combat. Additionally, some also have prehensile tails that can grasp objects or help with balance during difficult maneuvers. These traits grant members of this ancestry unique agility that aids them in a variety of physical tasks. In particular, simiah are skilled climbers and can easily transition from bipedal movement to knuckle-walking and climbing, and back again. On average, simiah live for about 100 years.</p><p></p><h4>ANCESTRY FEATURES</h4><p><em><strong>Natural Climber:</strong></em> You have advantage on Agility Rolls that involve balancing and climbing.</p><p><em><strong>Nimble:</strong></em> Gain a permanent +1 bonus to your Evasion at character creation.</p>",
|
||||
"features": [
|
||||
{
|
||||
"type": "primary",
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784390,
|
||||
"modifiedTime": 1755394237166,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1762997337259,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "2yMLxxn7CHEvmShj",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"_id": "UFR67BUOhNGLFyg9",
|
||||
"img": "icons/magic/defensive/shield-barrier-flaming-diamond-teal.webp",
|
||||
"system": {
|
||||
"description": "<p><strong>Mark a Stress</strong> to retract into your shell. While in your shell, you have resistance to physical damage, you have disadvantage on action rolls, and you can’t move.<br /><br />(When marked, manually enable the retract effect in effects tab and mark disadvantage when doing any action rolls)</p>",
|
||||
"description": "<p><strong>Mark a Stress</strong> to retract into your shell. While in your shell, you have resistance to physical damage, you have disadvantage on action rolls, and you can’t move.<br /><br />(When marked, manually enable the Retract effect to Active in effects tab and mark disadvantage when doing any action rolls. Manually disable the Retract effect to Inactive in the effects tab when no longer retracted into your shell.)</p>",
|
||||
"resource": null,
|
||||
"actions": {
|
||||
"HfiAg14hrYt7Yvnj": {
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
"name": "Retract",
|
||||
"img": "icons/magic/defensive/shield-barrier-flaming-diamond-teal.webp",
|
||||
"origin": "Compendium.daggerheart.ancestries.Item.UFR67BUOhNGLFyg9",
|
||||
"transfer": false,
|
||||
"transfer": true,
|
||||
"_id": "3V4FPoyjJUnFP9WS",
|
||||
"type": "base",
|
||||
"system": {
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
"priority": null
|
||||
}
|
||||
],
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"duration": {
|
||||
"startTime": null,
|
||||
"combat": null,
|
||||
|
|
@ -103,12 +103,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.351",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.1.2",
|
||||
"createdTime": 1759960447341,
|
||||
"modifiedTime": 1759961484642,
|
||||
"lastModifiedBy": "fBcTgyTzoARBvohY"
|
||||
"modifiedTime": 1763118039327,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_key": "!items.effects!UFR67BUOhNGLFyg9.3V4FPoyjJUnFP9WS"
|
||||
}
|
||||
|
|
@ -123,12 +123,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.351",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.1.2",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753996513763,
|
||||
"modifiedTime": 1759961925987,
|
||||
"lastModifiedBy": "fBcTgyTzoARBvohY"
|
||||
"modifiedTime": 1763118269345,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_key": "!items!UFR67BUOhNGLFyg9"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,15 +15,7 @@
|
|||
"description": "<p>Once per long rest, you can place a domain card from your loadout into your vault and choose to either:</p><ul><li><p>Gain Hope equal to the level of the card.</p></li><li><p>Enhance a spell that deals damage, gaining a bonus to your damage roll equal to twice the level of the card.</p></li></ul>",
|
||||
"chatDisplay": true,
|
||||
"actionType": "action",
|
||||
"cost": [
|
||||
{
|
||||
"scalable": false,
|
||||
"key": "hitPoints",
|
||||
"value": 1,
|
||||
"step": null,
|
||||
"consumeOnSuccess": false
|
||||
}
|
||||
],
|
||||
"cost": [],
|
||||
"uses": {
|
||||
"value": null,
|
||||
"max": "1",
|
||||
|
|
@ -59,12 +51,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.351",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1754349703843,
|
||||
"modifiedTime": 1755391373925,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763119128913,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_key": "!items!P02cbN50LIoD662z"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a highborne community means you’re accustomed to a life of elegance, opulence, and prestige within the upper echelons of society.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"800c54a3-5285-410c-9307-feabfc88540e\">Traditionally, members of a highborne community possess incredible material wealth. While this can take a variety of forms depending on the community—including gold and other minerals, land, or controlling the means of production—this status always comes with power and influence. Highborne place great value on titles and possessions, and there is little social mobility within their ranks. Members of a highborne community often control the political and economic status of the areas in which they live due to their ability to influence people and the economy with their substantial wealth. The health and safety of the less affluent people who live in these locations often hinges on the ability of this highborne ruling class to prioritize the well-being of their subjects over profit.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"02c8011b-a6fa-4300-ace4-9c0640cf0a90\"><em>Highborne are often amiable, candid, conniving, enterprising, ostentatious, and unflappable.</em></p></p>",
|
||||
"description": "<p>Being part of a highborne community means you’re accustomed to a life of elegance, opulence, and prestige within the upper echelons of society. Traditionally, members of a highborne community possess incredible material wealth. While this can take a variety of forms depending on the community—including gold and other minerals, land, or controlling the means of production—this status always comes with power and influence. Highborne place great value on titles and possessions, and there is little social mobility within their ranks. Members of a highborne community often control the political and economic status of the areas in which they live due to their ability to influence people and the economy with their substantial wealth. The health and safety of the less affluent people who live in these locations often hinges on the ability of this highborne ruling class to prioritize the well-being of their subjects over profit.</p><p class=\"green Body-Styles_Body\"><em>Highborne are often amiable, candid, conniving, enterprising, ostentatious, and unflappable.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Privilege:</strong></em> You have advantage on rolls to consort with nobles, negotiate prices, or leverage your reputation to get what you want.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.C7NR6qRatawZusmg"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784392,
|
||||
"modifiedTime": 1755394637367,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116112296,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "DVw2mOCHB8i0XeBz",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a loreborne community means you’re from a society that favors strong academic or political prowess.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"f75f439e-df5b-4c3a-b8b4-b59c8c05ebb8\">Loreborne communities highly value knowledge, frequently in the form of historical preservation, political advancement, scientific study, skill development, or lore and mythology compilation. Most members of these communities research in institutions built in bastions of civilization, while some eclectic few thrive in gathering information from the natural world. Some may be isolationists, operating in smaller enclaves, schools, or guilds and following their own unique ethos. Others still wield their knowledge on a larger scale, making deft political maneuvers across governmental landscapes.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"b2a2e82d-a5de-43c7-b9b8-16b5bd8e5b8b\"><em>Loreborne are often direct, eloquent, inquisitive, patient, rhapsodic, and witty.</em></p></p>",
|
||||
"description": "<p>Being part of a loreborne community means you’re from a society that favors strong academic or political prowess. Loreborne communities highly value knowledge, frequently in the form of historical preservation, political advancement, scientific study, skill development, or lore and mythology compilation. Most members of these communities research in institutions built in bastions of civilization, while some eclectic few thrive in gathering information from the natural world. Some may be isolationists, operating in smaller enclaves, schools, or guilds and following their own unique ethos. Others still wield their knowledge on a larger scale, making deft political maneuvers across governmental landscapes.</p><p class=\"green Body-Styles_Body\"><em>Loreborne are often direct, eloquent, inquisitive, patient, rhapsodic, and witty.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Well-Read:</strong></em> You have advantage on rolls that involve the history, culture, or politics of a prominent person or place.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.JBZJmywisJg5X3tH"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784392,
|
||||
"modifiedTime": 1755394793025,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116284438,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "YsvlyqYoi8QQ8kwm",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of an orderborne community means you’re from a collective that focuses on discipline or faith, and you uphold a set of principles that reflect your experience there.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"4da738f4-45e3-4bc6-b1f8-aef939b162ca\">Orderborne are frequently some of the most powerful among the surrounding communities. By aligning the members of their society around a common value or goal, such as a god, doctrine, ethos, or even a shared business or trade, the ruling bodies of these enclaves are able to mobilize larger populations with less effort. While orderborne communities take a variety of forms—some even profoundly pacifistic—perhaps the most feared are those that structure themselves around military prowess. In such a case, it’s not uncommon for orderborne to provide soldiers for hire to other cities or countries.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"6b261db5-6250-44a9-aebd-000cc9c9bcc5\"><em>Orderborne are often ambitious, benevolent, pensive, prudent, sardonic, and stoic.</em></p></p>",
|
||||
"description": "<p>Being part of an orderborne community means you’re from a collective that focuses on discipline or faith, and you uphold a set of principles that reflect your experience there. Orderborne are frequently some of the most powerful among the surrounding communities. By aligning the members of their society around a common value or goal, such as a god, doctrine, ethos, or even a shared business or trade, the ruling bodies of these enclaves are able to mobilize larger populations with less effort. While orderborne communities take a variety of forms—some even profoundly pacifistic—perhaps the most feared are those that structure themselves around military prowess. In such a case, it’s not uncommon for orderborne to provide soldiers for hire to other cities or countries.</p><p class=\"green Body-Styles_Body\"><em>Orderborne are often ambitious, benevolent, pensive, prudent, sardonic, and stoic.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Dedicated:</strong></em> Record three sayings or values your upbringing instilled in you. Once per rest, when you describe how you’re embodying one of these principles through your current action, you can roll a <strong>d20</strong> as your Hope Die.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.7aXWdH3gzaYREK0X"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784393,
|
||||
"modifiedTime": 1755394802410,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116904633,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "TY2TejenASXtS484",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a ridgeborne community means you’ve called the rocky peaks and sharp cliffs of the mountainside home.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"55b3205f-c5c5-4e9d-a207-d0fbb550cd8f\">Those who’ve lived in the mountains often consider themselves hardier than most because they’ve thrived among the most dangerous terrain many continents have to offer. These groups are adept at adaptation, developing unique technologies and equipment to move both people and products across difficult terrain. As such, ridgeborne grow up scrambling and climbing, making them sturdy and strong-willed. Ridgeborne localities appear in a variety of forms—some cities carve out entire cliff faces, others construct castles of stone, and still more live in small homes on windblown peaks. Outside forces often struggle to attack ridgeborne groups, as the small militias and large military forces of the mountains are adept at utilizing their high-ground advantage.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"4c5ba38a-812d-4231-930c-23c9fc5a24cf\"><em>Ridgeborne are often bold, hardy, indomitable, loyal, reserved, and stubborn.</em></p></p>",
|
||||
"description": "<p>Being part of a ridgeborne community means you’ve called the rocky peaks and sharp cliffs of the mountainside home. Those who’ve lived in the mountains often consider themselves hardier than most because they’ve thrived among the most dangerous terrain many continents have to offer. These groups are adept at adaptation, developing unique technologies and equipment to move both people and products across difficult terrain. As such, ridgeborne grow up scrambling and climbing, making them sturdy and strong-willed. Ridgeborne localities appear in a variety of forms—some cities carve out entire cliff faces, others construct castles of stone, and still more live in small homes on windblown peaks. Outside forces often struggle to attack ridgeborne groups, as the small militias and large military forces of the mountains are adept at utilizing their high-ground advantage.</p><p class=\"green Body-Styles_Body\"><em>Ridgeborne are often bold, hardy, indomitable, loyal, reserved, and stubborn.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Steady:</strong></em> You have advantage on rolls to traverse dangerous cliffs and ledges, navigate harsh environments, and use your survival knowledge.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.DYmmr5CknLtHnwuj"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784394,
|
||||
"modifiedTime": 1755394814094,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116407915,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "WHLA4qrdszXQHOuo",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a seaborne community means you lived on or near a large body of water.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"f74526d3-8864-4794-a556-b1922778a20b\">Seaborne communities are built, both physically and culturally, around the specific waters they call home. Some of these groups live along the shore, constructing ports for locals and travelers alike. These harbors function as centers of commerce, tourist attractions, or even just a safe place to lay down one’s head after weeks of travel. Other seaborne live on the water in small boats or large ships, with the idea of “home” comprising a ship and its crew, rather than any one landmass. No matter their exact location, seaborne communities are closely tied to the ocean tides and the creatures who inhabit them. Seaborne learn to fish at a young age, and train from birth to hold their breath and swim in even the most tumultuous waters. Individuals from these groups are highly sought after for their sailing skills, and many become captains of vessels, whether within their own community, working for another, or even at the helm of a powerful naval operation.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"024de014-6fce-43b9-b88b-3489275c5ab3\"><em>Seaborne are often candid, cooperative, exuberant, fierce, resolute, and weathered.</em></p></p>",
|
||||
"description": "<p>Being part of a seaborne community means you lived on or near a large body of water. Seaborne communities are built, both physically and culturally, around the specific waters they call home. Some of these groups live along the shore, constructing ports for locals and travelers alike. These harbors function as centers of commerce, tourist attractions, or even just a safe place to lay down one’s head after weeks of travel. Other seaborne live on the water in small boats or large ships, with the idea of “home” comprising a ship and its crew, rather than any one landmass. No matter their exact location, seaborne communities are closely tied to the ocean tides and the creatures who inhabit them. Seaborne learn to fish at a young age, and train from birth to hold their breath and swim in even the most tumultuous waters. Individuals from these groups are highly sought after for their sailing skills, and many become captains of vessels, whether within their own community, working for another, or even at the helm of a powerful naval operation.</p><p class=\"green Body-Styles_Body\"><em>Seaborne are often candid, cooperative, exuberant, fierce, resolute, and weathered.</em></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Know the Tide:</strong></em> You can sense the ebb and flow of life. When you roll with Fear, place a token on your community card. You can hold a number of tokens equal to your level. Before you make an action roll, you can spend any number of these tokens to gain a +1 bonus to the roll for each token spent. At the end of each session, clear all unspent tokens.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.07x6Qe6qMzDw2xN4"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784395,
|
||||
"modifiedTime": 1755394819693,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116525258,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "o5AA5J05N7EvH1rN",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a slyborne community means you come from a group that operates outside the law, including all manner of criminals, grifters, and con artists.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"f26534eb-503b-43ea-a768-8af00d09824e\">Being part of a slyborne community means you come from a group that operates outside the law, including all manner of criminals, grifters, and con artists. Members of slyborne communities are brought together by their disreputable goals and their clever means of achieving them. Many people in these communities have an array of unscrupulous skills: forging, thievery, smuggling, and violence. People of any social class can be slyborne, from those who have garnered vast wealth and influence to those without a coin to their name. To the outside eye, slyborne might appear to be ruffians with no loyalty, but these communities possess some of the strictest codes of honor which, when broken, can result in a terrifying end for the transgressor.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"9d607cb9-95df-4956-9794-d1e637683705\"><em>Slyborne are often calculating, clever, formidable, perceptive, shrewd, and tenacious.</em></p></p>",
|
||||
"description": "<p>Being part of a slyborne community means you come from a group that operates outside the law, including all manner of criminals, grifters, and con artists. Being part of a slyborne community means you come from a group that operates outside the law, including all manner of criminals, grifters, and con artists. Members of slyborne communities are brought together by their disreputable goals and their clever means of achieving them. Many people in these communities have an array of unscrupulous skills: forging, thievery, smuggling, and violence. People of any social class can be slyborne, from those who have garnered vast wealth and influence to those without a coin to their name. To the outside eye, slyborne might appear to be ruffians with no loyalty, but these communities possess some of the strictest codes of honor which, when broken, can result in a terrifying end for the transgressor.</p><p class=\"green Body-Styles_Body\"><em>Slyborne are often calculating, clever, formidable, perceptive, shrewd, and tenacious.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Scoundrel:</strong></em> You have advantage on rolls to negotiate with criminals, detect lies, or find a safe place to hide.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.ZmEuBdL0JrvuA8le"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784396,
|
||||
"modifiedTime": 1755394825710,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116630044,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "rGwCPMqZtky7SE6d",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of an underborne community means you’re from a subterranean society.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"46564ab7-2a3a-4033-a8a9-086d13dc5daf\">Many underborne live right beneath the cities and villages of other collectives, while some live much deeper. These communities range from small family groups in burrows to massive metropolises in caverns of stone. In many locales, underborne are recognized for their incredible boldness and skill that enable great feats of architecture and engineering. Underborne are regularly hired for their bravery, as even the least daring among them has likely encountered formidable belowground beasts, and learning to dispatch such creatures is common practice amongst these societies. Because of the dangers of their environment, many underborne communities develop unique nonverbal languages that prove equally useful on the surface.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"49451b43-92e9-4a21-af72-316189cce38b\"><em>Underborne are often composed, elusive, indomitable, innovative, resourceful, and unpretentious.</em></p></p>",
|
||||
"description": "<p>Being part of an underborne community means you’re from a subterranean society. Many underborne live right beneath the cities and villages of other collectives, while some live much deeper. These communities range from small family groups in burrows to massive metropolises in caverns of stone. In many locales, underborne are recognized for their incredible boldness and skill that enable great feats of architecture and engineering. Underborne are regularly hired for their bravery, as even the least daring among them has likely encountered formidable belowground beasts, and learning to dispatch such creatures is common practice amongst these societies. Because of the dangers of their environment, many underborne communities develop unique nonverbal languages that prove equally useful on the surface.</p><p class=\"green Body-Styles_Body\"><em>Underborne are often composed, elusive, indomitable, innovative, resourceful, and unpretentious.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Low-Light Living:</strong></em> When you’re in an area with low light or heavy shadow, you have advantage on rolls to hide, investigate, or perceive details within that area.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.aMla3xQuCHEwORGD"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784398,
|
||||
"modifiedTime": 1755394833394,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116716346,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "eX0I1ZNMyD3nfaL1",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a wanderborne community means you’ve lived as a nomad, forgoing a permanent home and experiencing a wide variety of cultures.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"38ab3560-b379-4862-a54b-f68ee23ed464\">Unlike many communities that are defined by their locale, wanderborne are defined by their traveling lifestyle. Because of their frequent migration, wanderborne put less value on the accumulation of material possessions in favor of acquiring information, skills, and connections. While some wanderborne are allied by a common ethos, such as a religion or a set of political or economic values, others come together after shared tragedy, such as the loss of their home or land. No matter the reason, the dangers posed by life on the road and the choice to continue down that road together mean that wanderborne are known for their unwavering loyalty.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"f8af6c80-2115-4d96-a1fc-3f425abafdd0\"><em>Wanderborne are often inscrutable, magnanimous, mirthful, reliable, savvy, and unorthodox.</em></p></p>",
|
||||
"description": "<p>Being part of a wanderborne community means you’ve lived as a nomad, forgoing a permanent home and experiencing a wide variety of cultures. Unlike many communities that are defined by their locale, wanderborne are defined by their traveling lifestyle. Because of their frequent migration, wanderborne put less value on the accumulation of material possessions in favor of acquiring information, skills, and connections. While some wanderborne are allied by a common ethos, such as a religion or a set of political or economic values, others come together after shared tragedy, such as the loss of their home or land. No matter the reason, the dangers posed by life on the road and the choice to continue down that road together mean that wanderborne are known for their unwavering loyalty.</p><p class=\"green Body-Styles_Body\"><em>Wanderborne are often inscrutable, magnanimous, mirthful, reliable, savvy, and unorthodox.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Nomadic Pack:</strong></em> Add a Nomadic Pack to your inventory. Once per session, you can <strong>spend a Hope</strong> to reach into this pack and pull out a mundane item that’s useful to your situation. Work with the GM to figure out what item you take out.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.2RSrQouA2zEJ5Xee"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784398,
|
||||
"modifiedTime": 1755394858795,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763159164621,
|
||||
"lastModifiedBy": "QAGM1eF3vB8IkOKk"
|
||||
},
|
||||
"_id": "82mDY2EIBfLkNwQj",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "community",
|
||||
"folder": null,
|
||||
"system": {
|
||||
"description": "<p>Being part of a wildborne community means you lived deep within the forest.<br><br><p class=\"green Body-Styles_Body\" chunk_id=\"464fc297-99b7-420d-b160-66174eba215d\">Wildborne communities are defined by their dedication to the conservation of their homelands, and many have strong religious or cultural ties to the fauna they live among. This results in unique architectural and technological advancements that favor sustainability over short-term, high-yield results. It is a hallmark of wildborne societies to integrate their villages and cities with the natural environment and avoid disturbing the lives of the plants and animals. While some construct their lodgings high in the branches of trees, others establish their homes on the ground beneath the forest canopy. It’s not uncommon for wildborne to remain reclusive and hidden within their woodland homes.</p>\n<p class=\"green Body-Styles_Body\" chunk_id=\"f30c9dcd-5b61-4997-b7a8-2b1684fb60b2\"><em>Wildborne are often hardy, loyal, nurturing, reclusive, sagacious, and vibrant.</em></p></p>",
|
||||
"description": "<p>Being part of a wildborne community means you lived deep within the forest. Wildborne communities are defined by their dedication to the conservation of their homelands, and many have strong religious or cultural ties to the fauna they live among. This results in unique architectural and technological advancements that favor sustainability over short-term, high-yield results. It is a hallmark of wildborne societies to integrate their villages and cities with the natural environment and avoid disturbing the lives of the plants and animals. While some construct their lodgings high in the branches of trees, others establish their homes on the ground beneath the forest canopy. It’s not uncommon for wildborne to remain reclusive and hidden within their woodland homes.</p><p class=\"green Body-Styles_Body\"><em>Wildborne are often hardy, loyal, nurturing, reclusive, sagacious, and vibrant.</em></p><p></p><h4>COMMUNITY FEATURE</h4><p><em><strong>Lightfoot:</strong></em> Your movement is naturally silent. You have advantage on rolls to move without being heard.</p>",
|
||||
"features": [
|
||||
"Compendium.daggerheart.communities.Item.TQ1AIQjndC4mYmmU"
|
||||
],
|
||||
|
|
@ -19,12 +19,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.0.5",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1753922784398,
|
||||
"modifiedTime": 1755394854412,
|
||||
"lastModifiedBy": "VZIeX2YDvX338Zvr"
|
||||
"modifiedTime": 1763116864623,
|
||||
"lastModifiedBy": "9HOfUKAXuCu7hUPY"
|
||||
},
|
||||
"_id": "CRJ5pzJj4FjCtIlx",
|
||||
"sort": 3400000,
|
||||
|
|
|
|||
|
|
@ -15,16 +15,7 @@
|
|||
"description": "<p>Once per long rest, you can create a space of natural serenity within Close range. When you spend a few minutes resting within the space, clear Stress equal to your Instinct, distributed as you choose between you and your allies.</p>",
|
||||
"chatDisplay": false,
|
||||
"actionType": "action",
|
||||
"cost": [
|
||||
{
|
||||
"key": "resource",
|
||||
"itemId": "etaQ01yGJhBLDUqZ",
|
||||
"value": 1,
|
||||
"scalable": false,
|
||||
"step": null,
|
||||
"consumeOnSuccess": false
|
||||
}
|
||||
],
|
||||
"cost": [],
|
||||
"uses": {
|
||||
"value": null,
|
||||
"max": "1",
|
||||
|
|
@ -104,12 +95,12 @@
|
|||
"compendiumSource": null,
|
||||
"duplicateSource": null,
|
||||
"exportSource": null,
|
||||
"coreVersion": "13.347",
|
||||
"coreVersion": "13.350",
|
||||
"systemId": "daggerheart",
|
||||
"systemVersion": "1.2.0",
|
||||
"systemVersion": "1.2.1",
|
||||
"createdTime": 1754179740310,
|
||||
"modifiedTime": 1756325575203,
|
||||
"lastModifiedBy": "bjJtdJOhqWr47GhC"
|
||||
"modifiedTime": 1762910392736,
|
||||
"lastModifiedBy": "D8z5bnxor7DTb1Wg"
|
||||
},
|
||||
"_key": "!items!etaQ01yGJhBLDUqZ"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
max-height: 420px;
|
||||
overflow: auto;
|
||||
|
||||
img {
|
||||
width: 136px;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
.tab.active.description {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: -webkit-fill-available !important;
|
||||
flex: 1;
|
||||
overflow-y: hidden !important;
|
||||
padding-top: 10px;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
height: 100%;
|
||||
overflow-y: auto;
|
||||
mask-image: linear-gradient(0deg, transparent 0%, black 10%, black 98%, transparent 100%);
|
||||
padding-bottom: 40px;
|
||||
padding-bottom: 10px;
|
||||
height: 100%;
|
||||
|
||||
scrollbar-width: thin;
|
||||
|
|
|
|||
|
|
@ -57,11 +57,12 @@
|
|||
}
|
||||
|
||||
.currency-section {
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||
gap: 10px;
|
||||
padding: 10px 10px 0;
|
||||
|
||||
input {
|
||||
.input {
|
||||
color: light-dark(@dark, @beige);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,11 +61,12 @@
|
|||
}
|
||||
|
||||
.currency-section {
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||
gap: 10px;
|
||||
padding: 10px 10px 0;
|
||||
|
||||
input {
|
||||
.input {
|
||||
color: light-dark(@dark, @beige);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ body.game:is(.performance-low, .noblur) {
|
|||
background: light-dark(@dark-blue-40, @dark-golden-40);
|
||||
border-radius: 6px;
|
||||
border: 1px solid light-dark(@dark-blue, @golden);
|
||||
max-width: 230px;
|
||||
width: 230px;
|
||||
height: -webkit-fill-available;
|
||||
|
||||
.actor-name {
|
||||
|
|
|
|||
|
|
@ -14,11 +14,11 @@
|
|||
|
||||
.application.sheet.daggerheart.actor.dh-style.party {
|
||||
.tab {
|
||||
height: -webkit-fill-available;
|
||||
max-height: 514px;
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: light-dark(@dark-blue, @golden) transparent;
|
||||
scrollbar-gutter: stable;
|
||||
|
||||
&.active {
|
||||
overflow: auto;
|
||||
|
|
|
|||
|
|
@ -28,12 +28,15 @@
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
border-radius: 6px;
|
||||
|
||||
&:hover {
|
||||
background: @golden-10;
|
||||
&.clickable {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: @golden-10;
|
||||
}
|
||||
}
|
||||
|
||||
header {
|
||||
|
|
|
|||
|
|
@ -90,11 +90,14 @@
|
|||
background: transparent;
|
||||
transition: all 0.3s ease;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
background: @golden-10;
|
||||
&.clickable {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: @golden-10;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
|
|
|
|||
|
|
@ -21,11 +21,6 @@
|
|||
padding: 8px;
|
||||
--button-size: 0;
|
||||
|
||||
&.used {
|
||||
opacity: 0.5;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
&.inactive {
|
||||
background: var(--color-warm-2);
|
||||
color: var(--color-light-1);
|
||||
|
|
@ -35,6 +30,11 @@
|
|||
filter: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.used {
|
||||
opacity: 0.5;
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
.toggleable-row {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
|
||||
&.spaced {
|
||||
padding-right: 28.5px;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.setting-group-field {
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
"id": "daggerheart",
|
||||
"title": "Daggerheart",
|
||||
"description": "An unofficial implementation of the Daggerheart system",
|
||||
"version": "1.2.1",
|
||||
"version": "1.2.3",
|
||||
"compatibility": {
|
||||
"minimum": "13",
|
||||
"verified": "13.350",
|
||||
"verified": "13.351",
|
||||
"maximum": "13"
|
||||
},
|
||||
"authors": [
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
<div class="images-container">
|
||||
{{#each images as |image|}}
|
||||
<a data-action="selectImage"><img {{#if (eq image @root.selectedImage)}}class="selected"{{/if}} src="{{image}}" data-image="{{image}}" /></a>
|
||||
{{/each}}
|
||||
<div>
|
||||
<div class="images-container">
|
||||
{{#each images as |image|}}
|
||||
<a data-action="selectImage"><img {{#if (eq image @root.selectedImage)}}class="selected"{{/if}} src="{{image}}" data-image="{{image}}" /></a>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -29,13 +29,25 @@
|
|||
<legend>
|
||||
{{localize "DAGGERHEART.SETTINGS.Homebrew.currency.title"}}
|
||||
</legend>
|
||||
{{formGroup settingFields.schema.fields.currency.fields.enabled value=settingFields._source.currency.enabled localize=true}}
|
||||
{{formGroup settingFields.schema.fields.currency.fields.title value=settingFields._source.currency.title localize=true}}
|
||||
{{formGroup settingFields.schema.fields.currency.fields.coins value=settingFields._source.currency.coins localize=true}}
|
||||
{{formGroup settingFields.schema.fields.currency.fields.handfuls value=settingFields._source.currency.handfuls localize=true}}
|
||||
{{formGroup settingFields.schema.fields.currency.fields.bags value=settingFields._source.currency.bags localize=true}}
|
||||
{{formGroup settingFields.schema.fields.currency.fields.chests value=settingFields._source.currency.chests localize=true}}
|
||||
|
||||
<div class="toggleable-row spaced">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.title value=settingFields._source.currency.title localize=true}}
|
||||
</div>
|
||||
<div class="toggleable-row">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.coins.fields.label value=settingFields._source.currency.coins.label localize=true}}
|
||||
<input type="checkbox" {{checked settingFields._source.currency.coins.enabled}} disabled />
|
||||
</div>
|
||||
<div class="toggleable-row">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.handfuls.fields.label value=settingFields._source.currency.handfuls.label localize=true}}
|
||||
<input type="checkbox" name="currency.handfuls.enabled" {{checked settingFields._source.currency.handfuls.enabled}} />
|
||||
</div>
|
||||
<div class="toggleable-row">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.bags.fields.label value=settingFields._source.currency.bags.label localize=true}}
|
||||
<input type="checkbox" name="currency.bags.enabled" {{checked settingFields._source.currency.bags.enabled}} />
|
||||
</div>
|
||||
<div class="toggleable-row">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.chests.fields.label value=settingFields._source.currency.chests.label localize=true}}
|
||||
<input type="checkbox" name="currency.chests.enabled" {{checked settingFields._source.currency.chests.enabled}} />
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -13,27 +13,14 @@
|
|||
</div>
|
||||
|
||||
<div class="currency-section">
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.coins}}</span>
|
||||
{{formInput systemFields.gold.fields.coins value=source.system.gold.coins enriched=source.system.gold.coins
|
||||
localize=true toggled=true}}
|
||||
</div>
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.handfuls}}</span>
|
||||
{{formInput systemFields.gold.fields.handfuls value=source.system.gold.handfuls
|
||||
enriched=source.system.gold.handfuls localize=true toggled=true}}
|
||||
</div>
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.bags}}</span>
|
||||
{{formInput systemFields.gold.fields.bags value=source.system.gold.bags enriched=source.system.gold.bags
|
||||
localize=true toggled=true}}
|
||||
</div>
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.chests}}</span>
|
||||
{{formInput systemFields.gold.fields.chests value=source.system.gold.chests
|
||||
enriched=source.system.gold.chests localize=true toggled=true}}
|
||||
</div>
|
||||
|
||||
{{#each this.inventory.currencies as | currency |}}
|
||||
{{#if currency.enabled}}
|
||||
<div class="input">
|
||||
<span>{{localize currency.label}}</span>
|
||||
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
<div class="items-section">
|
||||
|
|
|
|||
|
|
@ -16,7 +16,15 @@
|
|||
</div>
|
||||
|
||||
<div class="currency-section">
|
||||
<div class="input">
|
||||
{{#each this.inventory.currencies as | currency |}}
|
||||
{{#if currency.enabled}}
|
||||
<div class="input">
|
||||
<span>{{localize currency.label}}</span>
|
||||
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{!-- <div class="input">
|
||||
<span>{{localize this.inventory.currency.coins}}</span>
|
||||
{{formInput systemFields.gold.fields.coins value=source.system.gold.coins enriched=source.system.gold.coins
|
||||
localize=true toggled=true}}
|
||||
|
|
@ -35,7 +43,7 @@
|
|||
<span>{{localize this.inventory.currency.chests}}</span>
|
||||
{{formInput systemFields.gold.fields.chests value=source.system.gold.chests
|
||||
enriched=source.system.gold.chests localize=true toggled=true}}
|
||||
</div>
|
||||
</div> --}}
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
item=actor
|
||||
type='character'
|
||||
isActor=true
|
||||
hideContextMenu=true
|
||||
}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -22,19 +22,21 @@
|
|||
<h2 class="actor-name">{{actor.name}}</h2>
|
||||
<img class="actor-img" src="{{actor.img}}">
|
||||
<div class="resources">
|
||||
<div class="slot-section">
|
||||
<div class="slot-bar">
|
||||
{{#times actor.system.resources.hitPoints.max}}
|
||||
<span class='slot {{#if (gte actor.system.resources.hitPoints.value (add this 1))}}filled{{/if}}'
|
||||
data-action='toggleHitPoints' data-actor-id="{{actor.uuid}}" data-value="{{add this 1}}">
|
||||
</span>
|
||||
{{/times}}
|
||||
{{#unless (eq actor.type 'companion') }}
|
||||
<div class="slot-section">
|
||||
<div class="slot-bar">
|
||||
{{#times actor.system.resources.hitPoints.max}}
|
||||
<span class='slot {{#if (gte actor.system.resources.hitPoints.value (add this 1))}}filled{{/if}}'
|
||||
data-action='toggleHitPoints' data-actor-id="{{actor.uuid}}" data-value="{{add this 1}}">
|
||||
</span>
|
||||
{{/times}}
|
||||
</div>
|
||||
<div class="slot-label">
|
||||
<span class="label">{{localize "DAGGERHEART.GENERAL.HitPoints.short"}}</span>
|
||||
<span class="value">{{actor.system.resources.hitPoints.value}} / {{actor.system.resources.hitPoints.max}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="slot-label">
|
||||
<span class="label">{{localize "DAGGERHEART.GENERAL.HitPoints.short"}}</span>
|
||||
<span class="value">{{actor.system.resources.hitPoints.value}} / {{actor.system.resources.hitPoints.max}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
<div class="slot-section">
|
||||
<div class="slot-bar">
|
||||
|
|
@ -71,26 +73,30 @@
|
|||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#unless (or (eq actor.type 'companion') (eq actor.type 'adversary')) }}
|
||||
<div class="hope-section">
|
||||
<h4>{{localize "DAGGERHEART.GENERAL.hope"}}</h4>
|
||||
{{#times actor.system.resources.hope.max}}
|
||||
<span class='hope-value' data-action='toggleHope' data-actor-id="{{actor.uuid}}" data-value="{{add this 1}}">
|
||||
{{#if (gte actor.system.resources.hope.value (add this 1))}}
|
||||
<i class='fa-solid fa-diamond'></i>
|
||||
{{else}}
|
||||
<i class='fa-regular fa-circle'></i>
|
||||
{{/if}}
|
||||
</span>
|
||||
{{/times}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
<div class="hope-section">
|
||||
<h4>{{localize "DAGGERHEART.GENERAL.hope"}}</h4>
|
||||
{{#times actor.system.resources.hope.max}}
|
||||
<span class='hope-value' data-action='toggleHope' data-actor-id="{{actor.uuid}}" data-value="{{add this 1}}">
|
||||
{{#if (gte actor.system.resources.hope.value (add this 1))}}
|
||||
<i class='fa-solid fa-diamond'></i>
|
||||
{{else}}
|
||||
<i class='fa-regular fa-circle'></i>
|
||||
{{/if}}
|
||||
</span>
|
||||
{{/times}}
|
||||
</div>
|
||||
<div class="threshold-section">
|
||||
<h4 class="threshold-label">{{localize "DAGGERHEART.GENERAL.DamageThresholds.minor"}}</h4>
|
||||
<h4 class="threshold-value">{{actor.system.damageThresholds.major}}</h4>
|
||||
<h4 class="threshold-label">{{localize "DAGGERHEART.GENERAL.DamageThresholds.major"}}</h4>
|
||||
<h4 class="threshold-value">{{actor.system.damageThresholds.severe}}</h4>
|
||||
<h4 class="threshold-label">{{localize "DAGGERHEART.GENERAL.DamageThresholds.severe"}}</h4>
|
||||
</div>
|
||||
{{#unless (eq actor.type 'companion')}}
|
||||
<div class="threshold-section">
|
||||
<h4 class="threshold-label">{{localize "DAGGERHEART.GENERAL.DamageThresholds.minor"}}</h4>
|
||||
<h4 class="threshold-value">{{actor.system.damageThresholds.major}}</h4>
|
||||
<h4 class="threshold-label">{{localize "DAGGERHEART.GENERAL.DamageThresholds.major"}}</h4>
|
||||
<h4 class="threshold-value">{{actor.system.damageThresholds.severe}}</h4>
|
||||
<h4 class="threshold-label">{{localize "DAGGERHEART.GENERAL.DamageThresholds.severe"}}</h4>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ Parameters:
|
|||
- isGlassy {boolean} : If true, applies the 'glassy' class to the fieldset.
|
||||
- cardView {boolean} : If true and type is 'domainCard', renders using domain card layout.
|
||||
- isActor {boolean} : Passed through to inventory-item partials.
|
||||
- isItem {boolean} : Passed through to inventory-item partials
|
||||
- actorType {boolean} : The actor type of the parent actor
|
||||
- canCreate {boolean} : If true, show createDoc anchor on legend
|
||||
- inVault {boolean} : If true, the domainCard is created with inVault=true
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
Parameters:
|
||||
- type {string} : The type of items in the list
|
||||
- isActor {boolean} : Passed through to inventory-item partials.
|
||||
- isItem {boolean} : Passed through to inventory-item partials
|
||||
- actorType {boolean} : The actor type of the parent actor
|
||||
- categoryAdversary {string} : Category adversary id.
|
||||
- noExtensible {boolean} : If true, the inventory-item-content would be collapsable/extendible else it always be showed
|
||||
|
|
@ -18,7 +19,7 @@ Parameters:
|
|||
|
||||
<li class="inventory-item" data-item-id="{{item.id}}" {{#if (or (eq type 'action' ) (eq type 'attack' ))}}
|
||||
data-action-id="{{item.id}}" {{/if}} data-item-uuid="{{item.uuid}}" data-type="{{type}}" data-no-compendium-edit="{{noCompendiumEdit}}" draggable="true">
|
||||
<div class="inventory-item-header {{#if (eq actorType 'party')}}padded{{/if}}" {{#unless noExtensible}}data-action="toggleExtended" {{/unless}}>
|
||||
<div class="inventory-item-header {{#if hideContextMenu}}padded{{/if}}" {{#unless noExtensible}}data-action="toggleExtended" {{/unless}}>
|
||||
{{!-- Image --}}
|
||||
<div class="img-portait" data-action='{{ifThen (or (hasProperty item "use") (eq type "attack")) "useItem" (ifThen
|
||||
(hasProperty item "toChat" ) "toChat" "editDoc" ) }}' {{#unless hideTooltip}} {{#if (eq type 'attack' )}}
|
||||
|
|
@ -67,7 +68,7 @@ Parameters:
|
|||
{{!-- Controls --}}
|
||||
{{#unless hideControls}}
|
||||
<div class="controls">
|
||||
{{#if isActor}}
|
||||
{{#if isActor}}
|
||||
<a data-action="editDoc" data-tooltip="DAGGERHEART.UI.Tooltip.openActorWorld">
|
||||
<i class="fa-solid fa-globe"></i>
|
||||
</a>
|
||||
|
|
@ -81,7 +82,7 @@ Parameters:
|
|||
<i class='fas fa-trash'></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{else}}
|
||||
{{#unless (eq actorType 'party')}}
|
||||
{{#if (eq type 'weapon')}}
|
||||
<a class="{{#unless item.system.equipped}}unequipped{{/unless}}" data-action="toggleEquipItem"
|
||||
|
|
@ -94,27 +95,30 @@ Parameters:
|
|||
<i class="fa-solid fa-shield"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (eq type 'domainCard')}}
|
||||
<a data-action="toggleVault"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.inVault 'sendToLoadout' 'sendToVault' }}">
|
||||
<i class="fa-solid {{ifThen item.system.inVault 'fa-arrow-up' 'fa-arrow-down'}}"></i>
|
||||
</a>
|
||||
{{else if (eq type 'effect')}}
|
||||
<a data-action="toggleEffect"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.disabled 'enableEffect' 'disableEffect' }}">
|
||||
<i class="{{ifThen item.disabled 'fa-solid fa-toggle-off' 'fa-solid fa-toggle-on'}}"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (hasProperty item "toChat")}}
|
||||
<a data-action="toChat" data-tooltip="DAGGERHEART.UI.Tooltip.sendToChat">
|
||||
<i class="fa-regular fa-message"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<a data-action="editDoc" data-tooltip="DAGGERHEART.UI.Tooltip.openActorWorld">
|
||||
<i class="fa-solid fa-globe"></i>
|
||||
</a>
|
||||
<a data-action="deleteItem" data-tooltip="DAGGERHEART.UI.Tooltip.deleteItem">
|
||||
<i class="fa-solid fa-trash"></i>
|
||||
</a>
|
||||
{{/unless}}
|
||||
{{#if (eq type 'domainCard')}}
|
||||
<a data-action="toggleVault"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.system.inVault 'sendToLoadout' 'sendToVault' }}">
|
||||
<i class="fa-solid {{ifThen item.system.inVault 'fa-arrow-up' 'fa-arrow-down'}}"></i>
|
||||
</a>
|
||||
{{else if (eq type 'effect')}}
|
||||
<a data-action="toggleEffect"
|
||||
data-tooltip="DAGGERHEART.UI.Tooltip.{{ifThen item.disabled 'enableEffect' 'disableEffect' }}">
|
||||
<i class="{{ifThen item.disabled 'fa-solid fa-toggle-off' 'fa-solid fa-toggle-on'}}"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (and (hasProperty item "toChat") (not (eq actorType 'party')))}}
|
||||
<a data-action="toChat" data-tooltip="DAGGERHEART.UI.Tooltip.sendToChat">
|
||||
<i class="fa-regular fa-message"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#unless hideContextMenu}}
|
||||
<a data-action="triggerContextMenu" data-tooltip="DAGGERHEART.UI.Tooltip.moreOptions">
|
||||
<i class="fa-solid fa-ellipsis-vertical"></i>
|
||||
|
|
@ -122,7 +126,7 @@ Parameters:
|
|||
{{/unless}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
<div class="inventory-item-content{{#unless noExtensible}} extensible{{/unless}}">
|
||||
{{!-- Description --}}
|
||||
|
|
@ -139,9 +143,15 @@ Parameters:
|
|||
<div class="item-buttons">
|
||||
{{#each item.system.actions as | action |}}
|
||||
<div class="item-button">
|
||||
<button type="button" data-action="useItem" data-item-uuid="{{action.uuid}}">
|
||||
{{action.name}}
|
||||
</button>
|
||||
{{#if (and (eq action.type 'beastform') @root.beastformActive)}}
|
||||
<button type="button" data-action="cancelBeastform" data-item-uuid="{{action.uuid}}">
|
||||
{{localize "DAGGERHEART.ACTORS.Character.cancelBeastform"}}
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" data-action="useItem" data-item-uuid="{{action.uuid}}">
|
||||
{{action.name}}
|
||||
</button>
|
||||
{{/if}}
|
||||
{{#if action.uses.max}}
|
||||
<div class="spacer"></div>
|
||||
<button type="button" class="action-uses-button" data-action="increaseActionUses" data-item-uuid="{{action.uuid}}">
|
||||
|
|
|
|||
|
|
@ -62,4 +62,4 @@
|
|||
</div>
|
||||
</fieldset>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<ul class="daggerheart chat damage-summary">
|
||||
{{#each targets}}
|
||||
<li class="token-target-container" data-token="{{this.token.id}}">
|
||||
<li class="token-target-container {{#if this.token.id}}clickable{{/if}}" data-token="{{this.token.id}}">
|
||||
<header>
|
||||
<img src="{{this.token.texture.src}}" />
|
||||
<h2 class="actor-name">{{this.token.name}}</h2>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
</div>
|
||||
</details>
|
||||
{{#each move.actions as | action index |}}
|
||||
<button class="action-use-button" data-move-index="{{@../key}}" data-action-index="{{index}}">
|
||||
<button class="action-use-button" data-move-index="{{@../key}}" data-action-index="{{index}}" data-move-path="{{../movePath}}" >
|
||||
<span>{{localize action.name}}</span>
|
||||
</button>
|
||||
{{/each}}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
</div>
|
||||
<div class="targets-container">
|
||||
{{#each targets}}
|
||||
<div class="token-target-container" data-token="{{this.id}}">
|
||||
<div class="token-target-container {{#if this.id}}clickable{{/if}}" data-token="{{this.id}}">
|
||||
<img src="{{this.texture.src}}" />
|
||||
<h2 class="title">{{this.name}}</h2>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue