diff --git a/lang/en.json b/lang/en.json index 0180b085..3f21f5eb 100755 --- a/lang/en.json +++ b/lang/en.json @@ -113,8 +113,7 @@ "area": { "sectionTitle": "Areas", "shape": "Shape", - "size": "Size", - "hasHole": "Area Hole" + "size": "Size" }, "displayInChat": "Display in chat", "deleteTriggerTitle": "Delete Trigger", @@ -871,10 +870,6 @@ "bruiser": "for each Bruiser adversary.", "solo": "for each Solo adversary." }, - "AreaTypes": { - "attached": { "label": "Attached To Token" }, - "placed": { "label": "Placed In Scene" } - }, "ArmorInteraction": { "none": { "label": "Ignores Armor" }, "active": { "label": "Active w/ Armor" }, diff --git a/module/applications/sheets/actors/adversary.mjs b/module/applications/sheets/actors/adversary.mjs index bcfe3cbb..c25ed64b 100644 --- a/module/applications/sheets/actors/adversary.mjs +++ b/module/applications/sheets/actors/adversary.mjs @@ -7,7 +7,7 @@ export default class AdversarySheet extends DHBaseActorSheet { /** @inheritDoc */ static DEFAULT_OPTIONS = { classes: ['adversary'], - position: { width: 645, height: 760 }, + position: { width: 650, height: 750 }, window: { resizable: true }, actions: { toggleHitPoints: AdversarySheet.#toggleHitPoints, diff --git a/module/applications/sheets/actors/character.mjs b/module/applications/sheets/actors/character.mjs index 5006e9d6..3a60e7ca 100644 --- a/module/applications/sheets/actors/character.mjs +++ b/module/applications/sheets/actors/character.mjs @@ -1057,7 +1057,7 @@ export default class CharacterSheet extends DHBaseActorSheet { direction: 'DOWN' }); - html.querySelectorAll('.armor .slot').forEach(element => { + html.querySelectorAll('.armor-slot').forEach(element => { element.addEventListener('click', CharacterSheet.armorSourcePipUpdate); }); } @@ -1072,7 +1072,7 @@ export default class CharacterSheet extends DHBaseActorSheet { /** Update specific armor source */ static async armorSourcePipUpdate(event) { - const target = event.target.closest('.slot'); + const target = event.target.closest('.armor-slot'); const { uuid, value } = target.dataset; const document = await foundry.utils.fromUuid(uuid); @@ -1100,7 +1100,7 @@ export default class CharacterSheet extends DHBaseActorSheet { } const container = target.closest('.slot-bar'); - for (const armorSlot of container.querySelectorAll('.armor .slot i')) { + for (const armorSlot of container.querySelectorAll('.armor-slot i')) { const index = Number.parseInt(armorSlot.dataset.index); if (decreasing && index >= newCurrent) { armorSlot.classList.remove('fa-shield'); diff --git a/module/canvas/placeables/regionLayer.mjs b/module/canvas/placeables/regionLayer.mjs index b71ccc3f..684fdd5e 100644 --- a/module/canvas/placeables/regionLayer.mjs +++ b/module/canvas/placeables/regionLayer.mjs @@ -96,7 +96,7 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer { return inBounds.length === 1 ? inBounds[0] : null; } - static getTemplateShape({ shapeType, angle, range, direction, hasHole } = {}) { + static getTemplateShape({ type, angle, range, direction } = {}) { const { line, rectangle, inFront, cone, circle, emanation } = CONFIG.DH.GENERAL.templateTypes; /* Length calculation */ @@ -112,11 +112,11 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer { const shapeData = { ...canvas.mousePosition, - type: shapeType, + type: type, direction: direction ?? 0 }; - switch (shapeType) { + switch (type) { case rectangle.id: shapeData.width = length; shapeData.height = length; @@ -145,8 +145,7 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer { y: 0, width: 1, height: 1, - shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1, - hole: hasHole + shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1 }; break; } diff --git a/module/config/actionConfig.mjs b/module/config/actionConfig.mjs index e413a828..a6c04e18 100644 --- a/module/config/actionConfig.mjs +++ b/module/config/actionConfig.mjs @@ -119,10 +119,6 @@ export const advantageState = { export const areaTypes = { placed: { id: 'placed', - label: 'DAGGERHEART.CONFIG.AreaTypes.placed.label' - }, - attached: { - id: 'attached', - label: 'DAGGERHEART.CONFIG.AreaTypes.attached.label' + label: 'Placed Area' } }; diff --git a/module/data/action/baseAction.mjs b/module/data/action/baseAction.mjs index 58be672b..f3008704 100644 --- a/module/data/action/baseAction.mjs +++ b/module/data/action/baseAction.mjs @@ -451,15 +451,7 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel static migrateData(source) { if (source.damage?.parts && Array.isArray(source.damage.parts)) { - let hitPointsExists = source.damage.parts.some(x => x.applyTo === 'hitPoints'); source.damage.parts = source.damage.parts.reduce((acc, part) => { - if (!part.applyTo && hitPointsExists) return acc; - - if (!part.applyTo) { - hitPointsExists = true; - part.applyTo = 'hitPoints'; - } - acc[part.applyTo] = part; return acc; }, {}); diff --git a/module/data/actor/adversary.mjs b/module/data/actor/adversary.mjs index ae17c128..d6d0dcdf 100644 --- a/module/data/actor/adversary.mjs +++ b/module/data/actor/adversary.mjs @@ -87,7 +87,6 @@ export default class DhpAdversary extends DhCreature { parts: { hitPoints: { type: ['physical'], - applyTo: 'hitPoints', value: { multiplier: 'flat' } diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index b39c64aa..3b12da6f 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -107,7 +107,6 @@ export default class DhCharacter extends DhCreature { parts: { hitPoints: { type: ['physical'], - applyTo: 'hitPoints', value: { custom: { enabled: true, diff --git a/module/data/actor/companion.mjs b/module/data/actor/companion.mjs index 2ca7fd5b..300bd698 100644 --- a/module/data/actor/companion.mjs +++ b/module/data/actor/companion.mjs @@ -102,7 +102,6 @@ export default class DhCompanion extends DhCreature { parts: { hitPoints: { type: ['physical'], - applyTo: 'hitPoints', value: { dice: 'd6', multiplier: 'prof' diff --git a/module/data/countdowns.mjs b/module/data/countdowns.mjs index ffe4d26b..8e55ed31 100644 --- a/module/data/countdowns.mjs +++ b/module/data/countdowns.mjs @@ -28,39 +28,6 @@ export default class DhCountdowns extends foundry.abstract.DataModel { for (const countdownKey of changedCountdowns) foundry.ui.countdowns.changedCountdownsForAnimation.add(countdownKey); } - - static migrateData(source) { - const migrateOldCountdowns = (data, type) => { - for (const key of Object.keys(data.countdowns)) { - const countdown = data.countdowns[key]; - source.countdowns[key] = { - ...countdown, - type: type, - ownership: Object.keys(countdown.ownership.players).reduce((acc, key) => { - acc[key] = - countdown.ownership.players[key].type === 1 ? 2 : countdown.ownership.players[key].type; - return acc; - }, {}), - progress: { - ...countdown.progress, - type: countdown.progress.type.value - } - }; - } - - source[type] = null; - }; - - if (source.narrative) { - migrateOldCountdowns(source.narrative, 'narrative'); - } - - if (source.encounter) { - migrateOldCountdowns(source.encounter, 'encounter'); - } - - return super.migrateData(source); - } } export class DhCountdown extends foundry.abstract.DataModel { diff --git a/module/data/fields/action/areasField.mjs b/module/data/fields/action/areasField.mjs index a4180101..52110045 100644 --- a/module/data/fields/action/areasField.mjs +++ b/module/data/fields/action/areasField.mjs @@ -33,10 +33,6 @@ export default class AreasField extends fields.ArrayField { initial: CONFIG.DH.GENERAL.range.veryClose.id, label: 'DAGGERHEART.ACTIONS.Config.area.size' }), - hasHole: new fields.BooleanField({ - initial: false, - label: 'DAGGERHEART.ACTIONS.Config.area.hasHole' - }), effects: new fields.ArrayField(new fields.DocumentIdField()) }); super(element, options, context); diff --git a/module/data/fields/action/summonField.mjs b/module/data/fields/action/summonField.mjs index 6845d2ba..a2275fa5 100644 --- a/module/data/fields/action/summonField.mjs +++ b/module/data/fields/action/summonField.mjs @@ -1,4 +1,4 @@ -import { getWorldActor, itemAbleRollParse, triggerChatRollFx } from '../../../helpers/utils.mjs'; +import { itemAbleRollParse, triggerChatRollFx } from '../../../helpers/utils.mjs'; import FormulaField from '../formulaField.mjs'; const fields = foundry.data.fields; @@ -42,7 +42,7 @@ export default class DHSummonField extends fields.ArrayField { const count = roll.total; if (!roll.isDeterministic) rolls.push(roll); - const actor = await getWorldActor(await foundry.utils.fromUuid(summon.actorUUID)); + const actor = await DHSummonField.getWorldActor(await foundry.utils.fromUuid(summon.actorUUID)); /* Extending summon data in memory so it's available in actionField.toChat. Think it's harmless, but ugly. Could maybe find a better way. */ summon.actor = actor.toObject(); @@ -62,6 +62,19 @@ export default class DHSummonField extends fields.ArrayField { DHSummonField.handleSummon(summonData, this.actor); } + /* Check for any available instances of the actor present in the world if we're missing artwork in the compendium. If none exists, create one. */ + static async getWorldActor(baseActor) { + const dataType = game.system.api.data.actors[`Dh${baseActor.type.capitalize()}`]; + if (baseActor.inCompendium && dataType && baseActor.img === dataType.DEFAULT_ICON) { + const worldActorCopy = game.actors.find(x => x.name === baseActor.name); + if (worldActorCopy) return worldActorCopy; + + return await game.system.api.documents.DhpActor.create(baseActor.toObject()); + } + + return baseActor; + } + static async handleSummon(summonData, actionActor) { await CONFIG.ux.TokenManager.createTokensWithPreview(summonData, { elevation: actionActor.token?.elevation }); diff --git a/module/documents/chatMessage.mjs b/module/documents/chatMessage.mjs index fd68997c..b555dfca 100644 --- a/module/documents/chatMessage.mjs +++ b/module/documents/chatMessage.mjs @@ -276,12 +276,8 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage { async onCreateAreas(event) { const createArea = async selectedArea => { const effects = selectedArea.effects.map(effect => this.system.action.item.effects.get(effect).uuid); - const { shape: shapeType, size: range, hasHole } = selectedArea; - const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({ - shapeType, - range, - hasHole - }); + const { shape: type, size: range } = selectedArea; + const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({ type, range }); const scene = game.scenes.get(game.user.viewedScene); const level = scene.levels.find(x => x.isView); @@ -309,10 +305,7 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage { visibility: CONST.REGION_VISIBILITY.ALWAYS }; const placeRegion = data => { - canvas.regions.placeRegion(data, { - create: true, - attachToToken: selectedArea.type === CONFIG.DH.ACTIONS.areaTypes.attached.id - }); + canvas.regions.placeRegion(data, { create: true }); }; // Regions with effects must be placed by the GM diff --git a/module/enrichers/TemplateEnricher.mjs b/module/enrichers/TemplateEnricher.mjs index 4478ea14..bbe93b17 100644 --- a/module/enrichers/TemplateEnricher.mjs +++ b/module/enrichers/TemplateEnricher.mjs @@ -58,11 +58,10 @@ export const renderMeasuredTemplate = async event => { if (!type || !range || !game.canvas.scene) return; const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({ - shapetype: type, + type, angle, range, - direction, - hasHole: false + direction }); await canvas.regions.placeRegion( diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 71f43997..6467edd7 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -889,26 +889,4 @@ export async function triggerChatRollFx(rolls, options = { whisper: false, blind export function shouldUseHopeFearAutomation(options = { gmAsPlayer: true }) { const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation); return (!game.user.isGM || options.gmAsPlayer) ? hopeFear.players : hopeFear.gm; -} - -export async function getWorldActor(baseActor) { - if (baseActor.inCompendium) { - const worldActorCandidates = game.actors.filter(x => - x._stats.compendiumSource === baseActor.uuid && - x.prototypeToken.actorLink === baseActor.prototypeToken.actorLink - ); - const worldActorCopy = worldActorCandidates.find(a => a.name === baseActor.name) ?? worldActorCandidates[0]; - if (worldActorCopy) return worldActorCopy; - - const baseActorData = baseActor; - return await game.system.api.documents.DhpActor.create({ - ...baseActorData, - _stats: { - ...baseActorData._stats, - compendiumSource: baseActor.uuid - } - }); - } - - return baseActor; } \ No newline at end of file diff --git a/module/systemRegistration/migrations.mjs b/module/systemRegistration/migrations.mjs index 6971c34c..ec546c92 100644 --- a/module/systemRegistration/migrations.mjs +++ b/module/systemRegistration/migrations.mjs @@ -1,4 +1,5 @@ import { defaultRestOptions } from '../config/generalConfig.mjs'; +import { RefreshType, socketEvent } from './socket.mjs'; export async function runMigrations() { let lastMigrationVersion = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LastMigrationVersion); @@ -152,26 +153,61 @@ export async function runMigrations() { await pack.configure({ locked: true }); } + /* Migrate old countdown structure */ + const countdownSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns); + const getCountdowns = (data, type) => { + return Object.keys(data.countdowns).reduce((acc, key) => { + const countdown = data.countdowns[key]; + acc[key] = { + ...countdown, + type: type, + ownership: Object.keys(countdown.ownership.players).reduce((acc, key) => { + acc[key] = + countdown.ownership.players[key].type === 1 ? 2 : countdown.ownership.players[key].type; + return acc; + }, {}), + progress: { + ...countdown.progress, + type: countdown.progress.type.value + } + }; + + return acc; + }, {}); + }; + + await countdownSettings.updateSource({ + countdowns: { + ...getCountdowns(countdownSettings.narrative, 'narrative'), + ...getCountdowns(countdownSettings.encounter, 'encounter') + } + }); + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Countdowns, countdownSettings); + + game.socket.emit(`system.${CONFIG.DH.id}`, { + action: socketEvent.Refresh, + data: { refreshType: RefreshType.Countdown } + }); + Hooks.callAll(socketEvent.Refresh, { refreshType: RefreshType.Countdown }); + lastMigrationVersion = '1.2.0'; } if (foundry.utils.isNewerVersion('1.2.7', lastMigrationVersion)) { - try { - const tagTeam = game.settings.get(CONFIG.DH.id, 'TagTeamRoll'); - const initatorMissing = tagTeam.initiator && !game.actors.some(actor => actor.id === tagTeam.initiator); - const missingMembers = Object.keys(tagTeam.members).reduce((acc, id) => { - if (!game.actors.some(actor => actor.id === id)) { - acc[id] = _del; - } - return acc; - }, {}); + const tagTeam = game.settings.get(CONFIG.DH.id, 'TagTeamRoll'); + const initatorMissing = tagTeam.initiator && !game.actors.some(actor => actor.id === tagTeam.initiator); + const missingMembers = Object.keys(tagTeam.members).reduce((acc, id) => { + if (!game.actors.some(actor => actor.id === id)) { + acc[id] = _del; + } + return acc; + }, {}); - await tagTeam.updateSource({ - initiator: initatorMissing ? null : tagTeam.initiator, - members: missingMembers - }); - await game.settings.set(CONFIG.DH.id, 'TagTeamRoll', tagTeam); - } catch { } + await tagTeam.updateSource({ + initiator: initatorMissing ? null : tagTeam.initiator, + members: missingMembers + }); + await game.settings.set(CONFIG.DH.id, 'TagTeamRoll', tagTeam); lastMigrationVersion = '1.2.7'; } @@ -267,8 +303,6 @@ export async function runMigrations() { /* Migrate existing effects modifying armor, creating new Armor Effects instead */ const migrateEffects = async entity => { - if (!entity?.effects) return; - for (const effect of entity.effects) { if (effect.system.changes.every(x => x.key !== 'system.armorScore')) continue; diff --git a/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json b/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json index e0476a56..7a3ebd91 100644 --- a/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json +++ b/src/packs/subclasses/feature_Elemental_Aura_2JH9NaOh69yN80Gw.json @@ -52,7 +52,7 @@ "includeBase": false }, "target": { - "type": "", + "type": "hostile", "amount": 1 }, "effects": [ @@ -63,23 +63,13 @@ ], "name": "Fire", "img": "icons/magic/fire/barrier-wall-explosion-orange.webp", - "range": "", - "areas": [ - { - "name": "Elemental Aura: Fire", - "type": "attached", - "shape": "emanation", - "size": "close", - "hasHole": false, - "effects": [] - } - ] + "range": "close" }, "xDBLH5TWidvrYF7z": { "type": "effect", "_id": "xDBLH5TWidvrYF7z", "systemPath": "actions", - "description": "

Your allies gain a +1 bonus to Strength.

", + "description": "

When an adversary marks 1 or more Hit Points, they must also mark a Stress.

", "chatDisplay": true, "actionType": "action", "cost": [], @@ -88,26 +78,19 @@ "max": "", "recovery": null }, - "effects": [], + "effects": [ + { + "_id": "WRuijfHxmUscAa69", + "onSave": false + } + ], "target": { - "type": "", + "type": "friendly", "amount": null }, "name": "Earth", "img": "icons/magic/control/buff-strength-muscle-damage-red.webp", - "range": "", - "areas": [ - { - "name": "Elemental Aura: Earth", - "type": "attached", - "shape": "emanation", - "size": "close", - "hasHole": true, - "effects": [ - "yvpWNCNobg0LLjey" - ] - } - ] + "range": "close" }, "S4t5HlgxWlHwaBDw": { "type": "effect", @@ -129,22 +112,12 @@ } ], "target": { - "type": "self", + "type": "hostile", "amount": null }, "name": "Water", "img": "icons/magic/water/vortex-water-whirlpool.webp", - "range": "self", - "areas": [ - { - "name": "Elemental Aura: Water", - "type": "attached", - "shape": "emanation", - "size": "close", - "hasHole": false, - "effects": [] - } - ] + "range": "close" }, "hAsKFFewtTqd1gg9": { "type": "attack", @@ -165,10 +138,15 @@ "includeBase": false }, "target": { - "type": "self", + "type": "any", "amount": null }, - "effects": [], + "effects": [ + { + "_id": "mJBA2QTyM9SM5NVS", + "onSave": false + } + ], "roll": { "type": "diceSet", "trait": null, @@ -191,19 +169,7 @@ }, "name": "Air", "img": "icons/magic/air/air-burst-spiral-blue-gray.webp", - "range": "self", - "areas": [ - { - "name": "Elemental Aura: Air", - "type": "attached", - "shape": "emanation", - "size": "close", - "hasHole": false, - "effects": [ - "vnKV5hsO4DVjURAl" - ] - } - ] + "range": "" } }, "originItemType": null, @@ -215,6 +181,49 @@ } }, "effects": [ + { + "name": "Elemental Aura (Earth)", + "img": "icons/magic/control/buff-strength-muscle-damage-orange.webp", + "origin": "Compendium.daggerheart.subclasses.Item.2JH9NaOh69yN80Gw", + "transfer": false, + "_id": "WRuijfHxmUscAa69", + "type": "base", + "system": { + "rangeDependence": { + "enabled": false, + "type": "withinRange", + "target": "hostile", + "range": "melee" + } + }, + "changes": [ + { + "key": "system.traits.strength.value", + "mode": 2, + "value": "1", + "priority": null + } + ], + "disabled": false, + "duration": { + "startTime": null, + "combat": null, + "seconds": null, + "rounds": null, + "turns": null, + "startRound": null, + "startTurn": null + }, + "description": "", + "tint": "#ffffff", + "statuses": [], + "sort": 0, + "flags": {}, + "_stats": { + "compendiumSource": null + }, + "_key": "!items.effects!2JH9NaOh69yN80Gw.WRuijfHxmUscAa69" + }, { "name": "Elemental Aura (Water)", "img": "icons/magic/water/vortex-water-whirlpool.webp", @@ -228,15 +237,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" - }, - "changes": [] + } }, + "changes": [], "disabled": false, "duration": { - "value": null, - "units": "seconds", - "expiry": null, - "expired": false + "startTime": null, + "combat": null, + "seconds": null, + "rounds": null, + "turns": null, + "startRound": null, + "startTurn": null }, "description": "", "tint": "#ffffff", @@ -246,9 +258,6 @@ "_stats": { "compendiumSource": null }, - "start": null, - "showIcon": 1, - "folder": null, "_key": "!items.effects!2JH9NaOh69yN80Gw.H7W52ps5d3UGmaFr" }, { @@ -264,15 +273,18 @@ "type": "withinRange", "target": "hostile", "range": "melee" - }, - "changes": [] + } }, + "changes": [], "disabled": false, "duration": { - "value": null, - "units": "seconds", - "expiry": null, - "expired": false + "startTime": null, + "combat": null, + "seconds": null, + "rounds": null, + "turns": null, + "startRound": null, + "startTurn": null }, "description": "", "tint": "#ffffff", @@ -282,120 +294,43 @@ "_stats": { "compendiumSource": null }, - "start": null, - "showIcon": 1, - "folder": null, "_key": "!items.effects!2JH9NaOh69yN80Gw.WX5AMEpmUAutB9Hm" }, { - "name": "Elemental Aura: Earth", - "disabled": false, - "img": "icons/magic/control/buff-strength-muscle-damage-red.webp", - "description": "

Your allies gain a +1 bonus to Strength.

", - "transfer": false, - "statuses": [], - "system": { - "rangeDependence": { - "enabled": false, - "type": "withinRange", - "target": "hostile", - "range": "melee" - }, - "changes": [ - { - "key": "system.traits.strength.value", - "type": "add", - "value": 1, - "priority": null, - "phase": "initial" - } - ], - "duration": { - "description": "", - "type": "" - }, - "stacking": null, - "targetDispositions": [ - 1 - ] - }, - "_id": "yvpWNCNobg0LLjey", - "type": "base", - "start": { - "time": 0, - "combat": null, - "combatant": null, - "initiative": null, - "round": null, - "turn": null - }, - "duration": { - "value": null, - "units": "seconds", - "expiry": null, - "expired": false - }, - "origin": null, - "tint": "#ffffff", - "showIcon": 1, - "folder": null, - "sort": 0, - "flags": {}, - "_stats": { - "compendiumSource": null - }, - "_key": "!items.effects!2JH9NaOh69yN80Gw.yvpWNCNobg0LLjey" - }, - { - "name": "Elemental Aura: Air", - "disabled": false, + "name": "Elemental Aura (Air)", "img": "icons/magic/air/air-burst-spiral-blue-gray.webp", - "description": "

When you or an ally takes damage from an attack beyond Melee range, reduce the damage by 1d8.

", + "origin": "Compendium.daggerheart.subclasses.Item.2JH9NaOh69yN80Gw", "transfer": false, - "statuses": [], + "_id": "mJBA2QTyM9SM5NVS", + "type": "base", "system": { "rangeDependence": { "enabled": false, "type": "withinRange", "target": "hostile", "range": "melee" - }, - "changes": [], - "duration": { - "description": "", - "type": "" - }, - "stacking": null, - "targetDispositions": [ - 1 - ] - }, - "_id": "vnKV5hsO4DVjURAl", - "type": "base", - "start": { - "time": 0, - "combat": null, - "combatant": null, - "initiative": null, - "round": null, - "turn": null + } }, + "changes": [], + "disabled": false, "duration": { - "value": null, - "units": "seconds", - "expiry": null, - "expired": false + "startTime": null, + "combat": null, + "seconds": null, + "rounds": null, + "turns": null, + "startRound": null, + "startTurn": null }, - "origin": null, + "description": "", "tint": "#ffffff", - "showIcon": 1, - "folder": null, + "statuses": [], "sort": 0, "flags": {}, "_stats": { "compendiumSource": null }, - "_key": "!items.effects!2JH9NaOh69yN80Gw.vnKV5hsO4DVjURAl" + "_key": "!items.effects!2JH9NaOh69yN80Gw.mJBA2QTyM9SM5NVS" } ], "sort": 100000, diff --git a/styles/less/global/elements.less b/styles/less/global/elements.less index 8b35b288..5cc22cce 100755 --- a/styles/less/global/elements.less +++ b/styles/less/global/elements.less @@ -261,15 +261,14 @@ fieldset { align-items: center; - margin: 0; - margin-top: 5px; border-radius: 6px; border-color: @color-fieldset-border; + margin-top: 5px; &.glassy { background-color: light-dark(@dark-blue-10, @golden-10); - border: none; padding-inline: 10px; + border: none; legend { padding: 2px 12px; @@ -386,10 +385,6 @@ justify-content: space-between; } - label { - white-space: nowrap; - } - .btn { padding-top: 15px; } @@ -405,13 +400,6 @@ > .checkbox { align-self: end; } - - .auto-sized { - width: auto; - display: flex; - flex-direction: column; - align-items: center; - } } .form-group { @@ -555,7 +543,7 @@ font-style: italic; font-family: @font-body; margin-top: 4px; - color: @color-text-subtle; + color: light-dark(#14142599, #efe6d850); font-size: var(--font-size-12); padding-left: 3px; } diff --git a/styles/less/global/global.less b/styles/less/global/global.less index d79661f2..404f32cf 100644 --- a/styles/less/global/global.less +++ b/styles/less/global/global.less @@ -12,9 +12,6 @@ } .daggerheart.dh-style { - /** Not an actual scrollbar width (it can't be configured on all browsers) but actually a compensation value for scrollbar gutter purposes */ - --scrollbar-width: 10px; - * { scrollbar-width: thin; scrollbar-color: light-dark(@dark-blue, @golden) transparent; diff --git a/styles/less/global/inventory-item.less b/styles/less/global/inventory-item.less index e95ce06c..27773ff6 100644 --- a/styles/less/global/inventory-item.less +++ b/styles/less/global/inventory-item.less @@ -49,7 +49,8 @@ // Make hover extend out of bounds. // Because of this extra spacing, the scroll container parent needs some padding padding: 2px; - margin: -2px -2px 0 -2px; + margin: -2px; + margin-bottom: 0; } &:hover { diff --git a/styles/less/global/prose-mirror.less b/styles/less/global/prose-mirror.less index 27048ddf..fc8e49f9 100644 --- a/styles/less/global/prose-mirror.less +++ b/styles/less/global/prose-mirror.less @@ -1,6 +1,5 @@ @import '../utils/colors.less'; @import '../utils/fonts.less'; -@import '../utils/mixin.less'; .application.daggerheart { prose-mirror { @@ -13,7 +12,6 @@ background-color: transparent; } .editor-content { - .with-scroll-shadows(); h1 { font-size: var(--font-size-32); } @@ -44,7 +42,7 @@ ul { list-style: disc; } - } + } // Fixes centering and makes it not render over scrollbar &:hover button.toggle:enabled { display: flex; diff --git a/styles/less/global/resource-bar.less b/styles/less/global/resource-bar.less index 3560285a..d06b43a8 100644 --- a/styles/less/global/resource-bar.less +++ b/styles/less/global/resource-bar.less @@ -9,107 +9,110 @@ } }); -/** Pips styling, can exist standalone even without a slot-value */ -.slot-bar { - display: flex; - gap: 4px; - padding: 5px; - border: 1px solid @color-border; - border-radius: 6px; - z-index: 1; - color: @color-text-emphatic; - width: fit-content; - min-height: 22px; - flex-wrap: wrap; - - .slot { - transition: all 0.3s ease; - cursor: pointer; - } - - .slot:not(:has(i)) { - width: 15px; - height: 10px; - border: 1px solid @color-border; - background: light-dark(@dark-blue-10, @golden-10); - border-radius: 3px; - - &.large { - width: 20px; - } - - &.filled { - background: light-dark(@dark-blue, @golden); - } - } - - &.armor .slot { - font-size: var(--font-size-12); - .fa-shield-halved { - color: light-dark(@dark-blue-40, @golden-40); - } - } - - .empty-slot { - width: 15px; - height: 10px; - } -} - -.slot-value { - display: flex; - flex-direction: column; - font-size: 1.5rem; - align-items: center; - justify-content: center; - text-align: center; - z-index: 2; - color: @beige; - - .slot-label { - display: flex; - align-items: center; - color: light-dark(@beige, @dark-blue); - background: light-dark(@dark-blue, @golden); - padding: 0 5px; - width: fit-content; - font-weight: bold; - border-radius: 0px 0px 5px 5px; - font-size: var(--font-size-12); - - .label { - padding-right: 5px; - } - - .value { - padding-left: 6px; - border-left: 1px solid light-dark(@beige, @dark-golden); - } - } -} - .status-bar { display: flex; - flex-direction: column; - align-items: center; + justify-content: center; position: relative; + width: 120px; + height: 40px; - .status-value { + .status-label { position: relative; + top: 40px; + height: 22px; + width: 79px; + clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); + background: light-dark(@dark-blue, @golden); + + h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + color: light-dark(@beige, @dark-blue); + } + } + .slot-value { + position: absolute; display: flex; + flex-direction: column; padding: 0 5px; font-size: 1.5rem; align-items: center; - width: 100px; + width: 140px; height: 40px; justify-content: center; text-align: center; z-index: 2; color: @beige; - > * { + .slot-bar { + display: flex; + flex-wrap: wrap; + gap: 5px; + padding: 5px; + border: 1px solid @color-border; + border-radius: 6px; z-index: 1; + color: @color-text-emphatic; + width: fit-content; + + .slot { + width: 15px; + height: 10px; + border: 1px solid @color-border; + background: light-dark(@dark-blue-10, @golden-10); + border-radius: 3px; + transition: all 0.3s ease; + cursor: pointer; + + &.large { + width: 20px; + } + + &.filled { + background: light-dark(@dark-blue, @golden); + } + } + + .empty-slot { + width: 15px; + height: 10px; + } } + .slot-label { + display: flex; + align-items: center; + color: light-dark(@beige, @dark-blue); + background: light-dark(@dark-blue, @golden); + padding: 0 5px; + width: fit-content; + font-weight: bold; + border-radius: 0px 0px 5px 5px; + font-size: var(--font-size-12); + + .label { + padding-right: 5px; + } + + .value { + padding-left: 6px; + border-left: 1px solid light-dark(@beige, @dark-golden); + } + } + } + + .status-value { + position: absolute; + display: flex; + padding: 0 5px; + font-size: 1.5rem; + align-items: center; + width: 140px; + height: 40px; + justify-content: center; + text-align: center; + z-index: 2; + color: @beige; input[type='number'] { background: transparent; @@ -143,11 +146,11 @@ .progress-bar { position: absolute; appearance: none; - width: 100%; - height: 100%; + width: 100px; + height: 40px; border: 1px solid @color-border; border-radius: 6px; - z-index: 0; + z-index: 1; background: @dark-blue; &::-webkit-progress-bar { @@ -172,29 +175,4 @@ border-radius: 6px; } } - .status-label { - position: relative; - height: 22px; - width: 79px; - background: light-dark(@dark-blue, @golden); - - &.pointy { - clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); - margin-bottom: -2px; // compensate for pointy bottom so spacing feels more "right" - } - - h4 { - font-weight: bold; - text-align: center; - line-height: 18px; - color: light-dark(@beige, @dark-blue); - } - } } - -// Overrides for sidebar usage. -aside[data-application-part="sidebar"] .resources-section .slot-bar { - display: grid; - grid-template-columns: repeat(6, min-content); - grid-auto-flow: row; -} \ No newline at end of file diff --git a/styles/less/sheets/actors/actor-sheet-shared.less b/styles/less/sheets/actors/actor-sheet-shared.less index 7f6afc22..6015047b 100644 --- a/styles/less/sheets/actors/actor-sheet-shared.less +++ b/styles/less/sheets/actors/actor-sheet-shared.less @@ -18,8 +18,6 @@ }); .application.sheet.daggerheart.actor.dh-style { - --side-indent: 16px; - .portrait img, .profile { width: 100%; @@ -44,38 +42,12 @@ pointer-events: none; } - .tab-navigation { - margin-bottom: 0; - } - - .tab { - padding: 0; - .search-section { - padding: var(--spacer-16) 12px var(--spacer-8) 10px; - } - - .scroll-container { - scrollbar-gutter: stable; - overflow-y: auto; - .with-scroll-shadows(); - - padding: var(--spacer-16) calc(var(--side-indent) - var(--scrollbar-width)) 4px var(--side-indent); - - > fieldset:first-child { - margin-top: 0; - } - } - .scroll-container:not(:first-child) { - padding-top: var(--spacer-8); // nested have less top padding - } - } - .tab.inventory { .gold-section { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; gap: 10px; - padding: var(--spacer-8) var(--side-indent) var(--spacer-12) var(--side-indent); + padding: 12px 12px 0 10px; .input { color: light-dark(@dark, @beige); @@ -83,37 +55,6 @@ } } - .tab.notes.active { - padding: 0; - margin: 0; - margin-top: -10px; // will be removed once tab-navigation bottom margin is removed on all actor sheets - scrollbar-gutter: unset; - - // Add padding around top level level prosemirrors used for note tabs - > prose-mirror { - @right-padding: calc(16px - var(--scrollbar-width)); - .editor-content { - scrollbar-gutter: stable; - padding-right: @right-padding; - } - &.inactive { - button.toggle { - top: 16px; - } - .editor-content { - padding: 16px @right-padding 4px 16px; - } - } - &.active { - padding: 8px 0 4px 16px; - } - } - - .artist-attribution { - padding-left: 16px; - } - } - .search-section { display: flex; gap: 10px; @@ -123,6 +64,7 @@ position: relative; color: light-dark(@dark-blue-50, @beige-50); width: 100%; + padding-top: 5px; input { border-radius: 50px; diff --git a/styles/less/sheets/actors/adversary/features.less b/styles/less/sheets/actors/adversary/features.less index 94e255db..851561cf 100644 --- a/styles/less/sheets/actors/adversary/features.less +++ b/styles/less/sheets/actors/adversary/features.less @@ -3,7 +3,7 @@ @import '../../../utils/mixin.less'; .application.sheet.daggerheart.actor.dh-style.adversary { - .tab.features { + .tab.features.active { .feature-section { display: flex; flex-direction: column; diff --git a/styles/less/sheets/actors/adversary/header.less b/styles/less/sheets/actors/adversary/header.less index 858f8b13..0d50b886 100644 --- a/styles/less/sheets/actors/adversary/header.less +++ b/styles/less/sheets/actors/adversary/header.less @@ -7,7 +7,7 @@ width: 100%; > *:not(line-div, .tab-navigation) { - padding-left: var(--side-indent); + padding-left: var(--left-indent); padding-right: 15px; } @@ -75,6 +75,7 @@ .tab-navigation { margin-top: 0; + margin-bottom: 0; button[data-action="openSettings"] { margin-right: 12px; } diff --git a/styles/less/sheets/actors/adversary/index.less b/styles/less/sheets/actors/adversary/index.less index 978cf1f8..9d531139 100644 --- a/styles/less/sheets/actors/adversary/index.less +++ b/styles/less/sheets/actors/adversary/index.less @@ -1,6 +1,5 @@ @import './sheet.less'; -@import './features.less'; @import './header.less'; +@import './features.less'; @import './sidebar.less'; @import './effects.less'; -@import './notes.less'; diff --git a/styles/less/sheets/actors/adversary/sheet.less b/styles/less/sheets/actors/adversary/sheet.less index 74e7ab5a..155de097 100644 --- a/styles/less/sheets/actors/adversary/sheet.less +++ b/styles/less/sheets/actors/adversary/sheet.less @@ -2,7 +2,8 @@ @import '../../../utils/fonts.less'; .application.sheet.daggerheart.actor.dh-style.adversary { - --sidebar-width: 260px; + --left-indent: 16px; + --sidebar-width: 265px; .window-content { display: grid; @@ -34,7 +35,29 @@ display: flex; flex-direction: column; margin: 0 0 10px 0; + padding: 0; position: relative; + + .scroll-container, + > prose-mirror.inactive .editor-content { + scrollbar-gutter: stable; + overflow-y: auto; + padding: var(--spacer-16) calc(var(--left-indent) - 6px) 4px var(--left-indent); + .with-scroll-shadows(); + > fieldset { + margin-left: -10px; // align content with indent + margin-right: -10px; + &:first-child { + margin-top: 0; + } + } + } + > prose-mirror.inactive button.toggle { + top: var(--spacer-16); + } + &:has(> prose-mirror.active) { + padding: var(--spacer-12) 0 0 var(--left-indent); + } } } } \ No newline at end of file diff --git a/styles/less/sheets/actors/adversary/sidebar.less b/styles/less/sheets/actors/adversary/sidebar.less index 8353d092..dc8650aa 100644 --- a/styles/less/sheets/actors/adversary/sidebar.less +++ b/styles/less/sheets/actors/adversary/sidebar.less @@ -63,7 +63,7 @@ .threshold-section { position: relative; display: flex; - gap: 7px; + gap: 8px; background-color: light-dark(transparent, @dark-blue); color: @color-text-emphatic; padding: 5px 10px; @@ -74,7 +74,7 @@ height: 30px; h4 { - font-size: var(--font-size-14); + font-size: var(--font-size-13); font-weight: bold; text-transform: uppercase; color: @color-text-emphatic; @@ -106,7 +106,7 @@ display: flex; flex-direction: column; top: -20px; - gap: 10px; + gap: 16px; margin-bottom: -16px; &.pip-display { @@ -120,6 +120,105 @@ .resources-section { display: flex; justify-content: space-evenly; + margin-bottom: 16px; + + .status-bar { + display: flex; + justify-content: center; + position: relative; + width: 100px; + height: 40px; + + .status-label { + position: relative; + top: 40px; + height: 22px; + width: 79px; + clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); + background: light-dark(@dark-blue, @golden); + + h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + color: light-dark(@beige, @dark-blue); + } + } + .status-value { + position: absolute; + display: flex; + padding: 0 6px; + font-size: 1.5rem; + align-items: center; + width: 100px; + height: 40px; + justify-content: center; + text-align: center; + z-index: 2; + color: @beige; + + input[type='number'] { + background: transparent; + font-size: 1.5rem; + width: 40px; + height: 30px; + text-align: center; + border: none; + outline: 2px solid transparent; + color: @beige; + + &.bar-input { + padding: 0; + color: @beige; + backdrop-filter: none; + background: transparent; + transition: all 0.3s ease; + + &:hover, + &:focus { + background: @semi-transparent-dark-blue; + backdrop-filter: blur(9.5px); + } + } + } + + .bar-label { + width: 40px; + } + } + .progress-bar { + position: absolute; + appearance: none; + width: 100px; + height: 40px; + border: 1px solid @color-border; + border-radius: 6px; + z-index: 1; + background: @dark-blue; + + &::-webkit-progress-bar { + border: none; + background: @dark-blue; + border-radius: 6px; + } + &::-webkit-progress-value { + background: @gradient-hp; + border-radius: 6px; + } + &.stress-color::-webkit-progress-value { + background: @gradient-stress; + border-radius: 6px; + } + &::-moz-progress-bar { + background: @gradient-hp; + border-radius: 6px; + } + &.stress-color::-moz-progress-bar { + background: @gradient-stress; + border-radius: 6px; + } + } + } } .status-section { @@ -157,7 +256,7 @@ .status-label { padding: 2px 10px; width: 100%; - border-radius: 0 0 3px 3px; + border-radius: 3px; background: light-dark(@dark-blue, @golden); h4 { @@ -185,7 +284,8 @@ .shortcut-items-section { overflow-y: hidden; - padding: 10px 0; + padding-top: 10px; + padding-bottom: 20px; flex: 1; scrollbar-gutter: stable; .with-scroll-shadows(); @@ -214,6 +314,8 @@ } .experience-section { + margin-bottom: 20px; + .title { display: flex; gap: 15px; @@ -230,8 +332,8 @@ gap: 5px; width: 100%; margin-top: 10px; - align-items: stretch; padding: 0 4px 0 12px; + align-items: stretch; .experience-row { display: flex; @@ -269,7 +371,10 @@ .reaction-section { display: flex; - margin: 10px; + padding: 0 10px; + margin-top: 16px; + margin-bottom: 10px; + width: 100%; button { height: 40px; diff --git a/styles/less/sheets/actors/character/biography.less b/styles/less/sheets/actors/character/biography.less index 1d0f7787..ce52c5af 100644 --- a/styles/less/sheets/actors/character/biography.less +++ b/styles/less/sheets/actors/character/biography.less @@ -8,11 +8,18 @@ display: flex; flex-direction: column; gap: 10px; - flex: 1; + height: 100%; + overflow-y: auto; + padding-top: 8px; + padding-bottom: 4px; + height: 100%; + scrollbar-gutter: stable; + .with-scroll-shadows(); } .characteristics-section { gap: 20px; + padding: 0 10px; } .biography-section { diff --git a/styles/less/sheets/actors/character/effects.less b/styles/less/sheets/actors/character/effects.less index 0a207d4d..0ab1007d 100644 --- a/styles/less/sheets/actors/character/effects.less +++ b/styles/less/sheets/actors/character/effects.less @@ -8,6 +8,9 @@ display: flex; flex-direction: column; gap: 10px; + overflow-y: auto; + padding-bottom: 20px; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/character/features.less b/styles/less/sheets/actors/character/features.less index 8c1c6d0e..f81f0e32 100644 --- a/styles/less/sheets/actors/character/features.less +++ b/styles/less/sheets/actors/character/features.less @@ -8,6 +8,10 @@ display: flex; flex-direction: column; gap: 10px; + overflow-y: auto; + padding-bottom: 20px; + scrollbar-gutter: stable; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/character/header.less b/styles/less/sheets/actors/character/header.less index 7eef14a7..91b3545a 100644 --- a/styles/less/sheets/actors/character/header.less +++ b/styles/less/sheets/actors/character/header.less @@ -19,19 +19,16 @@ .application.sheet.daggerheart.actor.dh-style.character { .character-header-sheet { + padding: 0 15px; padding-top: var(--header-height); width: 100%; - - > *:not(line-div, .tab-navigation) { - margin-left: var(--side-indent); - margin-right: 15px; - } .name-row { display: flex; gap: 6px; align-items: start; justify-content: space-between; + padding: 0; padding-top: 5px; flex: 1; @@ -103,8 +100,8 @@ .character-details { display: flex; justify-content: space-between; - margin-top: 5px; - margin-bottom: 10px; + padding: 5px 0; + margin-bottom: 8px; font-size: var(--font-size-12); color: @color-text-emphatic; @@ -133,6 +130,7 @@ .character-row { display: flex; align-items: center; + padding: 0; margin-bottom: 12px; .resource-section { @@ -220,6 +218,7 @@ .character-traits { display: flex; + padding: 0; margin-bottom: 15px; justify-content: space-between; max-width: 38.5rem; @@ -326,9 +325,5 @@ } } } - - .tab-navigation button[data-action="openSettings"] { - margin-right: 12px; - } } } diff --git a/styles/less/sheets/actors/character/inventory.less b/styles/less/sheets/actors/character/inventory.less index 4bb94b63..b07bb6fe 100644 --- a/styles/less/sheets/actors/character/inventory.less +++ b/styles/less/sheets/actors/character/inventory.less @@ -4,10 +4,19 @@ .application.sheet.daggerheart.actor.dh-style.character { .tab.inventory { + padding-right: 0; + .search-section { + padding-right: 14px; + } .items-section { display: flex; flex-direction: column; gap: 10px; + overflow-y: auto; + scrollbar-gutter: stable; + margin-top: 20px; + padding-bottom: 4px; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/character/loadout.less b/styles/less/sheets/actors/character/loadout.less index a7c24a14..67b2914b 100644 --- a/styles/less/sheets/actors/character/loadout.less +++ b/styles/less/sheets/actors/character/loadout.less @@ -5,6 +5,7 @@ .application.sheet.daggerheart.actor.dh-style.character { .tab.loadout { .search-section { + padding-right: 14px; .btn-toggle-view { background: light-dark(@dark-blue-10, @dark-blue); border: 1px solid @color-border; @@ -50,6 +51,12 @@ display: flex; flex-direction: column; gap: 10px; + height: 100%; + overflow-y: auto; + scrollbar-gutter: stable; + margin-top: 20px; + padding-bottom: 4px; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/character/sheet.less b/styles/less/sheets/actors/character/sheet.less index b89a83af..aebcb9b9 100644 --- a/styles/less/sheets/actors/character/sheet.less +++ b/styles/less/sheets/actors/character/sheet.less @@ -2,8 +2,6 @@ @import '../../../utils/fonts.less'; .application.sheet.daggerheart.actor.dh-style.character { - --side-indent: 16px; - .window-content { display: grid; grid-template-columns: 275px 1fr; @@ -37,9 +35,6 @@ display: flex; flex-direction: column; overflow: hidden; - margin: 0 0 10px 0; - padding: 0; - position: relative; } } } diff --git a/styles/less/sheets/actors/character/sidebar.less b/styles/less/sheets/actors/character/sidebar.less index 66f09cfc..c76ee9ff 100644 --- a/styles/less/sheets/actors/character/sidebar.less +++ b/styles/less/sheets/actors/character/sidebar.less @@ -89,13 +89,113 @@ .resources-section { justify-content: space-around; - margin: 8px 2px 0 2px; + margin: 8px 2px 8px 2px; } } .resources-section { display: flex; justify-content: space-evenly; + margin-bottom: 20px; + + .status-bar { + display: flex; + justify-content: center; + position: relative; + width: 120px; + height: 40px; + + .status-label { + position: relative; + top: 40px; + height: 22px; + width: 79px; + clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); + background: light-dark(@dark-blue, @golden); + + h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + color: light-dark(@beige, @dark-blue); + } + } + + .status-value { + position: absolute; + display: flex; + padding: 0 5px; + font-size: 1.5rem; + align-items: center; + width: 140px; + height: 40px; + justify-content: center; + text-align: center; + z-index: 2; + color: @beige; + + input[type='number'] { + background: transparent; + font-size: 1.5rem; + width: 40px; + height: 30px; + text-align: center; + border: none; + outline: 2px solid transparent; + color: @beige; + + &.bar-input { + padding: 0; + color: @beige; + backdrop-filter: none; + background: transparent; + transition: all 0.3s ease; + + &:hover, + &:focus { + background: @semi-transparent-dark-blue; + backdrop-filter: blur(9.5px); + } + } + } + + .bar-label { + width: 40px; + } + } + .progress-bar { + position: absolute; + appearance: none; + width: 100px; + height: 40px; + border: 1px solid @color-border; + border-radius: 6px; + z-index: 1; + background: @dark-blue; + + &::-webkit-progress-bar { + border: none; + background: @dark-blue; + border-radius: 6px; + } + &::-webkit-progress-value { + background: @gradient-hp; + border-radius: 6px; + } + &.stress-color::-webkit-progress-value { + background: @gradient-stress; + border-radius: 6px; + } + &::-moz-progress-bar { + background: @gradient-hp; + border-radius: 6px; + } + &.stress-color::-moz-progress-bar { + background: @gradient-stress; + border-radius: 6px; + } + } + } } .status-section { @@ -145,21 +245,21 @@ .status-bar.armor-slots { display: flex; + justify-content: center; + position: relative; width: 95px; + height: 30px; white-space: nowrap; - .status-label { - height: 30px; - } - .status-label { padding: 2px 2px; position: relative; + top: 30px; height: 22px; width: 95px; border-radius: 3px; background: light-dark(@dark-blue, @golden); - + clip-path: none; display: flex; align-items: center; justify-content: center; @@ -191,16 +291,40 @@ } } .slot-value { + position: absolute; + display: flex; + padding: 0 5px; font-size: 1.2rem; + align-items: center; width: 80px; height: 30px; + justify-content: center; + text-align: center; + z-index: 2; color: light-dark(@dark-blue, @beige); flex-direction: column; .slot-bar { + display: flex; + flex-wrap: wrap; + gap: 4px; + padding: 5px; + border: 1px solid @color-border; + border-radius: 6px; + z-index: 1; background: @dark-blue; justify-content: center; - border-bottom: none; + color: @color-text-emphatic; + + .armor-slot { + cursor: pointer; + transition: all 0.3s ease; + font-size: var(--font-size-12); + + .fa-shield-halved { + color: light-dark(@dark-blue-40, @golden-40); + } + } } .slot-label { display: flex; @@ -240,21 +364,41 @@ } } .status-value { + position: absolute; + display: flex; padding: 0 6px; font-size: 1.2rem; + align-items: center; width: 80px; height: 30px; justify-content: center; + text-align: center; + z-index: 2; color: light-dark(@dark-blue, @beige); + border: 1px solid @color-border; + border-bottom: none; + border-radius: 6px 6px 0 0; input[type='number'] { + background: transparent; font-size: 1.2rem; width: 30px; height: 20px; + text-align: center; + border: none; + outline: 2px solid transparent; color: light-dark(@dark-blue, @beige); &.bar-input { + padding: 0; color: light-dark(@dark-blue, @beige); + backdrop-filter: none; + background: transparent; + &:hover, + &:focus { + background: @semi-transparent-dark-blue; + backdrop-filter: blur(9.5px); + } } } @@ -263,9 +407,32 @@ } } .progress-bar { + position: absolute; + appearance: none; + width: 80px; + height: 30px; + border: 1px solid @color-border; + border-radius: 6px; + z-index: 1; background: light-dark(transparent, @dark-blue); border-bottom: none; border-radius: 6px 6px 0 0; + &::-webkit-progress-bar { + border: none; + background: light-dark(transparent, @dark-blue); + } + &::-webkit-progress-value { + background: @gradient-stress; + } + &.stress-color::-webkit-progress-value { + background: @gradient-stress; + } + &::-moz-progress-bar { + background: @gradient-stress; + } + &.stress-color::-moz-progress-bar { + background: @gradient-stress; + } } } diff --git a/styles/less/sheets/actors/environment/features.less b/styles/less/sheets/actors/environment/features.less index f1ad8140..295636a7 100644 --- a/styles/less/sheets/actors/environment/features.less +++ b/styles/less/sheets/actors/environment/features.less @@ -4,10 +4,15 @@ .application.sheet.daggerheart.actor.dh-style.environment { .tab.features { + position: relative; .feature-section { display: flex; flex-direction: column; gap: 10px; + overflow-y: auto; + padding: 4px 8px; + scrollbar-gutter: stable; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/environment/header.less b/styles/less/sheets/actors/environment/header.less index 6e037901..da6954e0 100644 --- a/styles/less/sheets/actors/environment/header.less +++ b/styles/less/sheets/actors/environment/header.less @@ -138,11 +138,10 @@ } .environment-navigation { - padding-right: 20px; + padding: 0 20px; .tab-navigation { margin-top: 0; - margin-bottom: 0; } } } diff --git a/styles/less/sheets/actors/environment/index.less b/styles/less/sheets/actors/environment/index.less index df7e6fc2..db35eabc 100644 --- a/styles/less/sheets/actors/environment/index.less +++ b/styles/less/sheets/actors/environment/index.less @@ -2,3 +2,4 @@ @import './features.less'; @import './header.less'; @import './potentialAdversaries.less'; +@import './notes.less'; diff --git a/styles/less/sheets/actors/environment/notes.less b/styles/less/sheets/actors/environment/notes.less new file mode 100644 index 00000000..58447c88 --- /dev/null +++ b/styles/less/sheets/actors/environment/notes.less @@ -0,0 +1,11 @@ +@import '../../../utils/mixin.less'; + +.application.sheet.daggerheart.actor.dh-style.environment { + .tab.notes { + padding: 6px 0 4px 15px; + .editor-content { + scrollbar-gutter: stable; + .with-scroll-shadows(); + } + } +} \ No newline at end of file diff --git a/styles/less/sheets/actors/environment/potentialAdversaries.less b/styles/less/sheets/actors/environment/potentialAdversaries.less index fc2623c3..e66ff34d 100644 --- a/styles/less/sheets/actors/environment/potentialAdversaries.less +++ b/styles/less/sheets/actors/environment/potentialAdversaries.less @@ -7,6 +7,10 @@ display: flex; flex-direction: column; gap: 10px; + overflow-y: auto; + padding: 0 4px 4px 4px; + scrollbar-gutter: stable; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/environment/sheet.less b/styles/less/sheets/actors/environment/sheet.less index 2d9cc188..02489cac 100644 --- a/styles/less/sheets/actors/environment/sheet.less +++ b/styles/less/sheets/actors/environment/sheet.less @@ -16,6 +16,8 @@ .tab { flex: 1; overflow-y: auto; + padding-right: 0; + margin-right: 2px; &.active { overflow: hidden; diff --git a/styles/less/sheets/actors/party/index.less b/styles/less/sheets/actors/party/index.less index e1972a32..68839512 100644 --- a/styles/less/sheets/actors/party/index.less +++ b/styles/less/sheets/actors/party/index.less @@ -2,3 +2,4 @@ @import './header.less'; @import './party-members.less'; @import './inventory.less'; +@import './notes.less'; diff --git a/styles/less/sheets/actors/party/inventory.less b/styles/less/sheets/actors/party/inventory.less index c085ae10..4b14e112 100644 --- a/styles/less/sheets/actors/party/inventory.less +++ b/styles/less/sheets/actors/party/inventory.less @@ -4,10 +4,20 @@ .application.sheet.daggerheart.actor.dh-style.party { .tab.inventory { + padding-right: 0; + .search-section { + padding-right: 14px; + } + .items-section { display: flex; flex-direction: column; gap: 10px; + overflow-y: auto; + scrollbar-gutter: stable; + margin-top: 20px; + padding-bottom: 4px; + .with-scroll-shadows(); } } } diff --git a/styles/less/sheets/actors/party/notes.less b/styles/less/sheets/actors/party/notes.less new file mode 100644 index 00000000..391f1056 --- /dev/null +++ b/styles/less/sheets/actors/party/notes.less @@ -0,0 +1,12 @@ +@import '../../../utils/mixin.less'; + +.application.sheet.daggerheart.actor.dh-style.party { + .tab.notes { + padding: 16px 0 4px 15px; + .editor-content { + scrollbar-gutter: stable; + padding-left: 8px; + .with-scroll-shadows(); + } + } +} diff --git a/styles/less/sheets/actors/party/party-members.less b/styles/less/sheets/actors/party/party-members.less index 328360a8..7b85eb35 100644 --- a/styles/less/sheets/actors/party/party-members.less +++ b/styles/less/sheets/actors/party/party-members.less @@ -1,287 +1,296 @@ -@import '../../../utils/colors.less'; -@import '../../../utils/fonts.less'; -@import '../../../utils/mixin.less'; - -.application.sheet.daggerheart.actor.dh-style.party .tab.partyMembers.active { - padding: var(--spacer-8) 4px 0 10px; - scrollbar-gutter: stable; - .with-scroll-shadows(); - - .actions-section { - display: flex; - align-items: center; - justify-content: center; - padding: 10px; - margin-bottom: 10px; - gap: 20px; - background-color: light-dark(@dark-blue-10, @golden-10); - - button { - span { - font-size: 12px; - } - } - - .active-action { - animation: glow 0.75s infinite alternate; - } - } - - .actors-list { - display: flex; - flex-direction: column; - gap: 8px; - align-items: stretch; - width: 100%; - - .actor-resources { - display: grid; - grid-template: - "img header" min-content - "img body" 1fr - / 7.5rem 1fr; - gap: 6px; - column-gap: 12px; - padding: 6px; - background-color: light-dark(@dark-blue-10, @golden-10); - - .actor-img-frame { - grid-area: img; - width: 7.375rem; - height: 7.375rem; - position: relative; - - .actor-img { - object-fit: cover; - object-position: top center; - border-radius: 6px; - width: 100%; - height: 100%; - } - - .equipped-weapons { - position: absolute; - top: -2px; - left: -3px; - display: flex; - flex-direction: column; - gap: 1px; - img { - border-radius: 50%; - width: 24px; - height: 24px; - border: 1px solid @color-border; - object-fit: cover; - } - } - - .evasion { - position: absolute; - top: 1px; - right: 1px; - width: 1.75rem; - height: 1.75rem; - background: url('../assets/svg/trait-shield.svg') no-repeat; - background-size: 100%; - color: var(--color-light-1); - font-size: var(--font-size-14); - font-weight: 700; - display: flex; - align-items: center; - justify-content: center; - } - - .threshold-section { - position: absolute; - left: 0; - right: 0; - bottom: -2px; - margin: auto; - - display: flex; - gap: 4px; - background-color: light-dark(var(--color-light-1), @dark-blue); - color: @color-text-emphatic; - padding: 4px 6px; - border: 1px solid @color-border; - border-radius: 3px; - align-items: baseline; - width: fit-content; - - h4 { - font-weight: bold; - text-transform: uppercase; - white-space: nowrap; - - &.threshold-label { - font-size: var(--font-size-10); - color: @color-text-emphatic; - } - - &.threshold-value { - font-size: var(--font-size-11); - color: light-dark(@dark, @beige); - } - } - } - } - - header { - grid-area: header; - display: grid; - grid-template: - "name hope" min-content - "subtitle subtitle" min-content - / 1fr min-content; - - .actor-name { - width: 100%; - z-index: 1; - font-size: var(--font-size-20); - color: @color-text-emphatic; - font-weight: bold; - } - - .delete-icon { - font-size: 0.75em; - } - - .subtitle { - grid-area: subtitle; - font-size: var(--font-size-14); - } - - .hope-section { - display: flex; - background-color: light-dark(transparent, @dark-blue); - color: @color-text-emphatic; - padding: 3px 6px; - border: 1px solid @color-border; - border-radius: 3px; - align-items: center; - width: fit-content; - margin-left: auto; - - h4 { - font-size: var(--font-size-12); - font-weight: bold; - text-transform: uppercase; - color: @color-text-emphatic; - margin-right: 3px; - } - - .hope-value { - display: flex; - cursor: pointer; - font-size: var(--font-size-12); - margin-left: 1px; - } - } - } - - .body { - grid-area: body; - display: flex; - align-items: start; - justify-content: space-between; - } - - .resources { - display: flex; - flex-direction: column; - gap: 4px; - - .slot-section { - display: flex; - flex-direction: row; - align-items: stretch; - - .slot-label { - display: flex; - align-items: center; - color: light-dark(@beige, @dark-blue); - background: light-dark(@dark-blue, @golden); - padding: 0 4px; - width: fit-content; - font-weight: bold; - border-radius: 6px 0px 0px 6px; - font-size: var(--font-size-12); - white-space: nowrap; - - .label { - padding-right: 2px; - } - - .value { - font-variant-numeric: tabular-nums; - .current { - display: inline-block; - text-align: end; - width: 2ch; - } - .max { - display: inline-block; - text-align: start; - width: 2ch; - } - } - } - - .slot-bar { - align-items: center; - flex-wrap: wrap; - background-color: light-dark(@dark-blue-10, @dark-blue); - padding: 2px 5px; - border-radius: 0 6px 6px 0; - width: fit-content; - } - } - } - - .traits { - background-color: light-dark(@dark-blue-10, @dark-blue); - border: 1px solid @color-border; - border-radius: 6px; - display: grid; - grid-template-columns: 1fr 1fr; - font-size: var(--font-size-12); - padding: 3px 4px; - gap: 3px 7px; - .trait { - display: flex; - justify-content: space-between; - gap: 3px; - .label { - color: @color-text-emphatic; - } - .value { - font-weight: 600; - } - } - } - } - } - - .actors-list.limited { - .actor-resources { - display: flex; - align-items: center; - } - .actor-img-frame { - width: 3rem; - height: 3rem; - } - } - - .actors-dragger { - display: flex; - align-items: center; - justify-content: center; - box-sizing: border-box; - width: 100%; - height: 40px; - border: 1px dashed light-dark(@dark-blue-50, @beige-50); - border-radius: 3px; - color: light-dark(@dark-blue-50, @beige-50); - } -} +@import '../../../utils/colors.less'; +@import '../../../utils/fonts.less'; +@import '../../../utils/mixin.less'; + +.application.sheet.daggerheart.actor.dh-style.party .tab.partyMembers { + overflow: auto; + .with-scroll-shadows(); + + .actors-list { + display: flex; + flex-direction: column; + gap: 8px; + align-items: stretch; + width: 100%; + + .actor-resources { + display: grid; + grid-template: + "img header" min-content + "img body" 1fr + / 7.5rem 1fr; + gap: 6px; + column-gap: 12px; + padding: 6px; + background-color: light-dark(@dark-blue-10, @golden-10); + + .actor-img-frame { + grid-area: img; + width: 7.375rem; + height: 7.375rem; + position: relative; + + .actor-img { + object-fit: cover; + object-position: top center; + border-radius: 6px; + width: 100%; + height: 100%; + } + + .equipped-weapons { + position: absolute; + top: -2px; + left: -3px; + display: flex; + flex-direction: column; + gap: 1px; + img { + border-radius: 50%; + width: 24px; + height: 24px; + border: 1px solid @color-border; + object-fit: cover; + } + } + + .evasion { + position: absolute; + top: 1px; + right: 1px; + width: 1.75rem; + height: 1.75rem; + background: url('../assets/svg/trait-shield.svg') no-repeat; + background-size: 100%; + color: var(--color-light-1); + font-size: var(--font-size-14); + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + } + + .threshold-section { + position: absolute; + left: 0; + right: 0; + bottom: -2px; + margin: auto; + + display: flex; + gap: 4px; + background-color: light-dark(var(--color-light-1), @dark-blue); + color: @color-text-emphatic; + padding: 4px 6px; + border: 1px solid @color-border; + border-radius: 3px; + align-items: baseline; + width: fit-content; + + h4 { + font-weight: bold; + text-transform: uppercase; + white-space: nowrap; + + &.threshold-label { + font-size: var(--font-size-10); + color: @color-text-emphatic; + } + + &.threshold-value { + font-size: var(--font-size-11); + color: light-dark(@dark, @beige); + } + } + } + } + + header { + grid-area: header; + display: grid; + grid-template: + "name hope" min-content + "subtitle subtitle" min-content + / 1fr min-content; + + .actor-name { + width: 100%; + z-index: 1; + font-size: var(--font-size-20); + color: @color-text-emphatic; + font-weight: bold; + } + + .delete-icon { + font-size: 0.75em; + } + + .subtitle { + grid-area: subtitle; + font-size: var(--font-size-14); + } + + .hope-section { + display: flex; + background-color: light-dark(transparent, @dark-blue); + color: @color-text-emphatic; + padding: 3px 6px; + border: 1px solid @color-border; + border-radius: 3px; + align-items: center; + width: fit-content; + margin-left: auto; + + h4 { + font-size: var(--font-size-12); + font-weight: bold; + text-transform: uppercase; + color: @color-text-emphatic; + margin-right: 3px; + } + + .hope-value { + display: flex; + cursor: pointer; + font-size: var(--font-size-12); + margin-left: 1px; + } + } + } + + .body { + grid-area: body; + display: flex; + align-items: start; + justify-content: space-between; + } + + .resources { + display: flex; + flex-direction: column; + gap: 4px; + + .slot-section { + display: flex; + flex-direction: row; + align-items: stretch; + + .slot-label { + display: flex; + align-items: center; + color: light-dark(@beige, @dark-blue); + background: light-dark(@dark-blue, @golden); + padding: 0 4px; + width: fit-content; + font-weight: bold; + border-radius: 6px 0px 0px 6px; + font-size: var(--font-size-12); + white-space: nowrap; + + .label { + padding-right: 2px; + } + + .value { + font-variant-numeric: tabular-nums; + .current { + display: inline-block; + text-align: end; + width: 2ch; + } + .max { + display: inline-block; + text-align: start; + width: 2ch; + } + } + } + + .slot-bar { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 4px; + + background-color: light-dark(@dark-blue-10, @dark-blue); + color: @color-text-emphatic; + padding: 2px 5px; + border: 1px solid @color-border; + border-radius: 0 6px 6px 0; + width: fit-content; + min-height: 22px; + + .armor-slot { + cursor: pointer; + transition: all 0.3s ease; + font-size: var(--font-size-12); + + .fa-shield-halved { + color: light-dark(@dark-blue-40, @golden-40); + } + } + + .slot { + width: 16px; + height: 10px; + border: 1px solid @color-border; + background: light-dark(@dark-blue-10, @golden-10); + border-radius: 3px; + transition: all 0.3s ease; + cursor: pointer; + + &.filled { + background: light-dark(@dark-blue, @golden); + } + } + } + } + } + + .traits { + background-color: light-dark(@dark-blue-10, @dark-blue); + border: 1px solid @color-border; + border-radius: 6px; + display: grid; + grid-template-columns: 1fr 1fr; + font-size: var(--font-size-12); + padding: 3px 4px; + gap: 3px 7px; + .trait { + display: flex; + justify-content: space-between; + gap: 3px; + .label { + color: @color-text-emphatic; + } + .value { + font-weight: 600; + } + } + } + } + } + + .actors-list.limited { + .actor-resources { + display: flex; + align-items: center; + } + .actor-img-frame { + width: 3rem; + height: 3rem; + } + } + + .actors-dragger { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 100%; + height: 40px; + border: 1px dashed light-dark(@dark-blue-50, @beige-50); + border-radius: 3px; + color: light-dark(@dark-blue-50, @beige-50); + } +} diff --git a/styles/less/sheets/actors/party/sheet.less b/styles/less/sheets/actors/party/sheet.less index e07a0ae9..33aa64a3 100644 --- a/styles/less/sheets/actors/party/sheet.less +++ b/styles/less/sheets/actors/party/sheet.less @@ -17,10 +17,37 @@ }); .application.sheet.daggerheart.actor.dh-style.party { - .tab.active { - overflow: auto; - display: flex; - flex-direction: column; + .tab { flex: 1; + overflow-y: auto; + scrollbar-gutter: stable; + margin-right: 2px; + padding-right: 8px; + + &.active { + overflow: auto; + display: flex; + flex-direction: column; + } + + .actions-section { + display: flex; + align-items: center; + justify-content: center; + padding: 10px; + margin-bottom: 10px; + gap: 20px; + background-color: light-dark(@dark-blue-10, @golden-10); + + button { + span { + font-size: 12px; + } + } + + .active-action { + animation: glow 0.75s infinite alternate; + } + } } } diff --git a/styles/less/utils/mixin.less b/styles/less/utils/mixin.less index f6a461cf..e2ef85ef 100644 --- a/styles/less/utils/mixin.less +++ b/styles/less/utils/mixin.less @@ -174,10 +174,10 @@ --fade-start: 0; } 10%, 100% { - --fade-start: 14px; + --fade-start: 12px; } 0%, 90% { - --fade-end: 14px; + --fade-end: 12px; } 100% { --fade-end: 0; diff --git a/system.json b/system.json index 0ecc2e75..4660a196 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "daggerheart", "title": "Daggerheart", "description": "An unofficial implementation of the Daggerheart system", - "version": "2.4.2", + "version": "2.4.1", "compatibility": { "minimum": "14.364", "verified": "14.364", @@ -10,7 +10,7 @@ }, "url": "https://github.com/Foundryborne/daggerheart", "manifest": "https://raw.githubusercontent.com/Foundryborne/daggerheart/v14/system.json", - "download": "https://github.com/Foundryborne/daggerheart/releases/download/2.4.2/system.zip", + "download": "https://github.com/Foundryborne/daggerheart/releases/download/2.4.1/system.zip", "authors": [ { "name": "WBHarry" diff --git a/templates/actionTypes/areas.hbs b/templates/actionTypes/areas.hbs index 662716f5..2e010c72 100644 --- a/templates/actionTypes/areas.hbs +++ b/templates/actionTypes/areas.hbs @@ -11,10 +11,9 @@
- {{formField ../fields.type value=area.type name=(concat "areas." index ".type") localize=true blank=false}} - {{formField ../fields.shape value=area.shape name=(concat "areas." index ".shape") localize=true blank=false}} - {{formField ../fields.size value=area.size name=(concat "areas." index ".size") localize=true blank=false}} - {{formField ../fields.hasHole value=area.hasHole name=(concat "areas." index ".hasHole") localize=true classes="auto-sized" }} + {{formField ../fields.type value=area.type name=(concat "areas." index ".type") localize=true}} + {{formField ../fields.shape value=area.shape name=(concat "areas." index ".shape") localize=true}} + {{formField ../fields.size value=area.size name=(concat "areas." index ".size") localize=true}}
diff --git a/templates/sheets/actors/adversary/features.hbs b/templates/sheets/actors/adversary/features.hbs index c8b6bdc2..281e92fd 100644 --- a/templates/sheets/actors/adversary/features.hbs +++ b/templates/sheets/actors/adversary/features.hbs @@ -1,12 +1,10 @@ -
+
{{#each @root.features as |item|}} - {{> "daggerheart.inventory-item" + {{> 'daggerheart.inventory-item' item=item - type="feature" + type='feature' actorType=@root.document.type hideContextMenu=true hideModifyControls=true diff --git a/templates/sheets/actors/adversary/notes.hbs b/templates/sheets/actors/adversary/notes.hbs index d329d318..28df7f8e 100644 --- a/templates/sheets/actors/adversary/notes.hbs +++ b/templates/sheets/actors/adversary/notes.hbs @@ -1,9 +1,10 @@
- {{formInput notes.field value=notes.value enriched=notes.enriched toggled=true}} + {{formInput notes.field value=notes.value enriched=notes.enriched class="aaa" toggled=true}} + {{#if (and showAttribution document.system.attribution.artist)}} {{/if}} diff --git a/templates/sheets/actors/character/biography.hbs b/templates/sheets/actors/character/biography.hbs index a3d34109..7da920e0 100644 --- a/templates/sheets/actors/character/biography.hbs +++ b/templates/sheets/actors/character/biography.hbs @@ -1,34 +1,34 @@ -
-
-
-
- {{localize 'DAGGERHEART.ACTORS.Character.pronouns'}} - {{formInput systemFields.biography.fields.characteristics.fields.pronouns value=source.system.biography.characteristics.pronouns enriched=source.system.biography.characteristics.pronouns localize=true toggled=true}} -
- -
- {{localize 'DAGGERHEART.ACTORS.Character.age'}} - {{formInput systemFields.biography.fields.characteristics.fields.age value=source.system.biography.characteristics.age enriched=source.system.biography.characteristics.age localize=true toggled=true}} -
- -
- {{localize 'DAGGERHEART.ACTORS.Character.faith'}} - {{formInput systemFields.biography.fields.characteristics.fields.faith value=source.system.biography.characteristics.faith enriched=source.system.biography.characteristics.faith localize=true toggled=true}} -
-
- -
- {{localize 'DAGGERHEART.ACTORS.Character.story.backgroundTitle'}} - {{formInput background.field value=background.value enriched=background.enriched toggled=true}} -
- -
- {{localize 'DAGGERHEART.ACTORS.Character.story.connectionsTitle'}} - {{formInput connections.field value=connections.value enriched=connections.enriched toggled=true}} -
-
+
+
+
+
+ {{localize 'DAGGERHEART.ACTORS.Character.pronouns'}} + {{formInput systemFields.biography.fields.characteristics.fields.pronouns value=source.system.biography.characteristics.pronouns enriched=source.system.biography.characteristics.pronouns localize=true toggled=true}} +
+ +
+ {{localize 'DAGGERHEART.ACTORS.Character.age'}} + {{formInput systemFields.biography.fields.characteristics.fields.age value=source.system.biography.characteristics.age enriched=source.system.biography.characteristics.age localize=true toggled=true}} +
+ +
+ {{localize 'DAGGERHEART.ACTORS.Character.faith'}} + {{formInput systemFields.biography.fields.characteristics.fields.faith value=source.system.biography.characteristics.faith enriched=source.system.biography.characteristics.faith localize=true toggled=true}} +
+
+ +
+ {{localize 'DAGGERHEART.ACTORS.Character.story.backgroundTitle'}} + {{formInput background.field value=background.value enriched=background.enriched toggled=true}} +
+ +
+ {{localize 'DAGGERHEART.ACTORS.Character.story.connectionsTitle'}} + {{formInput connections.field value=connections.value enriched=connections.enriched toggled=true}} +
+
\ No newline at end of file diff --git a/templates/sheets/actors/character/effects.hbs b/templates/sheets/actors/character/effects.hbs index f3bda981..a2e5a420 100644 --- a/templates/sheets/actors/character/effects.hbs +++ b/templates/sheets/actors/character/effects.hbs @@ -1,24 +1,24 @@ -
- -
- {{> 'daggerheart.inventory-items' - title='DAGGERHEART.GENERAL.activeEffects' - type='effect' - isGlassy=true - collection=effects.actives - canCreate=@root.editable - hideResources=true - }} - - {{> 'daggerheart.inventory-items' - title='DAGGERHEART.GENERAL.inactiveEffects' - type='effect' - isGlassy=true - collection=effects.inactives - canCreate=@root.editable - hideResources=true - disabled=true - }} -
+
+ +
+ {{> 'daggerheart.inventory-items' + title='DAGGERHEART.GENERAL.activeEffects' + type='effect' + isGlassy=true + collection=effects.actives + canCreate=@root.editable + hideResources=true + }} + + {{> 'daggerheart.inventory-items' + title='DAGGERHEART.GENERAL.inactiveEffects' + type='effect' + isGlassy=true + collection=effects.inactives + canCreate=@root.editable + hideResources=true + disabled=true + }} +
\ No newline at end of file diff --git a/templates/sheets/actors/character/features.hbs b/templates/sheets/actors/character/features.hbs index 50a2ce08..b2760900 100644 --- a/templates/sheets/actors/character/features.hbs +++ b/templates/sheets/actors/character/features.hbs @@ -1,28 +1,26 @@ -
-
- {{#each document.system.sheetLists as |category|}} - {{#if (eq category.type "feature" )}} - {{> "daggerheart.inventory-items" - title=category.title - type="feature" - actorType="character" - collection=category.values - canCreate=@root.editable - showActions=@root.editable - }} - {{else if category.values}} - {{> "daggerheart.inventory-items" - title=category.title - type="feature" - actorType="character" - collection=category.values - canCreate=false - showActions=@root.editable - }} - {{/if}} - {{/each}} -
+
+
+ {{#each document.system.sheetLists as |category|}} + {{#if (eq category.type 'feature' )}} + {{> 'daggerheart.inventory-items' + title=category.title + type='feature' + actorType='character' + collection=category.values + canCreate=@root.editable + showActions=@root.editable + }} + {{else if category.values}} + {{> 'daggerheart.inventory-items' + title=category.title + type='feature' + actorType='character' + collection=category.values + canCreate=false + showActions=@root.editable + }} + {{/if}} + {{/each}} +
\ No newline at end of file diff --git a/templates/sheets/actors/character/header.hbs b/templates/sheets/actors/character/header.hbs index a40c336a..459911af 100644 --- a/templates/sheets/actors/character/header.hbs +++ b/templates/sheets/actors/character/header.hbs @@ -1,163 +1,165 @@ -
- -
-

{{source.name}}

-
-

- {{#if @root.editable}} - {{#if document.system.needsCharacterSetup}} - - {{else if document.system.levelData.canLevelUp}} - - {{/if}} - {{/if}} - {{#unless document.system.needsCharacterSetup}} - {{localize 'DAGGERHEART.GENERAL.level'}} - - {{/unless}} -

-
-
-
-
- {{#if document.system.class.value}} - {{document.system.class.value.name}} - {{else}} - {{localize 'TYPES.Item.class'}} - {{/if}} - - {{#if document.system.class.subclass}} - {{document.system.class.subclass.name}} - {{else}} - {{localize 'TYPES.Item.subclass'}} - {{/if}} - - {{#if document.system.community}} - {{document.system.community.name}} - {{else}} - {{localize 'TYPES.Item.community'}} - {{/if}} - - {{#if document.system.ancestry}} - {{document.system.ancestry.name}} - {{else}} - {{localize 'TYPES.Item.ancestry'}} - {{/if}} -
- - {{#if (or document.system.multiclass.value document.system.multiclass.subclass)}} -
- {{#if document.system.multiclass.value}} - {{document.system.multiclass.value.name}} - {{else}} - {{localize 'DAGGERHEART.GENERAL.multiclass'}} - {{/if}} - - {{#if document.system.multiclass.subclass}} - {{document.system.multiclass.subclass.name}} - {{else}} - {{localize 'TYPES.Item.subclass'}} - {{/if}} -
- {{/if}} -
- -
-
-
-

{{localize "DAGGERHEART.GENERAL.hope"}}

- {{#times document.system.resources.hope.max}} - - {{#if (gte ../document.system.resources.hope.value (add this 1))}} - - {{else}} - - {{/if}} - - {{/times}} - {{#times document.system.scars}} - - - - {{/times}} - {{#if hasExtraResources}}{{/if}} -
-
- {{#if document.system.class.value}} -
- {{#each document.system.domainData as |data|}} -
- -
- {{/each}} -
- {{/if}} -
- {{#if document.parties.size}} - - {{/if}} - {{#if @root.editable}} - - - {{/if}} -
-
- -
- {{#each this.attributes as |attribute key|}} -
-
-
- {{attribute.label}} -
-
- - - - -
- {{#if (gt attribute.value 0)}} - +{{attribute.value}} - {{else}} - {{attribute.value}} - {{/if}} -
- {{#if isSpellcasting}} -
- -
- {{/if}} -
-
- {{/each}} -
- - {{#> 'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs' }} - - {{/'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs'}} +
+ +
+

{{source.name}}

+
+

+ {{#if @root.editable}} + {{#if document.system.needsCharacterSetup}} + + {{else if document.system.levelData.canLevelUp}} + + {{/if}} + {{/if}} + {{#unless document.system.needsCharacterSetup}} + {{localize 'DAGGERHEART.GENERAL.level'}} + + {{/unless}} +

+
+
+
+
+ {{#if document.system.class.value}} + {{document.system.class.value.name}} + {{else}} + {{localize 'TYPES.Item.class'}} + {{/if}} + + {{#if document.system.class.subclass}} + {{document.system.class.subclass.name}} + {{else}} + {{localize 'TYPES.Item.subclass'}} + {{/if}} + + {{#if document.system.community}} + {{document.system.community.name}} + {{else}} + {{localize 'TYPES.Item.community'}} + {{/if}} + + {{#if document.system.ancestry}} + {{document.system.ancestry.name}} + {{else}} + {{localize 'TYPES.Item.ancestry'}} + {{/if}} +
+ + {{#if (or document.system.multiclass.value document.system.multiclass.subclass)}} +
+ {{#if document.system.multiclass.value}} + {{document.system.multiclass.value.name}} + {{else}} + {{localize 'DAGGERHEART.GENERAL.multiclass'}} + {{/if}} + + {{#if document.system.multiclass.subclass}} + {{document.system.multiclass.subclass.name}} + {{else}} + {{localize 'TYPES.Item.subclass'}} + {{/if}} +
+ {{/if}} + + +
+ +
+
+
+

{{localize "DAGGERHEART.GENERAL.hope"}}

+ {{#times document.system.resources.hope.max}} + + {{#if (gte ../document.system.resources.hope.value (add this 1))}} + + {{else}} + + {{/if}} + + {{/times}} + {{#times document.system.scars}} + + + + {{/times}} + {{#if hasExtraResources}}{{/if}} +
+
+ {{#if document.system.class.value}} +
+ {{#each document.system.domainData as |data|}} +
+ +
+ {{/each}} +
+ {{/if}} +
+ {{#if document.parties.size}} + + {{/if}} + {{#if @root.editable}} + + + {{/if}} +
+
+ +
+ {{#each this.attributes as |attribute key|}} +
+
+
+ {{attribute.label}} +
+
+ + + + +
+ {{#if (gt attribute.value 0)}} + +{{attribute.value}} + {{else}} + {{attribute.value}} + {{/if}} +
+ {{#if isSpellcasting}} +
+ +
+ {{/if}} +
+
+ {{/each}} +
+ + {{#> 'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs' }} + + {{/'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs'}}
\ No newline at end of file diff --git a/templates/sheets/actors/character/inventory.hbs b/templates/sheets/actors/character/inventory.hbs index fe1e6972..c3ddb0ad 100644 --- a/templates/sheets/actors/character/inventory.hbs +++ b/templates/sheets/actors/character/inventory.hbs @@ -1,54 +1,54 @@ -
-
- - - - -
- - {{#if this.inventory.hasCurrency}} - {{> "systems/daggerheart/templates/sheets/global/partials/gold.hbs" currencies=inventory.currencies}} - {{/if}} - -
- {{> 'daggerheart.inventory-items' - title='TYPES.Item.weapon' - type='weapon' - collection=@root.inventory.weapons - isGlassy=true - canCreate=@root.editable - hideResources=true - }} - {{> 'daggerheart.inventory-items' - title='TYPES.Item.armor' - type='armor' - collection=@root.inventory.armor - isGlassy=true - canCreate=@root.editable - hideResources=true - }} - {{> 'daggerheart.inventory-items' - title='TYPES.Item.consumable' - type='consumable' - collection=@root.inventory.consumables - isGlassy=true - canCreate=@root.editable - isQuantifiable=true - }} - {{> 'daggerheart.inventory-items' - title='TYPES.Item.loot' - type='loot' - collection=@root.inventory.loot - isGlassy=true - canCreate=@root.editable - showActions=@root.editable - isQuantifiable=true - }} -
+
+
+ + + + +
+ + {{#if this.inventory.hasCurrency}} + {{> "systems/daggerheart/templates/sheets/global/partials/gold.hbs" currencies=inventory.currencies}} + {{/if}} + +
+ {{> 'daggerheart.inventory-items' + title='TYPES.Item.weapon' + type='weapon' + collection=@root.inventory.weapons + isGlassy=true + canCreate=@root.editable + hideResources=true + }} + {{> 'daggerheart.inventory-items' + title='TYPES.Item.armor' + type='armor' + collection=@root.inventory.armor + isGlassy=true + canCreate=@root.editable + hideResources=true + }} + {{> 'daggerheart.inventory-items' + title='TYPES.Item.consumable' + type='consumable' + collection=@root.inventory.consumables + isGlassy=true + canCreate=@root.editable + isQuantifiable=true + }} + {{> 'daggerheart.inventory-items' + title='TYPES.Item.loot' + type='loot' + collection=@root.inventory.loot + isGlassy=true + canCreate=@root.editable + showActions=@root.editable + isQuantifiable=true + }} +
\ No newline at end of file diff --git a/templates/sheets/actors/character/loadout.hbs b/templates/sheets/actors/character/loadout.hbs index 945f06d2..9ba3fb04 100644 --- a/templates/sheets/actors/character/loadout.hbs +++ b/templates/sheets/actors/character/loadout.hbs @@ -1,42 +1,42 @@ -
-
- - - - - -
- -
- {{> 'daggerheart.inventory-items' - title='DAGGERHEART.GENERAL.Tabs.loadout' - type='domainCard' - isGlassy=true - cardView=cardView - collection=document.system.domainCards.loadout - canCreate=@root.editable - }} - {{> 'daggerheart.inventory-items' - title='DAGGERHEART.GENERAL.Tabs.vault' - type='domainCard' - isGlassy=true - cardView=cardView - collection=document.system.domainCards.vault - canCreate=@root.editable - inVault=true - }} -
+
+
+ + + + + +
+ +
+ {{> 'daggerheart.inventory-items' + title='DAGGERHEART.GENERAL.Tabs.loadout' + type='domainCard' + isGlassy=true + cardView=cardView + collection=document.system.domainCards.loadout + canCreate=@root.editable + }} + {{> 'daggerheart.inventory-items' + title='DAGGERHEART.GENERAL.Tabs.vault' + type='domainCard' + isGlassy=true + cardView=cardView + collection=document.system.domainCards.vault + canCreate=@root.editable + inVault=true + }} +
\ No newline at end of file diff --git a/templates/sheets/actors/character/sidebar.hbs b/templates/sheets/actors/character/sidebar.hbs index 6ca858bf..313c81f9 100644 --- a/templates/sheets/actors/character/sidebar.hbs +++ b/templates/sheets/actors/character/sidebar.hbs @@ -1,152 +1,152 @@ -