8 Commits

Author SHA1 Message Date
fa3054f24b Some granted dice/favor fixes
All checks were successful
Release Creation / build (release) Successful in 2m48s
2025-10-01 17:17:33 +02:00
59a891630e Fix tooltip
All checks were successful
Release Creation / build (release) Successful in 38s
2025-09-20 09:34:13 +02:00
35b88b3914 Poison/Contagion fixes again
All checks were successful
Release Creation / build (release) Successful in 42s
2025-09-19 23:32:15 +02:00
cb8bcfd9ea Ranged defense fixes again
All checks were successful
Release Creation / build (release) Successful in 43s
2025-09-19 22:30:26 +02:00
eedce1a498 Latest fixes
All checks were successful
Release Creation / build (release) Successful in 46s
2025-09-17 07:47:40 +02:00
76a99fe33f Various fixes 2025-09-16 23:49:02 +02:00
59a39850ce Fix miracle/spell rolls + upadte compendiums
All checks were successful
Release Creation / build (release) Successful in 56s
2025-09-09 20:14:25 +02:00
6eeb391d1a Move aiming to attacker
All checks were successful
Release Creation / build (release) Successful in 1m9s
2025-09-05 23:26:11 +02:00
47 changed files with 419 additions and 315 deletions

View File

@@ -521,6 +521,9 @@ i.lethalfantasy {
min-width: 2.5rem; min-width: 2.5rem;
max-width: 2.5rem; max-width: 2.5rem;
} }
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .ranged-attack-button {
font-size: 0.8rem;
}
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail button { .lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail button {
min-width: 9rem; min-width: 9rem;
} }
@@ -2236,10 +2239,17 @@ i.lethalfantasy {
.lethalfantasy-range-defense-dialog fieldset { .lethalfantasy-range-defense-dialog fieldset {
padding: 4px; padding: 4px;
} }
.lethalfantasy-range-defense-dialog .fieldset-centered {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
.lethalfantasy-range-defense-dialog select { .lethalfantasy-range-defense-dialog select {
margin-left: 0.5rem; margin-left: 0.5rem;
min-width: 10rem; min-width: 12rem;
max-width: 10rem; max-width: 12rem;
} }
.lethalfantasy-range-defense-dialog .field-section { .lethalfantasy-range-defense-dialog .field-section {
display: flex; display: flex;
@@ -2247,9 +2257,9 @@ i.lethalfantasy {
justify-content: left; justify-content: left;
} }
.lethalfantasy-range-defense-dialog .field-name { .lethalfantasy-range-defense-dialog .field-name {
width: 4rem; width: 5rem;
min-width: 4rem; min-width: 5rem;
max-width: 4rem; max-width: 5em;
} }
.dialog-form .form-footer button { .dialog-form .form-footer button {
min-width: 14rem; min-width: 14rem;
@@ -2293,6 +2303,15 @@ i.lethalfantasy {
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
color: var(--color-dark-1); color: var(--color-dark-1);
} }
.main select,
.dialog-damage select,
.dialog-resource select,
.dialog-challenge select,
.dialog-save select {
min-width: 8rem;
max-width: 8rem;
margin-left: 1rem;
}
.dice-roll { .dice-roll {
flex-direction: column; flex-direction: column;
} }

View File

@@ -140,7 +140,7 @@ export default class LethalFantasyActorSheet extends HandlebarsApplicationMixin(
if ("link" in event.target.dataset) return if ("link" in event.target.dataset) return
const el = event.currentTarget.closest('[data-drag="true"]') const el = event.currentTarget.closest('[data-drag="true"]')
const dragType = el.dataset.dragType const dragType = el?.dataset?.dragType
let dragData = {} let dragData = {}

View File

@@ -143,7 +143,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event) const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
// Handle different data types // Handle different data types
if (data.type === "Item") { if (data.type === "Item") {
const item = await fromUuid(data.uuid) const item = await fromUuid(data.uuid)
return this._onDropItem(item) return this._onDropItem(item)
} }
@@ -246,7 +246,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
async _onRoll(event, target) { async _onRoll(event, target) {
if (this.isEditMode) return if (this.isEditMode) return
console.log("Roll event", event)
const rollType = event.target.dataset.rollType const rollType = event.target.dataset.rollType
let rollKey = event.target.dataset.rollKey; let rollKey = event.target.dataset.rollKey;
let rollDice = event.target.dataset?.rollDice; let rollDice = event.target.dataset?.rollDice;

View File

@@ -92,8 +92,8 @@ export const RANGE_CHOICES = {
export const ATTACKER_AIM_CHOICES = { export const ATTACKER_AIM_CHOICES = {
"simple": { label: "Simple (+0)", value: "0" }, "simple": { label: "Simple (+0)", value: "0" },
"careful": { label: "Careful (Red -5)", value: "-4" }, "careful": { label: "Careful (Red +5)", value: "+4" },
"focused": { label: "Focused (Grey -9)", value: "-9" } "focused": { label: "Focused (Grey +9)", value: "+9" }
} }
export const SPELL_LETHARGY_DICE = [ export const SPELL_LETHARGY_DICE = [
@@ -104,6 +104,18 @@ export const SPELL_LETHARGY_DICE = [
{ dice: "D20", value: "20", level: "21-25", maxLevel: 25 } { dice: "D20", value: "20", level: "21-25", maxLevel: 25 }
] ]
export const GRANTED_DICE_CHOICES = {
"0": { label: "None", value: "0" },
"D2": { label: "D2", value: "D2" },
"D3": { label: "D3", value: "D3" },
"D4": { label: "D4", value: "D4" },
"D6": { label: "D6", value: "D6" },
"D8": { label: "D8", value: "D8" },
"D10": { label: "D10", value: "D10" },
"D12": { label: "D12", value: "D12" },
"D20": { label: "D20", value: "D20" }
}
export const INITIATIVE_DICE_CHOICES_PER_CLASS = { export const INITIATIVE_DICE_CHOICES_PER_CLASS = {
"untrained": [ "untrained": [
{ "name": "Asleep or totally distracted (2D12)", "value": "2D12" }, { "name": "Asleep or totally distracted (2D12)", "value": "2D12" },
@@ -136,7 +148,7 @@ export const INITIATIVE_DICE_CHOICES_PER_CLASS = {
"cleric": [ "cleric": [
{ "name": "Asleep or totally distracted (1D12)", "value": "1D12" }, { "name": "Asleep or totally distracted (1D12)", "value": "1D12" },
{ "name": "Awake but unsuspecting (1D10)", "value": "1D10" }, { "name": "Awake but unsuspecting (1D10)", "value": "1D10" },
{ "name": "Declared Ready on Alert (1D)", "value": "1D" }, { "name": "Declared Ready on Alert (1)", "value": "1" },
/*{ "name": "Aware of the enemy, can hear them but not see (1D6)", "value": "1D6" }, /*{ "name": "Aware of the enemy, can hear them but not see (1D6)", "value": "1D6" },
{ "name": "Aware and know exactly where the enemy is (1D4)", "value": "1D4" }*/ { "name": "Aware and know exactly where the enemy is (1D4)", "value": "1D4" }*/
], ],
@@ -310,5 +322,6 @@ export const SYSTEM = {
MORTAL_CHOICES, MORTAL_CHOICES,
SPELL_CRITICAL, SPELL_CRITICAL,
MIRACLE_TYPES, MIRACLE_TYPES,
SPELL_LETHARGY_DICE SPELL_LETHARGY_DICE,
GRANTED_DICE_CHOICES
} }

View File

@@ -96,6 +96,10 @@ export default class LethalFantasyRoll extends Roll {
return this.options.badResult return this.options.badResult
} }
get rollData() {
return this.options.rollData
}
/** /**
* Prompt the user with a dialog to configure and execute a roll. * Prompt the user with a dialog to configure and execute a roll.
* *
@@ -126,6 +130,7 @@ export default class LethalFantasyRoll extends Roll {
let hasGrantedDice = false let hasGrantedDice = false
let pointBlank = false let pointBlank = false
let letItFly = false let letItFly = false
let saveSpell = false
let beyondSkill = false let beyondSkill = false
let hasStaticModifier = false let hasStaticModifier = false
let hasExplode = true let hasExplode = true
@@ -312,6 +317,8 @@ export default class LethalFantasyRoll extends Roll {
hasChangeDice, hasChangeDice,
pointBlank, pointBlank,
baseValue: options.rollTarget.value, baseValue: options.rollTarget.value,
attackerAimChoices: SYSTEM.ATTACKER_AIM_CHOICES,
attackerAim: "0",
changeDice: `${dice}`, changeDice: `${dice}`,
fieldRollMode, fieldRollMode,
choiceModifier, choiceModifier,
@@ -351,7 +358,7 @@ export default class LethalFantasyRoll extends Roll {
], ],
actions: { actions: {
"selectGranted": (event, button, dialog) => { "selectGranted": (event, button, dialog) => {
hasGrantedDice = true hasGrantedDice = event.target.checked
}, },
"selectBeyondSkill": (event, button, dialog) => { "selectBeyondSkill": (event, button, dialog) => {
beyondSkill = button.checked beyondSkill = button.checked
@@ -362,6 +369,9 @@ export default class LethalFantasyRoll extends Roll {
"selectLetItFly": (event, button, dialog) => { "selectLetItFly": (event, button, dialog) => {
letItFly = button.checked letItFly = button.checked
}, },
"saveSpellCheck": (event, button, dialog) => {
saveSpell = button.checked
},
"gotoToken": (event, button, dialog) => { "gotoToken": (event, button, dialog) => {
let tokenId = $(button).data("tokenId") let tokenId = $(button).data("tokenId")
let token = canvas.tokens?.get(tokenId) let token = canvas.tokens?.get(tokenId)
@@ -378,6 +388,7 @@ export default class LethalFantasyRoll extends Roll {
// If the user cancels the dialog, exit // If the user cancels the dialog, exit
if (rollContext === null) return if (rollContext === null) return
console.log("rollContext", rollContext, hasGrantedDice) console.log("rollContext", rollContext, hasGrantedDice)
rollContext.saveSpell = saveSpell // Update fucking flag
let fullModifier = 0 let fullModifier = 0
let titleFormula = "" let titleFormula = ""
@@ -386,6 +397,9 @@ export default class LethalFantasyRoll extends Roll {
let bonus = Number(options.rollTarget.value) let bonus = Number(options.rollTarget.value)
fullModifier = rollContext.modifier === "" ? 0 : parseInt(rollContext.modifier, 10) + bonus fullModifier = rollContext.modifier === "" ? 0 : parseInt(rollContext.modifier, 10) + bonus
fullModifier += (rollContext.saveSpell) ? options.rollTarget.actorModifiers.saveModifier : 0 fullModifier += (rollContext.saveSpell) ? options.rollTarget.actorModifiers.saveModifier : 0
if (Number(rollContext.attackerAim) > 0) {
fullModifier += Number(rollContext.attackerAim)
}
if (fullModifier === 0) { if (fullModifier === 0) {
modifierFormula = "0" modifierFormula = "0"
@@ -396,7 +410,6 @@ export default class LethalFantasyRoll extends Roll {
if (hasStaticModifier) { if (hasStaticModifier) {
modifierFormula += ` + ${options.rollTarget.staticModifier}` modifierFormula += ` + ${options.rollTarget.staticModifier}`
} }
// modifierFormula += ` + ${options.rollTarget.charModifier}`
let sign = fullModifier < 0 ? "-" : "+" let sign = fullModifier < 0 ? "-" : "+"
if (hasExplode) { if (hasExplode) {
titleFormula = `${dice}E ${sign} ${modifierFormula}` titleFormula = `${dice}E ${sign} ${modifierFormula}`
@@ -431,8 +444,11 @@ export default class LethalFantasyRoll extends Roll {
} }
// Specific pain/poison/contagion case // Specific pain/poison/contagion case
if (options.rollType === "save" && (options.rollTarget.rollKey === "pain" || options.rollTarget.rollKey === "paincourage" || options.rollTarget.rollKey === "poison" || options.rollTarget.rollKey === "contagion")) { if (options.rollType === "save" && (options.rollTarget.rollKey === "poison" || options.rollTarget.rollKey === "contagion")) {
hasD30 = false hasD30 = false
hasStaticModifier = true
modifierFormula = ` + ${Math.abs(fullModifier)}`
titleFormula = `${dice}E + ${Math.abs(fullModifier)}`
} }
if (letItFly) { if (letItFly) {
@@ -457,6 +473,9 @@ export default class LethalFantasyRoll extends Roll {
actorImage: options.actorImage, actorImage: options.actorImage,
rollMode: rollContext.visibility, rollMode: rollContext.visibility,
hasTarget: options.hasTarget, hasTarget: options.hasTarget,
pointBlank,
beyondSkill,
letItFly,
hasGrantedDice, hasGrantedDice,
titleFormula, titleFormula,
targetName, targetName,
@@ -483,15 +502,17 @@ export default class LethalFantasyRoll extends Roll {
if (rollContext.favor === "favor") { if (rollContext.favor === "favor") {
rollFavor = new this(baseFormula, options.data, rollData) rollFavor = new this(baseFormula, options.data, rollData)
await rollFavor.evaluate() await rollFavor.evaluate()
console.log("Rolling with favor", rollFavor)
if (game?.dice3d) { if (game?.dice3d) {
game.dice3d.showForRoll(rollFavor, game.user, true) game.dice3d.showForRoll(rollFavor, game.user, true)
} }
if (rollFavor.result > rollBase.result) { if (Number(rollFavor.result) > Number(rollBase.result)) {
badResult = rollBase.result badResult = rollBase.result
rollBase = rollFavor rollBase = rollFavor
} else { } else {
badResult = rollFavor.result badResult = rollFavor.result
} }
rollFavor = null
} }
if (rollContext.favor === "disfavor") { if (rollContext.favor === "disfavor") {
@@ -500,12 +521,13 @@ export default class LethalFantasyRoll extends Roll {
if (game?.dice3d) { if (game?.dice3d) {
game.dice3d.showForRoll(rollFavor, game.user, true) game.dice3d.showForRoll(rollFavor, game.user, true)
} }
if (rollFavor.result < rollBase.result) { if (Number(rollFavor.result) < Number(rollBase.result)) {
badResult = rollBase.result badResult = rollBase.result
rollBase = rollFavor rollBase = rollFavor
} else { } else {
badResult = rollFavor.result badResult = rollFavor.result
} }
rollFavor = null
} }
if (hasD30) { if (hasD30) {
@@ -516,7 +538,7 @@ export default class LethalFantasyRoll extends Roll {
options.D30result = rollD30.total options.D30result = rollD30.total
} }
let rollTotal = -1 let rollTotal = 0
let diceResults = [] let diceResults = []
let resultType let resultType
let diceSum = 0 let diceSum = 0
@@ -541,7 +563,8 @@ export default class LethalFantasyRoll extends Roll {
} }
} }
if (hasGrantedDice) { if (hasGrantedDice && options.rollTarget.grantedDice && options.rollTarget.grantedDice !== "") {
titleFormula += ` + ${options.rollTarget.grantedDice.toUpperCase()}`
let grantedRoll = new Roll(options.rollTarget.grantedDice) let grantedRoll = new Roll(options.rollTarget.grantedDice)
await grantedRoll.evaluate() await grantedRoll.evaluate()
if (game?.dice3d) { if (game?.dice3d) {
@@ -554,12 +577,12 @@ export default class LethalFantasyRoll extends Roll {
if (fullModifier !== 0) { if (fullModifier !== 0) {
diceResults.push({ dice: `${rollModifier.formula.toUpperCase()}`, value: rollModifier.total }) diceResults.push({ dice: `${rollModifier.formula.toUpperCase()}`, value: rollModifier.total })
if (fullModifier < 0) { if (fullModifier < 0) {
rollTotal = Math.max(diceSum - rollModifier.total, 0) rollTotal += Math.max(diceSum - rollModifier.total, 0)
} else { } else {
rollTotal = diceSum + rollModifier.total rollTotal += diceSum + rollModifier.total
} }
} else { } else {
rollTotal = diceSum rollTotal += diceSum
} }
rollBase.options.resultType = resultType rollBase.options.resultType = resultType
@@ -569,6 +592,7 @@ export default class LethalFantasyRoll extends Roll {
rollBase.options.titleFormula = titleFormula rollBase.options.titleFormula = titleFormula
rollBase.options.D30result = options.D30result rollBase.options.D30result = options.D30result
rollBase.options.badResult = badResult rollBase.options.badResult = badResult
rollBase.options.rollData = foundry.utils.duplicate(rollData)
/** /**
* A hook event that fires after the roll has been made. * A hook event that fires after the roll has been made.
@@ -607,7 +631,6 @@ export default class LethalFantasyRoll extends Roll {
fieldRollMode, fieldRollMode,
rollModes rollModes
} }
console.log("CTX", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext)
@@ -642,7 +665,6 @@ export default class LethalFantasyRoll extends Roll {
let combat = game.combats.get(options.combatId) let combat = game.combats.get(options.combatId)
combat.updateEmbeddedDocuments("Combatant", [{ _id: options.combatantId, initiative: initRoll.total, 'system.progressionCount': 0 }]); combat.updateEmbeddedDocuments("Combatant", [{ _id: options.combatantId, initiative: initRoll.total, 'system.progressionCount': 0 }]);
} }
} }
/* ***********************************************************/ /* ***********************************************************/
@@ -905,9 +927,9 @@ export default class LethalFantasyRoll extends Roll {
} }
/* ***********************************************************/ /* ***********************************************************/
static async promptRangedDefense(rollTarget) { static async promptRangedDefense(options = {}) {
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes); // v12 : Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes);
const fieldRollMode = new foundry.data.fields.StringField({ const fieldRollMode = new foundry.data.fields.StringField({
choices: rollModes, choices: rollModes,
blank: false, blank: false,
@@ -922,13 +944,12 @@ export default class LethalFantasyRoll extends Roll {
attackerAimChoices: SYSTEM.ATTACKER_AIM_CHOICES, attackerAimChoices: SYSTEM.ATTACKER_AIM_CHOICES,
movement: "none", movement: "none",
moveDirection: "none", moveDirection: "none",
size: "medium", size: "+5",
range: "short", range: "short",
attackerAim: "simple", attackerAim: "simple",
fieldRollMode, fieldRollMode,
rollModes rollModes
} }
console.log("CTX", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/range-defense-dialog.hbs", dialogContext) const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/range-defense-dialog.hbs", dialogContext)
@@ -966,7 +987,7 @@ export default class LethalFantasyRoll extends Roll {
if (rollContext.range === "beyondskill") { if (rollContext.range === "beyondskill") {
rollContext.movement = rollContext.movement.replace("kh", "") rollContext.movement = rollContext.movement.replace("kh", "")
rollContext.movement = rollContext.movement.replace("kl", "") rollContext.movement = rollContext.movement.replace("kl", "")
rollContext.movement += "kh" // Add the kl to the movement (disfavor for point blank range) rollContext.movement += "kh" // Add the kl to the movement (favor for point blank range)
rollContext.range = "+11" rollContext.range = "+11"
} }
@@ -974,19 +995,19 @@ export default class LethalFantasyRoll extends Roll {
let fullModifier = Number(rollContext.moveDirection) + let fullModifier = Number(rollContext.moveDirection) +
Number(rollContext.size) + Number(rollContext.size) +
Number(rollContext.range) + Number(rollContext.range) +
Number(rollContext.attackerAim) Number(rollContext?.attackerAim || 0)
console.log("Modifier", fullModifier)
let modifierFormula let modifierFormula
if (fullModifier === 0) { if (fullModifier === 0) {
modifierFormula = "0" modifierFormula = "0"
} else { } else {
let modAbs = Math.abs(fullModifier) let modAbs = Math.abs(fullModifier)
modifierFormula = `${modAbs}` modifierFormula = `D${modAbs + 1} -1`
} }
let rollData = { ...rollContext } let rollData = { ...rollContext }
let options = { ...rollContext } // Merge rollContext object into options object
options = { ...options, ...rollContext }
options.rollName = "Ranged Defense" options.rollName = "Ranged Defense"
const rollBase = new this(rollContext.movement, options.data, rollData) const rollBase = new this(rollContext.movement, options.data, rollData)
@@ -996,7 +1017,15 @@ export default class LethalFantasyRoll extends Roll {
let rollD30 = await new Roll("1D30").evaluate() let rollD30 = await new Roll("1D30").evaluate()
options.D30result = rollD30.total options.D30result = rollD30.total
let badResult = 0
if (rollContext.movement.includes("kh")) {
rollData.favor = "favor"
badResult = Math.min(rollBase.terms[0].results[0].result, rollBase.terms[0].results[1]?.result || 20)
}
if (rollContext.movement.includes("kl")) {
rollData.favor = "disfavor"
badResult = Math.max(rollBase.terms[0].results[0].result, rollBase.terms[0].results[1]?.result || 1)
}
let dice = rollContext.movement let dice = rollContext.movement
let maxValue = 20 // As per latest changes (was : Number(dice.match(/\d+$/)[0]) let maxValue = 20 // As per latest changes (was : Number(dice.match(/\d+$/)[0])
let rollTotal = -1 let rollTotal = -1
@@ -1022,15 +1051,16 @@ export default class LethalFantasyRoll extends Roll {
} else { } else {
rollTotal = diceSum rollTotal = diceSum
} }
rollBase.options = { ...rollBase.options, ...options }
rollBase.options.resultType = resultType rollBase.options.resultType = resultType
rollBase.options.rollTotal = rollTotal rollBase.options.rollTotal = rollTotal
rollBase.options.diceResults = diceResults rollBase.options.diceResults = diceResults
rollBase.options.rollTarget = options.rollTarget rollBase.options.rollTarget = options.rollTarget
rollBase.options.titleFormula = `${dice}E + ${modifierFormula}` rollBase.options.titleFormula = `1D20E + ${modifierFormula}`
rollBase.options.D30result = options.D30result rollBase.options.D30result = options.D30result
rollBase.options.rollName = "Ranged Defense" rollBase.options.rollName = "Ranged Defense"
rollBase.options.badResult = badResult
rollBase.options.rollData = foundry.utils.duplicate(rollData)
/** /**
* A hook event that fires after the roll has been made. * A hook event that fires after the roll has been made.
* @function * @function
@@ -1114,6 +1144,7 @@ export default class LethalFantasyRoll extends Roll {
targetArmor: this.targetArmor, targetArmor: this.targetArmor,
D30result: this.D30result, D30result: this.D30result,
badResult: this.badResult, badResult: this.badResult,
rollData: this.rollData,
isPrivate: isPrivate isPrivate: isPrivate
} }
cardData.cssClass = cardData.css.join(" ") cardData.cssClass = cardData.css.join(" ")
@@ -1145,6 +1176,7 @@ export default class LethalFantasyRoll extends Roll {
targetArmor: this.targetArmor, targetArmor: this.targetArmor,
targetMalus: this.targetMalus, targetMalus: this.targetMalus,
realDamage: this.realDamage, realDamage: this.realDamage,
rollData: this.rollData,
...messageData, ...messageData,
}, },
{ rollMode: rollMode }, { rollMode: rollMode },

View File

@@ -90,9 +90,9 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
}) })
schema.granted = new fields.SchemaField({ schema.granted = new fields.SchemaField({
attackDice: new fields.StringField({ required: true, nullable: false, initial: "" }), attackDice: new fields.StringField({ required: true, nullable: false, initial: "0", choices: SYSTEM.GRANTED_DICE_CHOICES }),
defenseDice: new fields.StringField({ required: true, nullable: false, initial: "" }), defenseDice: new fields.StringField({ required: true, nullable: false, initial: "0", choices: SYSTEM.GRANTED_DICE_CHOICES }),
damageDice: new fields.StringField({ required: true, nullable: false, initial: "" }) damageDice: new fields.StringField({ required: true, nullable: false, initial: "0", choices: SYSTEM.GRANTED_DICE_CHOICES })
}) })
schema.movement = new fields.SchemaField({ schema.movement = new fields.SchemaField({
@@ -179,13 +179,13 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
if (!SYSTEM.MORTAL_CHOICES[data.biodata.mortal]) { if (!SYSTEM.MORTAL_CHOICES[data.biodata.mortal]) {
for (let key in SYSTEM.MORTAL_CHOICES) { for (let key in SYSTEM.MORTAL_CHOICES) {
let mortal = SYSTEM.MORTAL_CHOICES[key] let mortal = SYSTEM.MORTAL_CHOICES[key]
if ( mortal.label.toLowerCase() === data.biodata.mortal.toLowerCase()) { if (mortal.label.toLowerCase() === data.biodata.mortal.toLowerCase()) {
data.biodata.mortal = mortal.id data.biodata.mortal = mortal.id
} }
if ( data.biodata.mortal.toLowerCase().includes("shire")) { if (data.biodata.mortal.toLowerCase().includes("shire")) {
data.biodata.mortal = "halflings" data.biodata.mortal = "halflings"
} }
if ( data.biodata.mortal.toLowerCase().includes("human")) { if (data.biodata.mortal.toLowerCase().includes("human")) {
data.biodata.mortal = "mankind" data.biodata.mortal = "mankind"
} }
} }
@@ -235,8 +235,8 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
this.saves.toughness.value = conDef.toughness_save + this.modifiers.saveModifier this.saves.toughness.value = conDef.toughness_save + this.modifiers.saveModifier
this.challenges.dying.value = conDef.stabilization_dice this.challenges.dying.value = conDef.stabilization_dice
this.saves.contagion.value = this.characteristics.con.value + this.modifiers.saveModifier this.saves.contagion.value = this.characteristics.con.value;// + this.modifiers.saveModifier
this.saves.poison.value = this.characteristics.con.value + this.modifiers.saveModifier this.saves.poison.value = this.characteristics.con.value; // + this.modifiers.saveModifier
this.combat.attackModifier = 0 this.combat.attackModifier = 0
for (let chaKey of SYSTEM.CHARACTERISTIC_ATTACK) { for (let chaKey of SYSTEM.CHARACTERISTIC_ATTACK) {
@@ -293,7 +293,6 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
let wisDef = SYSTEM.CHARACTERISTICS_TABLES.wis.find((c) => c.value === this.characteristics.wis.value) let wisDef = SYSTEM.CHARACTERISTICS_TABLES.wis.find((c) => c.value === this.characteristics.wis.value)
let maxInit = Number(wisDef.init_cap) || 1000 let maxInit = Number(wisDef.init_cap) || 1000
console.log("Rolling initiative for", this)
let roll = await LethalFantasyRoll.promptInitiative({ let roll = await LethalFantasyRoll.promptInitiative({
actorId: this.parent.id, actorId: this.parent.id,

View File

@@ -1 +1 @@
MANIFEST-000388 MANIFEST-000436

View File

@@ -1,8 +1,8 @@
2025/09/02-20:50:59.720888 7ff574df96c0 Recovering log #386 2025/10/01-16:42:57.866432 7fc499ffb6c0 Recovering log #434
2025/09/02-20:50:59.731821 7ff574df96c0 Delete type=3 #384 2025/10/01-16:42:57.877314 7fc499ffb6c0 Delete type=3 #432
2025/09/02-20:50:59.731882 7ff574df96c0 Delete type=0 #386 2025/10/01-16:42:57.877388 7fc499ffb6c0 Delete type=0 #434
2025/09/02-21:05:27.811892 7ff56e3ff6c0 Level-0 table #391: started 2025/10/01-17:11:30.188440 7fc497ff76c0 Level-0 table #439: started
2025/09/02-21:05:27.811921 7ff56e3ff6c0 Level-0 table #391: 0 bytes OK 2025/10/01-17:11:30.188469 7fc497ff76c0 Level-0 table #439: 0 bytes OK
2025/09/02-21:05:27.818375 7ff56e3ff6c0 Delete type=0 #389 2025/10/01-17:11:30.194363 7fc497ff76c0 Delete type=0 #437
2025/09/02-21:05:27.831362 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200618 7fc497ff76c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/02-21:05:27.831417 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200653 7fc497ff76c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/02-17:50:28.149562 7ff56f7fe6c0 Recovering log #382 2025/10/01-09:52:37.607891 7fc498ff96c0 Recovering log #430
2025/09/02-17:50:28.159074 7ff56f7fe6c0 Delete type=3 #380 2025/10/01-09:52:37.617656 7fc498ff96c0 Delete type=3 #428
2025/09/02-17:50:28.159158 7ff56f7fe6c0 Delete type=0 #382 2025/10/01-09:52:37.617728 7fc498ff96c0 Delete type=0 #430
2025/09/02-18:10:48.127187 7ff56e3ff6c0 Level-0 table #387: started 2025/10/01-10:19:09.456857 7fc497ff76c0 Level-0 table #435: started
2025/09/02-18:10:48.127226 7ff56e3ff6c0 Level-0 table #387: 0 bytes OK 2025/10/01-10:19:09.456891 7fc497ff76c0 Level-0 table #435: 0 bytes OK
2025/09/02-18:10:48.133926 7ff56e3ff6c0 Delete type=0 #385 2025/10/01-10:19:09.500293 7fc497ff76c0 Delete type=0 #433
2025/09/02-18:10:48.134163 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.675931 7fc497ff76c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/09/02-18:10:48.134189 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.675968 7fc497ff76c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000387 MANIFEST-000436

View File

@@ -1,8 +1,8 @@
2025/09/02-20:50:59.736702 7ff56ffff6c0 Recovering log #385 2025/10/01-16:42:57.881962 7fc4987f86c0 Recovering log #434
2025/09/02-20:50:59.746286 7ff56ffff6c0 Delete type=3 #383 2025/10/01-16:42:57.892761 7fc4987f86c0 Delete type=3 #432
2025/09/02-20:50:59.746360 7ff56ffff6c0 Delete type=0 #385 2025/10/01-16:42:57.892833 7fc4987f86c0 Delete type=0 #434
2025/09/02-21:05:27.804767 7ff56e3ff6c0 Level-0 table #390: started 2025/10/01-17:11:30.181134 7fc497ff76c0 Level-0 table #439: started
2025/09/02-21:05:27.804810 7ff56e3ff6c0 Level-0 table #390: 0 bytes OK 2025/10/01-17:11:30.181171 7fc497ff76c0 Level-0 table #439: 0 bytes OK
2025/09/02-21:05:27.811774 7ff56e3ff6c0 Delete type=0 #388 2025/10/01-17:11:30.188327 7fc497ff76c0 Delete type=0 #437
2025/09/02-21:05:27.831354 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200601 7fc497ff76c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/02-21:05:27.831403 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200645 7fc497ff76c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/09/02-17:50:28.163914 7ff574df96c0 Recovering log #381 2025/10/01-09:52:37.622704 7fc4997fa6c0 Recovering log #430
2025/09/02-17:50:28.174205 7ff574df96c0 Delete type=3 #379 2025/10/01-09:52:37.632146 7fc4997fa6c0 Delete type=3 #428
2025/09/02-17:50:28.174262 7ff574df96c0 Delete type=0 #381 2025/10/01-09:52:37.632199 7fc4997fa6c0 Delete type=0 #430
2025/09/02-18:10:48.106359 7ff56e3ff6c0 Level-0 table #386: started 2025/10/01-10:19:09.736826 7fc497ff76c0 Level-0 table #435: started
2025/09/02-18:10:48.106436 7ff56e3ff6c0 Level-0 table #386: 0 bytes OK 2025/10/01-10:19:09.736857 7fc497ff76c0 Level-0 table #435: 0 bytes OK
2025/09/02-18:10:48.112780 7ff56e3ff6c0 Delete type=0 #384 2025/10/01-10:19:09.782928 7fc497ff76c0 Delete type=0 #433
2025/09/02-18:10:48.134105 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.809673 7fc497ff76c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/09/02-18:10:48.134170 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.809700 7fc497ff76c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000387 MANIFEST-000436

View File

@@ -1,8 +1,8 @@
2025/09/02-20:50:59.705310 7ff5755fa6c0 Recovering log #385 2025/10/01-16:42:57.852986 7fc498ff96c0 Recovering log #434
2025/09/02-20:50:59.715661 7ff5755fa6c0 Delete type=3 #383 2025/10/01-16:42:57.862534 7fc498ff96c0 Delete type=3 #432
2025/09/02-20:50:59.715730 7ff5755fa6c0 Delete type=0 #385 2025/10/01-16:42:57.862603 7fc498ff96c0 Delete type=0 #434
2025/09/02-21:05:27.824904 7ff56e3ff6c0 Level-0 table #390: started 2025/10/01-17:11:30.174361 7fc497ff76c0 Level-0 table #439: started
2025/09/02-21:05:27.824936 7ff56e3ff6c0 Level-0 table #390: 0 bytes OK 2025/10/01-17:11:30.174817 7fc497ff76c0 Level-0 table #439: 0 bytes OK
2025/09/02-21:05:27.831287 7ff56e3ff6c0 Delete type=0 #388 2025/10/01-17:11:30.181000 7fc497ff76c0 Delete type=0 #437
2025/09/02-21:05:27.831394 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200584 7fc497ff76c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/02-21:05:27.831425 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200638 7fc497ff76c0 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/09/02-17:50:28.134841 7ff5755fa6c0 Recovering log #381 2025/10/01-09:52:37.593230 7fc4987f86c0 Recovering log #430
2025/09/02-17:50:28.144832 7ff5755fa6c0 Delete type=3 #379 2025/10/01-09:52:37.603848 7fc4987f86c0 Delete type=3 #428
2025/09/02-17:50:28.144888 7ff5755fa6c0 Delete type=0 #381 2025/10/01-09:52:37.603909 7fc4987f86c0 Delete type=0 #430
2025/09/02-18:10:48.112960 7ff56e3ff6c0 Level-0 table #386: started 2025/10/01-10:19:09.418020 7fc497ff76c0 Level-0 table #435: started
2025/09/02-18:10:48.113011 7ff56e3ff6c0 Level-0 table #386: 0 bytes OK 2025/10/01-10:19:09.418055 7fc497ff76c0 Level-0 table #435: 0 bytes OK
2025/09/02-18:10:48.119926 7ff56e3ff6c0 Delete type=0 #384 2025/10/01-10:19:09.456709 7fc497ff76c0 Delete type=0 #433
2025/09/02-18:10:48.134120 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.675920 7fc497ff76c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/09/02-18:10:48.134176 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.675962 7fc497ff76c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000087 MANIFEST-000136

View File

@@ -1,8 +1,8 @@
2025/09/02-20:50:59.760810 7ff56f7fe6c0 Recovering log #85 2025/10/01-16:42:57.908006 7fc4997fa6c0 Recovering log #134
2025/09/02-20:50:59.771723 7ff56f7fe6c0 Delete type=3 #83 2025/10/01-16:42:57.919602 7fc4997fa6c0 Delete type=3 #132
2025/09/02-20:50:59.771778 7ff56f7fe6c0 Delete type=0 #85 2025/10/01-16:42:57.919658 7fc4997fa6c0 Delete type=0 #134
2025/09/02-21:05:27.831562 7ff56e3ff6c0 Level-0 table #90: started 2025/10/01-17:11:30.207352 7fc497ff76c0 Level-0 table #139: started
2025/09/02-21:05:27.831585 7ff56e3ff6c0 Level-0 table #90: 0 bytes OK 2025/10/01-17:11:30.207416 7fc497ff76c0 Level-0 table #139: 0 bytes OK
2025/09/02-21:05:27.838459 7ff56e3ff6c0 Delete type=0 #88 2025/10/01-17:11:30.214221 7fc497ff76c0 Delete type=0 #137
2025/09/02-21:05:27.861348 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.239177 7fc497ff76c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/02-21:05:27.861400 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.278471 7fc497ff76c0 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/09/02-17:50:28.191160 7ff56f7fe6c0 Recovering log #81 2025/10/01-09:52:37.648603 7fc498ff96c0 Recovering log #130
2025/09/02-17:50:28.200755 7ff56f7fe6c0 Delete type=3 #79 2025/10/01-09:52:37.658051 7fc498ff96c0 Delete type=3 #128
2025/09/02-17:50:28.200807 7ff56f7fe6c0 Delete type=0 #81 2025/10/01-09:52:37.658136 7fc498ff96c0 Delete type=0 #130
2025/09/02-18:10:48.162879 7ff56e3ff6c0 Level-0 table #86: started 2025/10/01-10:19:09.381699 7fc497ff76c0 Level-0 table #135: started
2025/09/02-18:10:48.162935 7ff56e3ff6c0 Level-0 table #86: 0 bytes OK 2025/10/01-10:19:09.381742 7fc497ff76c0 Level-0 table #135: 0 bytes OK
2025/09/02-18:10:48.169774 7ff56e3ff6c0 Delete type=0 #84 2025/10/01-10:19:09.417885 7fc497ff76c0 Delete type=0 #133
2025/09/02-18:10:48.169974 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.675902 7fc497ff76c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/09/02-18:10:48.194063 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.675956 7fc497ff76c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000387 MANIFEST-000435

View File

@@ -1,8 +1,8 @@
2025/09/02-20:50:59.748635 7ff5755fa6c0 Recovering log #385 2025/10/01-16:42:57.895507 7fc498ff96c0 Recovering log #433
2025/09/02-20:50:59.758609 7ff5755fa6c0 Delete type=3 #383 2025/10/01-16:42:57.905329 7fc498ff96c0 Delete type=3 #431
2025/09/02-20:50:59.758674 7ff5755fa6c0 Delete type=0 #385 2025/10/01-16:42:57.905405 7fc498ff96c0 Delete type=0 #433
2025/09/02-21:05:27.818496 7ff56e3ff6c0 Level-0 table #390: started 2025/10/01-17:11:30.194475 7fc497ff76c0 Level-0 table #438: started
2025/09/02-21:05:27.818520 7ff56e3ff6c0 Level-0 table #390: 0 bytes OK 2025/10/01-17:11:30.194505 7fc497ff76c0 Level-0 table #438: 0 bytes OK
2025/09/02-21:05:27.824803 7ff56e3ff6c0 Delete type=0 #388 2025/10/01-17:11:30.200450 7fc497ff76c0 Delete type=0 #436
2025/09/02-21:05:27.831371 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200628 7fc497ff76c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/02-21:05:27.831411 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/10/01-17:11:30.200661 7fc497ff76c0 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/09/02-17:50:28.177587 7ff5755fa6c0 Recovering log #381 2025/10/01-09:52:37.634817 7fc4987f86c0 Recovering log #429
2025/09/02-17:50:28.187400 7ff5755fa6c0 Delete type=3 #379 2025/10/01-09:52:37.645670 7fc4987f86c0 Delete type=3 #427
2025/09/02-17:50:28.187471 7ff5755fa6c0 Delete type=0 #381 2025/10/01-09:52:37.645745 7fc4987f86c0 Delete type=0 #429
2025/09/02-18:10:48.120046 7ff56e3ff6c0 Level-0 table #386: started 2025/10/01-10:19:09.704901 7fc497ff76c0 Level-0 table #434: started
2025/09/02-18:10:48.120069 7ff56e3ff6c0 Level-0 table #386: 0 bytes OK 2025/10/01-10:19:09.704973 7fc497ff76c0 Level-0 table #434: 0 bytes OK
2025/09/02-18:10:48.127045 7ff56e3ff6c0 Delete type=0 #384 2025/10/01-10:19:09.736698 7fc497ff76c0 Delete type=0 #432
2025/09/02-18:10:48.134134 7ff56e3ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.809658 7fc497ff76c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/09/02-18:10:48.134182 7ff56e3ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end) 2025/10/01-10:19:09.809691 7fc497ff76c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@@ -375,6 +375,9 @@
min-width: 2.5rem; min-width: 2.5rem;
max-width: 2.5rem; max-width: 2.5rem;
} }
.ranged-attack-button {
font-size: 0.8rem;
}
button { button {
min-width: 9rem; min-width: 9rem;
} }

View File

@@ -25,7 +25,6 @@
border-radius: 4px; border-radius: 4px;
padding: 0.5rem; padding: 0.5rem;
} }
} }
.lethalfantasy-range-defense-dialog { .lethalfantasy-range-defense-dialog {
@@ -34,10 +33,17 @@
fieldset { fieldset {
padding: 4px; padding: 4px;
} }
.fieldset-centered {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
select { select {
margin-left: 0.5rem; margin-left: 0.5rem;
min-width: 10rem; min-width: 12rem;
max-width: 10rem; max-width: 12rem;
} }
.field-section { .field-section {
display: flex; display: flex;
@@ -45,13 +51,12 @@
justify-content: left; justify-content: left;
} }
.field-name { .field-name {
width:4rem; width: 5rem;
min-width: 4rem; min-width: 5rem;
max-width: 4rem; max-width: 5em;
} }
} }
.dialog-form { .dialog-form {
.form-footer { .form-footer {
button { button {
@@ -87,7 +92,6 @@
} }
} }
.main, .main,
.dialog-damage, .dialog-damage,
.dialog-resource, .dialog-resource,
@@ -99,8 +103,13 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
color: var(--color-dark-1); color: var(--color-dark-1);
select {
min-width: 8rem;
max-width: 8rem;
margin-left: 1rem;
}
} }
&.dice-roll { &.dice-roll {
@@ -133,7 +142,7 @@
flex-direction: column; flex-direction: column;
.introText { .introText {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
width: 210px; width: 210px;
margin-left: 20px; margin-left: 20px;
} }
@@ -144,7 +153,7 @@
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
text-shadow: 0 0 10px var(--color-shadow-primary); text-shadow: 0 0 10px var(--color-shadow-primary);
} }
} }

View File

@@ -1,161 +1,164 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="combat" data-group="sheet"> <section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="combat" data-group="sheet">
<div class="main-div"> <div class="main-div">
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend> <legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend>
<div class="combat-details"> <div class="combat-details">
<div class="combat-detail"> <div class="combat-detail">
<button class="action" data-action="rangedAttackDefense"> <button class="action ranged-attack-button" data-action="rangedAttackDefense">
{{localize "LETHALFANTASY.Label.rangedAttackDefense"}} {{localize "LETHALFANTASY.Label.rangedAttackDefense"}}
</button> </button>
<button class="action" data-action="rollInitiative"> <button class="action ranged-attack-button" data-action="rollInitiative">
{{localize "LETHALFANTASY.Label.rollInitiative"}} {{localize "LETHALFANTASY.Label.rollInitiative"}}
</button> </button>
<div class="flexrow armor-hp">
<span class="name">{{localize "LETHALFANTASY.Label.armorHitPoints"}}</span>
{{formInput systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true }}
<a data-action="armorHitPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="armorHitPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
</div>
<div class="flexrow granted">
<span class="">{{localize
"LETHALFANTASY.Label.grantedAttackDice"}}</a></span>
{{formInput systemFields.granted.fields.attackDice value=system.granted.attackDice disabled=isPlayMode }}
</div>
<div class="flexrow granted ">
<span class="">{{localize
"LETHALFANTASY.Label.grantedDefenseDice"}}</a></span>
{{formInput systemFields.granted.fields.defenseDice value=system.granted.defenseDice disabled=isPlayMode }}
</div>
<div class="flexrow granted">
<span class="">{{localize
"LETHALFANTASY.Label.grantedDamageDice"}}</a></span>
{{formInput systemFields.granted.fields.damageDice value=system.granted.damageDice disabled=isPlayMode }}
</div>
<div class="flexrow armor-hp">
<span class="name">{{localize "LETHALFANTASY.Label.armorHitPoints"}}</span>
{{formInput systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true }}
<a data-action="armorHitPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="armorHitPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
</div> </div>
<div class="flexrow granted">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="attackDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize "LETHALFANTASY.Label.grantedAttackDice"}}</a></span>
{{formInput systemFields.granted.fields.attackDice value=system.granted.attackDice disabled=isPlayMode }}
</div>
<div class="flexrow granted ">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="defenseDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize "LETHALFANTASY.Label.grantedDefenseDice"}}</a></span>
{{formInput systemFields.granted.fields.defenseDice value=system.granted.defenseDice disabled=isPlayMode }}
</div>
<div class="flexrow granted">
<span class=""><a class="rollable" data-roll-type="granted" data-roll-key="damageDice"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize "LETHALFANTASY.Label.grantedDamageDice"}}</a></span>
{{formInput systemFields.granted.fields.damageDice value=system.granted.damageDice disabled=isPlayMode }}
</div>
</div> </div>
</div> </fieldset>
</fieldset>
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.wounds"}}</legend> <legend>{{localize "LETHALFANTASY.Label.wounds"}}</legend>
<div class="wounds"> <div class="wounds">
{{#each system.hp.wounds as |wound idx|}} {{#each system.hp.wounds as |wound idx|}}
<div class="wound"> <div class="wound">
Name:<input class="wound-description wound-data" type="text" data-type="String" data-index="{{@index}}" value="{{wound.description}}" data-name="description" > Name:<input class="wound-description wound-data" type="text" data-type="String" data-index="{{@index}}"
Duration:<input class="wound-duration wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.duration}}" data-name="duration" > value="{{wound.description}}" data-name="description">
HP:<input class="wound-value wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.value}}" data-name="value" > Duration:<input class="wound-duration wound-data" type="text" data-type="Number" data-index="{{@index}}"
value="{{wound.duration}}" data-name="duration">
HP:<input class="wound-value wound-data" type="text" data-type="Number" data-index="{{@index}}"
value="{{wound.value}}" data-name="value">
</div> </div>
{{/each}} {{/each}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.weapons"}}</legend>
<div class="weapons">
{{#each weapons as |item|}}
<div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"
data-drag-type="damage">
{{#if (ne item.img "icons/svg/item-bag.svg")}}
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
{{/if}}
<div class="name">
{{item.name}}
</div>
<div class="attack-icons">
<a class="rollable" data-roll-type="weapon-attack" data-roll-key="{{item.id}}" data-tooltip="Roll Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="weapon-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-defense" data-roll-key="{{item.id}}" data-tooltip="Roll Defense">
<i class="fa-solid fa-shield-halved" data-roll-type="weapon-defense" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Small)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-small"
data-roll-key="{{item.id}}"></i>S
</a>
<a class="rollable" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Medium)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-medium"
data-roll-key="{{item.id}}"></i>M
</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div> </div>
{{/each}} </fieldset>
</div>
</fieldset>
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.armors"}}</legend> <legend>{{localize "LETHALFANTASY.Label.weapons"}}</legend>
<div class="armors"> <div class="weapons">
{{#each armors as |item|}} {{#each weapons as |item|}}
<div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> data-drag-type="damage">
<div class="name" data-tooltip="{{{item.system.description}}}"> {{#if (ne item.img "icons/svg/item-bag.svg")}}
{{item.name}} <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
</div> {{/if}}
<div class="item-detail" data-tooltip="Defense">{{item.system.defense}}</div> <div class="name" data-tooltip="{{item.system.description}}">
<div class="item-detail" data-tooltip="Maximum movement">{{item.system.maximumMovement}}</div> {{item.name}}
<div class="item-detail" data-tooltip="HP">{{item.system.hp}}</div> </div>
<div class="item-detail" data-tooltip="Damage Reduction">{{item.system.damageReduction}}</div> <div class="attack-icons">
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}" <a class="rollable" data-roll-type="weapon-attack" data-roll-key="{{item.id}}" data-tooltip="Roll Attack">
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> <i class="lf-roll-small fa-solid fa-swords" data-roll-type="weapon-attack"
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-roll-key="{{item.id}}"></i>
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> </a>
<a class="rollable" data-roll-type="weapon-defense" data-roll-key="{{item.id}}" data-tooltip="Roll Defense">
<i class="fa-solid fa-shield-halved" data-roll-type="weapon-defense" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Small)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-small"
data-roll-key="{{item.id}}"></i>S
</a>
<a class="rollable" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Medium)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-medium"
data-roll-key="{{item.id}}"></i>M
</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div> </div>
{{/each}}
</div> </div>
{{/each}} </fieldset>
</div>
</fieldset>
<fieldset> <fieldset>
<legend>{{localize "LETHALFANTASY.Label.shields"}}</legend> <legend>{{localize "LETHALFANTASY.Label.armors"}}</legend>
<div class="shields"> <div class="armors">
{{#each shields as |item|}} {{#each armors as |item|}}
<div class="shield" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> <div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}"> <div class="name" data-tooltip="{{item.system.description}}">
{{item.name}} {{item.name}}
</div> </div>
<div class="item-detail" data-tooltip="Defense"> <div class="item-detail" data-tooltip="Defense">{{item.system.defense}}</div>
<a class="rollable" data-roll-type="shield-roll" data-roll-key="{{item.id}}" data-tooltip="Shield Defense"> <div class="item-detail" data-tooltip="Maximum movement">{{item.system.maximumMovement}}</div>
<i class="lf-roll-small fa-solid fa-shield" data-roll-type="shield-roll" data-roll-key="{{item.id}}"></i> <div class="item-detail" data-tooltip="HP">{{item.system.hp}}</div>
{{upperFirst item.system.defense}} <div class="item-detail" data-tooltip="Damage Reduction">{{item.system.damageReduction}}</div>
</a> <div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
</div> data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<div class="item-detail" data-tooltip="Movement reduction">{{item.system.movementreduction}}</div> <a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
<div class="item-detail" data-tooltip="Has cover">{{#if item.system.hascover}}Cover{{/if}}</div> data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div> </div>
{{/each}}
</div> </div>
{{/each}} </fieldset>
</div>
</fieldset>
<div>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.shields"}}</legend>
<div class="shields">
{{#each shields as |item|}}
<div class="shield" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{item.system.description}}">
{{item.name}}
</div>
<div class="item-detail" data-tooltip="Defense">
<a class="rollable" data-roll-type="shield-roll" data-roll-key="{{item.id}}" data-tooltip="Shield Defense">
<i class="lf-roll-small fa-solid fa-shield" data-roll-type="shield-roll" data-roll-key="{{item.id}}"></i>
{{upperFirst item.system.defense}}
</a>
</div>
<div class="item-detail" data-tooltip="Movement reduction">{{item.system.movementreduction}}</div>
<div class="item-detail" data-tooltip="Has cover">{{#if item.system.hascover}}Cover{{/if}}</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</div>
</section> </section>

View File

@@ -6,7 +6,7 @@
</div> </div>
<div class="intro-right"> <div class="intro-right">
<span>{{actingCharName}} - {{upperFirst rollName}}</span> <span><STRONG>{{actingCharName}} - {{upperFirst rollName}}</STRONG></span>
{{#if (match rollType "attack")}} {{#if (match rollType "attack")}}
<span>Attack roll !</span> <span>Attack roll !</span>
@@ -15,15 +15,31 @@
<span>Defense roll !</span> <span>Defense roll !</span>
{{/if}} {{/if}}
{{#if (eq rollData.favor "favor")}}
<span><strong>Favor roll</strong></span>
{{/if}}
{{#if (eq rollData.favor "disfavor")}}
<span><strong>Disfavor roll</strong></span>
{{/if}}
{{#if badResult}} {{#if badResult}}
<span>{{localize "LETHALFANTASY.Label.otherResult"}} : {{badResult}}</span> <span><strong>{{localize "LETHALFANTASY.Label.otherResult"}}</strong> : {{badResult}}</span>
{{/if}} {{/if}}
{{#if rollTarget.weapon}} {{#if rollTarget.weapon}}
<span>{{rollTarget.weapon.name}}</span> <span>{{rollTarget.weapon.name}}</span>
{{/if}} {{/if}}
<span>Formula : {{titleFormula}}</span> {{#if rollData.letItFly}}
<span>Let It Fly attack ! </span>
{{/if}}
{{#if rollData.pointBlank}}
<span>Point Blank Range Attack !</span>
{{/if}}
{{#if rollData.beyondSkill}}
<span>Beyond Skill Range Attack !</span>
{{/if}}
<span><strong>Formula</strong> : {{titleFormula}}</span>
{{#each diceResults as |result|}} {{#each diceResults as |result|}}
<span>{{result.dice}} : {{result.value}}</span> <span>{{result.dice}} : {{result.value}}</span>

View File

@@ -13,13 +13,15 @@
<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 classes="monster-hp-value"}} {{formInput 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="damage-resistance">{{localize "LETHALFANTASY.Label.damageResistance"}}</span>
{{formInput systemFields.hp.fields.damageResistance value=system.hp.damageResistance disabled=isPlayMode classes="monster-hp-value"}} {{formInput systemFields.hp.fields.damageResistance value=system.hp.damageResistance disabled=isPlayMode
classes="monster-hp-value"}}
</div> </div>
</fieldset> </fieldset>
@@ -41,7 +43,8 @@
class="lf-roll-small fa-solid fa-dice-d20"></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="rollable" data-roll-type="save" data-roll-key="dodge"><i
class="lf-roll-small fa-solid fa-dice-d20"></i> class="lf-roll-small fa-solid fa-dice-d20"></i>
@@ -65,20 +68,20 @@
class="lf-roll-small fa-solid fa-dice-d20"></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 systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value
disabled=isPlayMode}} disabled=isPlayMode}}
<span class="name"> <span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="poison"><i <a class="rollable" data-roll-type="save" data-roll-key="poison"><i
class="lf-roll-small fa-solid fa-dice-d20"></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 systemFields.saves.fields.poison.fields.value value=system.saves.poison.value
disabled=isPlayMode }} 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
class="lf-roll-small fa-solid fa-dice-d20"></i> class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.paincourage"}} {{localize "LETHALFANTASY.Label.saves.paincourage"}}
@@ -88,7 +91,7 @@
<span data-tooltip="Pain save if wound exceeds"> <span data-tooltip="Pain save if wound exceeds">
{{formField systemFields.hp.fields.painDamage value=system.hp.painDamage disabled=isPlayMode tooltip="Pain Damage"}} {{formField systemFields.hp.fields.painDamage value=system.hp.painDamage disabled=isPlayMode tooltip="Pain Damage"}}
</span> </span>-->
</div> </div>
@@ -102,19 +105,22 @@
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistTorture"><i <span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistTorture"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.resistTorture"}}</a></span> "LETHALFANTASY.Label.resistTorture"}}</a></span>
{{formField systemFields.resists.fields.resistTorture.fields.value value=system.resists.resistTorture.value {{formField systemFields.resists.fields.resistTorture.fields.value
value=system.resists.resistTorture.value
disabled=isPlayMode disabled=isPlayMode
}} }}
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistPerformance"><i <span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistPerformance"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.resistPerformance"}}</a></span> "LETHALFANTASY.Label.resistPerformance"}}</a></span>
{{formField systemFields.resists.fields.resistPerformance.fields.value value=system.resists.resistPerformance.value {{formField systemFields.resists.fields.resistPerformance.fields.value
disabled=isPlayMode value=system.resists.resistPerformance.value
disabled=isPlayMode
}} }}
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="resistIntimidation"><i <span class="name"><a class="rollable" data-roll-type="monster-skill"
class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize data-roll-key="resistIntimidation"><i class="lf-roll-small fa-solid fa-dice-d20"></i>{{localize
"LETHALFANTASY.Label.resistIntimidation"}}</a></span> "LETHALFANTASY.Label.resistIntimidation"}}</a></span>
{{formField systemFields.resists.fields.resistIntimidation.fields.value value=system.resists.resistIntimidation.value {{formField systemFields.resists.fields.resistIntimidation.fields.value
value=system.resists.resistIntimidation.value
disabled=isPlayMode }} disabled=isPlayMode }}
<span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="perception"><i <span class="name"><a class="rollable" data-roll-type="monster-skill" data-roll-key="perception"><i
@@ -157,7 +163,7 @@
<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>x{{localize "LETHALFANTASY.Label.int"}}</span> <span>{{localize "LETHALFANTASY.Label.int"}}</span>
{{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value
disabled=isPlayMode data-char-id="int" }} disabled=isPlayMode data-char-id="int" }}

View File

@@ -32,21 +32,15 @@
</select> </select>
</div> </div>
<div class="field-section">
<span class="field-name">Aim :</span>
<select name="attackerAim" data-tooltip-direction="UP">
{{selectOptions attackerAimChoices selected=attackerAim}}
</select>
</div>
</fieldSet> </fieldSet>
<fieldSet> <fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend> <legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility"> <span class="fieldset-centered">
{{selectOptions rollModes selected=visibility localize=true}} <select name="visibility">
</select> {{selectOptions rollModes selected=visibility localize=true}}
</select>
</span>
</fieldSet> </fieldSet>
</div> </div>

View File

@@ -33,15 +33,26 @@
<div class="dialog-save">Add Granted Attack Dice <div class="dialog-save">Add Granted Attack Dice
<input type="checkbox" data-action="selectGranted" name="granted"> <input type="checkbox" data-action="selectGranted" name="granted">
</div> </div>
{{#if rollTarget.weapon}}
{{#if (eq rollTarget.weapon.system.weaponType "melee")}}
{{else}}
<div class="dialog-save">Point Blank Range Attack <div class="dialog-save">Point Blank Range Attack
<input type="checkbox" data-action="selectPointBlank" name="pointBlank"> <input type="checkbox" data-action="selectPointBlank" name="pointBlankV">
</div> </div>
<div class="dialog-save">Beyond Skill Range Attack <div class="dialog-save">Beyond Skill Range Attack
<input type="checkbox" data-action="selectBeyondSkill" name="beyondSkill"> <input type="checkbox" data-action="selectBeyondSkill" name="beyondSkillV">
</div> </div>
<div class="dialog-save">Let it Fly (Pure D20E) <div class="dialog-save">Let it Fly (Pure D20E)
<input type="checkbox" data-action="selectLetItFly" name="letItFly"> <input type="checkbox" data-action="selectLetItFly" name="letItFlyV">
</div> </div>
<div class="dialog-save">Aiming
<select name="attackerAim" data-tooltip-direction="UP">
{{selectOptions attackerAimChoices selected=attackerAim}}
</select>
</div>
{{/if}}
{{/if}}
{{/if}} {{/if}}
{{#if (match rollType "defense")}} {{#if (match rollType "defense")}}
<div class="dialog-save">Add Granted Defense Dice <div class="dialog-save">Add Granted Defense Dice
@@ -81,7 +92,7 @@
{{#if rollTarget.magicUser}} {{#if rollTarget.magicUser}}
<div> <div>
<span>Save against spell (+{{rollTarget.actorModifiers.saveModifier}}) ?</span> <span>Save against spell (+{{rollTarget.actorModifiers.saveModifier}}) ?</span>
<input type="checkbox" name="saveSpell" value="saveSpell"> <input type="checkbox" name="saveSpellCheck" data-action="saveSpellCheck">
</div> </div>
{{/if}} {{/if}}
{{/if}} {{/if}}