Add damage management and DR for monsters also
All checks were successful
Release Creation / build (release) Successful in 1m48s

This commit is contained in:
2025-12-19 15:41:27 +01:00
parent 96062c6fd9
commit 61ed1597e7
36 changed files with 488 additions and 230 deletions

View File

@@ -917,9 +917,10 @@ i.lethalfantasy {
flex: 1; flex: 1;
} }
.lethalfantasy .monster-main .monster-skills .monster-skill { .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; align-items: center;
margin-right: 0.5rem;
} }
.lethalfantasy .monster-main .monster-skills .monster-skill .rollable:hover, .lethalfantasy .monster-main .monster-skills .monster-skill .rollable:hover,
.lethalfantasy .monster-main .monster-skills .monster-skill .rollable:focus { .lethalfantasy .monster-main .monster-skills .monster-skill .rollable:focus {
@@ -931,12 +932,9 @@ i.lethalfantasy {
max-width: 2.5rem; max-width: 2.5rem;
} }
.lethalfantasy .monster-main .monster-skills .monster-skill .name { .lethalfantasy .monster-main .monster-skills .monster-skill .name {
flex: 1;
min-width: 3.2rem;
margin-left: 4px; margin-left: 4px;
} }
.lethalfantasy .monster-main .monster-skills .monster-skill .form-group { .lethalfantasy .monster-main .monster-skills .monster-skill .form-group {
flex: 1;
padding-left: 4px; padding-left: 4px;
} }
.lethalfantasy .monster-main .monster-skills .monster-skill .form-group .form-fields { .lethalfantasy .monster-main .monster-skills .monster-skill .form-group .form-fields {
@@ -951,8 +949,8 @@ i.lethalfantasy {
} }
.lethalfantasy .monster-main .monster-movements .monster-movement { .lethalfantasy .monster-main .monster-movements .monster-movement {
display: flex; display: flex;
align-items: center; flex-direction: column;
margin-right: 0.5rem; gap: 4px;
} }
.lethalfantasy .monster-main .monster-movements .monster-movement .rollable:hover, .lethalfantasy .monster-main .monster-movements .monster-movement .rollable:hover,
.lethalfantasy .monster-main .monster-movements .monster-movement .rollable:focus { .lethalfantasy .monster-main .monster-movements .monster-movement .rollable:focus {
@@ -2430,6 +2428,10 @@ i.lethalfantasy {
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
border-radius: 5px; 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 { .dice-roll .damage-buttons .damage-buttons-grid .damage-roll-btn {
padding: 6px 10px; padding: 6px 10px;
background: linear-gradient(to bottom, #8b4513 0%, #6b3410 100%); background: linear-gradient(to bottom, #8b4513 0%, #6b3410 100%);

View File

@@ -306,8 +306,10 @@
"grantedAttackDice": "Granted attack", "grantedAttackDice": "Granted attack",
"grantedDamageDice": "Granted damage", "grantedDamageDice": "Granted damage",
"grantedDefenseDice": "Granted defense", "grantedDefenseDice": "Granted defense",
"damageResistance": "Damage resistance", "damageResistance": "DR",
"damageResistanceShort": "DR", "damageResistanceShort": "DR",
"shieldDamageReduction": "Shield DR",
"shieldDefenseDice": "Shield dice",
"stealth": "Stealth", "stealth": "Stealth",
"progressionDice": "Progression/Lethargy dice", "progressionDice": "Progression/Lethargy dice",
"rollProgressionCount": "Roll progression count", "rollProgressionCount": "Roll progression count",
@@ -557,7 +559,7 @@
"label": "Min" "label": "Min"
} }
}, },
"damagereduction": { "damageReduction": {
"label": "Damage reduction" "label": "Damage reduction"
}, },
"defense": { "defense": {

View File

@@ -192,6 +192,8 @@ Hooks.on(hookName, (message, html, data) => {
const weaponId = button.data("weapon-id") const weaponId = button.data("weapon-id")
const damageType = button.data("damage-type") const damageType = button.data("damage-type")
const damageFormula = button.data("damage-formula") 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 // Récupérer l'acteur qui a fait le jet initial
const actor = game.actors.get(message.rolls[0]?.actorId) const actor = game.actors.get(message.rolls[0]?.actorId)
@@ -200,7 +202,13 @@ Hooks.on(hookName, (message, html, data) => {
return 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) const weapon = actor.items.get(weaponId)
if (!weapon) { if (!weapon) {
ui.notifications.error("Weapon not found") ui.notifications.error("Weapon not found")

View File

@@ -162,9 +162,11 @@ export default class LethalFantasyMonsterSheet extends LethalFantasyActorSheet {
async _onRoll(event, target) { async _onRoll(event, target) {
if (this.isEditMode) return if (this.isEditMode) return
const rollType = event.target.dataset.rollType const rollable = event.target.closest('.rollable')
let rollKey = event.target.dataset.rollKey if (!rollable) return
let rollDice = event.target.dataset?.rollDice || "0" const rollType = rollable.dataset.rollType
let rollKey = rollable.dataset.rollKey
let rollDice = rollable.dataset?.rollDice || "0"
this.actor.system.prepareMonsterRoll(rollType, rollKey, rollDice) this.actor.system.prepareMonsterRoll(rollType, rollKey, rollDice)
} }
} }

View File

@@ -80,14 +80,26 @@ export default class LethalFantasyActor extends Actor {
/* *************************************************/ /* *************************************************/
computeDamageReduction() { computeDamageReduction() {
let naturalDR = Number(this.system.biodata.naturalDR) || 0 // Pour les monstres, utiliser hp.damageResistance et combat.damageReduction
let magicDR = Number(this.system.biodata.magicDR) || 0 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() let armorDR = this.getArmorDR()
return naturalDR + magicDR + armorDR return naturalDR + magicDR + armorDR
} }
/* *************************************************/ /* *************************************************/
getShieldDR() { 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 let dr = 0
for (let item of this.items) { for (let item of this.items) {
if (item.type === "shield" && item.system.equipped) { if (item.type === "shield" && item.system.equipped) {

View File

@@ -278,6 +278,7 @@ export default class LethalFantasyRoll extends Roll {
} else if (options.rollType.includes("monster-damage")) { } else if (options.rollType.includes("monster-damage")) {
options.rollName = options.rollTarget.name options.rollName = options.rollTarget.name
options.isDamage = true
hasModifier = true hasModifier = true
hasChangeDice = false hasChangeDice = false
options.rollTarget.value = options.rollTarget.damageModifier options.rollTarget.value = options.rollTarget.damageModifier
@@ -1151,6 +1152,15 @@ export default class LethalFantasyRoll extends Roll {
damageM: weapon.system?.damage?.damageM damageM: weapon.system?.damage?.damageM
} }
console.log("Weapon damage options:", weaponDamageOptions) 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 = { const cardData = {

View File

@@ -118,6 +118,9 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
defenseModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), defenseModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
damageModifier: 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 }), 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 }) 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 let rollTarget
switch (rollType) { switch (rollType) {
case "monster-attack": case "monster-attack":
@@ -158,6 +161,10 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
case "monster-damage": case "monster-damage":
rollTarget = foundry.utils.duplicate(this.attacks[rollKey]) rollTarget = foundry.utils.duplicate(this.attacks[rollKey])
rollTarget.rollKey = 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 break
case "monster-skill": case "monster-skill":
rollTarget = foundry.utils.duplicate(this.resists[rollKey]) rollTarget = foundry.utils.duplicate(this.resists[rollKey])
@@ -168,6 +175,19 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
rollTarget.rollKey = rollKey rollTarget.rollKey = rollKey
rollTarget.rollDice = rollDice rollTarget.rollDice = rollDice
break 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-small":
case "weapon-damage-medium": case "weapon-damage-medium":
case "weapon-attack": case "weapon-attack":
@@ -210,13 +230,15 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
break break
default: default:
ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType)) ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType))
break return
} }
// In all cases // In all cases
rollTarget.tokenId = tokenId if (rollTarget) {
console.log(rollTarget) rollTarget.tokenId = tokenId
await this.roll(rollType, rollTarget) console.log(rollTarget)
await this.roll(rollType, rollTarget)
}
} }
async rollInitiative(combatId = undefined, combatantId = undefined) { async rollInitiative(combatId = undefined, combatantId = undefined) {

View File

@@ -1 +1 @@
MANIFEST-000465 MANIFEST-000477

View File

@@ -1,8 +1,8 @@
2025/12/14-20:51:28.512263 7f17053ff6c0 Recovering log #462 2025/12/19-14:37:50.298740 7f24377fe6c0 Recovering log #475
2025/12/14-20:51:28.522433 7f17053ff6c0 Delete type=3 #460 2025/12/19-14:37:50.308335 7f24377fe6c0 Delete type=3 #473
2025/12/14-20:51:28.522511 7f17053ff6c0 Delete type=0 #462 2025/12/19-14:37:50.308381 7f24377fe6c0 Delete type=0 #475
2025/12/14-21:17:40.691121 7f16eeffd6c0 Level-0 table #468: started 2025/12/19-15:40:35.866244 7f2436ffd6c0 Level-0 table #480: started
2025/12/14-21:17:40.691177 7f16eeffd6c0 Level-0 table #468: 0 bytes OK 2025/12/19-15:40:35.866281 7f2436ffd6c0 Level-0 table #480: 0 bytes OK
2025/12/14-21:17:40.697563 7f16eeffd6c0 Delete type=0 #466 2025/12/19-15:40:35.872420 7f2436ffd6c0 Delete type=0 #478
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/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/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-15:40:35.879588 7f2436ffd6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

View File

@@ -1,15 +1,8 @@
2025/12/14-09:09:25.826835 7f17053ff6c0 Recovering log #458 2025/12/15-21:20:57.107042 7f17053ff6c0 Recovering log #471
2025/12/14-09:09:25.838032 7f17053ff6c0 Delete type=3 #456 2025/12/15-21:20:57.117492 7f17053ff6c0 Delete type=3 #469
2025/12/14-09:09:25.838116 7f17053ff6c0 Delete type=0 #458 2025/12/15-21:20:57.117544 7f17053ff6c0 Delete type=0 #471
2025/12/14-20:45:56.707785 7f16eeffd6c0 Level-0 table #463: started 2025/12/15-22:37:50.650614 7f16eeffd6c0 Level-0 table #476: started
2025/12/14-20:45:56.710879 7f16eeffd6c0 Level-0 table #463: 1677 bytes OK 2025/12/15-22:37:50.650646 7f16eeffd6c0 Level-0 table #476: 0 bytes OK
2025/12/14-20:45:56.716936 7f16eeffd6c0 Delete type=0 #461 2025/12/15-22:37:50.656552 7f16eeffd6c0 Delete type=0 #474
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/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/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/15-22:37:50.669815 7f16eeffd6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
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)

View File

@@ -1 +1 @@
MANIFEST-000464 MANIFEST-000476

View File

@@ -1,8 +1,8 @@
2025/12/14-20:51:28.526428 7f16effff6c0 Recovering log #462 2025/12/19-14:37:50.313071 7f2437fff6c0 Recovering log #474
2025/12/14-20:51:28.536097 7f16effff6c0 Delete type=3 #460 2025/12/19-14:37:50.323320 7f2437fff6c0 Delete type=3 #472
2025/12/14-20:51:28.536151 7f16effff6c0 Delete type=0 #462 2025/12/19-14:37:50.323373 7f2437fff6c0 Delete type=0 #474
2025/12/14-21:17:40.711547 7f16eeffd6c0 Level-0 table #467: started 2025/12/19-15:40:35.872568 7f2436ffd6c0 Level-0 table #479: started
2025/12/14-21:17:40.711584 7f16eeffd6c0 Level-0 table #467: 0 bytes OK 2025/12/19-15:40:35.872597 7f2436ffd6c0 Level-0 table #479: 0 bytes OK
2025/12/14-21:17:40.717934 7f16eeffd6c0 Delete type=0 #465 2025/12/19-15:40:35.879415 7f2436ffd6c0 Delete type=0 #477
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/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/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-15:40:35.879582 7f2436ffd6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/12/14-09:09:25.859023 7f16ef7fe6c0 Recovering log #458 2025/12/15-21:20:57.122365 7f16effff6c0 Recovering log #470
2025/12/14-09:09:25.869163 7f16ef7fe6c0 Delete type=3 #456 2025/12/15-21:20:57.134320 7f16effff6c0 Delete type=3 #468
2025/12/14-09:09:25.869258 7f16ef7fe6c0 Delete type=0 #458 2025/12/15-21:20:57.134393 7f16effff6c0 Delete type=0 #470
2025/12/14-20:45:56.717084 7f16eeffd6c0 Level-0 table #463: started 2025/12/15-22:37:50.644221 7f16eeffd6c0 Level-0 table #475: started
2025/12/14-20:45:56.717117 7f16eeffd6c0 Level-0 table #463: 0 bytes OK 2025/12/15-22:37:50.644288 7f16eeffd6c0 Level-0 table #475: 0 bytes OK
2025/12/14-20:45:56.723011 7f16eeffd6c0 Delete type=0 #461 2025/12/15-22:37:50.650497 7f16eeffd6c0 Delete type=0 #473
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/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/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-22:37:50.669829 7f16eeffd6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!x5gLtqlW4sdDmHTd' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000466 MANIFEST-000478

View File

@@ -1,8 +1,8 @@
2025/12/14-20:51:28.497448 7f1704bfe6c0 Recovering log #464 2025/12/19-14:37:50.285216 7f244c9fe6c0 Recovering log #476
2025/12/14-20:51:28.507553 7f1704bfe6c0 Delete type=3 #462 2025/12/19-14:37:50.295747 7f244c9fe6c0 Delete type=3 #474
2025/12/14-20:51:28.507622 7f1704bfe6c0 Delete type=0 #464 2025/12/19-14:37:50.295805 7f244c9fe6c0 Delete type=0 #476
2025/12/14-21:17:40.697721 7f16eeffd6c0 Level-0 table #469: started 2025/12/19-15:40:35.852984 7f2436ffd6c0 Level-0 table #481: started
2025/12/14-21:17:40.697764 7f16eeffd6c0 Level-0 table #469: 0 bytes OK 2025/12/19-15:40:35.853042 7f2436ffd6c0 Level-0 table #481: 0 bytes OK
2025/12/14-21:17:40.703907 7f16eeffd6c0 Delete type=0 #467 2025/12/19-15:40:35.859968 7f2436ffd6c0 Delete type=0 #479
2025/12/14-21:17:40.718096 7f16eeffd6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/12/19-15:40:35.879535 7f2436ffd6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/12/14-21:17:40.718137 7f16eeffd6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/12/19-15:40:35.879576 7f2436ffd6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/12/14-09:09:25.806646 7f16effff6c0 Recovering log #460 2025/12/15-21:20:57.092288 7f16ef7fe6c0 Recovering log #472
2025/12/14-09:09:25.817606 7f16effff6c0 Delete type=3 #458 2025/12/15-21:20:57.103016 7f16ef7fe6c0 Delete type=3 #470
2025/12/14-09:09:25.817666 7f16effff6c0 Delete type=0 #460 2025/12/15-21:20:57.103072 7f16ef7fe6c0 Delete type=0 #472
2025/12/14-20:45:56.701142 7f16eeffd6c0 Level-0 table #465: started 2025/12/15-22:37:50.663349 7f16eeffd6c0 Level-0 table #477: started
2025/12/14-20:45:56.701194 7f16eeffd6c0 Level-0 table #465: 0 bytes OK 2025/12/15-22:37:50.663375 7f16eeffd6c0 Level-0 table #477: 0 bytes OK
2025/12/14-20:45:56.707652 7f16eeffd6c0 Delete type=0 #463 2025/12/15-22:37:50.669678 7f16eeffd6c0 Delete type=0 #475
2025/12/14-20:45:56.730266 7f16eeffd6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/12/15-22:37:50.669808 7f16eeffd6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/12/14-20:45:56.730327 7f16eeffd6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/12/15-22:37:50.669842 7f16eeffd6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000164 MANIFEST-000176

View File

@@ -1,8 +1,8 @@
2025/12/14-20:51:28.551833 7f16ef7fe6c0 Recovering log #162 2025/12/19-14:37:50.338179 7f244d1ff6c0 Recovering log #174
2025/12/14-20:51:28.562344 7f16ef7fe6c0 Delete type=3 #160 2025/12/19-14:37:50.348596 7f244d1ff6c0 Delete type=3 #172
2025/12/14-20:51:28.562406 7f16ef7fe6c0 Delete type=0 #162 2025/12/19-14:37:50.348672 7f244d1ff6c0 Delete type=0 #174
2025/12/14-21:17:40.735101 7f16eeffd6c0 Level-0 table #167: started 2025/12/19-15:40:35.860117 7f2436ffd6c0 Level-0 table #179: started
2025/12/14-21:17:40.735151 7f16eeffd6c0 Level-0 table #167: 0 bytes OK 2025/12/19-15:40:35.860149 7f2436ffd6c0 Level-0 table #179: 0 bytes OK
2025/12/14-21:17:40.741604 7f16eeffd6c0 Delete type=0 #165 2025/12/19-15:40:35.866102 7f2436ffd6c0 Delete type=0 #177
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/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/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-15:40:35.879569 7f2436ffd6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/12/14-09:09:25.891410 7f17053ff6c0 Recovering log #158 2025/12/15-21:20:57.154335 7f1704bfe6c0 Recovering log #170
2025/12/14-09:09:25.901634 7f17053ff6c0 Delete type=3 #156 2025/12/15-21:20:57.164315 7f1704bfe6c0 Delete type=3 #168
2025/12/14-09:09:25.901690 7f17053ff6c0 Delete type=0 #158 2025/12/15-21:20:57.164371 7f1704bfe6c0 Delete type=0 #170
2025/12/14-20:45:56.743394 7f16eeffd6c0 Level-0 table #163: started 2025/12/15-22:37:50.692660 7f16eeffd6c0 Level-0 table #175: started
2025/12/14-20:45:56.743431 7f16eeffd6c0 Level-0 table #163: 0 bytes OK 2025/12/15-22:37:50.692695 7f16eeffd6c0 Level-0 table #175: 0 bytes OK
2025/12/14-20:45:56.749813 7f16eeffd6c0 Delete type=0 #161 2025/12/15-22:37:50.698767 7f16eeffd6c0 Delete type=0 #173
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/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/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-22:37:50.710818 7f16eeffd6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000463 MANIFEST-000475

View File

@@ -1,8 +1,8 @@
2025/12/14-20:51:28.538266 7f1704bfe6c0 Recovering log #461 2025/12/19-14:37:50.326173 7f244c9fe6c0 Recovering log #473
2025/12/14-20:51:28.549289 7f1704bfe6c0 Delete type=3 #459 2025/12/19-14:37:50.335692 7f244c9fe6c0 Delete type=3 #471
2025/12/14-20:51:28.549364 7f1704bfe6c0 Delete type=0 #461 2025/12/19-14:37:50.335763 7f244c9fe6c0 Delete type=0 #473
2025/12/14-21:17:40.704054 7f16eeffd6c0 Level-0 table #466: started 2025/12/19-15:40:35.879641 7f2436ffd6c0 Level-0 table #478: started
2025/12/14-21:17:40.704085 7f16eeffd6c0 Level-0 table #466: 0 bytes OK 2025/12/19-15:40:35.879661 7f2436ffd6c0 Level-0 table #478: 0 bytes OK
2025/12/14-21:17:40.711382 7f16eeffd6c0 Delete type=0 #464 2025/12/19-15:40:35.886005 7f2436ffd6c0 Delete type=0 #476
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/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/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-15:40:35.927361 7f2436ffd6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/12/14-09:09:25.874671 7f16effff6c0 Recovering log #457 2025/12/15-21:20:57.138258 7f16ef7fe6c0 Recovering log #469
2025/12/14-09:09:25.886173 7f16effff6c0 Delete type=3 #455 2025/12/15-21:20:57.151734 7f16ef7fe6c0 Delete type=3 #467
2025/12/14-09:09:25.886272 7f16effff6c0 Delete type=0 #457 2025/12/15-21:20:57.151800 7f16ef7fe6c0 Delete type=0 #469
2025/12/14-20:45:56.723132 7f16eeffd6c0 Level-0 table #462: started 2025/12/15-22:37:50.656644 7f16eeffd6c0 Level-0 table #474: started
2025/12/14-20:45:56.723164 7f16eeffd6c0 Level-0 table #462: 0 bytes OK 2025/12/15-22:37:50.656668 7f16eeffd6c0 Level-0 table #474: 0 bytes OK
2025/12/14-20:45:56.730108 7f16eeffd6c0 Delete type=0 #460 2025/12/15-22:37:50.663254 7f16eeffd6c0 Delete type=0 #472
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/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/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-22:37:50.669836 7f16eeffd6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@@ -25,7 +25,6 @@
gap: 10px; gap: 10px;
flex: 1; flex: 1;
.monster-hp { .monster-hp {
display: flex; display: flex;
gap: 4px; gap: 4px;
@@ -46,7 +45,7 @@
min-width: 2.2rem; min-width: 2.2rem;
max-width: 2.2rem; max-width: 2.2rem;
margin-left: 4px; margin-left: 4px;
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
} }
.character-hp-max { .character-hp-max {
clear: both; clear: both;
@@ -58,7 +57,7 @@
input { input {
width: 3.2rem; width: 3.2rem;
text-align: center; 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; flex: 1;
.monster-skill { .monster-skill {
display: flex; display: grid;
grid-template-columns: repeat(3, auto 2.5rem);
gap: 0.5rem;
align-items: center; align-items: center;
margin-right: 0.5rem;
.rollable:hover, .rollable:hover,
.rollable:focus { .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary); text-shadow: 0 0 8px var(--color-shadow-primary);
@@ -134,12 +135,9 @@
max-width: 2.5rem; max-width: 2.5rem;
} }
.name { .name {
flex: 1;
min-width: 3.2rem;
margin-left: 4px; margin-left: 4px;
} }
.form-group { .form-group {
flex: 1;
padding-left: 4px; padding-left: 4px;
.form-fields { .form-fields {
flex: none; flex: none;
@@ -157,8 +155,9 @@
.monster-movement { .monster-movement {
display: flex; display: flex;
align-items: center; flex-direction: column;
margin-right: 0.5rem; gap: 4px;
.rollable:hover, .rollable:hover,
.rollable:focus { .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary); 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; display: grid;
grid-template-columns: 1fr; grid-template-columns: 1fr;
legend { legend {

View File

@@ -241,6 +241,11 @@
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
border-radius: 5px; border-radius: 5px;
&.monster-damage {
grid-template-columns: 1fr;
justify-items: center;
}
.damage-roll-btn { .damage-roll-btn {
padding: 6px 10px; padding: 6px 10px;
background: linear-gradient(to bottom, #8b4513 0%, #6b3410 100%); background: linear-gradient(to bottom, #8b4513 0%, #6b3410 100%);

View File

@@ -120,30 +120,50 @@
<div class="damage-buttons-title">{{localize <div class="damage-buttons-title">{{localize
"LETHALFANTASY.Label.rollDamage" "LETHALFANTASY.Label.rollDamage"
}}</div> }}</div>
<div class="damage-buttons-grid"> <div class="damage-buttons-grid {{#if weaponDamageOptions.isMonster}}monster-damage{{/if}}">
{{#if weaponDamageOptions.damageS}} {{#if weaponDamageOptions.isMonster}}
<button <button
class="damage-roll-btn" class="damage-roll-btn"
data-weapon-id="{{weaponDamageOptions.weaponId}}" data-weapon-id="{{weaponDamageOptions.weaponId}}"
data-damage-type="small" data-damage-type="monster"
data-damage-formula="{{weaponDamageOptions.damageS}}" data-damage-formula="{{weaponDamageOptions.damageFormula}}"
title="{{localize 'LETHALFANTASY.Label.weapon-damage-small'}}" data-damage-modifier="{{weaponDamageOptions.damageModifier}}"
data-is-monster="true"
title="{{weaponDamageOptions.weaponName}}"
> >
<i class="fa-solid fa-dice-d6"></i> <i class="fa-solid fa-dice"></i>
{{localize "LETHALFANTASY.Label.weapon-damage-small"}} Damage:
</button> {{weaponDamageOptions.damageFormula}}{{#if
{{/if}} weaponDamageOptions.damageModifier
{{#if weaponDamageOptions.damageM}} }}+{{weaponDamageOptions.damageModifier}}{{/if}}
<button
class="damage-roll-btn"
data-weapon-id="{{weaponDamageOptions.weaponId}}"
data-damage-type="medium"
data-damage-formula="{{weaponDamageOptions.damageM}}"
title="{{localize 'LETHALFANTASY.Label.weapon-damage-medium'}}"
>
<i class="fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.weapon-damage-medium"}}
</button> </button>
{{else}}
{{#if weaponDamageOptions.damageS}}
<button
class="damage-roll-btn"
data-weapon-id="{{weaponDamageOptions.weaponId}}"
data-damage-type="small"
data-damage-formula="{{weaponDamageOptions.damageS}}"
data-is-monster="false"
title="{{localize 'LETHALFANTASY.Label.weapon-damage-small'}}"
>
<i class="fa-solid fa-dice-d6"></i>
{{localize "LETHALFANTASY.Label.weapon-damage-small"}}
</button>
{{/if}}
{{#if weaponDamageOptions.damageM}}
<button
class="damage-roll-btn"
data-weapon-id="{{weaponDamageOptions.weaponId}}"
data-damage-type="medium"
data-damage-formula="{{weaponDamageOptions.damageM}}"
data-is-monster="false"
title="{{localize 'LETHALFANTASY.Label.weapon-damage-medium'}}"
>
<i class="fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.weapon-damage-medium"}}
</button>
{{/if}}
{{/if}} {{/if}}
</div> </div>
</div> </div>

View File

@@ -6,80 +6,175 @@
<div class="monster-pc monster-pc-{{ifThen isPlayMode 'play' 'edit'}}"> <div class="monster-pc monster-pc-{{ifThen isPlayMode 'play' 'edit'}}">
<div class="monster-left"> <div class="monster-left">
<div class="monster-left-image"> <div class="monster-left-image">
<img class="monster-img" src="{{actor.img}}" data-edit="img" data-action="editImage" <img
data-tooltip="{{actor.name}}" /> class="monster-img"
src="{{actor.img}}"
data-edit="img"
data-action="editImage"
data-tooltip="{{actor.name}}"
/>
</div> </div>
<fieldset class="monster-characteristics monster-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> <fieldset
class="monster-characteristics monster-characteristics-{{ifThen
isPlayMode
'play'
'edit'
}}"
>
<div class="flexrow monster-hp"> <div class="flexrow monster-hp">
<span class="name">{{localize "LETHALFANTASY.Label.HP"}}</span> <span class="name">{{localize "LETHALFANTASY.Label.HP"}}</span>
{{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode {{formInput
classes="monster-hp-value"}} systemFields.hp.fields.value
value=system.hp.value
disabled=isPlayMode
classes="monster-hp-value"
}}
&nbsp;/&nbsp; &nbsp;/&nbsp;
{{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"
}}
</div> </div>
<div class="flexrow monster-hp"> <div class="flexrow monster-hp">
<span class="damage-resistance">{{localize "LETHALFANTASY.Label.damageResistance"}}</span> <span class="name">{{localize
{{formInput systemFields.hp.fields.damageResistance value=system.hp.damageResistance disabled=isPlayMode "LETHALFANTASY.Label.damageResistance"
classes="monster-hp-value"}} }}</span>
{{formInput
systemFields.hp.fields.damageResistance
value=system.hp.damageResistance
disabled=isPlayMode
classes="monster-hp-value"
}}
<span class="name">{{localize
"LETHALFANTASY.Label.shieldDamageReduction"
}}</span>
{{formInput
systemFields.combat.fields.shieldDamageReduction
value=system.combat.shieldDamageReduction
disabled=isPlayMode
classes="monster-hp-value"
}}
</div>
<div class="flexrow monster-hp">
<span class="name"><a
class="rollable"
data-roll-type="shield-defense"
data-roll-dice={{system.combat.shieldDefenseDice}}
><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.shieldDefenseDice"
}}</a></span>
{{formInput
systemFields.combat.fields.shieldDefenseDice
value=system.combat.shieldDefenseDice
disabled=isPlayMode
classes="monster-hp-value"
}}
</div> </div>
</fieldset> </fieldset>
</div> </div>
<div class="monster-right"> <div class="monster-right">
<div class="monster-name"> <div class="monster-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} {{formInput
<a class="control" data-action="toggleSheet" data-tooltip="LETHALFANTASY.ToggleSheet" fields.name
data-tooltip-direction="UP"> value=source.name
rootId=partId
disabled=isPlayMode
}}
<a
class="control"
data-action="toggleSheet"
data-tooltip="LETHALFANTASY.ToggleSheet"
data-tooltip-direction="UP"
>
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i> <i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a> </a>
</div> </div>
<fieldset class="monster-characteristics monster-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> <fieldset
class="monster-characteristics monster-characteristics-{{ifThen
isPlayMode
'play'
'edit'
}}"
>
<legend>{{localize "LETHALFANTASY.Label.Saves"}}</legend> <legend>{{localize "LETHALFANTASY.Label.Saves"}}</legend>
<div class="monster-saves"> <div class="monster-saves">
<div class="monster-save"> <div class="monster-save">
<span class="name"><a class="rollable" data-roll-type="save" data-roll-key="will"><i <span class="name"><a
class="lf-roll-small fa-solid fa-dice-d20"></i> class="rollable"
data-roll-type="save"
data-roll-key="will"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.will"}} {{localize "LETHALFANTASY.Label.saves.will"}}
</a></span> </a></span>
{{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
}} }}
<span class="name"> <span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="dodge"><i <a
class="lf-roll-small fa-solid fa-dice-d20"></i> class="rollable"
data-roll-type="save"
data-roll-key="dodge"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.dodge"}} {{localize "LETHALFANTASY.Label.saves.dodge"}}
</a> </a>
</span> </span>
{{formField systemFields.saves.fields.dodge.fields.value value=system.saves.dodge.value {{formField
disabled=isPlayMode}} systemFields.saves.fields.dodge.fields.value
value=system.saves.dodge.value
disabled=isPlayMode
}}
<span class="name"> <span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="toughness"><i <a
class="lf-roll-small fa-solid fa-dice-d20"></i> class="rollable"
data-roll-type="save"
data-roll-key="toughness"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.toughness"}} {{localize "LETHALFANTASY.Label.saves.toughness"}}
</a> </a>
</span> </span>
{{formField systemFields.saves.fields.toughness.fields.value value=system.saves.toughness.value {{formField
disabled=isPlayMode}} systemFields.saves.fields.toughness.fields.value
value=system.saves.toughness.value
disabled=isPlayMode
}}
</div> </div>
<div class="monster-save"> <div class="monster-save">
<span class="name"> <span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="contagion"><i <a
class="lf-roll-small fa-solid fa-dice-d20"></i> class="rollable"
data-roll-type="save"
data-roll-key="contagion"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.contagion"}} {{localize "LETHALFANTASY.Label.saves.contagion"}}
</a> </a>
</span> </span>
{{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value {{formField
disabled=isPlayMode}} systemFields.saves.fields.contagion.fields.value
value=system.saves.contagion.value
disabled=isPlayMode
}}
<span class="name"> <span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="poison"><i <a
class="lf-roll-small fa-solid fa-dice-d20"></i> class="rollable"
data-roll-type="save"
data-roll-key="poison"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.poison"}} {{localize "LETHALFANTASY.Label.saves.poison"}}
</a> </a>
</span> </span>
{{formField systemFields.saves.fields.poison.fields.value value=system.saves.poison.value {{formField
disabled=isPlayMode }} systemFields.saves.fields.poison.fields.value
value=system.saves.poison.value
disabled=isPlayMode
}}
<!-- <span class="name"> <!-- <span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="paincourage" data-roll-dice="D20" data-tooltip="Pain/Courage check on wound of..."><i <a class="rollable" data-roll-type="save" data-roll-key="paincourage" data-roll-dice="D20" data-tooltip="Pain/Courage check on wound of..."><i
@@ -98,61 +193,81 @@
</div> </div>
</fieldset> </fieldset>
<fieldset class="monster-characteristics monster-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> <fieldset
class="monster-characteristics monster-characteristics-{{ifThen
isPlayMode
'play'
'edit'
}}"
>
<legend>{{localize "LETHALFANTASY.Label.skills"}}</legend> <legend>{{localize "LETHALFANTASY.Label.skills"}}</legend>
<div class="monster-skills"> <div class="monster-skills">
<div class="monster-skill"> <div class="monster-skill">
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistTorture"><i <span class="name"><a
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize class="rollable"
"LETHALFANTASY.Label.resistTorture"}}</a></span> data-roll-type="monster-skill"
{{formField systemFields.resists.fields.resistTorture.fields.value data-roll-key="resistTorture"
value=system.resists.resistTorture.value ><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
disabled=isPlayMode "LETHALFANTASY.Label.resistTorture"
}}</a></span>
{{formField
systemFields.resists.fields.resistTorture.fields.value
value=system.resists.resistTorture.value
disabled=isPlayMode
}} }}
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistPerformance"><i <span class="name"><a
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize class="rollable"
"LETHALFANTASY.Label.resistPerformance"}}</a></span> data-roll-type="monster-skill"
{{formField systemFields.resists.fields.resistPerformance.fields.value data-roll-key="resistPerformance"
value=system.resists.resistPerformance.value ><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
disabled=isPlayMode "LETHALFANTASY.Label.resistPerformance"
}}</a></span>
{{formField
systemFields.resists.fields.resistPerformance.fields.value
value=system.resists.resistPerformance.value
disabled=isPlayMode
}}
<span class="name"><a
class="rollable"
data-roll-type="monster-skill"
data-roll-key="resistIntimidation"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.resistIntimidation"
}}</a></span>
{{formField
systemFields.resists.fields.resistIntimidation.fields.value
value=system.resists.resistIntimidation.value
disabled=isPlayMode
}} }}
<span class="name"><a class="rollable" data-roll-type="monster-skill"
data-roll-key="resistIntimidation"><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.resistIntimidation"}}</a></span>
{{formField systemFields.resists.fields.resistIntimidation.fields.value
value=system.resists.resistIntimidation.value
disabled=isPlayMode }}
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="perception"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.perception"}}</a></span>
{{formField systemFields.resists.fields.perception.fields.value value=system.resists.perception.value
disabled=isPlayMode }}
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="stealth"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.stealth"}}</a></span>
{{formField systemFields.resists.fields.stealth.fields.value value=system.resists.stealth.value
disabled=isPlayMode }}
</div> </div>
</div> <div class="monster-skill">
</fieldset> <span class="name"><a
class="rollable"
data-roll-type="monster-skill"
data-roll-key="perception"
><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.perception"
}}</a></span>
{{formField
systemFields.resists.fields.perception.fields.value
value=system.resists.perception.value
disabled=isPlayMode
}}
<span class="name"><a
<fieldset class="monster-characteristics monster-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> class="rollable"
<legend>{{localize "LETHALFANTASY.Label.Movement"}}</legend> data-roll-type="monster-skill"
<div class="monster-movements"> data-roll-key="stealth"
<div class="monster-movement"> ><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
<span class="name">{{localize "LETHALFANTASY.Label.movement.walk"}}</span> "LETHALFANTASY.Label.stealth"
{{formField systemFields.movement.fields.walk value=system.movement.walk disabled=isPlayMode}} }}</a></span>
<span class="name">{{localize "LETHALFANTASY.Label.movement.jog"}}</span> {{formField
{{formField systemFields.movement.fields.jog value=system.movement.jog disabled=isPlayMode}} systemFields.resists.fields.stealth.fields.value
<span class="name">{{localize "LETHALFANTASY.Label.movement.run"}}</span> value=system.resists.stealth.value
{{formField systemFields.movement.fields.run value=system.movement.run disabled=isPlayMode}} disabled=isPlayMode
<span class="name">{{localize "LETHALFANTASY.Label.movement.sprint"}}</span> }}
{{formField systemFields.movement.fields.sprint value=system.movement.sprint disabled=isPlayMode}}
</div> </div>
</div> </div>
</fieldset> </fieldset>
@@ -160,23 +275,91 @@
</div> </div>
</fieldset> </fieldset>
<fieldset class="monster-characteristics monster-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> <fieldset
class="monster-characteristics monster-characteristics-{{ifThen
isPlayMode
'play'
'edit'
}}"
>
<legend>{{localize "LETHALFANTASY.Label.characteristics"}}</legend> <legend>{{localize "LETHALFANTASY.Label.characteristics"}}</legend>
<div class="monster-characteristic"> <div class="monster-characteristic">
<span>{{localize "LETHALFANTASY.Label.int"}}</span> <span>{{localize "LETHALFANTASY.Label.int"}}</span>
{{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value {{formField
disabled=isPlayMode data-char-id="int" }} systemFields.characteristics.fields.int.fields.value
value=system.characteristics.int.value
disabled=isPlayMode
data-char-id="int"
}}
{{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent {{formField
disabled=isPlayMode type="number" }} systemFields.characteristics.fields.int.fields.percent
value=system.characteristics.int.percent
disabled=isPlayMode
type="number"
}}
</div> </div>
<div class="monster-characteristic"> <div class="monster-characteristic">
<span>{{localize "LETHALFANTASY.Label.dex"}}</span> <span>{{localize "LETHALFANTASY.Label.dex"}}</span>
{{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value {{formField
disabled=isPlayMode data-char-id="wis" }} systemFields.characteristics.fields.dex.fields.value
value=system.characteristics.dex.value
disabled=isPlayMode
data-char-id="wis"
}}
{{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent {{formField
disabled=isPlayMode type="number" }} systemFields.characteristics.fields.dex.fields.percent
value=system.characteristics.dex.percent
disabled=isPlayMode
type="number"
}}
</div>
<legend>{{localize "LETHALFANTASY.Label.Movement"}}</legend>
<div class="monster-movements">
<div class="monster-movement">
<div class="flexrow monster-hp">
<span class="name">{{localize
"LETHALFANTASY.Label.movement.walk"
}}</span>
{{formField
systemFields.movement.fields.walk
value=system.movement.walk
disabled=isPlayMode
}}
</div>
<div class="flexrow monster-hp">
<span class="name">{{localize
"LETHALFANTASY.Label.movement.jog"
}}</span>
{{formField
systemFields.movement.fields.jog
value=system.movement.jog
disabled=isPlayMode
}}
</div>
<div class="flexrow monster-hp">
<span class="name">{{localize
"LETHALFANTASY.Label.movement.run"
}}</span>
{{formField
systemFields.movement.fields.run
value=system.movement.run
disabled=isPlayMode
}}
</div>
<div class="flexrow monster-hp">
<span class="name">{{localize
"LETHALFANTASY.Label.movement.sprint"
}}</span>
{{formField
systemFields.movement.fields.sprint
value=system.movement.sprint
disabled=isPlayMode
}}
</div>
</div>
</div> </div>
</fieldset> </fieldset>