diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css
index 939b6a3..7b6e5f7 100644
--- a/css/fvtt-lethal-fantasy.css
+++ b/css/fvtt-lethal-fantasy.css
@@ -2161,34 +2161,66 @@ i.lethalfantasy {
color: #d4af37;
}
.lethalfantasy .attack-result .attack-result-damage {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
- justify-content: center;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 8px;
+}
+.lethalfantasy .attack-result .attack-result-damage.single-btn {
+ grid-template-columns: 1fr;
+ max-width: 280px;
+ margin: 0 auto;
+}
+.lethalfantasy .attack-result .attack-result-damage.spell-damage {
+ grid-template-columns: 1fr;
+ width: 100%;
}
.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn {
- padding: 8px 10px;
+ padding: 10px 14px;
background: linear-gradient(to bottom, #8b0000 0%, #660000 100%);
- border: 1px solid #ff0000;
+ border: 1px solid #4b0000;
border-radius: 6px;
color: #f0e6d2;
font-weight: 600;
font-size: calc(var(--font-size-standard) * 0.9);
+ text-align: center;
white-space: nowrap;
cursor: pointer;
transition: all 0.2s ease;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ position: relative;
+ overflow: hidden;
+}
+.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
+ transition: left 0.5s;
+}
+.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn:hover::before {
+ left: 100%;
+}
+.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn i {
+ font-size: calc(var(--font-size-standard) * 1.1);
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5));
+ flex-shrink: 0;
}
.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn:hover {
background: linear-gradient(to bottom, #a00000 0%, #7b0000 100%);
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: translateY(-2px);
+ border-color: #5b0000;
}
.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn:active {
transform: translateY(0);
-}
-.lethalfantasy .attack-result .attack-result-damage .roll-damage-btn i {
- margin-right: 6px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4), inset 0 1px 3px rgba(0, 0, 0, 0.3);
}
.lethalfantasy .equipment-content {
font-family: var(--font-primary);
@@ -3963,35 +3995,74 @@ i.lethalfantasy {
}
.message .attack-result .attack-result-damage,
.attack-result .attack-result-damage {
- display: flex;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
gap: 8px;
- justify-content: center;
+}
+.message .attack-result .attack-result-damage.single-btn,
+.attack-result .attack-result-damage.single-btn {
+ grid-template-columns: 1fr;
+ max-width: 280px;
+ margin: 0 auto;
+}
+.message .attack-result .attack-result-damage.spell-damage,
+.attack-result .attack-result-damage.spell-damage {
+ grid-template-columns: 1fr;
+ width: 100%;
}
.message .attack-result .attack-result-damage .roll-damage-btn,
.attack-result .attack-result-damage .roll-damage-btn {
- padding: 10px 16px;
+ padding: 10px 14px;
background: linear-gradient(to bottom, #8b0000 0%, #660000 100%);
- border: 1px solid #ff0000;
+ border: 1px solid #4b0000;
border-radius: 6px;
color: #f0e6d2;
font-weight: 600;
+ font-size: calc(var(--font-size-standard) * 0.9);
+ text-align: center;
+ white-space: nowrap;
cursor: pointer;
transition: all 0.2s ease;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ position: relative;
+ overflow: hidden;
+}
+.message .attack-result .attack-result-damage .roll-damage-btn::before,
+.attack-result .attack-result-damage .roll-damage-btn::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
+ transition: left 0.5s;
+}
+.message .attack-result .attack-result-damage .roll-damage-btn:hover::before,
+.attack-result .attack-result-damage .roll-damage-btn:hover::before {
+ left: 100%;
+}
+.message .attack-result .attack-result-damage .roll-damage-btn i,
+.attack-result .attack-result-damage .roll-damage-btn i {
+ font-size: calc(var(--font-size-standard) * 1.1);
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5));
+ flex-shrink: 0;
}
.message .attack-result .attack-result-damage .roll-damage-btn:hover,
.attack-result .attack-result-damage .roll-damage-btn:hover {
background: linear-gradient(to bottom, #a00000 0%, #7b0000 100%);
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: translateY(-2px);
+ border-color: #5b0000;
}
.message .attack-result .attack-result-damage .roll-damage-btn:active,
.attack-result .attack-result-damage .roll-damage-btn:active {
transform: translateY(0);
-}
-.message .attack-result .attack-result-damage .roll-damage-btn i,
-.attack-result .attack-result-damage .roll-damage-btn i {
- margin-right: 6px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4), inset 0 1px 3px rgba(0, 0, 0, 0.3);
}
#token-hud .hp-loss-wrap {
position: absolute;
diff --git a/lethal-fantasy.mjs b/lethal-fantasy.mjs
index 8549006..be656f1 100644
--- a/lethal-fantasy.mjs
+++ b/lethal-fantasy.mjs
@@ -369,7 +369,7 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
action: "applyDR",
label: game.i18n.localize("LETHALFANTASY.Combat.spellApplyDR"),
icon: "fa-solid fa-shield",
- callback: (event, button, dialog) => Number(dialog.querySelector("[name='manualDr']")?.value) || 0
+ callback: (event, button) => Number(button.form?.elements?.manualDr?.value) || 0
},
{
action: "cancel",
@@ -393,7 +393,7 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
actorName: actor.name,
actorImage: actor.img
}
- const roll = new LethalFantasyRoll(damageFormula, {}, rollOpts)
+ const roll = new documents.LethalFantasyRoll(damageFormula, {}, rollOpts)
await roll.evaluate()
roll.options.rollTotal = roll.total
if (game?.dice3d) await game.dice3d.showForRoll(roll, game.user, true)
@@ -408,7 +408,7 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
}
// Pour les monstres, utiliser prepareMonsterRoll
- if (isMonster || actor.type === "monster") {
+ if (isMonster === "true" || actor.type === "monster") {
await actor.system.prepareMonsterRoll("monster-damage", weaponId, undefined, undefined, damageModifier)
return
}
diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs
index 405f21f..aebd2e6 100644
--- a/module/applications/sheets/character-sheet.mjs
+++ b/module/applications/sheets/character-sheet.mjs
@@ -22,6 +22,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
divinityPointsMinus: LethalFantasyCharacterSheet.#onDivinityPointsMinus,
aetherPointsPlus: LethalFantasyCharacterSheet.#onAetherPointsPlus,
aetherPointsMinus: LethalFantasyCharacterSheet.#onAetherPointsMinus,
+ rollSpellDamage: LethalFantasyCharacterSheet.#onRollSpellDamage,
},
}
@@ -70,10 +71,10 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" },
}
if (this.actor.system.biodata.magicUser) {
- tabs.spells = { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }
+ tabs.spells = { id: "spells", group: "sheet", icon: "fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }
}
if (this.actor.system.biodata.clericUser) {
- tabs.miracles = { id: "miracles", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-hands-praying", label: "LETHALFANTASY.Label.miracles" }
+ tabs.miracles = { id: "miracles", group: "sheet", icon: "fa-solid fa-hands-praying", label: "LETHALFANTASY.Label.miracles" }
}
for (const v of Object.values(tabs)) {
v.active = this.tabGroups[v.group] === v.id
@@ -219,6 +220,79 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
this.actor.update({ "system.aetherPoints.value": points })
}
+ /**
+ * Handles spell damage roll from the spell sheet tab.
+ * Shows a DR dialog then rolls the appropriate damage formula.
+ * @param {PointerEvent} event
+ * @param {HTMLElement} target
+ */
+ static async #onRollSpellDamage(event, target) {
+ if (this.isEditMode) return
+ const itemId = target.dataset.itemId
+ const tier = target.dataset.damageTier
+ const spell = this.actor.items.get(itemId)
+ if (!spell) return
+
+ const formulaMap = {
+ standard: spell.system.damageDice,
+ overpowered: spell.system.damageDiceOverpowered,
+ overpowered2: spell.system.damageDiceOverpowered2,
+ }
+ const formula = formulaMap[tier]
+ if (!formula) return
+
+ const manualDR = await foundry.applications.api.DialogV2.wait({
+ window: { title: game.i18n.localize("LETHALFANTASY.Combat.spellDRDialogTitle") },
+ classes: ["lethalfantasy"],
+ position: { width: 320 },
+ content: `
+
${game.i18n.localize("LETHALFANTASY.Combat.spellDRDialogMsg")}
+
+
+
+
+
`,
+ buttons: [
+ {
+ action: "noDR",
+ label: game.i18n.localize("LETHALFANTASY.Combat.spellNoDR"),
+ icon: "fa-solid fa-wand-magic-sparkles",
+ callback: () => 0
+ },
+ {
+ action: "applyDR",
+ label: game.i18n.localize("LETHALFANTASY.Combat.spellApplyDR"),
+ icon: "fa-solid fa-shield",
+ callback: (event, button) => Number(button.form?.elements?.manualDr?.value) || 0
+ },
+ {
+ action: "cancel",
+ label: game.i18n.localize("LETHALFANTASY.Combat.proceedNo"),
+ callback: () => null
+ }
+ ],
+ rejectClose: false
+ })
+ if (manualDR === null) return
+
+ const rollOpts = {
+ type: "spell-damage",
+ rollType: "spell-damage",
+ rollName: `${spell.name} — ${formula}`,
+ isDamage: true,
+ rollData: { isDamage: true },
+ manualDR,
+ actorId: this.actor.id,
+ actorName: this.actor.name,
+ actorImage: this.actor.img
+ }
+ const roll = new LethalFantasyRoll(formula, {}, rollOpts)
+ await roll.evaluate()
+ roll.options.rollTotal = roll.total
+ if (game?.dice3d) await game.dice3d.showForRoll(roll, game.user, true)
+ await roll.toMessage()
+ }
+
static #onCreateEquipment(event, target) {
}
diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs
index 61e4984..1fa827c 100644
--- a/module/documents/roll.mjs
+++ b/module/documents/roll.mjs
@@ -392,7 +392,7 @@ export default class LethalFantasyRoll extends Roll {
label: label,
callback: (event, button, dialog) => {
console.log("Roll context", event, button, dialog)
- let position = dialog.position
+ let position = dialog?.position
game.user.setFlag(SYSTEM.id, "roll-dialog-pos", foundry.utils.duplicate(position))
const output = Array.from(button.form.elements).reduce((obj, input) => {
if (input.name) obj[input.name] = input.value
@@ -403,22 +403,22 @@ export default class LethalFantasyRoll extends Roll {
},
],
actions: {
- "selectGranted": (event, button, dialog) => {
+ "selectGranted": (event, button) => {
hasGrantedDice = event.target.checked
},
- "selectBeyondSkill": (event, button, dialog) => {
+ "selectBeyondSkill": (event, button) => {
beyondSkill = button.checked
},
- "selectPointBlank": (event, button, dialog) => {
+ "selectPointBlank": (event, button) => {
pointBlank = button.checked
},
- "selectLetItFly": (event, button, dialog) => {
+ "selectLetItFly": (event, button) => {
letItFly = button.checked
},
- "saveSpellCheck": (event, button, dialog) => {
+ "saveSpellCheck": (event, button) => {
saveSpell = button.checked
},
- "gotoToken": (event, button, dialog) => {
+ "gotoToken": (event, button) => {
let tokenId = $(button).data("tokenId")
let token = canvas.tokens?.get(tokenId)
if (token) {
@@ -710,7 +710,7 @@ export default class LethalFantasyRoll extends Roll {
buttons: [
{
label: label,
- callback: (event, button, dialog) => {
+ callback: (event, button) => {
const output = Array.from(button.form.elements).reduce((obj, input) => {
if (input.name) obj[input.name] = input.value
return obj
@@ -778,7 +778,7 @@ export default class LethalFantasyRoll extends Roll {
buttons.push({
action: "roll",
label: "Roll progression dice",
- callback: (event, button, dialog) => {
+ callback: (event, button) => {
let pos = $('#combat-action-dialog').position()
game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", pos)
return "rollProgressionDice"
@@ -804,7 +804,7 @@ export default class LethalFantasyRoll extends Roll {
buttons.push({
action: "roll",
label: label,
- callback: (event, button, dialog) => {
+ callback: (event, button) => {
let pos = $('#combat-action-dialog').position()
game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", foundry.utils.duplicate(pos))
return "rollLethargyDice"
@@ -815,7 +815,7 @@ export default class LethalFantasyRoll extends Roll {
buttons.push({
action: "roll",
label: "Select action",
- callback: (event, button, dialog) => {
+ callback: (event, button) => {
let pos = $('#combat-action-dialog').position()
game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", foundry.utils.duplicate(pos))
const output = Array.from(button.form.elements).reduce((obj, input) => {
@@ -830,7 +830,7 @@ export default class LethalFantasyRoll extends Roll {
buttons.push({
action: "cancel",
label: "Other action, not listed here",
- callback: (event, button, dialog) => {
+ callback: (event, button) => {
let pos = $('#combat-action-dialog').position()
game.user.setFlag(SYSTEM.id, "combat-action-dialog-pos", foundry.utils.duplicate(pos))
return null;
@@ -1077,7 +1077,7 @@ export default class LethalFantasyRoll extends Roll {
buttons: [
{
label: label,
- callback: (event, button, dialog) => {
+ callback: (event, button) => {
const output = Array.from(button.form.elements).reduce((obj, input) => {
if (input.name) obj[input.name] = input.value
return obj
diff --git a/module/utils.mjs b/module/utils.mjs
index d61f975..81d7850 100644
--- a/module/utils.mjs
+++ b/module/utils.mjs
@@ -854,7 +854,7 @@ export default class LethalFantasyUtils {
`
} else if (data.attackRollType === "monster-attack") {
damageButton = `
-
+
@@ -881,7 +881,7 @@ export default class LethalFantasyUtils {
${t.label} (${escapedFormula})
`
}).join("")
- damageButton = `
${buttons}
`
+ damageButton = `
${buttons}
`
}
}
}
diff --git a/packs-system/lf-equipment/000605.log b/packs-system/lf-equipment/000608.log
similarity index 100%
rename from packs-system/lf-equipment/000605.log
rename to packs-system/lf-equipment/000608.log
diff --git a/packs-system/lf-equipment/CURRENT b/packs-system/lf-equipment/CURRENT
index 5882c5f..888567a 100644
--- a/packs-system/lf-equipment/CURRENT
+++ b/packs-system/lf-equipment/CURRENT
@@ -1 +1 @@
-MANIFEST-000603
+MANIFEST-000607
diff --git a/packs-system/lf-equipment/LOG b/packs-system/lf-equipment/LOG
index 47bb3e7..7c2cdf1 100644
--- a/packs-system/lf-equipment/LOG
+++ b/packs-system/lf-equipment/LOG
@@ -1,8 +1,3 @@
-2026/05/19-10:50:35.862031 7f5a477fe6c0 Recovering log #601
-2026/05/19-10:50:35.923479 7f5a477fe6c0 Delete type=3 #599
-2026/05/19-10:50:35.923537 7f5a477fe6c0 Delete type=0 #601
-2026/05/19-10:51:28.990207 7f5a467fc6c0 Level-0 table #606: started
-2026/05/19-10:51:28.990237 7f5a467fc6c0 Level-0 table #606: 0 bytes OK
-2026/05/19-10:51:28.997402 7f5a467fc6c0 Delete type=0 #604
-2026/05/19-10:51:28.997604 7f5a467fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
-2026/05/19-10:51:28.997650 7f5a467fc6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
+2026/05/20-00:10:37.079181 7f0b1e7ee6c0 Recovering log #605
+2026/05/20-00:10:37.089613 7f0b1e7ee6c0 Delete type=3 #603
+2026/05/20-00:10:37.089671 7f0b1e7ee6c0 Delete type=0 #605
diff --git a/packs-system/lf-equipment/LOG.old b/packs-system/lf-equipment/LOG.old
index 1f3ea5c..47bb3e7 100644
--- a/packs-system/lf-equipment/LOG.old
+++ b/packs-system/lf-equipment/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-17:40:11.769288 7f5a477fe6c0 Recovering log #597
-2026/05/18-17:40:11.780605 7f5a477fe6c0 Delete type=3 #595
-2026/05/18-17:40:11.780699 7f5a477fe6c0 Delete type=0 #597
-2026/05/18-20:25:54.228818 7f5a467fc6c0 Level-0 table #602: started
-2026/05/18-20:25:54.230037 7f5a467fc6c0 Level-0 table #602: 0 bytes OK
-2026/05/18-20:25:54.236369 7f5a467fc6c0 Delete type=0 #600
-2026/05/18-20:25:54.251050 7f5a467fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
-2026/05/18-20:25:54.251106 7f5a467fc6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
+2026/05/19-10:50:35.862031 7f5a477fe6c0 Recovering log #601
+2026/05/19-10:50:35.923479 7f5a477fe6c0 Delete type=3 #599
+2026/05/19-10:50:35.923537 7f5a477fe6c0 Delete type=0 #601
+2026/05/19-10:51:28.990207 7f5a467fc6c0 Level-0 table #606: started
+2026/05/19-10:51:28.990237 7f5a467fc6c0 Level-0 table #606: 0 bytes OK
+2026/05/19-10:51:28.997402 7f5a467fc6c0 Delete type=0 #604
+2026/05/19-10:51:28.997604 7f5a467fc6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
+2026/05/19-10:51:28.997650 7f5a467fc6c0 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-000603 b/packs-system/lf-equipment/MANIFEST-000607
similarity index 71%
rename from packs-system/lf-equipment/MANIFEST-000603
rename to packs-system/lf-equipment/MANIFEST-000607
index 49b3498..e27619c 100644
Binary files a/packs-system/lf-equipment/MANIFEST-000603 and b/packs-system/lf-equipment/MANIFEST-000607 differ
diff --git a/packs-system/lf-gifts/000602.log b/packs-system/lf-gifts/000605.log
similarity index 100%
rename from packs-system/lf-gifts/000602.log
rename to packs-system/lf-gifts/000605.log
diff --git a/packs-system/lf-gifts/CURRENT b/packs-system/lf-gifts/CURRENT
index 0b446e5..8dc750c 100644
--- a/packs-system/lf-gifts/CURRENT
+++ b/packs-system/lf-gifts/CURRENT
@@ -1 +1 @@
-MANIFEST-000600
+MANIFEST-000604
diff --git a/packs-system/lf-gifts/LOG b/packs-system/lf-gifts/LOG
index dad88da..1928dc3 100644
--- a/packs-system/lf-gifts/LOG
+++ b/packs-system/lf-gifts/LOG
@@ -1,8 +1,3 @@
-2026/05/19-10:50:35.962917 7f5a46ffd6c0 Recovering log #598
-2026/05/19-10:50:36.018914 7f5a46ffd6c0 Delete type=3 #596
-2026/05/19-10:50:36.018977 7f5a46ffd6c0 Delete type=0 #598
-2026/05/19-10:51:28.983427 7f5a467fc6c0 Level-0 table #603: started
-2026/05/19-10:51:28.983464 7f5a467fc6c0 Level-0 table #603: 0 bytes OK
-2026/05/19-10:51:28.990020 7f5a467fc6c0 Delete type=0 #601
-2026/05/19-10:51:28.997591 7f5a467fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)
-2026/05/19-10:51:28.997639 7f5a467fc6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)
+2026/05/20-00:10:37.107483 7f0b1efef6c0 Recovering log #602
+2026/05/20-00:10:37.117907 7f0b1efef6c0 Delete type=3 #600
+2026/05/20-00:10:37.117968 7f0b1efef6c0 Delete type=0 #602
diff --git a/packs-system/lf-gifts/LOG.old b/packs-system/lf-gifts/LOG.old
index f780df8..dad88da 100644
--- a/packs-system/lf-gifts/LOG.old
+++ b/packs-system/lf-gifts/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-17:40:11.793894 7f5a94bff6c0 Recovering log #594
-2026/05/18-17:40:11.804447 7f5a94bff6c0 Delete type=3 #592
-2026/05/18-17:40:11.804549 7f5a94bff6c0 Delete type=0 #594
-2026/05/18-20:25:54.236611 7f5a467fc6c0 Level-0 table #599: started
-2026/05/18-20:25:54.236652 7f5a467fc6c0 Level-0 table #599: 0 bytes OK
-2026/05/18-20:25:54.243997 7f5a467fc6c0 Delete type=0 #597
-2026/05/18-20:25:54.251069 7f5a467fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)
-2026/05/18-20:25:54.264439 7f5a467fc6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)
+2026/05/19-10:50:35.962917 7f5a46ffd6c0 Recovering log #598
+2026/05/19-10:50:36.018914 7f5a46ffd6c0 Delete type=3 #596
+2026/05/19-10:50:36.018977 7f5a46ffd6c0 Delete type=0 #598
+2026/05/19-10:51:28.983427 7f5a467fc6c0 Level-0 table #603: started
+2026/05/19-10:51:28.983464 7f5a467fc6c0 Level-0 table #603: 0 bytes OK
+2026/05/19-10:51:28.990020 7f5a467fc6c0 Delete type=0 #601
+2026/05/19-10:51:28.997591 7f5a467fc6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)
+2026/05/19-10:51:28.997639 7f5a467fc6c0 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-000600 b/packs-system/lf-gifts/MANIFEST-000604
similarity index 77%
rename from packs-system/lf-gifts/MANIFEST-000600
rename to packs-system/lf-gifts/MANIFEST-000604
index 5422bc9..8c8e4cd 100644
Binary files a/packs-system/lf-gifts/MANIFEST-000600 and b/packs-system/lf-gifts/MANIFEST-000604 differ
diff --git a/packs-system/lf-skills/000607.log b/packs-system/lf-skills/000610.log
similarity index 100%
rename from packs-system/lf-skills/000607.log
rename to packs-system/lf-skills/000610.log
diff --git a/packs-system/lf-skills/CURRENT b/packs-system/lf-skills/CURRENT
index 7139744..1b1ae9a 100644
--- a/packs-system/lf-skills/CURRENT
+++ b/packs-system/lf-skills/CURRENT
@@ -1 +1 @@
-MANIFEST-000605
+MANIFEST-000609
diff --git a/packs-system/lf-skills/LOG b/packs-system/lf-skills/LOG
index 409b56c..8f85bfd 100644
--- a/packs-system/lf-skills/LOG
+++ b/packs-system/lf-skills/LOG
@@ -1,8 +1,3 @@
-2026/05/19-10:50:35.772455 7f5a46ffd6c0 Recovering log #603
-2026/05/19-10:50:35.837426 7f5a46ffd6c0 Delete type=3 #601
-2026/05/19-10:50:35.837512 7f5a46ffd6c0 Delete type=0 #603
-2026/05/19-10:51:28.969686 7f5a467fc6c0 Level-0 table #608: started
-2026/05/19-10:51:28.969769 7f5a467fc6c0 Level-0 table #608: 0 bytes OK
-2026/05/19-10:51:28.976467 7f5a467fc6c0 Delete type=0 #606
-2026/05/19-10:51:28.997558 7f5a467fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
-2026/05/19-10:51:28.997616 7f5a467fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
+2026/05/20-00:10:37.061485 7f0b1efef6c0 Recovering log #607
+2026/05/20-00:10:37.071572 7f0b1efef6c0 Delete type=3 #605
+2026/05/20-00:10:37.071684 7f0b1efef6c0 Delete type=0 #607
diff --git a/packs-system/lf-skills/LOG.old b/packs-system/lf-skills/LOG.old
index 23ee6e0..409b56c 100644
--- a/packs-system/lf-skills/LOG.old
+++ b/packs-system/lf-skills/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-17:40:11.749971 7f5a46ffd6c0 Recovering log #599
-2026/05/18-17:40:11.761423 7f5a46ffd6c0 Delete type=3 #597
-2026/05/18-17:40:11.761520 7f5a46ffd6c0 Delete type=0 #599
-2026/05/18-20:25:54.219239 7f5a467fc6c0 Level-0 table #604: started
-2026/05/18-20:25:54.219522 7f5a467fc6c0 Level-0 table #604: 0 bytes OK
-2026/05/18-20:25:54.228610 7f5a467fc6c0 Delete type=0 #602
-2026/05/18-20:25:54.251028 7f5a467fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
-2026/05/18-20:25:54.251085 7f5a467fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
+2026/05/19-10:50:35.772455 7f5a46ffd6c0 Recovering log #603
+2026/05/19-10:50:35.837426 7f5a46ffd6c0 Delete type=3 #601
+2026/05/19-10:50:35.837512 7f5a46ffd6c0 Delete type=0 #603
+2026/05/19-10:51:28.969686 7f5a467fc6c0 Level-0 table #608: started
+2026/05/19-10:51:28.969769 7f5a467fc6c0 Level-0 table #608: 0 bytes OK
+2026/05/19-10:51:28.976467 7f5a467fc6c0 Delete type=0 #606
+2026/05/19-10:51:28.997558 7f5a467fc6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
+2026/05/19-10:51:28.997616 7f5a467fc6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
diff --git a/packs-system/lf-skills/MANIFEST-000605 b/packs-system/lf-skills/MANIFEST-000609
similarity index 71%
rename from packs-system/lf-skills/MANIFEST-000605
rename to packs-system/lf-skills/MANIFEST-000609
index 7058802..8518ddc 100644
Binary files a/packs-system/lf-skills/MANIFEST-000605 and b/packs-system/lf-skills/MANIFEST-000609 differ
diff --git a/packs-system/lf-spells-miracles/000302.log b/packs-system/lf-spells-miracles/000305.log
similarity index 100%
rename from packs-system/lf-spells-miracles/000302.log
rename to packs-system/lf-spells-miracles/000305.log
diff --git a/packs-system/lf-spells-miracles/CURRENT b/packs-system/lf-spells-miracles/CURRENT
index 16abe4a..3e78a5c 100644
--- a/packs-system/lf-spells-miracles/CURRENT
+++ b/packs-system/lf-spells-miracles/CURRENT
@@ -1 +1 @@
-MANIFEST-000300
+MANIFEST-000304
diff --git a/packs-system/lf-spells-miracles/LOG b/packs-system/lf-spells-miracles/LOG
index 737fb18..06c41ee 100644
--- a/packs-system/lf-spells-miracles/LOG
+++ b/packs-system/lf-spells-miracles/LOG
@@ -1,8 +1,3 @@
-2026/05/19-10:50:36.147771 7f5a46ffd6c0 Recovering log #298
-2026/05/19-10:50:36.209801 7f5a46ffd6c0 Delete type=3 #296
-2026/05/19-10:50:36.209908 7f5a46ffd6c0 Delete type=0 #298
-2026/05/19-10:51:29.021338 7f5a467fc6c0 Level-0 table #303: started
-2026/05/19-10:51:29.021378 7f5a467fc6c0 Level-0 table #303: 0 bytes OK
-2026/05/19-10:51:29.027529 7f5a467fc6c0 Delete type=0 #301
-2026/05/19-10:51:29.027761 7f5a467fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
-2026/05/19-10:51:29.027787 7f5a467fc6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
+2026/05/20-00:10:37.136939 7f0b1efef6c0 Recovering log #302
+2026/05/20-00:10:37.146957 7f0b1efef6c0 Delete type=3 #300
+2026/05/20-00:10:37.147030 7f0b1efef6c0 Delete type=0 #302
diff --git a/packs-system/lf-spells-miracles/LOG.old b/packs-system/lf-spells-miracles/LOG.old
index 64fbc4f..737fb18 100644
--- a/packs-system/lf-spells-miracles/LOG.old
+++ b/packs-system/lf-spells-miracles/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-17:40:11.831491 7f5a94bff6c0 Recovering log #294
-2026/05/18-17:40:11.842913 7f5a94bff6c0 Delete type=3 #292
-2026/05/18-17:40:11.843005 7f5a94bff6c0 Delete type=0 #294
-2026/05/18-20:25:54.257813 7f5a467fc6c0 Level-0 table #299: started
-2026/05/18-20:25:54.257869 7f5a467fc6c0 Level-0 table #299: 0 bytes OK
-2026/05/18-20:25:54.264186 7f5a467fc6c0 Delete type=0 #297
-2026/05/18-20:25:54.267118 7f5a467fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
-2026/05/18-20:25:54.296812 7f5a467fc6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
+2026/05/19-10:50:36.147771 7f5a46ffd6c0 Recovering log #298
+2026/05/19-10:50:36.209801 7f5a46ffd6c0 Delete type=3 #296
+2026/05/19-10:50:36.209908 7f5a46ffd6c0 Delete type=0 #298
+2026/05/19-10:51:29.021338 7f5a467fc6c0 Level-0 table #303: started
+2026/05/19-10:51:29.021378 7f5a467fc6c0 Level-0 table #303: 0 bytes OK
+2026/05/19-10:51:29.027529 7f5a467fc6c0 Delete type=0 #301
+2026/05/19-10:51:29.027761 7f5a467fc6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
+2026/05/19-10:51:29.027787 7f5a467fc6c0 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-000300 b/packs-system/lf-spells-miracles/MANIFEST-000304
similarity index 72%
rename from packs-system/lf-spells-miracles/MANIFEST-000300
rename to packs-system/lf-spells-miracles/MANIFEST-000304
index d6f520e..c8bf15a 100644
Binary files a/packs-system/lf-spells-miracles/MANIFEST-000300 and b/packs-system/lf-spells-miracles/MANIFEST-000304 differ
diff --git a/packs-system/lf-vulnerabilities/000601.log b/packs-system/lf-vulnerabilities/000604.log
similarity index 100%
rename from packs-system/lf-vulnerabilities/000601.log
rename to packs-system/lf-vulnerabilities/000604.log
diff --git a/packs-system/lf-vulnerabilities/CURRENT b/packs-system/lf-vulnerabilities/CURRENT
index 4569ef0..5882c5f 100644
--- a/packs-system/lf-vulnerabilities/CURRENT
+++ b/packs-system/lf-vulnerabilities/CURRENT
@@ -1 +1 @@
-MANIFEST-000599
+MANIFEST-000603
diff --git a/packs-system/lf-vulnerabilities/LOG b/packs-system/lf-vulnerabilities/LOG
index a6891da..7ee35c7 100644
--- a/packs-system/lf-vulnerabilities/LOG
+++ b/packs-system/lf-vulnerabilities/LOG
@@ -1,8 +1,3 @@
-2026/05/19-10:50:36.056028 7f5a47fff6c0 Recovering log #597
-2026/05/19-10:50:36.115465 7f5a47fff6c0 Delete type=3 #595
-2026/05/19-10:50:36.115585 7f5a47fff6c0 Delete type=0 #597
-2026/05/19-10:51:28.976707 7f5a467fc6c0 Level-0 table #602: started
-2026/05/19-10:51:28.976754 7f5a467fc6c0 Level-0 table #602: 0 bytes OK
-2026/05/19-10:51:28.983222 7f5a467fc6c0 Delete type=0 #600
-2026/05/19-10:51:28.997577 7f5a467fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
-2026/05/19-10:51:28.997627 7f5a467fc6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
+2026/05/20-00:10:37.121340 7f0b1e7ee6c0 Recovering log #601
+2026/05/20-00:10:37.132435 7f0b1e7ee6c0 Delete type=3 #599
+2026/05/20-00:10:37.132491 7f0b1e7ee6c0 Delete type=0 #601
diff --git a/packs-system/lf-vulnerabilities/LOG.old b/packs-system/lf-vulnerabilities/LOG.old
index 81e9341..a6891da 100644
--- a/packs-system/lf-vulnerabilities/LOG.old
+++ b/packs-system/lf-vulnerabilities/LOG.old
@@ -1,8 +1,8 @@
-2026/05/18-17:40:11.812004 7f5a47fff6c0 Recovering log #593
-2026/05/18-17:40:11.823277 7f5a47fff6c0 Delete type=3 #591
-2026/05/18-17:40:11.823388 7f5a47fff6c0 Delete type=0 #593
-2026/05/18-20:25:54.244177 7f5a467fc6c0 Level-0 table #598: started
-2026/05/18-20:25:54.244222 7f5a467fc6c0 Level-0 table #598: 0 bytes OK
-2026/05/18-20:25:54.250810 7f5a467fc6c0 Delete type=0 #596
-2026/05/18-20:25:54.251096 7f5a467fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
-2026/05/18-20:25:54.264461 7f5a467fc6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
+2026/05/19-10:50:36.056028 7f5a47fff6c0 Recovering log #597
+2026/05/19-10:50:36.115465 7f5a47fff6c0 Delete type=3 #595
+2026/05/19-10:50:36.115585 7f5a47fff6c0 Delete type=0 #597
+2026/05/19-10:51:28.976707 7f5a467fc6c0 Level-0 table #602: started
+2026/05/19-10:51:28.976754 7f5a467fc6c0 Level-0 table #602: 0 bytes OK
+2026/05/19-10:51:28.983222 7f5a467fc6c0 Delete type=0 #600
+2026/05/19-10:51:28.997577 7f5a467fc6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
+2026/05/19-10:51:28.997627 7f5a467fc6c0 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-000599 b/packs-system/lf-vulnerabilities/MANIFEST-000603
similarity index 72%
rename from packs-system/lf-vulnerabilities/MANIFEST-000599
rename to packs-system/lf-vulnerabilities/MANIFEST-000603
index 79595ad..1ec4bcf 100644
Binary files a/packs-system/lf-vulnerabilities/MANIFEST-000599 and b/packs-system/lf-vulnerabilities/MANIFEST-000603 differ
diff --git a/styles/chat.less b/styles/chat.less
index 6435059..76fe259 100644
--- a/styles/chat.less
+++ b/styles/chat.less
@@ -301,36 +301,72 @@
}
.attack-result-damage {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
- justify-content: center;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 8px;
+
+ &.single-btn {
+ grid-template-columns: 1fr;
+ max-width: 280px;
+ margin: 0 auto;
+ }
+
+ &.spell-damage {
+ grid-template-columns: 1fr;
+ width: 100%;
+ }
.roll-damage-btn {
- padding: 8px 10px;
+ padding: 10px 14px;
background: linear-gradient(to bottom, #8b0000 0%, #660000 100%);
- border: 1px solid #ff0000;
+ border: 1px solid #4b0000;
border-radius: 6px;
color: #f0e6d2;
font-weight: 600;
font-size: calc(var(--font-size-standard) * 0.9);
+ text-align: center;
white-space: nowrap;
cursor: pointer;
transition: all 0.2s ease;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ position: relative;
+ overflow: hidden;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
+ transition: left 0.5s;
+ }
+
+ &:hover::before {
+ left: 100%;
+ }
+
+ i {
+ font-size: calc(var(--font-size-standard) * 1.1);
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5));
+ flex-shrink: 0;
+ }
&:hover {
background: linear-gradient(to bottom, #a00000 0%, #7b0000 100%);
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: translateY(-2px);
+ border-color: #5b0000;
}
&:active {
transform: translateY(0);
- }
-
- i {
- margin-right: 6px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4), inset 0 1px 3px rgba(0, 0, 0, 0.3);
}
}
}
diff --git a/styles/roll.less b/styles/roll.less
index d98c6d6..8a1da9c 100644
--- a/styles/roll.less
+++ b/styles/roll.less
@@ -1285,33 +1285,72 @@
}
.attack-result-damage {
- display: flex;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
gap: 8px;
- justify-content: center;
+
+ &.single-btn {
+ grid-template-columns: 1fr;
+ max-width: 280px;
+ margin: 0 auto;
+ }
+
+ &.spell-damage {
+ grid-template-columns: 1fr;
+ width: 100%;
+ }
.roll-damage-btn {
- padding: 10px 16px;
+ padding: 10px 14px;
background: linear-gradient(to bottom, #8b0000 0%, #660000 100%);
- border: 1px solid #ff0000;
+ border: 1px solid #4b0000;
border-radius: 6px;
color: #f0e6d2;
font-weight: 600;
+ font-size: calc(var(--font-size-standard) * 0.9);
+ text-align: center;
+ white-space: nowrap;
cursor: pointer;
transition: all 0.2s ease;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ position: relative;
+ overflow: hidden;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
+ transition: left 0.5s;
+ }
+
+ &:hover::before {
+ left: 100%;
+ }
+
+ i {
+ font-size: calc(var(--font-size-standard) * 1.1);
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5));
+ flex-shrink: 0;
+ }
&:hover {
background: linear-gradient(to bottom, #a00000 0%, #7b0000 100%);
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15);
transform: translateY(-2px);
+ border-color: #5b0000;
}
&:active {
transform: translateY(0);
- }
-
- i {
- margin-right: 6px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4), inset 0 1px 3px rgba(0, 0, 0, 0.3);
}
}
}
diff --git a/templates/character-spells.hbs b/templates/character-spells.hbs
index 3a49176..0abb35e 100644
--- a/templates/character-spells.hbs
+++ b/templates/character-spells.hbs
@@ -37,6 +37,25 @@
+ {{#if item.system.damageDice}}
+
+ S
+
+ {{/if}}
+ {{#if item.system.damageDiceOverpowered}}
+
+ O
+
+ {{/if}}
+ {{#if item.system.damageDiceOverpowered2}}
+
+ O2
+
+ {{/if}}
+