From 61ed1597e7f3f90ab4e0f51644d3c291c06721c0 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Fri, 19 Dec 2025 15:41:27 +0100 Subject: [PATCH] Add damage management and DR for monsters also --- css/fvtt-lethal-fantasy.css | 16 +- lang/en.json | 6 +- lethal-fantasy.mjs | 10 +- module/applications/sheets/monster-sheet.mjs | 8 +- module/documents/actor.mjs | 16 +- module/documents/roll.mjs | 10 + module/models/monster.mjs | 32 +- .../lf-equipment/{000467.log => 000479.log} | 0 packs-system/lf-equipment/CURRENT | 2 +- packs-system/lf-equipment/LOG | 16 +- packs-system/lf-equipment/LOG.old | 23 +- .../{MANIFEST-000465 => MANIFEST-000477} | Bin 178 -> 178 bytes .../lf-gifts/{000466.log => 000478.log} | 0 packs-system/lf-gifts/CURRENT | 2 +- packs-system/lf-gifts/LOG | 16 +- packs-system/lf-gifts/LOG.old | 16 +- .../{MANIFEST-000464 => MANIFEST-000476} | Bin 247 -> 247 bytes .../lf-skills/{000468.log => 000480.log} | 0 packs-system/lf-skills/CURRENT | 2 +- packs-system/lf-skills/LOG | 16 +- packs-system/lf-skills/LOG.old | 16 +- .../{MANIFEST-000466 => MANIFEST-000478} | Bin 178 -> 178 bytes .../{000166.log => 000178.log} | 0 packs-system/lf-spells-miracles/CURRENT | 2 +- packs-system/lf-spells-miracles/LOG | 16 +- packs-system/lf-spells-miracles/LOG.old | 16 +- .../{MANIFEST-000164 => MANIFEST-000176} | Bin 177 -> 177 bytes .../{000465.log => 000477.log} | 0 packs-system/lf-vulnerabilities/CURRENT | 2 +- packs-system/lf-vulnerabilities/LOG | 16 +- packs-system/lf-vulnerabilities/LOG.old | 16 +- .../{MANIFEST-000463 => MANIFEST-000475} | Bin 176 -> 176 bytes styles/monster.less | 21 +- styles/roll.less | 5 + templates/chat-message.hbs | 58 ++- templates/monster-main.hbs | 359 +++++++++++++----- 36 files changed, 488 insertions(+), 230 deletions(-) rename packs-system/lf-equipment/{000467.log => 000479.log} (100%) rename packs-system/lf-equipment/{MANIFEST-000465 => MANIFEST-000477} (71%) rename packs-system/lf-gifts/{000466.log => 000478.log} (100%) rename packs-system/lf-gifts/{MANIFEST-000464 => MANIFEST-000476} (77%) rename packs-system/lf-skills/{000468.log => 000480.log} (100%) rename packs-system/lf-skills/{MANIFEST-000466 => MANIFEST-000478} (71%) rename packs-system/lf-spells-miracles/{000166.log => 000178.log} (100%) rename packs-system/lf-spells-miracles/{MANIFEST-000164 => MANIFEST-000176} (72%) rename packs-system/lf-vulnerabilities/{000465.log => 000477.log} (100%) rename packs-system/lf-vulnerabilities/{MANIFEST-000463 => MANIFEST-000475} (72%) diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css index e9c2002..46a4fa0 100644 --- a/css/fvtt-lethal-fantasy.css +++ b/css/fvtt-lethal-fantasy.css @@ -917,9 +917,10 @@ i.lethalfantasy { flex: 1; } .lethalfantasy .monster-main .monster-skills .monster-skill { - display: flex; + display: grid; + grid-template-columns: repeat(3, auto 2.5rem); + gap: 0.5rem; align-items: center; - margin-right: 0.5rem; } .lethalfantasy .monster-main .monster-skills .monster-skill .rollable:hover, .lethalfantasy .monster-main .monster-skills .monster-skill .rollable:focus { @@ -931,12 +932,9 @@ i.lethalfantasy { max-width: 2.5rem; } .lethalfantasy .monster-main .monster-skills .monster-skill .name { - flex: 1; - min-width: 3.2rem; margin-left: 4px; } .lethalfantasy .monster-main .monster-skills .monster-skill .form-group { - flex: 1; padding-left: 4px; } .lethalfantasy .monster-main .monster-skills .monster-skill .form-group .form-fields { @@ -951,8 +949,8 @@ i.lethalfantasy { } .lethalfantasy .monster-main .monster-movements .monster-movement { display: flex; - align-items: center; - margin-right: 0.5rem; + flex-direction: column; + gap: 4px; } .lethalfantasy .monster-main .monster-movements .monster-movement .rollable:hover, .lethalfantasy .monster-main .monster-movements .monster-movement .rollable:focus { @@ -2430,6 +2428,10 @@ i.lethalfantasy { background-color: rgba(0, 0, 0, 0.1); border-radius: 5px; } +.dice-roll .damage-buttons .damage-buttons-grid.monster-damage { + grid-template-columns: 1fr; + justify-items: center; +} .dice-roll .damage-buttons .damage-buttons-grid .damage-roll-btn { padding: 6px 10px; background: linear-gradient(to bottom, #8b4513 0%, #6b3410 100%); diff --git a/lang/en.json b/lang/en.json index 2e2a605..e6665a7 100644 --- a/lang/en.json +++ b/lang/en.json @@ -306,8 +306,10 @@ "grantedAttackDice": "Granted attack", "grantedDamageDice": "Granted damage", "grantedDefenseDice": "Granted defense", - "damageResistance": "Damage resistance", + "damageResistance": "DR", "damageResistanceShort": "DR", + "shieldDamageReduction": "Shield DR", + "shieldDefenseDice": "Shield dice", "stealth": "Stealth", "progressionDice": "Progression/Lethargy dice", "rollProgressionCount": "Roll progression count", @@ -557,7 +559,7 @@ "label": "Min" } }, - "damagereduction": { + "damageReduction": { "label": "Damage reduction" }, "defense": { diff --git a/lethal-fantasy.mjs b/lethal-fantasy.mjs index 1075a95..3139339 100644 --- a/lethal-fantasy.mjs +++ b/lethal-fantasy.mjs @@ -192,6 +192,8 @@ Hooks.on(hookName, (message, html, data) => { const weaponId = button.data("weapon-id") const damageType = button.data("damage-type") const damageFormula = button.data("damage-formula") + const damageModifier = button.data("damage-modifier") + const isMonster = button.data("is-monster") // Récupérer l'acteur qui a fait le jet initial const actor = game.actors.get(message.rolls[0]?.actorId) @@ -200,7 +202,13 @@ Hooks.on(hookName, (message, html, data) => { return } - // Récupérer l'arme + // Pour les monstres, utiliser prepareMonsterRoll + if (isMonster || actor.type === "monster") { + await actor.system.prepareMonsterRoll("monster-damage", weaponId, undefined, undefined, damageModifier) + return + } + + // Pour les personnages, récupérer l'arme const weapon = actor.items.get(weaponId) if (!weapon) { ui.notifications.error("Weapon not found") diff --git a/module/applications/sheets/monster-sheet.mjs b/module/applications/sheets/monster-sheet.mjs index 065afd5..deb1d32 100644 --- a/module/applications/sheets/monster-sheet.mjs +++ b/module/applications/sheets/monster-sheet.mjs @@ -162,9 +162,11 @@ export default class LethalFantasyMonsterSheet extends LethalFantasyActorSheet { async _onRoll(event, target) { if (this.isEditMode) return - const rollType = event.target.dataset.rollType - let rollKey = event.target.dataset.rollKey - let rollDice = event.target.dataset?.rollDice || "0" + const rollable = event.target.closest('.rollable') + if (!rollable) return + const rollType = rollable.dataset.rollType + let rollKey = rollable.dataset.rollKey + let rollDice = rollable.dataset?.rollDice || "0" this.actor.system.prepareMonsterRoll(rollType, rollKey, rollDice) } } diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index 26d9e9b..fda652b 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -80,14 +80,26 @@ export default class LethalFantasyActor extends Actor { /* *************************************************/ computeDamageReduction() { - let naturalDR = Number(this.system.biodata.naturalDR) || 0 - let magicDR = Number(this.system.biodata.magicDR) || 0 + // Pour les monstres, utiliser hp.damageResistance et combat.damageReduction + if (this.type === "monster") { + let hpDR = Number(this.system.hp?.damageResistance) || 0 + let combatDR = Number(this.system.combat?.damageReduction) || 0 + return hpDR + combatDR + } + // Pour les personnages, utiliser biodata et items + let naturalDR = Number(this.system.biodata?.naturalDR) || 0 + let magicDR = Number(this.system.biodata?.magicDR) || 0 let armorDR = this.getArmorDR() return naturalDR + magicDR + armorDR } /* *************************************************/ getShieldDR() { + // Pour les monstres, utiliser combat.shieldDamageReduction + if (this.type === "monster") { + return Number(this.system.combat?.shieldDamageReduction) || 0 + } + // Pour les personnages, utiliser les items de type shield let dr = 0 for (let item of this.items) { if (item.type === "shield" && item.system.equipped) { diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index 771121f..506b351 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -278,6 +278,7 @@ export default class LethalFantasyRoll extends Roll { } else if (options.rollType.includes("monster-damage")) { options.rollName = options.rollTarget.name + options.isDamage = true hasModifier = true hasChangeDice = false options.rollTarget.value = options.rollTarget.damageModifier @@ -1151,6 +1152,15 @@ export default class LethalFantasyRoll extends Roll { damageM: weapon.system?.damage?.damageM } console.log("Weapon damage options:", weaponDamageOptions) + } else if (this.type === "monster-attack" && this.rollTarget) { + weaponDamageOptions = { + weaponId: this.rollTarget.rollKey, + weaponName: this.rollTarget.name, + damageFormula: this.rollTarget.damageDice, + damageModifier: this.rollTarget.damageModifier, + isMonster: true + } + console.log("Monster damage options:", weaponDamageOptions) } const cardData = { diff --git a/module/models/monster.mjs b/module/models/monster.mjs index 41d7d76..36c2471 100644 --- a/module/models/monster.mjs +++ b/module/models/monster.mjs @@ -118,6 +118,9 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel defenseModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), damageModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), armorHitPoints: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + damageReduction: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + shieldDamageReduction: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + shieldDefenseDice: new fields.StringField({ required: true, nullable: false, initial: "d4" }) }) @@ -150,7 +153,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel await roll.toMessage({}, { rollMode: roll.options.rollMode }) } - async prepareMonsterRoll(rollType, rollKey, rollDice = undefined, tokenId = undefined) { + async prepareMonsterRoll(rollType, rollKey, rollDice = undefined, tokenId = undefined, damageModifier = undefined) { let rollTarget switch (rollType) { case "monster-attack": @@ -158,6 +161,10 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel case "monster-damage": rollTarget = foundry.utils.duplicate(this.attacks[rollKey]) rollTarget.rollKey = rollKey + // Si damageModifier est fourni (depuis le chat), l'utiliser au lieu de celui de la fiche + if (damageModifier !== undefined && rollType === "monster-damage") { + rollTarget.damageModifier = damageModifier + } break case "monster-skill": rollTarget = foundry.utils.duplicate(this.resists[rollKey]) @@ -168,6 +175,19 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel rollTarget.rollKey = rollKey rollTarget.rollDice = rollDice break + case "shield-defense": { + // Lance directement le dé de défense du bouclier + const formula = rollDice || this.combat.shieldDefenseDice + const roll = new Roll(formula) + await roll.evaluate() + + const flavor = game.i18n.localize("LETHALFANTASY.Label.shieldDefenseDice") + await roll.toMessage({ + flavor, + speaker: ChatMessage.getSpeaker({ actor: this.parent }) + }) + return + } case "weapon-damage-small": case "weapon-damage-medium": case "weapon-attack": @@ -210,13 +230,15 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel break default: ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType)) - break + return } // In all cases - rollTarget.tokenId = tokenId - console.log(rollTarget) - await this.roll(rollType, rollTarget) + if (rollTarget) { + rollTarget.tokenId = tokenId + console.log(rollTarget) + await this.roll(rollType, rollTarget) + } } async rollInitiative(combatId = undefined, combatantId = undefined) { diff --git a/packs-system/lf-equipment/000467.log b/packs-system/lf-equipment/000479.log similarity index 100% rename from packs-system/lf-equipment/000467.log rename to packs-system/lf-equipment/000479.log diff --git a/packs-system/lf-equipment/CURRENT b/packs-system/lf-equipment/CURRENT index 9801903..ab03c43 100644 --- a/packs-system/lf-equipment/CURRENT +++ b/packs-system/lf-equipment/CURRENT @@ -1 +1 @@ -MANIFEST-000465 +MANIFEST-000477 diff --git a/packs-system/lf-equipment/LOG b/packs-system/lf-equipment/LOG index b82a122..ea1da75 100644 --- a/packs-system/lf-equipment/LOG +++ b/packs-system/lf-equipment/LOG @@ -1,8 +1,8 @@ -2025/12/14-20:51:28.512263 7f17053ff6c0 Recovering log #462 -2025/12/14-20:51:28.522433 7f17053ff6c0 Delete type=3 #460 -2025/12/14-20:51:28.522511 7f17053ff6c0 Delete type=0 #462 -2025/12/14-21:17:40.691121 7f16eeffd6c0 Level-0 table #468: started -2025/12/14-21:17:40.691177 7f16eeffd6c0 Level-0 table #468: 0 bytes OK -2025/12/14-21:17:40.697563 7f16eeffd6c0 Delete type=0 #466 -2025/12/14-21:17:40.718082 7f16eeffd6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) -2025/12/14-21:17:40.718119 7f16eeffd6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) +2025/12/19-14:37:50.298740 7f24377fe6c0 Recovering log #475 +2025/12/19-14:37:50.308335 7f24377fe6c0 Delete type=3 #473 +2025/12/19-14:37:50.308381 7f24377fe6c0 Delete type=0 #475 +2025/12/19-15:40:35.866244 7f2436ffd6c0 Level-0 table #480: started +2025/12/19-15:40:35.866281 7f2436ffd6c0 Level-0 table #480: 0 bytes OK +2025/12/19-15:40:35.872420 7f2436ffd6c0 Delete type=0 #478 +2025/12/19-15:40:35.879555 7f2436ffd6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) +2025/12/19-15:40:35.879588 7f2436ffd6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-equipment/LOG.old b/packs-system/lf-equipment/LOG.old index 51883e3..fe412cf 100644 --- a/packs-system/lf-equipment/LOG.old +++ b/packs-system/lf-equipment/LOG.old @@ -1,15 +1,8 @@ -2025/12/14-09:09:25.826835 7f17053ff6c0 Recovering log #458 -2025/12/14-09:09:25.838032 7f17053ff6c0 Delete type=3 #456 -2025/12/14-09:09:25.838116 7f17053ff6c0 Delete type=0 #458 -2025/12/14-20:45:56.707785 7f16eeffd6c0 Level-0 table #463: started -2025/12/14-20:45:56.710879 7f16eeffd6c0 Level-0 table #463: 1677 bytes OK -2025/12/14-20:45:56.716936 7f16eeffd6c0 Delete type=0 #461 -2025/12/14-20:45:56.730287 7f16eeffd6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) -2025/12/14-20:45:56.730345 7f16eeffd6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at '!items!VFHTlDVKj2yNJEWi' @ 1129 : 1 -2025/12/14-20:45:56.730356 7f16eeffd6c0 Compacting 1@1 + 1@2 files -2025/12/14-20:45:56.736659 7f16eeffd6c0 Generated table #464@1: 485 keys, 217363 bytes -2025/12/14-20:45:56.736680 7f16eeffd6c0 Compacted 1@1 + 1@2 files => 217363 bytes -2025/12/14-20:45:56.742890 7f16eeffd6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2025/12/14-20:45:56.742996 7f16eeffd6c0 Delete type=2 #323 -2025/12/14-20:45:56.743249 7f16eeffd6c0 Delete type=2 #463 -2025/12/14-20:45:56.750017 7f16eeffd6c0 Manual compaction at level-1 from '!items!VFHTlDVKj2yNJEWi' @ 1129 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) +2025/12/15-21:20:57.107042 7f17053ff6c0 Recovering log #471 +2025/12/15-21:20:57.117492 7f17053ff6c0 Delete type=3 #469 +2025/12/15-21:20:57.117544 7f17053ff6c0 Delete type=0 #471 +2025/12/15-22:37:50.650614 7f16eeffd6c0 Level-0 table #476: started +2025/12/15-22:37:50.650646 7f16eeffd6c0 Level-0 table #476: 0 bytes OK +2025/12/15-22:37:50.656552 7f16eeffd6c0 Delete type=0 #474 +2025/12/15-22:37:50.669781 7f16eeffd6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) +2025/12/15-22:37:50.669815 7f16eeffd6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-equipment/MANIFEST-000465 b/packs-system/lf-equipment/MANIFEST-000477 similarity index 71% rename from packs-system/lf-equipment/MANIFEST-000465 rename to packs-system/lf-equipment/MANIFEST-000477 index 3125f875d123b652174791e01bc3e1dd41cb8905..7faa9689d96f31fb5e650c67af07365b53d9b063 100644 GIT binary patch delta 43 tcmdnQxQTH>pGt$^;hEeFj7;~KIT@JmGqb$pcqv<~01~+m5_t#`0RS7R3)TPt delta 43 tcmdnQxQTH>pGwrE$xhr1j7*o9IT@HQGqb$p*zt$Q93*lXBytrb0st9{3)lbv diff --git a/packs-system/lf-gifts/000466.log b/packs-system/lf-gifts/000478.log similarity index 100% rename from packs-system/lf-gifts/000466.log rename to packs-system/lf-gifts/000478.log diff --git a/packs-system/lf-gifts/CURRENT b/packs-system/lf-gifts/CURRENT index 22a6199..2641f36 100644 --- a/packs-system/lf-gifts/CURRENT +++ b/packs-system/lf-gifts/CURRENT @@ -1 +1 @@ -MANIFEST-000464 +MANIFEST-000476 diff --git a/packs-system/lf-gifts/LOG b/packs-system/lf-gifts/LOG index 3848a06..82d58d2 100644 --- a/packs-system/lf-gifts/LOG +++ b/packs-system/lf-gifts/LOG @@ -1,8 +1,8 @@ -2025/12/14-20:51:28.526428 7f16effff6c0 Recovering log #462 -2025/12/14-20:51:28.536097 7f16effff6c0 Delete type=3 #460 -2025/12/14-20:51:28.536151 7f16effff6c0 Delete type=0 #462 -2025/12/14-21:17:40.711547 7f16eeffd6c0 Level-0 table #467: started -2025/12/14-21:17:40.711584 7f16eeffd6c0 Level-0 table #467: 0 bytes OK -2025/12/14-21:17:40.717934 7f16eeffd6c0 Delete type=0 #465 -2025/12/14-21:17:40.718128 7f16eeffd6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) -2025/12/14-21:17:40.718154 7f16eeffd6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) +2025/12/19-14:37:50.313071 7f2437fff6c0 Recovering log #474 +2025/12/19-14:37:50.323320 7f2437fff6c0 Delete type=3 #472 +2025/12/19-14:37:50.323373 7f2437fff6c0 Delete type=0 #474 +2025/12/19-15:40:35.872568 7f2436ffd6c0 Level-0 table #479: started +2025/12/19-15:40:35.872597 7f2436ffd6c0 Level-0 table #479: 0 bytes OK +2025/12/19-15:40:35.879415 7f2436ffd6c0 Delete type=0 #477 +2025/12/19-15:40:35.879563 7f2436ffd6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) +2025/12/19-15:40:35.879582 7f2436ffd6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-gifts/LOG.old b/packs-system/lf-gifts/LOG.old index 633e808..945bc17 100644 --- a/packs-system/lf-gifts/LOG.old +++ b/packs-system/lf-gifts/LOG.old @@ -1,8 +1,8 @@ -2025/12/14-09:09:25.859023 7f16ef7fe6c0 Recovering log #458 -2025/12/14-09:09:25.869163 7f16ef7fe6c0 Delete type=3 #456 -2025/12/14-09:09:25.869258 7f16ef7fe6c0 Delete type=0 #458 -2025/12/14-20:45:56.717084 7f16eeffd6c0 Level-0 table #463: started -2025/12/14-20:45:56.717117 7f16eeffd6c0 Level-0 table #463: 0 bytes OK -2025/12/14-20:45:56.723011 7f16eeffd6c0 Delete type=0 #461 -2025/12/14-20:45:56.730301 7f16eeffd6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) -2025/12/14-20:45:56.743359 7f16eeffd6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) +2025/12/15-21:20:57.122365 7f16effff6c0 Recovering log #470 +2025/12/15-21:20:57.134320 7f16effff6c0 Delete type=3 #468 +2025/12/15-21:20:57.134393 7f16effff6c0 Delete type=0 #470 +2025/12/15-22:37:50.644221 7f16eeffd6c0 Level-0 table #475: started +2025/12/15-22:37:50.644288 7f16eeffd6c0 Level-0 table #475: 0 bytes OK +2025/12/15-22:37:50.650497 7f16eeffd6c0 Delete type=0 #473 +2025/12/15-22:37:50.669770 7f16eeffd6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) +2025/12/15-22:37:50.669829 7f16eeffd6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-gifts/MANIFEST-000464 b/packs-system/lf-gifts/MANIFEST-000476 similarity index 77% rename from packs-system/lf-gifts/MANIFEST-000464 rename to packs-system/lf-gifts/MANIFEST-000476 index ff49dda9a9c83ed338636a3a80754a676f32d15e..c7f88dc03bf9cc38d0aabca1e202f8b70fbff3de 100644 GIT binary patch delta 43 tcmey)_?>aWWtAg`-?4KuFf!d`=44>L$IP;uam_XTevrsLkjMj&2mn^o4Q&7b delta 43 tcmey)_?>aWWtDj@`>t>^Ffv_a=44>L#LTjr@$cry6(EsIAdxE|5dc_;4Wp9;tReIL0Q7@6)fb22bLU}m|+svR=%Fi7M9NaPVn1OP3y40!+m delta 43 tcmdnQxQTH>pUTXKM?AP07@00Jb22brVP?6->V4X66-eX?NaPww1OPIs42%E( diff --git a/packs-system/lf-spells-miracles/000166.log b/packs-system/lf-spells-miracles/000178.log similarity index 100% rename from packs-system/lf-spells-miracles/000166.log rename to packs-system/lf-spells-miracles/000178.log diff --git a/packs-system/lf-spells-miracles/CURRENT b/packs-system/lf-spells-miracles/CURRENT index be35511..4802dbe 100644 --- a/packs-system/lf-spells-miracles/CURRENT +++ b/packs-system/lf-spells-miracles/CURRENT @@ -1 +1 @@ -MANIFEST-000164 +MANIFEST-000176 diff --git a/packs-system/lf-spells-miracles/LOG b/packs-system/lf-spells-miracles/LOG index a908ff6..b6ff250 100644 --- a/packs-system/lf-spells-miracles/LOG +++ b/packs-system/lf-spells-miracles/LOG @@ -1,8 +1,8 @@ -2025/12/14-20:51:28.551833 7f16ef7fe6c0 Recovering log #162 -2025/12/14-20:51:28.562344 7f16ef7fe6c0 Delete type=3 #160 -2025/12/14-20:51:28.562406 7f16ef7fe6c0 Delete type=0 #162 -2025/12/14-21:17:40.735101 7f16eeffd6c0 Level-0 table #167: started -2025/12/14-21:17:40.735151 7f16eeffd6c0 Level-0 table #167: 0 bytes OK -2025/12/14-21:17:40.741604 7f16eeffd6c0 Delete type=0 #165 -2025/12/14-21:17:40.771470 7f16eeffd6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) -2025/12/14-21:17:40.781560 7f16eeffd6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) +2025/12/19-14:37:50.338179 7f244d1ff6c0 Recovering log #174 +2025/12/19-14:37:50.348596 7f244d1ff6c0 Delete type=3 #172 +2025/12/19-14:37:50.348672 7f244d1ff6c0 Delete type=0 #174 +2025/12/19-15:40:35.860117 7f2436ffd6c0 Level-0 table #179: started +2025/12/19-15:40:35.860149 7f2436ffd6c0 Level-0 table #179: 0 bytes OK +2025/12/19-15:40:35.866102 7f2436ffd6c0 Delete type=0 #177 +2025/12/19-15:40:35.879546 7f2436ffd6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) +2025/12/19-15:40:35.879569 7f2436ffd6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-spells-miracles/LOG.old b/packs-system/lf-spells-miracles/LOG.old index cf28379..62c6531 100644 --- a/packs-system/lf-spells-miracles/LOG.old +++ b/packs-system/lf-spells-miracles/LOG.old @@ -1,8 +1,8 @@ -2025/12/14-09:09:25.891410 7f17053ff6c0 Recovering log #158 -2025/12/14-09:09:25.901634 7f17053ff6c0 Delete type=3 #156 -2025/12/14-09:09:25.901690 7f17053ff6c0 Delete type=0 #158 -2025/12/14-20:45:56.743394 7f16eeffd6c0 Level-0 table #163: started -2025/12/14-20:45:56.743431 7f16eeffd6c0 Level-0 table #163: 0 bytes OK -2025/12/14-20:45:56.749813 7f16eeffd6c0 Delete type=0 #161 -2025/12/14-20:45:56.767206 7f16eeffd6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) -2025/12/14-20:45:56.791687 7f16eeffd6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) +2025/12/15-21:20:57.154335 7f1704bfe6c0 Recovering log #170 +2025/12/15-21:20:57.164315 7f1704bfe6c0 Delete type=3 #168 +2025/12/15-21:20:57.164371 7f1704bfe6c0 Delete type=0 #170 +2025/12/15-22:37:50.692660 7f16eeffd6c0 Level-0 table #175: started +2025/12/15-22:37:50.692695 7f16eeffd6c0 Level-0 table #175: 0 bytes OK +2025/12/15-22:37:50.698767 7f16eeffd6c0 Delete type=0 #173 +2025/12/15-22:37:50.710785 7f16eeffd6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) +2025/12/15-22:37:50.710818 7f16eeffd6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-spells-miracles/MANIFEST-000164 b/packs-system/lf-spells-miracles/MANIFEST-000176 similarity index 72% rename from packs-system/lf-spells-miracles/MANIFEST-000164 rename to packs-system/lf-spells-miracles/MANIFEST-000176 index eab085243e2f9837389e64be126faddd04ad4555..9254a9465d0554ffbbc1334bfe72c83a2d8de3dc 100644 GIT binary patch delta 43 tcmdnUxRG%}ugbbR_MF@dj7%FDIT@HYF|thJ;Ptuk86>g^B(eo00ssrt3e^Ar delta 43 scmdnUxRG%}uS!Gg1xIcMMy92VoD9s%7+EH9#0Ik^fkc*pL{@-A0Q?FGxc~qF diff --git a/packs-system/lf-vulnerabilities/000465.log b/packs-system/lf-vulnerabilities/000477.log similarity index 100% rename from packs-system/lf-vulnerabilities/000465.log rename to packs-system/lf-vulnerabilities/000477.log diff --git a/packs-system/lf-vulnerabilities/CURRENT b/packs-system/lf-vulnerabilities/CURRENT index 43c162f..b79af71 100644 --- a/packs-system/lf-vulnerabilities/CURRENT +++ b/packs-system/lf-vulnerabilities/CURRENT @@ -1 +1 @@ -MANIFEST-000463 +MANIFEST-000475 diff --git a/packs-system/lf-vulnerabilities/LOG b/packs-system/lf-vulnerabilities/LOG index 3c6cbd1..02f26f5 100644 --- a/packs-system/lf-vulnerabilities/LOG +++ b/packs-system/lf-vulnerabilities/LOG @@ -1,8 +1,8 @@ -2025/12/14-20:51:28.538266 7f1704bfe6c0 Recovering log #461 -2025/12/14-20:51:28.549289 7f1704bfe6c0 Delete type=3 #459 -2025/12/14-20:51:28.549364 7f1704bfe6c0 Delete type=0 #461 -2025/12/14-21:17:40.704054 7f16eeffd6c0 Level-0 table #466: started -2025/12/14-21:17:40.704085 7f16eeffd6c0 Level-0 table #466: 0 bytes OK -2025/12/14-21:17:40.711382 7f16eeffd6c0 Delete type=0 #464 -2025/12/14-21:17:40.718108 7f16eeffd6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) -2025/12/14-21:17:40.718145 7f16eeffd6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) +2025/12/19-14:37:50.326173 7f244c9fe6c0 Recovering log #473 +2025/12/19-14:37:50.335692 7f244c9fe6c0 Delete type=3 #471 +2025/12/19-14:37:50.335763 7f244c9fe6c0 Delete type=0 #473 +2025/12/19-15:40:35.879641 7f2436ffd6c0 Level-0 table #478: started +2025/12/19-15:40:35.879661 7f2436ffd6c0 Level-0 table #478: 0 bytes OK +2025/12/19-15:40:35.886005 7f2436ffd6c0 Delete type=0 #476 +2025/12/19-15:40:35.909027 7f2436ffd6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) +2025/12/19-15:40:35.927361 7f2436ffd6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-vulnerabilities/LOG.old b/packs-system/lf-vulnerabilities/LOG.old index bafd4d9..12f52eb 100644 --- a/packs-system/lf-vulnerabilities/LOG.old +++ b/packs-system/lf-vulnerabilities/LOG.old @@ -1,8 +1,8 @@ -2025/12/14-09:09:25.874671 7f16effff6c0 Recovering log #457 -2025/12/14-09:09:25.886173 7f16effff6c0 Delete type=3 #455 -2025/12/14-09:09:25.886272 7f16effff6c0 Delete type=0 #457 -2025/12/14-20:45:56.723132 7f16eeffd6c0 Level-0 table #462: started -2025/12/14-20:45:56.723164 7f16eeffd6c0 Level-0 table #462: 0 bytes OK -2025/12/14-20:45:56.730108 7f16eeffd6c0 Delete type=0 #460 -2025/12/14-20:45:56.730316 7f16eeffd6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) -2025/12/14-20:45:56.743378 7f16eeffd6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) +2025/12/15-21:20:57.138258 7f16ef7fe6c0 Recovering log #469 +2025/12/15-21:20:57.151734 7f16ef7fe6c0 Delete type=3 #467 +2025/12/15-21:20:57.151800 7f16ef7fe6c0 Delete type=0 #469 +2025/12/15-22:37:50.656644 7f16eeffd6c0 Level-0 table #474: started +2025/12/15-22:37:50.656668 7f16eeffd6c0 Level-0 table #474: 0 bytes OK +2025/12/15-22:37:50.663254 7f16eeffd6c0 Delete type=0 #472 +2025/12/15-22:37:50.669789 7f16eeffd6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) +2025/12/15-22:37:50.669836 7f16eeffd6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) diff --git a/packs-system/lf-vulnerabilities/MANIFEST-000463 b/packs-system/lf-vulnerabilities/MANIFEST-000475 similarity index 72% rename from packs-system/lf-vulnerabilities/MANIFEST-000463 rename to packs-system/lf-vulnerabilities/MANIFEST-000475 index 80a3f8c441ce4327fa3a6c17d14535638825aa09..7c7176be0eb96fcffce366012586c0c02dbde3f7 100644 GIT binary patch delta 41 scmdnMxPfs(pVA`UGqboD7@6)cb22dBWoF3=oFBIhByblba33fD00%7#O8@`> delta 41 scmdnMxPfs(pHkR^wfDIg7@00Gb22brWM;`)>StXE61WHwxC|5k02LGqYXATM diff --git a/styles/monster.less b/styles/monster.less index 3320188..209bb42 100644 --- a/styles/monster.less +++ b/styles/monster.less @@ -25,7 +25,6 @@ gap: 10px; flex: 1; - .monster-hp { display: flex; gap: 4px; @@ -46,7 +45,7 @@ min-width: 2.2rem; max-width: 2.2rem; margin-left: 4px; - font-size: calc(var(--font-size-standard) * 1.0); + font-size: calc(var(--font-size-standard) * 1); } .character-hp-max { clear: both; @@ -58,7 +57,7 @@ input { width: 3.2rem; text-align: center; - font-size: calc(var(--font-size-standard) * 1.0); + font-size: calc(var(--font-size-standard) * 1); } } } @@ -121,9 +120,11 @@ flex: 1; .monster-skill { - display: flex; + display: grid; + grid-template-columns: repeat(3, auto 2.5rem); + gap: 0.5rem; align-items: center; - margin-right: 0.5rem; + .rollable:hover, .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); @@ -134,12 +135,9 @@ max-width: 2.5rem; } .name { - flex: 1; - min-width: 3.2rem; margin-left: 4px; } .form-group { - flex: 1; padding-left: 4px; .form-fields { flex: none; @@ -157,8 +155,9 @@ .monster-movement { display: flex; - align-items: center; - margin-right: 0.5rem; + flex-direction: column; + gap: 4px; + .rollable:hover, .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); @@ -252,7 +251,7 @@ } } -.tab.monster-skills .main-div{ +.tab.monster-skills .main-div { display: grid; grid-template-columns: 1fr; legend { diff --git a/styles/roll.less b/styles/roll.less index 6fb3bd9..c48b2db 100644 --- a/styles/roll.less +++ b/styles/roll.less @@ -241,6 +241,11 @@ background-color: rgba(0, 0, 0, 0.1); border-radius: 5px; + &.monster-damage { + grid-template-columns: 1fr; + justify-items: center; + } + .damage-roll-btn { padding: 6px 10px; background: linear-gradient(to bottom, #8b4513 0%, #6b3410 100%); diff --git a/templates/chat-message.hbs b/templates/chat-message.hbs index 2fc69c0..a02e038 100644 --- a/templates/chat-message.hbs +++ b/templates/chat-message.hbs @@ -120,30 +120,50 @@
{{localize "LETHALFANTASY.Label.rollDamage" }}
-
- {{#if weaponDamageOptions.damageS}} +
+ {{#if weaponDamageOptions.isMonster}} - {{/if}} - {{#if weaponDamageOptions.damageM}} - + {{else}} + {{#if weaponDamageOptions.damageS}} + + {{/if}} + {{#if weaponDamageOptions.damageM}} + + {{/if}} {{/if}}
diff --git a/templates/monster-main.hbs b/templates/monster-main.hbs index 218de77..dc0561c 100644 --- a/templates/monster-main.hbs +++ b/templates/monster-main.hbs @@ -6,80 +6,175 @@
- +
-
+
{{localize "LETHALFANTASY.Label.HP"}} - {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode - classes="monster-hp-value"}} + {{formInput + systemFields.hp.fields.value + value=system.hp.value + disabled=isPlayMode + classes="monster-hp-value" + }}  /  - {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="monster-hp-value"}} + {{formInput + systemFields.hp.fields.max + value=system.hp.max + disabled=isPlayMode + classes="monster-hp-value" + }}
- {{localize "LETHALFANTASY.Label.damageResistance"}} - {{formInput systemFields.hp.fields.damageResistance value=system.hp.damageResistance disabled=isPlayMode - classes="monster-hp-value"}} + {{localize + "LETHALFANTASY.Label.damageResistance" + }} + {{formInput + systemFields.hp.fields.damageResistance + value=system.hp.damageResistance + disabled=isPlayMode + classes="monster-hp-value" + }} + {{localize + "LETHALFANTASY.Label.shieldDamageReduction" + }} + {{formInput + systemFields.combat.fields.shieldDamageReduction + value=system.combat.shieldDamageReduction + disabled=isPlayMode + classes="monster-hp-value" + }} +
+
+ {{localize + "LETHALFANTASY.Label.shieldDefenseDice" + }} + {{formInput + systemFields.combat.fields.shieldDefenseDice + value=system.combat.shieldDefenseDice + disabled=isPlayMode + classes="monster-hp-value" + }}
- {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} - + {{formInput + fields.name + value=source.name + rootId=partId + disabled=isPlayMode + }} +
-
+
{{localize "LETHALFANTASY.Label.Saves"}}
- + {{localize "LETHALFANTASY.Label.saves.will"}} - {{formField systemFields.saves.fields.will.fields.value value=system.saves.will.value disabled=isPlayMode + {{formField + systemFields.saves.fields.will.fields.value + value=system.saves.will.value + disabled=isPlayMode }} - + {{localize "LETHALFANTASY.Label.saves.dodge"}} - {{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value - disabled=isPlayMode}} + {{formField + systemFields.saves.fields.dodge.fields.value + value=system.saves.dodge.value + disabled=isPlayMode + }} - + {{localize "LETHALFANTASY.Label.saves.toughness"}} - {{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value - disabled=isPlayMode}} + {{formField + systemFields.saves.fields.toughness.fields.value + value=system.saves.toughness.value + disabled=isPlayMode + }}
- + {{localize "LETHALFANTASY.Label.saves.contagion"}} - {{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value - disabled=isPlayMode}} + {{formField + systemFields.saves.fields.contagion.fields.value + value=system.saves.contagion.value + disabled=isPlayMode + }} - + {{localize "LETHALFANTASY.Label.saves.poison"}} - {{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value - disabled=isPlayMode }} + {{formField + systemFields.saves.fields.poison.fields.value + value=system.saves.poison.value + disabled=isPlayMode + }}