diff --git a/lang/en.json b/lang/en.json index 9c1bf3e6..4c374458 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1568,7 +1568,8 @@ "Range": "Range", "Damage": { "Title": "Damage", - "Value": "Value", + "Die": "Die", + "Bonus": "Bonus", "Type": "Type" }, "Burden": "Burden", diff --git a/module/applications/roll.mjs b/module/applications/roll.mjs index 321ead6f..36188ad8 100644 --- a/module/applications/roll.mjs +++ b/module/applications/roll.mjs @@ -39,7 +39,6 @@ export class DHRoll extends Roll { if (config.dialog.configure !== false) { // Open Roll Dialog const DialogClass = config.dialog?.class ?? this.DefaultDialog; - console.log(roll, config); const configDialog = await DialogClass.configure(roll, config, message); if (!configDialog) return; } @@ -124,6 +123,18 @@ export class DHRoll extends Roll { } return (this._formula = this.constructor.getFormula(this.terms)); } + + static calculateTotalModifiers(roll, config) { + config.roll.modifierTotal = 0; + for (let i = 0; i < roll.terms.length; i++) { + if ( + roll.terms[i] instanceof foundry.dice.terms.NumericTerm && + !!roll.terms[i - 1] && + roll.terms[i - 1] instanceof foundry.dice.terms.OperatorTerm + ) + config.roll.modifierTotal += Number(`${roll.terms[i - 1].operator}${roll.terms[i].total}`); + } + } } export class DualityDie extends foundry.dice.terms.Die { @@ -299,15 +310,8 @@ export class D20Roll extends DHRoll { value: d.total }; }); - config.roll.modifierTotal = 0; - for (let i = 0; i < roll.terms.length; i++) { - if ( - roll.terms[i] instanceof foundry.dice.terms.NumericTerm && - !!roll.terms[i - 1] && - roll.terms[i - 1] instanceof foundry.dice.terms.OperatorTerm - ) - config.roll.modifierTotal += Number(`${roll.terms[i - 1].operator}${roll.terms[i].total}`); - } + + this.calculateTotalModifiers(roll, config); } resetFormula() { @@ -468,6 +472,7 @@ export class DamageRoll extends DHRoll { static async postEvaluate(roll, config = {}) { super.postEvaluate(roll, config); config.roll.type = config.type; + this.calculateTotalModifiers(roll, config); if (config.source?.message) { const chatMessage = ui.chat.collection.get(config.source.message); chatMessage.update({ 'system.damage': config }); diff --git a/module/data/action/action.mjs b/module/data/action/action.mjs index 3643125f..979a6e65 100644 --- a/module/data/action/action.mjs +++ b/module/data/action/action.mjs @@ -237,6 +237,7 @@ export class DHBaseAction extends foundry.abstract.DataModel { } if (this.hasRoll) { + console.log(config); const rollConfig = this.prepareRoll(config); config.roll = rollConfig; config = await this.actor.diceRoll(config); @@ -248,7 +249,6 @@ export class DHBaseAction extends foundry.abstract.DataModel { if(t.hit) { const target = game.canvas.tokens.get(t.id), actor = target?.actor; - console.log(actor) if(!actor) return; actor.saveRoll({ event, @@ -635,7 +635,7 @@ export class DHAttackAction extends DHDamageAction { return { value: { multiplier: 'prof', - dice: this.item?.system?.damage.value, + dice: this.item?.system?.damage.dice, bonus: this.item?.system?.damage.bonus ?? 0 }, type: this.item?.system?.damage.type, diff --git a/module/data/item/weapon.mjs b/module/data/item/weapon.mjs index 9154eb31..ee59a7f7 100644 --- a/module/data/item/weapon.mjs +++ b/module/data/item/weapon.mjs @@ -32,7 +32,8 @@ export default class DHWeapon extends BaseDataItem { burden: new fields.StringField({ required: true, choices: SYSTEM.GENERAL.burden, initial: 'oneHanded' }), //DAMAGE damage: new fields.SchemaField({ - value: new FormulaField({ initial: 'd6' }), + dice: new fields.StringField({ choices: SYSTEM.GENERAL.diceTypes, initial: 'd6' }), + bonus: new fields.NumberField({ nullable: true, initial: null }), type: new fields.StringField({ required: true, choices: SYSTEM.GENERAL.damageTypes, diff --git a/module/dialogs/d20RollDialog.mjs b/module/dialogs/d20RollDialog.mjs index 9ea35fce..26efaf7d 100644 --- a/module/dialogs/d20RollDialog.mjs +++ b/module/dialogs/d20RollDialog.mjs @@ -9,7 +9,6 @@ export default class D20RollDialog extends HandlebarsApplicationMixin(Applicatio this.config.experiences = []; if (config.source?.action) { - console.log(config); this.item = config.data.parent.items.get(config.source.item) ?? config.data.parent; this.action = config.data.attack?._id == config.source.action diff --git a/styles/daggerheart.css b/styles/daggerheart.css index 02a4d248..6b2b28d6 100755 --- a/styles/daggerheart.css +++ b/styles/daggerheart.css @@ -3708,6 +3708,14 @@ div.daggerheart.views.multiclass { .daggerheart.dh-style.setting .trait-array-container .trait-array-item input { text-align: center; } +.themed.theme-dark .application.sheet.dh-style .character-header-sheet .trait, +.themed.theme-dark.application.sheet.dh-style .character-header-sheet .trait { + background: url(../assets/svg/trait-shield.svg) no-repeat; +} +.themed.theme-light .application.sheet.dh-style .character-header-sheet .trait, +.themed.theme-light.application.sheet.dh-style .character-header-sheet .trait { + background: url('../assets/svg/trait-shield-light.svg') no-repeat; +} .application.sheet.daggerheart.actor.dh-style.character .character-header-sheet { padding: 0 15px; padding-top: 36px; @@ -3845,12 +3853,8 @@ div.daggerheart.views.multiclass { .application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait { height: 60px; width: 60px; - background: url(../assets/svg/trait-shield.svg) no-repeat; cursor: pointer; } -.theme-light .application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait { - background: url('../assets/svg/trait-shield-light.svg') no-repeat; -} .application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait .trait-name { display: flex; padding-top: 5px; @@ -3872,32 +3876,44 @@ div.daggerheart.views.multiclass { font-size: 20px; text-align: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet { +.themed.theme-dark .application.sheet.dh-style .character-sidebar-sheet, +.themed.theme-dark.application.sheet.dh-style .character-sidebar-sheet { + background-image: url('../assets/parchments/dh-parchment-dark.png'); +} +.themed.theme-dark .application.sheet.dh-style .character-sidebar-sheet .experience-value, +.themed.theme-dark.application.sheet.dh-style .character-sidebar-sheet .experience-value { + background: url(../assets/svg/experience-shield.svg) no-repeat; +} +.themed.theme-light .application.sheet.dh-style .character-sidebar-sheet, +.themed.theme-light.application.sheet.dh-style .character-sidebar-sheet { + background: transparent; +} +.themed.theme-light .application.sheet.dh-style .character-sidebar-sheet .experience-value, +.themed.theme-light.application.sheet.dh-style .character-sidebar-sheet .experience-value { + background: url('../assets/svg/experience-shield-light.svg') no-repeat; +} +.application.sheet.dh-style .character-sidebar-sheet { width: 275px; min-width: 275px; border-right: 1px solid light-dark(#18162e, #f3c267); - background-image: url('../assets/parchments/dh-parchment-dark.png'); } -.theme-light .application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet { - background: transparent; -} -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .portrait { +.application.sheet.dh-style .character-sidebar-sheet .portrait { position: relative; border-bottom: 1px solid light-dark(#18162e, #f3c267); cursor: pointer; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .portrait img { +.application.sheet.dh-style .character-sidebar-sheet .portrait img { height: 235px; width: 275px; object-fit: cover; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .portrait .death-roll-btn { +.application.sheet.dh-style .character-sidebar-sheet .portrait .death-roll-btn { display: none; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .portrait.death-roll { +.application.sheet.dh-style .character-sidebar-sheet .portrait.death-roll { filter: grayscale(1); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .portrait.death-roll .death-roll-btn { +.application.sheet.dh-style .character-sidebar-sheet .portrait.death-roll .death-roll-btn { display: flex; position: absolute; top: 30%; @@ -3905,10 +3921,10 @@ div.daggerheart.views.multiclass { font-size: 6rem; color: #efe6d8; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .portrait.death-roll .death-roll-btn:hover { +.application.sheet.dh-style .character-sidebar-sheet .portrait.death-roll .death-roll-btn:hover { text-shadow: 0 0 8px #efe6d8; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section { +.application.sheet.dh-style .character-sidebar-sheet .info-section { position: relative; display: flex; flex-direction: column; @@ -3916,17 +3932,17 @@ div.daggerheart.views.multiclass { gap: 30px; margin-bottom: -10px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section { display: flex; justify-content: space-evenly; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar { position: relative; width: 100px; height: 40px; justify-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-label { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-label { position: relative; top: 40px; height: 22px; @@ -3934,13 +3950,13 @@ div.daggerheart.views.multiclass { clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); background: light-dark(#18162e, #f3c267); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-label h4 { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-label h4 { font-weight: bold; text-align: center; line-height: 18px; color: light-dark(#efe6d8, #18162e); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-value { position: absolute; display: flex; padding: 0 6px; @@ -3953,7 +3969,7 @@ div.daggerheart.views.multiclass { z-index: 2; color: #efe6d8; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'] { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'] { background: transparent; font-size: 1.5rem; width: 40px; @@ -3963,22 +3979,22 @@ div.daggerheart.views.multiclass { outline: 2px solid transparent; color: #efe6d8; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input { padding: 0; color: #efe6d8; backdrop-filter: none; background: transparent; transition: all 0.3s ease; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input:hover, -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input:focus { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input:hover, +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input:focus { background: rgba(24, 22, 46, 0.33); backdrop-filter: blur(9.5px); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value .bar-label { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .status-value .bar-label { width: 40px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar { position: absolute; appearance: none; width: 100px; @@ -3988,37 +4004,37 @@ div.daggerheart.views.multiclass { z-index: 1; background: #18162e; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-webkit-progress-bar { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-webkit-progress-bar { border: none; background: #18162e; border-radius: 6px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-webkit-progress-value { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-webkit-progress-value { background: linear-gradient(15deg, #46140a 0%, #be0000 42%, #fcb045 100%); border-radius: 6px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar.stress-color::-webkit-progress-value { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar.stress-color::-webkit-progress-value { background: linear-gradient(15deg, #823b01 0%, #fc8e45 65%, #be0000 100%); border-radius: 6px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-moz-progress-bar { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-moz-progress-bar { background: linear-gradient(15deg, #46140a 0%, #be0000 42%, #fcb045 100%); border-radius: 6px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar.stress-color::-moz-progress-bar { +.application.sheet.dh-style .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar.stress-color::-moz-progress-bar { background: linear-gradient(15deg, #823b01 0%, #fc8e45 65%, #be0000 100%); border-radius: 6px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section { +.application.sheet.dh-style .character-sidebar-sheet .info-section .status-section { display: flex; flex-wrap: wrap; gap: 5px; justify-content: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number { +.application.sheet.dh-style .character-sidebar-sheet .info-section .status-section .status-number { justify-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-value { +.application.sheet.dh-style .character-sidebar-sheet .info-section .status-section .status-number .status-value { position: relative; display: flex; width: 50px; @@ -4033,62 +4049,62 @@ div.daggerheart.views.multiclass { background: light-dark(transparent, #18162e); z-index: 2; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-value.armor-slots { +.application.sheet.dh-style .character-sidebar-sheet .info-section .status-section .status-number .status-value.armor-slots { width: 80px; height: 30px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-label { +.application.sheet.dh-style .character-sidebar-sheet .info-section .status-section .status-number .status-label { padding: 2px 10px; width: 100%; border-radius: 3px; background: light-dark(#18162e, #f3c267); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-label h4 { +.application.sheet.dh-style .character-sidebar-sheet .info-section .status-section .status-number .status-label h4 { font-weight: bold; text-align: center; line-height: 18px; font-size: 12px; color: light-dark(#efe6d8, #18162e); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .items-sidebar-list { +.application.sheet.dh-style .character-sidebar-sheet .items-sidebar-list { display: flex; flex-direction: column; gap: 5px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .items-sidebar-list .inventory-item { +.application.sheet.dh-style .character-sidebar-sheet .items-sidebar-list .inventory-item { padding: 0 10px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .equipment-section .title { +.application.sheet.dh-style .character-sidebar-sheet .equipment-section .title { display: flex; gap: 15px; align-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .equipment-section .title h3 { +.application.sheet.dh-style .character-sidebar-sheet .equipment-section .title h3 { font-size: 20px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .equipment-section .items-list { +.application.sheet.dh-style .character-sidebar-sheet .equipment-section .items-list { display: flex; flex-direction: column; gap: 10px; align-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .loadout-section .title { +.application.sheet.dh-style .character-sidebar-sheet .loadout-section .title { display: flex; gap: 15px; align-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .loadout-section .title h3 { +.application.sheet.dh-style .character-sidebar-sheet .loadout-section .title h3 { font-size: 20px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .title { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .title { display: flex; gap: 15px; align-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .title h3 { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .title h3 { font-size: 20px; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .experience-list { display: flex; flex-direction: column; gap: 5px; @@ -4096,14 +4112,14 @@ div.daggerheart.views.multiclass { margin-top: 10px; align-items: center; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-row { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .experience-list .experience-row { display: flex; gap: 5px; width: 250px; align-items: center; justify-content: space-between; } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-row input[type='text'] { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .experience-list .experience-row input[type='text'] { height: 32px; width: 180px; border: 1px solid transparent; @@ -4113,10 +4129,10 @@ div.daggerheart.views.multiclass { transition: all 0.3s ease; color: light-dark(#222, #efe6d8); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-row input[type='text']:hover { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .experience-list .experience-row input[type='text']:hover { outline: 2px solid light-dark(#222, #efe6d8); } -.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-value { +.application.sheet.dh-style .character-sidebar-sheet .experience-section .experience-list .experience-value { height: 25px; width: 35px; font-size: 14px; @@ -4124,10 +4140,6 @@ div.daggerheart.views.multiclass { color: light-dark(#222, #efe6d8); align-content: center; text-align: center; - background: url(../assets/svg/experience-shield.svg) no-repeat; -} -.theme-light .application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-value { - background: url('../assets/svg/experience-shield-light.svg') no-repeat; } .application.sheet.daggerheart.actor.dh-style.character .window-content { display: grid; @@ -4801,12 +4813,14 @@ div.daggerheart.views.multiclass { align-items: center; padding: 0 20px; } -.theme-light .application.sheet.daggerheart.actor.dh-style.environment { - background: url('../assets/parchments/dh-parchment-light.png'); -} -.theme-dark .application.sheet.daggerheart.actor.dh-style.environment { +.themed.theme-dark .application.sheet.dh-style.environment, +.themed.theme-dark.application.sheet.dh-style.environment { background-image: url('../assets/parchments/dh-parchment-dark.png'); } +.themed.theme-light .application.sheet.dh-style.environment, +.themed.theme-light.application.sheet.dh-style.environment { + background: url('../assets/parchments/dh-parchment-light.png'); +} .application.sheet.daggerheart.actor.dh-style.environment .tab { max-height: 300px; overflow-y: auto; @@ -5296,12 +5310,14 @@ div.daggerheart.views.multiclass { .theme-light .application.sheet.daggerheart.actor.dh-style.companion .experience-list .experience-value { background: url('../assets/svg/experience-shield-light.svg') no-repeat; } -.theme-light .application.sheet.daggerheart.actor.dh-style.companion { - background: url('../assets/parchments/dh-parchment-light.png'); -} -.theme-dark .application.sheet.daggerheart.actor.dh-style.companion { +.themed.theme-dark .application.sheet.dh-style.companion, +.themed.theme-dark.application.sheet.dh-style.companion { background-image: url('../assets/parchments/dh-parchment-dark.png'); } +.themed.theme-light .application.sheet.dh-style.companion, +.themed.theme-light.application.sheet.dh-style.companion { + background: url('../assets/parchments/dh-parchment-light.png'); +} .application.sheet.daggerheart.actor.dh-style.adversary .window-content { overflow: auto; } @@ -5472,6 +5488,23 @@ div.daggerheart.views.multiclass { font-family: 'Montserrat', sans-serif; opacity: 0.8; } +/** + * Applies theme-specific styles. + * @param {Rules} @darkRules - Styles to apply when `.theme-dark` is present + * @param {Rules} @lightRules - Styles to apply when `.theme-light` is present + */ +.themed.theme-dark .application.sheet.dh-style, +.themed.theme-dark.application.sheet.dh-style { + background: rgba(24, 22, 46, 0.33); + backdrop-filter: blur(9px); +} +.themed.theme-light .application.sheet.dh-style, +.themed.theme-light.application.sheet.dh-style { + background: url('../assets/parchments/dh-parchment-light.png') no-repeat center; +} +.application.sheet.dh-style { + border-radius: 10px; +} .application.sheet.dh-style .window-header { background: transparent; border-bottom: none; @@ -5488,65 +5521,44 @@ div.daggerheart.views.multiclass { padding: 0; } .application.sheet.dh-style .window-header button:hover { - border: 1px solid light-dark(#18162e, #f3c267); + border-color: light-dark(#18162e, #f3c267); color: light-dark(#18162e, #f3c267); } +.application.sheet.dh-style .window-content { + padding: 0; + position: relative; + top: -36px; + min-height: -webkit-fill-available; + transition: opacity 0.3s ease; +} +.application.sheet.dh-style .window-content .tab { + padding: 0 10px; +} +.application.sheet.dh-style.minimized .window-content { + opacity: 0; + transition-duration: 0.1s; +} .application.sheet.dh-style:not(.minimized) .window-title, .application.sheet.dh-style:not(.minimized) .window-icon { display: none; opacity: 0; transition: opacity 0.3s ease; } -.application.sheet.dh-style.minimized .window-content { - opacity: 0; - transition: opacity 0.1s ease; -} .application.sheet.dh-style:not(.minimized) .window-content { opacity: 1; - transition: opacity 0.3s ease; } -.theme-dark .application.sheet.dh-style { - background: rgba(24, 22, 46, 0.33); - backdrop-filter: blur(9px); -} -.theme-light .application.sheet.dh-style { - background-image: url('../assets/parchments/dh-parchment-light.png'); - background-repeat: no-repeat; - background-position: center; -} -.application.sheet.daggerheart.dh-style { - border-radius: 10px; -} -.application.sheet.daggerheart.dh-style .window-content { - padding: 0; - position: relative; - top: -36px; - min-height: -webkit-fill-available; -} -.application.sheet.daggerheart.dh-style .window-content .tab { - padding: 0 10px; -} -.application.sheet.daggerheart.character.dh-style { - border-radius: 10px; -} -.application.sheet.daggerheart.character.dh-style .window-content { - position: absolute; - top: 0; -} -.application.sheet.daggerheart.character.dh-style .window-content .tab { - padding: 0 15px; - overflow-y: hidden; -} -.theme-light .application.dialog.dh-style { - background-image: url('../assets/parchments/dh-parchment-light.png'); - background-repeat: no-repeat; - background-position: center; -} -.theme-dark .application.dialog.dh-style { +.themed.theme-dark .application.sheet.dh-style.dialog, +.themed.theme-dark.application.sheet.dh-style.dialog { background-image: url('../assets/parchments/dh-parchment-dark.png'); background-repeat: no-repeat; background-position: center; } +.themed.theme-light .application.sheet.dh-style.dialog, +.themed.theme-light.application.sheet.dh-style.dialog { + background-image: url('../assets/parchments/dh-parchment-light.png'); + background-repeat: no-repeat; + background-position: center; +} .application.dialog.dh-style { border: none; } diff --git a/styles/less/actors/character/header.less b/styles/less/actors/character/header.less index 4a2c1cec..300314da 100644 --- a/styles/less/actors/character/header.less +++ b/styles/less/actors/character/header.less @@ -1,6 +1,17 @@ @import '../../utils/colors.less'; @import '../../utils/fonts.less'; +// Theme header backgrounds +.appTheme({ + .character-header-sheet .trait { + background: url(../assets/svg/trait-shield.svg) no-repeat; + } +}, { + .character-header-sheet .trait { + background: url('../assets/svg/trait-shield-light.svg') no-repeat; + } +}); + .application.sheet.daggerheart.actor.dh-style.character { .character-header-sheet { padding: 0 15px; @@ -153,14 +164,8 @@ .trait { height: 60px; width: 60px; - background: url(../assets/svg/trait-shield.svg) no-repeat; - cursor: pointer; - .theme-light & { - background: url('../assets/svg/trait-shield-light.svg') no-repeat; - } - .trait-name { display: flex; align-items: center; diff --git a/styles/less/actors/character/sidebar.less b/styles/less/actors/character/sidebar.less index e5783cbb..4c637839 100644 --- a/styles/less/actors/character/sidebar.less +++ b/styles/less/actors/character/sidebar.less @@ -1,305 +1,310 @@ @import '../../utils/colors.less'; @import '../../utils/fonts.less'; -.application.sheet.daggerheart.actor.dh-style.character { +// Theme sidebar backgrounds +.appTheme({ .character-sidebar-sheet { - width: 275px; - min-width: 275px; - border-right: 1px solid light-dark(@dark-blue, @golden); background-image: url('../assets/parchments/dh-parchment-dark.png'); + .experience-value { + background: url(../assets/svg/experience-shield.svg) no-repeat; + } + } +}, { + .character-sidebar-sheet { + background: transparent; + .experience-value { + background: url('../assets/svg/experience-shield-light.svg') no-repeat; + } + } +}); - .theme-light & { - background: transparent; +.application.sheet.dh-style .character-sidebar-sheet { + width: 275px; + min-width: 275px; + border-right: 1px solid light-dark(@dark-blue, @golden); + + .portrait { + position: relative; + border-bottom: 1px solid light-dark(@dark-blue, @golden); + cursor: pointer; + + img { + height: 235px; + width: 275px; + object-fit: cover; } - .portrait { - position: relative; - border-bottom: 1px solid light-dark(@dark-blue, @golden); - cursor: pointer; + .death-roll-btn { + display: none; + } - img { - height: 235px; - width: 275px; - object-fit: cover; - } + &.death-roll { + filter: grayscale(1); .death-roll-btn { - display: none; - } + display: flex; + position: absolute; + top: 30%; + right: 30%; + font-size: 6rem; + color: @beige; - &.death-roll { - filter: grayscale(1); - - .death-roll-btn { - display: flex; - position: absolute; - top: 30%; - right: 30%; - font-size: 6rem; - color: @beige; - - &:hover { - text-shadow: 0 0 8px @beige; - } + &:hover { + text-shadow: 0 0 8px @beige; } } } + } - .info-section { - position: relative; + .info-section { + position: relative; + display: flex; + flex-direction: column; + top: -20px; + gap: 30px; + margin-bottom: -10px; + + .resources-section { display: flex; - flex-direction: column; - top: -20px; - gap: 30px; - margin-bottom: -10px; + justify-content: space-evenly; - .resources-section { - display: flex; - justify-content: space-evenly; + .status-bar { + position: relative; + width: 100px; + height: 40px; + justify-items: center; - .status-bar { + .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-items: center; + justify-content: center; + text-align: center; + z-index: 2; + color: @beige; - .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; + input[type='number'] { + background: transparent; font-size: 1.5rem; - align-items: center; - width: 100px; - height: 40px; - justify-content: center; + width: 40px; + height: 30px; text-align: center; - z-index: 2; + border: none; + outline: 2px solid transparent; color: @beige; - input[type='number'] { - background: transparent; - font-size: 1.5rem; - width: 40px; - height: 30px; - text-align: center; - border: none; - outline: 2px solid transparent; + &.bar-input { + padding: 0; color: @beige; + backdrop-filter: none; + background: transparent; + transition: all 0.3s ease; - &.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); - } + &: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 light-dark(@dark-blue, @golden); - border-radius: 6px; - z-index: 1; + + .bar-label { + width: 40px; + } + } + .progress-bar { + position: absolute; + appearance: none; + width: 100px; + height: 40px; + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + z-index: 1; + background: @dark-blue; + + &::-webkit-progress-bar { + border: none; 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; - } + border-radius: 6px; } - } - } - - .status-section { - display: flex; - flex-wrap: wrap; - gap: 5px; - justify-content: center; - - .status-number { - justify-items: center; - - .status-value { - position: relative; - display: flex; - width: 50px; - height: 30px; - border: 1px solid light-dark(@dark-blue, @golden); - border-bottom: none; - border-radius: 6px 6px 0 0; - padding: 0 6px; - font-size: 1.2rem; - align-items: center; - justify-content: center; - background: light-dark(transparent, @dark-blue); - z-index: 2; - - &.armor-slots { - width: 80px; - height: 30px; - } + &::-webkit-progress-value { + background: @gradient-hp; + border-radius: 6px; } - - .status-label { - padding: 2px 10px; - width: 100%; - border-radius: 3px; - background: light-dark(@dark-blue, @golden); - - h4 { - font-weight: bold; - text-align: center; - line-height: 18px; - font-size: 12px; - color: light-dark(@beige, @dark-blue); - } + &.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; } } } } - .items-sidebar-list { + .status-section { display: flex; - flex-direction: column; + flex-wrap: wrap; gap: 5px; + justify-content: center; - .inventory-item { - padding: 0 10px; - } - } + .status-number { + justify-items: center; - .equipment-section { - .title { - display: flex; - gap: 15px; - align-items: center; - - h3 { - font-size: 20px; - } - } - .items-list { - display: flex; - flex-direction: column; - gap: 10px; - align-items: center; - } - } - - .loadout-section { - .title { - display: flex; - gap: 15px; - align-items: center; - - h3 { - font-size: 20px; - } - } - } - - .experience-section { - .title { - display: flex; - gap: 15px; - align-items: center; - - h3 { - font-size: 20px; - } - } - - .experience-list { - display: flex; - flex-direction: column; - gap: 5px; - width: 100%; - margin-top: 10px; - align-items: center; - - .experience-row { + .status-value { + position: relative; display: flex; - gap: 5px; - width: 250px; + width: 50px; + height: 30px; + border: 1px solid light-dark(@dark-blue, @golden); + border-bottom: none; + border-radius: 6px 6px 0 0; + padding: 0 6px; + font-size: 1.2rem; align-items: center; - justify-content: space-between; + justify-content: center; + background: light-dark(transparent, @dark-blue); + z-index: 2; - input[type='text'] { - height: 32px; - width: 180px; - border: 1px solid transparent; - outline: 2px solid transparent; - font-size: 14px; - font-family: @font-body; - transition: all 0.3s ease; - color: light-dark(@dark, @beige); - - &:hover { - outline: 2px solid light-dark(@dark, @beige); - } + &.armor-slots { + width: 80px; + height: 30px; } } - .experience-value { - height: 25px; - width: 35px; - font-size: 14px; - font-family: @font-body; - color: light-dark(@dark, @beige); - align-content: center; - text-align: center; - background: url(../assets/svg/experience-shield.svg) no-repeat; + .status-label { + padding: 2px 10px; + width: 100%; + border-radius: 3px; + background: light-dark(@dark-blue, @golden); - .theme-light & { - background: url('../assets/svg/experience-shield-light.svg') no-repeat; + h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + font-size: 12px; + color: light-dark(@beige, @dark-blue); } } } } } + + .items-sidebar-list { + display: flex; + flex-direction: column; + gap: 5px; + + .inventory-item { + padding: 0 10px; + } + } + + .equipment-section { + .title { + display: flex; + gap: 15px; + align-items: center; + + h3 { + font-size: 20px; + } + } + .items-list { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + } + } + + .loadout-section { + .title { + display: flex; + gap: 15px; + align-items: center; + + h3 { + font-size: 20px; + } + } + } + + .experience-section { + .title { + display: flex; + gap: 15px; + align-items: center; + + h3 { + font-size: 20px; + } + } + + .experience-list { + display: flex; + flex-direction: column; + gap: 5px; + width: 100%; + margin-top: 10px; + align-items: center; + + .experience-row { + display: flex; + gap: 5px; + width: 250px; + align-items: center; + justify-content: space-between; + + input[type='text'] { + height: 32px; + width: 180px; + border: 1px solid transparent; + outline: 2px solid transparent; + font-size: 14px; + font-family: @font-body; + transition: all 0.3s ease; + color: light-dark(@dark, @beige); + + &:hover { + outline: 2px solid light-dark(@dark, @beige); + } + } + } + + .experience-value { + height: 25px; + width: 35px; + font-size: 14px; + font-family: @font-body; + color: light-dark(@dark, @beige); + align-content: center; + text-align: center; + } + } + } } diff --git a/styles/less/actors/companion/sheet.less b/styles/less/actors/companion/sheet.less index db221597..8c071978 100644 --- a/styles/less/actors/companion/sheet.less +++ b/styles/less/actors/companion/sheet.less @@ -1,11 +1,16 @@ -.application.sheet.daggerheart.actor.dh-style.companion { - .theme-light & { - background: url('../assets/parchments/dh-parchment-light.png'); - } - .theme-dark & { +// Theme header backgrounds + +.appTheme({ + &.companion { background-image: url('../assets/parchments/dh-parchment-dark.png'); } +}, { + &.companion { + background: url('../assets/parchments/dh-parchment-light.png'); + } +}); +.application.sheet.daggerheart.actor.dh-style.companion { // .profile { // height: 80px; // width: 80px; diff --git a/styles/less/actors/environment/sheet.less b/styles/less/actors/environment/sheet.less index 5e604188..733f105e 100644 --- a/styles/less/actors/environment/sheet.less +++ b/styles/less/actors/environment/sheet.less @@ -1,14 +1,17 @@ @import '../../utils/colors.less'; @import '../../utils/fonts.less'; -.application.sheet.daggerheart.actor.dh-style.environment { - .theme-light & { - background: url('../assets/parchments/dh-parchment-light.png'); - } - .theme-dark & { +.appTheme({ + &.environment { background-image: url('../assets/parchments/dh-parchment-dark.png'); } +}, { + &.environment { + background: url('../assets/parchments/dh-parchment-light.png'); + } +}); +.application.sheet.daggerheart.actor.dh-style.environment { .tab { max-height: 300px; overflow-y: auto; diff --git a/styles/less/global/dialog.less b/styles/less/global/dialog.less index 5db641b2..3856facb 100644 --- a/styles/less/global/dialog.less +++ b/styles/less/global/dialog.less @@ -1,45 +1,43 @@ -@import '../utils/colors.less'; -@import '../utils/fonts.less'; - -.theme-light { - .application.dialog.dh-style { - background-image: url('../assets/parchments/dh-parchment-light.png'); - background-repeat: no-repeat; - background-position: center; - } -} - -.theme-dark { - .application.dialog.dh-style { - background-image: url('../assets/parchments/dh-parchment-dark.png'); - background-repeat: no-repeat; - background-position: center; - } -} - -.application.dialog.dh-style { - border: none; - - .window-header { - background: transparent; - border-bottom: none; - color: light-dark(@dark-blue, @beige); - - h1 { - color: light-dark(@dark-blue, @beige); - font-family: @font-body; - } - - button { - color: light-dark(@dark-blue, @beige); - background: light-dark(transparent, @deep-black); - border: 1px solid light-dark(@dark-blue, transparent); - padding: 0; - - &:hover { - border: 1px solid light-dark(@dark-blue, @golden); - color: light-dark(@dark-blue, @golden); - } - } - } -} +@import '../utils/colors.less'; +@import '../utils/fonts.less'; + +.appTheme({ + &.dialog { + background-image: url('../assets/parchments/dh-parchment-dark.png'); + background-repeat: no-repeat; + background-position: center; + } +}, { + &.dialog { + background-image: url('../assets/parchments/dh-parchment-light.png'); + background-repeat: no-repeat; + background-position: center; + } +}); + +.application.dialog.dh-style { + border: none; + + .window-header { + background: transparent; + border-bottom: none; + color: light-dark(@dark-blue, @beige); + + h1 { + color: light-dark(@dark-blue, @beige); + font-family: @font-body; + } + + button { + color: light-dark(@dark-blue, @beige); + background: light-dark(transparent, @deep-black); + border: 1px solid light-dark(@dark-blue, transparent); + padding: 0; + + &:hover { + border: 1px solid light-dark(@dark-blue, @golden); + color: light-dark(@dark-blue, @golden); + } + } + } +} diff --git a/styles/less/global/sheet.less b/styles/less/global/sheet.less index 669b00ec..1e44d7a0 100755 --- a/styles/less/global/sheet.less +++ b/styles/less/global/sheet.less @@ -1,91 +1,70 @@ @import '../utils/colors.less'; @import '../utils/fonts.less'; +@import '../utils/mixin.less'; -.application.sheet.dh-style .window-header { - background: transparent; - border-bottom: none; - justify-content: end; +// Theme handling +.appTheme({ + background: @semi-transparent-dark-blue; + backdrop-filter: blur(9px); +}, { + background: url('../assets/parchments/dh-parchment-light.png') no-repeat center; +}); - h1 { - color: light-dark(@dark-blue, @beige); - font-family: @font-body; - } - - button { - background: light-dark(transparent, @deep-black); - color: light-dark(@dark-blue, @beige); - border: 1px solid light-dark(@dark-blue, transparent); - padding: 0; - - &:hover { - border: 1px solid light-dark(@dark-blue, @golden); - color: light-dark(@dark-blue, @golden); - } - } -} - -.application.sheet.dh-style:not(.minimized) { - .window-title, - .window-icon { - display: none; - opacity: 0; - transition: opacity 0.3s ease; - } -} - -.application.sheet.dh-style.minimized { - .window-content { - opacity: 0; - transition: opacity 0.1s ease; - } -} - -.application.sheet.dh-style:not(.minimized) { - .window-content { - opacity: 1; - transition: opacity 0.3s ease; - } -} - -.theme-dark { - .application.sheet.dh-style { - background: @semi-transparent-dark-blue; - backdrop-filter: blur(9px); - } -} - -.theme-light { - .application.sheet.dh-style { - background-image: url('../assets/parchments/dh-parchment-light.png'); - background-repeat: no-repeat; - background-position: center; - } -} - -.application.sheet.daggerheart.dh-style { +.application.sheet.dh-style { border-radius: 10px; + // Window header styles + .window-header { + background: transparent; + border-bottom: none; + justify-content: end; + + h1 { + color: light-dark(@dark-blue, @beige); + font-family: @font-body; + } + + button { + background: light-dark(transparent, @deep-black); + color: light-dark(@dark-blue, @beige); + border: 1px solid light-dark(@dark-blue, transparent); + padding: 0; + + &:hover { + border-color: light-dark(@dark-blue, @golden); + color: light-dark(@dark-blue, @golden); + } + } + } + + // Window content transitions .window-content { padding: 0; position: relative; top: -36px; min-height: -webkit-fill-available; + transition: opacity 0.3s ease; .tab { padding: 0 10px; } } -} -.application.sheet.daggerheart.character.dh-style { - border-radius: 10px; + // Minimized states + &.minimized .window-content { + opacity: 0; + transition-duration: 0.1s; + } - .window-content { - position: absolute; - top: 0; - .tab { - padding: 0 15px; - overflow-y: hidden; + &:not(.minimized) { + .window-title, + .window-icon { + display: none; + opacity: 0; + transition: opacity 0.3s ease; + } + .window-content { + opacity: 1; } } } diff --git a/styles/less/utils/mixin.less b/styles/less/utils/mixin.less new file mode 100644 index 00000000..8b2dfedb --- /dev/null +++ b/styles/less/utils/mixin.less @@ -0,0 +1,18 @@ +/** + * Applies theme-specific styles. + * @param {Rules} @darkRules - Styles to apply when `.theme-dark` is present + * @param {Rules} @lightRules - Styles to apply when `.theme-light` is present + */ +.appTheme(@darkRules, @lightRules) { + .themed { + &.theme-dark .application.sheet.dh-style, + &.theme-dark.application.sheet.dh-style { + @darkRules(); + } + + &.theme-light .application.sheet.dh-style, + &.theme-light.application.sheet.dh-style { + @lightRules(); + } + } +} diff --git a/templates/chat/duality-roll.hbs b/templates/chat/duality-roll.hbs index ff1e9894..9a530649 100644 --- a/templates/chat/duality-roll.hbs +++ b/templates/chat/duality-roll.hbs @@ -123,7 +123,7 @@
- {{!-- {{> 'systems/daggerheart/templates/chat/parts/damage-chat.hbs' damage=damage noTitle=true}} --}} + {{> 'systems/daggerheart/templates/chat/parts/damage-chat.hbs' damage=damage noTitle=true}}
diff --git a/templates/chat/parts/damage-chat.hbs b/templates/chat/parts/damage-chat.hbs index 096f09dc..f8d7cfed 100644 --- a/templates/chat/parts/damage-chat.hbs +++ b/templates/chat/parts/damage-chat.hbs @@ -17,7 +17,8 @@ {{/each}} - {{/each}} + {{/each}} + {{#if damage.roll.modifierTotal}}
{{#if (gt damage.roll.modifierTotal 0)}}+{{/if}}{{damage.roll.modifierTotal}}
{{/if}}
Total: {{damage.roll.total}}
diff --git a/templates/sheets/items/weapon/header.hbs b/templates/sheets/items/weapon/header.hbs index 5d33c6ae..7a10bcc1 100644 --- a/templates/sheets/items/weapon/header.hbs +++ b/templates/sheets/items/weapon/header.hbs @@ -14,7 +14,8 @@ - {{localize (concat 'DAGGERHEART.Range.' source.system.range '.name')}} - - {{source.system.damage.value}} + {{log this}} + {{source.system.damage.dice}} + {{source.system.damage.bonus}} ({{localize (concat 'DAGGERHEART.DamageType.' source.system.damage.type '.abbreviation')}}) - {{localize (concat 'DAGGERHEART.Burden.' source.system.burden)}} diff --git a/templates/sheets/items/weapon/settings.hbs b/templates/sheets/items/weapon/settings.hbs index aaa5192b..b431f1dd 100644 --- a/templates/sheets/items/weapon/settings.hbs +++ b/templates/sheets/items/weapon/settings.hbs @@ -19,8 +19,10 @@
{{localize "DAGGERHEART.Sheets.Weapon.Damage.Title"}} - {{localize "DAGGERHEART.Sheets.Weapon.Damage.Value"}} - {{formGroup systemFields.damage.fields.value value=source.system.damage.value}} + {{localize "DAGGERHEART.Sheets.Weapon.Damage.Die"}} + {{formGroup systemFields.damage.fields.dice value=source.system.damage.dice}} + {{localize "DAGGERHEART.Sheets.Weapon.Damage.Bonus"}} + {{formGroup systemFields.damage.fields.bonus value=source.system.damage.bonus}} {{localize "DAGGERHEART.Sheets.Weapon.Damage.Type"}} {{formGroup systemFields.damage.fields.type value=source.system.damage.type localize=true}}