mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-24 19:39:54 +02:00
Compare commits
1 commit
624e81ae36
...
80b5cda9ba
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80b5cda9ba |
19 changed files with 270 additions and 290 deletions
|
|
@ -2010,8 +2010,7 @@
|
||||||
"Attachments": {
|
"Attachments": {
|
||||||
"attachHint": "Drop items here to attach them",
|
"attachHint": "Drop items here to attach them",
|
||||||
"transferHint": "If checked, this effect will be applied to any actor that owns this Effect's parent Item. The effect is always applied if this Item is attached to another one."
|
"transferHint": "If checked, this effect will be applied to any actor that owns this Effect's parent Item. The effect is always applied if this Item is attached to another one."
|
||||||
},
|
}
|
||||||
"OriginTag": "Origin: {name}"
|
|
||||||
},
|
},
|
||||||
"GENERAL": {
|
"GENERAL": {
|
||||||
"Ability": {
|
"Ability": {
|
||||||
|
|
|
||||||
|
|
@ -518,7 +518,7 @@ export default function DHApplicationMixin(Base) {
|
||||||
const doc = await getDocFromElement(target),
|
const doc = await getDocFromElement(target),
|
||||||
action = doc?.system?.attack ?? doc;
|
action = doc?.system?.attack ?? doc;
|
||||||
const config = action.prepareConfig(event);
|
const config = action.prepareConfig(event);
|
||||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(
|
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(
|
||||||
this.document,
|
this.document,
|
||||||
doc
|
doc
|
||||||
);
|
);
|
||||||
|
|
@ -603,7 +603,7 @@ export default function DHApplicationMixin(Base) {
|
||||||
const doc = await fromUuid(itemUuid);
|
const doc = await fromUuid(itemUuid);
|
||||||
|
|
||||||
//get inventory-item description element
|
//get inventory-item description element
|
||||||
const descriptionElement = el.querySelector('.inventory-description');
|
const descriptionElement = el.querySelector('.invetory-description');
|
||||||
if (!doc || !descriptionElement) continue;
|
if (!doc || !descriptionElement) continue;
|
||||||
|
|
||||||
// localize the description (idk if it's still necessary)
|
// localize the description (idk if it's still necessary)
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
|
||||||
const doc = await getDocFromElement(target),
|
const doc = await getDocFromElement(target),
|
||||||
action = doc?.system?.attack ?? doc;
|
action = doc?.system?.attack ?? doc;
|
||||||
const config = action.prepareConfig(event);
|
const config = action.prepareConfig(event);
|
||||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(
|
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(
|
||||||
this.document,
|
this.document,
|
||||||
doc
|
doc
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -342,31 +342,29 @@ export default class DhCountdowns extends HandlebarsApplicationMixin(Application
|
||||||
* Sends updates of the countdowns to the GM player. Since this is asynchronous, be sure to
|
* Sends updates of the countdowns to the GM player. Since this is asynchronous, be sure to
|
||||||
* update all the countdowns at the same time.
|
* update all the countdowns at the same time.
|
||||||
*
|
*
|
||||||
* @param {...(string | { type: string; undo?: boolean })} progressTypes Countdowns to be updated
|
* @param {...any} progressTypes Countdowns to be updated
|
||||||
*/
|
*/
|
||||||
static async updateCountdowns(...progressTypes) {
|
static async updateCountdowns(...progressTypes) {
|
||||||
progressTypes = progressTypes.map(p => typeof p === 'string' ? { type: p } : p);
|
|
||||||
const { countdownAutomation } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
const { countdownAutomation } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||||
if (!countdownAutomation) return;
|
if (!countdownAutomation) return;
|
||||||
|
|
||||||
const countdownSetting = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns);
|
const countdownSetting = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns);
|
||||||
const updatedCountdowns = Object.keys(countdownSetting.countdowns).reduce((acc, key) => {
|
const updatedCountdowns = Object.keys(countdownSetting.countdowns).reduce((acc, key) => {
|
||||||
const countdown = countdownSetting.countdowns[key];
|
const countdown = countdownSetting.countdowns[key];
|
||||||
const progressData = progressTypes.find(x => x.type === countdown.progress.type);
|
if (progressTypes.indexOf(countdown.progress.type) !== -1 && countdown.progress.current > 0) {
|
||||||
if (progressData && countdown.progress.current > 0) {
|
acc.push(key);
|
||||||
acc[key] = { value: progressData.undo ? 1 : -1 };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, []);
|
||||||
|
|
||||||
const countdownData = countdownSetting.toObject();
|
const countdownData = countdownSetting.toObject();
|
||||||
const settings = {
|
const settings = {
|
||||||
...countdownData,
|
...countdownData,
|
||||||
countdowns: Object.keys(countdownData.countdowns).reduce((acc, key) => {
|
countdowns: Object.keys(countdownData.countdowns).reduce((acc, key) => {
|
||||||
const countdown = foundry.utils.deepClone(countdownData.countdowns[key]);
|
const countdown = foundry.utils.deepClone(countdownData.countdowns[key]);
|
||||||
if (updatedCountdowns[key]) {
|
if (updatedCountdowns.includes(key)) {
|
||||||
countdown.progress.current += updatedCountdowns[key].value;
|
countdown.progress.current -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
acc[key] = countdown;
|
acc[key] = countdown;
|
||||||
|
|
|
||||||
|
|
@ -54,10 +54,6 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasDescription() {
|
|
||||||
return Boolean(this.description);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Map containing each Action step based on fields define in schema. Ordered by Fields order property.
|
* Create a Map containing each Action step based on fields define in schema. Ordered by Fields order property.
|
||||||
*
|
*
|
||||||
|
|
@ -232,8 +228,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
let config = this.prepareConfig(event, configOptions);
|
let config = this.prepareConfig(event, configOptions);
|
||||||
if (!config) return;
|
if (!config) return;
|
||||||
|
|
||||||
config.effects =
|
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(this.actor, this.item);
|
||||||
await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(this.actor, this.item);
|
|
||||||
|
|
||||||
if (Hooks.call(`${CONFIG.DH.id}.preUseAction`, this, config) === false) return;
|
if (Hooks.call(`${CONFIG.DH.id}.preUseAction`, this, config) === false) return;
|
||||||
|
|
||||||
|
|
@ -338,45 +333,27 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the all potentially applicable effects on the actor for the action's RollDialog
|
* Get the all potentially applicable effects on the actor
|
||||||
* @param {DHActor} actor The actor performing the action
|
* @param {DHActor} actor The actor performing the action
|
||||||
* @param {DHItem|DhActor} effectParent The parent of the effect
|
* @param {DHItem|DhActor} effectParent The parent of the effect
|
||||||
* @returns {DhActiveEffect[]}
|
* @returns {DhActiveEffect[]}
|
||||||
*/
|
*/
|
||||||
static async getActionRelevantEffects(actor, effectParent) {
|
static async getEffects(actor, effectParent) {
|
||||||
if (!actor) return [];
|
if (!actor) return [];
|
||||||
|
|
||||||
// Changes on weapon effects are not typically only applicable to show in the roll dialog for the weapon itself
|
return Array.from(await actor.allApplicableEffects({ noTransferArmor: true, noSelfArmor: true })).filter(
|
||||||
// The exemptions to this rule are listed below
|
effect => {
|
||||||
const weaponTransferredEffectKeys = [
|
/* Effects on weapons only ever apply for the weapon itself */
|
||||||
'system.bonuses.roll.spellcast.bonus'
|
|
||||||
];
|
|
||||||
|
|
||||||
const results = [];
|
|
||||||
const applicableEffects = await actor.allApplicableEffects({ noTransferArmor: true, noSelfArmor: true });
|
|
||||||
for (const effect of [...applicableEffects].filter(e => !e.isSuppressed)) {
|
|
||||||
if (effect.parent.type === 'weapon') {
|
if (effect.parent.type === 'weapon') {
|
||||||
// Effects on weapons only ever apply for the weapon itself (with a few exceptions)
|
/* Unless they're secondary - then they apply only to other primary weapons */
|
||||||
const restricted =
|
if (effect.parent.system.secondary) {
|
||||||
effect.parent.system.secondary
|
if (effectParent?.type !== 'weapon' || effectParent?.system.secondary) return false;
|
||||||
// Secondary applies only to other primary weapons
|
} else if (effectParent?.id !== effect.parent.id) return false;
|
||||||
? effectParent?.type !== 'weapon' || effectParent?.system.secondary
|
|
||||||
// Primary only applies to itself
|
|
||||||
: effectParent?.id !== effect.parent.id;
|
|
||||||
if (restricted) {
|
|
||||||
const sourceChanges = effect._source.system.changes;
|
|
||||||
const changes = sourceChanges.filter(x => weaponTransferredEffectKeys.includes(x.key));
|
|
||||||
if (changes.length) {
|
|
||||||
results.push(effect.clone({ 'system.changes': changes }));
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
results.push(effect);
|
return !effect.isSuppressed;
|
||||||
}
|
}
|
||||||
|
);
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -52,10 +52,6 @@ export default class DHArmor extends AttachableItem {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get itemFeatures() {
|
|
||||||
return this.armorFeatures;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**@inheritdoc */
|
/**@inheritdoc */
|
||||||
async getDescriptionData() {
|
async getDescriptionData() {
|
||||||
const baseDescription = this.description;
|
const baseDescription = this.description;
|
||||||
|
|
@ -173,4 +169,8 @@ export default class DHArmor extends AttachableItem {
|
||||||
const labels = [`${game.i18n.localize('DAGGERHEART.ITEMS.Armor.baseScore')}: ${this.armor.max}`];
|
const labels = [`${game.i18n.localize('DAGGERHEART.ITEMS.Armor.baseScore')}: ${this.armor.max}`];
|
||||||
return labels;
|
return labels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get itemFeatures() {
|
||||||
|
return this.armorFeatures;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -113,10 +113,6 @@ export default class DHWeapon extends AttachableItem {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get itemFeatures() {
|
|
||||||
return this.weaponFeatures;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**@inheritdoc */
|
/**@inheritdoc */
|
||||||
async getDescriptionData() {
|
async getDescriptionData() {
|
||||||
const baseDescription = this.description;
|
const baseDescription = this.description;
|
||||||
|
|
@ -273,4 +269,8 @@ export default class DHWeapon extends AttachableItem {
|
||||||
|
|
||||||
return labels;
|
return labels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get itemFeatures() {
|
||||||
|
return this.weaponFeatures;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,19 @@
|
||||||
import { ResourceUpdateMap } from '../data/action/baseAction.mjs';
|
import { ResourceUpdateMap } from '../data/action/baseAction.mjs';
|
||||||
|
|
||||||
export function updateResourcesForDualityReroll(oldDuality, newDuality, actor) {
|
export function updateResourcesForDualityReroll(oldDuality, newDuality, actor) {
|
||||||
|
const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||||
|
if (game.user.isGM ? !hopeFear.gm : !hopeFear.players) return;
|
||||||
|
|
||||||
|
const updates = [];
|
||||||
const hope = (newDuality >= 0 ? 1 : 0) - (oldDuality >= 0 ? 1 : 0);
|
const hope = (newDuality >= 0 ? 1 : 0) - (oldDuality >= 0 ? 1 : 0);
|
||||||
const stress = (newDuality === 0 ? 1 : 0) - (oldDuality === 0 ? 1 : 0);
|
const stress = (newDuality === 0 ? 1 : 0) - (oldDuality === 0 ? 1 : 0);
|
||||||
const fear = (newDuality === -1 ? 1 : 0) - (oldDuality === -1 ? 1 : 0);
|
const fear = (newDuality === -1 ? 1 : 0) - (oldDuality === -1 ? 1 : 0);
|
||||||
|
|
||||||
const { hopeFear, countdownAutomation } =
|
|
||||||
game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
|
||||||
|
|
||||||
if (game.user.isGM ? hopeFear.gm : hopeFear.players) {
|
|
||||||
const updates = [];
|
|
||||||
if (hope !== 0) updates.push({ key: 'hope', value: hope, enabled: true });
|
if (hope !== 0) updates.push({ key: 'hope', value: hope, enabled: true });
|
||||||
if (stress !== 0) updates.push({ key: 'stress', value: -1 * stress, enabled: true });
|
if (stress !== 0) updates.push({ key: 'stress', value: -1 * stress, enabled: true });
|
||||||
if (fear !== 0) updates.push({ key: 'fear', value: fear, enabled: true })
|
if (fear !== 0) updates.push({ key: 'fear', value: fear, enabled: true });
|
||||||
|
|
||||||
const resourceUpdates = new ResourceUpdateMap(actor);
|
const resourceUpdates = new ResourceUpdateMap(actor);
|
||||||
resourceUpdates.addResources(updates);
|
resourceUpdates.addResources(updates);
|
||||||
resourceUpdates.updateResources();
|
resourceUpdates.updateResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (countdownAutomation && fear !== 0) {
|
|
||||||
game.system.api.applications.ui.DhCountdowns.updateCountdowns({
|
|
||||||
type: CONFIG.DH.GENERAL.countdownProgressionTypes.fear.id,
|
|
||||||
undo: fear === 1 ? false : true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,6 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasDescription() {
|
|
||||||
return Boolean(this.description);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Event Handlers */
|
/* Event Handlers */
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
@ -228,13 +224,12 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
|
||||||
* @returns {string[]} An array of localized tag strings.
|
* @returns {string[]} An array of localized tag strings.
|
||||||
*/
|
*/
|
||||||
_getTags() {
|
_getTags() {
|
||||||
const tags = [];
|
const tags = [
|
||||||
const originActor = DhActiveEffect.#resolveParentDocument(fromUuidSync(this.origin, { strict: false }), Actor);
|
`${game.i18n.localize(this.parent.system.metadata.label)}: ${this.parent.name}`,
|
||||||
if (originActor && originActor !== this.actor) {
|
game.i18n.localize(
|
||||||
tags.push(_loc('DAGGERHEART.EFFECTS.OriginTag', { name: originActor.name }));
|
this.isTemporary ? 'DAGGERHEART.EFFECTS.Duration.temporary' : 'DAGGERHEART.EFFECTS.Duration.passive'
|
||||||
} else if (!(this.parent instanceof Actor)) {
|
)
|
||||||
tags.push(`${_loc(this.parent.system.metadata.label)}: ${this.parent.name}`);
|
];
|
||||||
}
|
|
||||||
|
|
||||||
for (const statusId of this.statuses) {
|
for (const statusId of this.statuses) {
|
||||||
const status = CONFIG.statusEffects.find(s => s.id === statusId);
|
const status = CONFIG.statusEffects.find(s => s.id === statusId);
|
||||||
|
|
|
||||||
|
|
@ -549,7 +549,7 @@ export default class DhpActor extends Actor {
|
||||||
headerTitle: game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', {
|
headerTitle: game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', {
|
||||||
ability: abilityLabel
|
ability: abilityLabel
|
||||||
}),
|
}),
|
||||||
effects: await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(this),
|
effects: await game.system.api.data.actions.actionsTypes.base.getEffects(this),
|
||||||
roll: {
|
roll: {
|
||||||
trait: trait,
|
trait: trait,
|
||||||
type: 'trait'
|
type: 'trait'
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
|
||||||
if (this.system.action) {
|
if (this.system.action) {
|
||||||
const actor = await foundry.utils.fromUuid(config.source.actor);
|
const actor = await foundry.utils.fromUuid(config.source.actor);
|
||||||
const item = actor?.items.get(config.source.item) ?? null;
|
const item = actor?.items.get(config.source.item) ?? null;
|
||||||
config.effects = await game.system.api.data.actions.actionsTypes.base.getActionRelevantEffects(actor, item);
|
config.effects = await game.system.api.data.actions.actionsTypes.base.getEffects(actor, item);
|
||||||
await this.system.action.workflow.get('damage')?.execute(config, this._id, true);
|
await this.system.action.workflow.get('damage')?.execute(config, this._id, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,9 +46,7 @@ export default class DhpCombat extends Combat {
|
||||||
for (let actor of actors) {
|
for (let actor of actors) {
|
||||||
await actor.createEmbeddedDocuments(
|
await actor.createEmbeddedDocuments(
|
||||||
'ActiveEffect',
|
'ActiveEffect',
|
||||||
effects
|
effects.filter(x => x.effectTargetTypes.includes(actor.type))
|
||||||
.filter(x => x.effectTargetTypes.includes(actor.type))
|
|
||||||
.map(x => foundry.utils.deepClone(x))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -89,10 +89,6 @@ export default class DHItem extends foundry.documents.Item {
|
||||||
return !pack?.locked && this.isOwner && isValidType && hasActions;
|
return !pack?.locked && this.isOwner && isValidType && hasActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasDescription() {
|
|
||||||
return Boolean(this.system.description) || Boolean(this.system.itemFeatures?.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @inheritdoc */
|
/** @inheritdoc */
|
||||||
static async createDialog(data = {}, createOptions = {}, options = {}) {
|
static async createDialog(data = {}, createOptions = {}, options = {}) {
|
||||||
const { folders, types, template, context = {}, ...dialogOptions } = options;
|
const { folders, types, template, context = {}, ...dialogOptions } = options;
|
||||||
|
|
|
||||||
|
|
@ -43,26 +43,36 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-main {
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 2px;
|
|
||||||
margin: -2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
.inventory-item-header .item-label .item-name .expanded-icon {
|
.inventory-item-header .item-label .item-name .expanded-icon {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
.item-main {
|
&:has(.inventory-item-content.extensible) {
|
||||||
|
.inventory-item-header,
|
||||||
|
.inventory-item-content {
|
||||||
background: light-dark(@dark-blue-40, @golden-40);
|
background: light-dark(@dark-blue-40, @golden-40);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
&:has(.inventory-item-content.extended) {
|
&:has(.inventory-item-content.extended) {
|
||||||
.inventory-item-header .item-label .item-name .expanded-icon {
|
.inventory-item-header .item-label .item-name .expanded-icon {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:has(.inventory-item-content.extensible) {
|
||||||
|
.inventory-item-header {
|
||||||
|
border-radius: 5px 5px 0 0;
|
||||||
|
}
|
||||||
|
.inventory-item-content {
|
||||||
|
border-radius: 0 0 5px 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:has(.inventory-item-content.extensible)) .inventory-item-header {
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.inventory-item-header,
|
.inventory-item-header,
|
||||||
|
|
@ -161,7 +171,7 @@
|
||||||
grid-template-rows: 1fr;
|
grid-template-rows: 1fr;
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
}
|
}
|
||||||
.inventory-description {
|
.invetory-description {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
|
|
@ -273,6 +283,22 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Styles for the non-compact version so that the hover looks nicer.
|
||||||
|
* Because of overflow, it is best if the containing element has some top and left padding.
|
||||||
|
*/
|
||||||
|
.inventory-item:not(.inventory-item-compact) {
|
||||||
|
.inventory-item-header {
|
||||||
|
padding-top: 3px;
|
||||||
|
margin-top: -3px;
|
||||||
|
}
|
||||||
|
> * {
|
||||||
|
padding-left: 3px;
|
||||||
|
padding-right: 3px;
|
||||||
|
margin-left: -3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.card-item {
|
.card-item {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 120px;
|
height: 120px;
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
.application.daggerheart {
|
.application.daggerheart {
|
||||||
prose-mirror {
|
prose-mirror {
|
||||||
--menu-padding: 4px 0px;
|
--menu-padding: 0;
|
||||||
--menu-height: calc(var(--menu-button-height) + 8px);
|
--menu-height: var(--menu-button-height);
|
||||||
height: 100% !important;
|
height: 100% !important;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,45 @@
|
||||||
@import './sheet.less';
|
@import '../../../utils/colors.less';
|
||||||
|
@import '../../../utils/fonts.less';
|
||||||
|
|
||||||
|
.application.sheet.daggerheart.actor.dh-style.adversary {
|
||||||
|
--left-indent: 15px;
|
||||||
|
|
||||||
|
.window-content {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 275px 1fr;
|
||||||
|
grid-template-rows: auto 1fr;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.adversary-sidebar-sheet {
|
||||||
|
grid-row: 1 / span 2;
|
||||||
|
grid-column: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.adversary-header-sheet {
|
||||||
|
grid-row: 1;
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab {
|
||||||
|
grid-row: 2;
|
||||||
|
grid-column: 2;
|
||||||
|
&.active {
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 0;
|
||||||
|
margin-right: 1px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@import './header.less';
|
@import './header.less';
|
||||||
@import './features.less';
|
@import './features.less';
|
||||||
@import './sidebar.less';
|
@import './sidebar.less';
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
@import '../../../utils/colors.less';
|
|
||||||
@import '../../../utils/fonts.less';
|
|
||||||
|
|
||||||
.application.sheet.daggerheart.actor.dh-style.adversary {
|
|
||||||
--left-indent: 15px;
|
|
||||||
|
|
||||||
.window-content {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 275px 1fr;
|
|
||||||
grid-template-rows: auto 1fr;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
padding-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.adversary-sidebar-sheet {
|
|
||||||
grid-row: 1 / span 2;
|
|
||||||
grid-column: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.adversary-header-sheet {
|
|
||||||
grid-row: 1;
|
|
||||||
grid-column: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab {
|
|
||||||
grid-row: 2;
|
|
||||||
grid-column: 2;
|
|
||||||
&.active {
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
padding: 0;
|
|
||||||
margin-right: 1px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"id": "daggerheart",
|
"id": "daggerheart",
|
||||||
"title": "Daggerheart",
|
"title": "Daggerheart",
|
||||||
"description": "An unofficial implementation of the Daggerheart system",
|
"description": "An unofficial implementation of the Daggerheart system",
|
||||||
"version": "2.4.1",
|
"version": "2.3.4",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "14.364",
|
"minimum": "14.364",
|
||||||
"verified": "14.364",
|
"verified": "14.364",
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
},
|
},
|
||||||
"url": "https://github.com/Foundryborne/daggerheart",
|
"url": "https://github.com/Foundryborne/daggerheart",
|
||||||
"manifest": "https://raw.githubusercontent.com/Foundryborne/daggerheart/v14/system.json",
|
"manifest": "https://raw.githubusercontent.com/Foundryborne/daggerheart/v14/system.json",
|
||||||
"download": "https://github.com/Foundryborne/daggerheart/releases/download/2.4.1/system.zip",
|
"download": "https://github.com/Foundryborne/daggerheart/releases/download/2.3.4/system.zip",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "WBHarry"
|
"name": "WBHarry"
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,7 @@ Parameters:
|
||||||
data-type="{{type}}" data-item-type="{{item.type}}"
|
data-type="{{type}}" data-item-type="{{item.type}}"
|
||||||
data-item-uuid="{{item.uuid}}" data-no-compendium-edit="{{noCompendiumEdit}}"
|
data-item-uuid="{{item.uuid}}" data-no-compendium-edit="{{noCompendiumEdit}}"
|
||||||
>
|
>
|
||||||
<div class="item-main">
|
<div class="inventory-item-header {{#if hideContextMenu}}padded{{/if}}" {{#unless noExtensible}}data-action="toggleExtended" {{/unless}}>
|
||||||
<div class="inventory-item-header{{#if hideContextMenu}} padded{{/if}}" {{#unless (or noExtensible (not item.hasDescription))}}data-action="toggleExtended" {{/unless}}>
|
|
||||||
{{!-- Image --}}
|
{{!-- Image --}}
|
||||||
<div class="img-portait" draggable="true"
|
<div class="img-portait" draggable="true"
|
||||||
{{#unless (eq showActions false)}}data-action='{{ifThen item.usable "useItem" (ifThen (hasProperty item "toChat" ) "toChat" "editDoc" ) }}'{{/unless}}
|
{{#unless (eq showActions false)}}data-action='{{ifThen item.usable "useItem" (ifThen (hasProperty item "toChat" ) "toChat" "editDoc" ) }}'{{/unless}}
|
||||||
|
|
@ -44,16 +43,18 @@ Parameters:
|
||||||
{{!-- Name & Tags --}}
|
{{!-- Name & Tags --}}
|
||||||
<div class="item-label" draggable="true">
|
<div class="item-label" draggable="true">
|
||||||
{{!-- Item Name --}}
|
{{!-- Item Name --}}
|
||||||
<span class="item-name">{{localize item.name}} {{#unless (or noExtensible (not item.hasDescription))}}<span class="expanded-icon"><i class="fa-solid fa-expand"></i></span>{{/unless}}</span>
|
<span class="item-name">{{localize item.name}} {{#unless (or noExtensible (not item.system.description))}}<span class="expanded-icon"><i class="fa-solid fa-expand"></i></span>{{/unless}}</span>
|
||||||
|
|
||||||
{{!-- Tags Start --}}
|
{{!-- Tags Start --}}
|
||||||
{{#if (not hideTags)}}
|
{{#if (not hideTags)}}
|
||||||
{{#> "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs" item}}
|
{{#> "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs" item}}
|
||||||
{{#if (and (eq ../type 'feature') system.featureForm (ne @root.document.type "character"))}}
|
{{#if (eq ../type 'feature')}}
|
||||||
|
{{#if (and system.featureForm (ne @root.document.type "character"))}}
|
||||||
<div class="tag feature-form">
|
<div class="tag feature-form">
|
||||||
<span class="recall-value">{{localize (concat "DAGGERHEART.CONFIG.FeatureForm." system.featureForm)}}</span>
|
<span class="recall-value">{{localize (concat "DAGGERHEART.CONFIG.FeatureForm." system.featureForm)}}</span>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
{{/ "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs"}}
|
{{/ "systems/daggerheart/templates/sheets/global/partials/item-tags.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
|
@ -130,11 +131,10 @@ Parameters:
|
||||||
</div>
|
</div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
</div>
|
</div>
|
||||||
{{#unless hideDescription}}
|
<div class="inventory-item-content{{#unless noExtensible}} extensible{{/unless}}">
|
||||||
<div class="inventory-item-content{{#unless (or noExtensible (not item.hasDescription))}} extensible{{/unless}}">
|
|
||||||
{{!-- Description --}}
|
{{!-- Description --}}
|
||||||
<div class="inventory-description"></div>
|
{{#unless hideDescription}}
|
||||||
</div>
|
<div class="invetory-description"></div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
</div>
|
</div>
|
||||||
{{!-- Dice Resource --}}
|
{{!-- Dice Resource --}}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue