Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
8d9cc1045c | |||
4af277d8a2 | |||
bc9f397755 | |||
264a5c7a4c |
6
LICENSE
6
LICENSE
@@ -0,0 +1,6 @@
|
|||||||
|
Code license :
|
||||||
|
|
||||||
|
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
|
|
||||||
|
This license requires that reusers give credit to the creator. It allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, for noncommercial purposes only. If others modify or adapt the material, they must license the modified material under identical terms.
|
||||||
|
|
||||||
|
@@ -3041,6 +3041,9 @@ i.fvtt-cthulhu-eternal {
|
|||||||
font-size: calc(var(--font-size-standard) * 2);
|
font-size: calc(var(--font-size-standard) * 2);
|
||||||
color: var(--color-dark-1);
|
color: var(--color-dark-1);
|
||||||
}
|
}
|
||||||
|
.li-apply-wounds {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
.dice-roll {
|
.dice-roll {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,12 @@ Hooks.once("init", function () {
|
|||||||
models,
|
models,
|
||||||
documents,
|
documents,
|
||||||
}
|
}
|
||||||
|
// Set an initiative formula for the system
|
||||||
|
CONFIG.Combat.initiative = {
|
||||||
|
formula: "@characteristics.dex.value",
|
||||||
|
decimals: 1
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
CONFIG.Actor.documentClass = documents.CthulhuEternalActor
|
CONFIG.Actor.documentClass = documents.CthulhuEternalActor
|
||||||
CONFIG.Actor.dataModels = {
|
CONFIG.Actor.dataModels = {
|
||||||
@@ -93,14 +99,14 @@ Hooks.once("init", function () {
|
|||||||
CthulhuEternalUtils.registerSettings()
|
CthulhuEternalUtils.registerSettings()
|
||||||
CthulhuEternalUtils.registerHandlebarsHelpers()
|
CthulhuEternalUtils.registerHandlebarsHelpers()
|
||||||
CthulhuEternalUtils.setupCSSRootVariables()
|
CthulhuEternalUtils.setupCSSRootVariables()
|
||||||
|
CONFIG.debug.hooks = false;
|
||||||
|
|
||||||
console.info("CTHULHU ETERNAL | System Initialized")
|
console.info("CTHULHU ETERNAL | System Initialized")
|
||||||
})
|
})
|
||||||
|
|
||||||
Hooks.once('babele.init', (babele) => {
|
Hooks.once('babele.init', (babele) => {
|
||||||
babele.setSystemTranslationsDir("compendiums");
|
babele.setSystemTranslationsDir("compendiums");
|
||||||
CthulhuEternalUtils.registerBabeleTranslations(babele);
|
CthulhuEternalUtils.registerBabeleTranslations(babele);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -165,6 +171,15 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
|
|||||||
CthulhuEternalUtils.applySANType(message, event)
|
CthulhuEternalUtils.applySANType(message, event)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if (game.user.isGM) {
|
||||||
|
$(html).find(".li-apply-wounds").each((i, btn) => {
|
||||||
|
btn.style.display = "inline"
|
||||||
|
})
|
||||||
|
$(html).find(".li-apply-wounds-select").click((event) => {
|
||||||
|
CthulhuEternalUtils.applyWounds(message, event)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -730,7 +730,8 @@
|
|||||||
"visibility": "Visibility",
|
"visibility": "Visibility",
|
||||||
"rangedRange": "Range",
|
"rangedRange": "Range",
|
||||||
"aimingLastRound": "Aiming Last Round (+20)",
|
"aimingLastRound": "Aiming Last Round (+20)",
|
||||||
"aimingWithSight": "Aiming with Sight (+20)"
|
"aimingWithSight": "Aiming with Sight (+20)",
|
||||||
|
"applyWounds": "Apply To"
|
||||||
},
|
},
|
||||||
"ChatMessage": {
|
"ChatMessage": {
|
||||||
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
|
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
|
||||||
@@ -755,6 +756,9 @@
|
|||||||
"rollDamage": "Roll Damage"
|
"rollDamage": "Roll Damage"
|
||||||
},
|
},
|
||||||
"Chat": {
|
"Chat": {
|
||||||
|
"noArmor": "No armor absorbed damage.",
|
||||||
|
"armorAbsorbed": "Armor absorbed {armor} damage.",
|
||||||
|
"woundsApplied": "Wounds applied to {name}: {effectiveWounds} (armor absorbed : {armorText})"
|
||||||
},
|
},
|
||||||
"Notifications": {
|
"Notifications": {
|
||||||
"NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era",
|
"NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era",
|
||||||
|
@@ -751,7 +751,8 @@
|
|||||||
"visibility": "Visibilité",
|
"visibility": "Visibilité",
|
||||||
"rangedRange": "Portée",
|
"rangedRange": "Portée",
|
||||||
"aimingLastRound": "Visée lors du dernier round (+20)",
|
"aimingLastRound": "Visée lors du dernier round (+20)",
|
||||||
"aimingWithSight": "Visée avec lunette (+20)"
|
"aimingWithSight": "Visée avec lunette (+20)",
|
||||||
|
"applyWounds": "Appliquer à"
|
||||||
},
|
},
|
||||||
"ChatMessage": {
|
"ChatMessage": {
|
||||||
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
|
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
|
||||||
@@ -776,6 +777,9 @@
|
|||||||
"rollDamage": "Lancer les dégâts"
|
"rollDamage": "Lancer les dégâts"
|
||||||
},
|
},
|
||||||
"Chat": {
|
"Chat": {
|
||||||
|
"armorAbsorbed": "L'armure a absorbé {armor} points de dégâts.",
|
||||||
|
"noArmor": "Pas d'armure.",
|
||||||
|
"woundsApplied": "Blessures appliquées à {name} : {effectiveWounds} (armure absorbée : {armorText})"
|
||||||
},
|
},
|
||||||
"Notifications": {
|
"Notifications": {
|
||||||
"NoWeaponSkill": "Aucune compétence associée n'a été trouvé pour cette arme. Vérifier la définition de l'arme ainsi que l'époque configurée.",
|
"NoWeaponSkill": "Aucune compétence associée n'a été trouvé pour cette arme. Vérifier la définition de l'arme ainsi que l'époque configurée.",
|
||||||
|
@@ -99,19 +99,19 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
|
|||||||
case "main":
|
case "main":
|
||||||
break
|
break
|
||||||
case "skills": {
|
case "skills": {
|
||||||
context.tab = context.tabs.skills
|
context.tab = context.tabs.skills
|
||||||
let tmpSkills = doc.itemTypes.skill
|
let tmpSkills = doc.itemTypes.skill
|
||||||
tmpSkills.sort((a, b) => a.name.localeCompare(b.name))
|
tmpSkills.sort((a, b) => a.name.localeCompare(b.name))
|
||||||
const nbCols = 3;
|
const nbCols = 3;
|
||||||
const nbRows = Math.ceil(tmpSkills.length / nbCols);
|
const nbRows = Math.ceil(tmpSkills.length / nbCols);
|
||||||
let skillsColumns = Array.from({ length: nbRows }, (_, rowIdx) =>
|
let skillsColumns = Array.from({ length: nbRows }, (_, rowIdx) =>
|
||||||
Array.from({ length: nbCols }, (_, colIdx) => tmpSkills[rowIdx + colIdx * nbRows]).filter(Boolean)
|
Array.from({ length: nbCols }, (_, colIdx) => tmpSkills[rowIdx + colIdx * nbRows]).filter(Boolean)
|
||||||
);
|
);
|
||||||
// Merge skillsColumns in a single flat array
|
// Merge skillsColumns in a single flat array
|
||||||
skillsColumns = skillsColumns.flat().filter(Boolean);
|
skillsColumns = skillsColumns.flat().filter(Boolean);
|
||||||
console.log("Skills columns:", skillsColumns);
|
//DEBUG : console.log("Skills columns:", skillsColumns);
|
||||||
context.skills = skillsColumns
|
context.skills = skillsColumns
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case "equipment":
|
case "equipment":
|
||||||
context.tab = context.tabs.equipment
|
context.tab = context.tabs.equipment
|
||||||
|
@@ -23,8 +23,10 @@ export default class CthulhuEternalActor extends Actor {
|
|||||||
data.items.push(skill.toObject())
|
data.items.push(skill.toObject())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.items.push({ type:"weapon", img: "systems/fvtt-cthulhu-eternal/assets/icons/icon_fist.svg",
|
data.items.push({
|
||||||
name: game.i18n.localize("CTHULHUETERNAL.Label.Unarmed"), system: { damage: "1d4-1", weaponType: "unarmed" } })
|
type: "weapon", img: "systems/fvtt-cthulhu-eternal/assets/icons/icon_fist.svg",
|
||||||
|
name: game.i18n.localize("CTHULHUETERNAL.Label.Unarmed"), system: { damage: "1d4-1", weaponType: "unarmed" }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.create(data, options);
|
return super.create(data, options);
|
||||||
@@ -43,6 +45,39 @@ export default class CthulhuEternalActor extends Actor {
|
|||||||
return super._onUpdate(changed, options, userId)
|
return super._onUpdate(changed, options, userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
applyWounds(woundData) {
|
||||||
|
let updates = {}
|
||||||
|
// Get available armor
|
||||||
|
let armors = this.items.filter(i => i.type === "armor" && i.system.equipped)
|
||||||
|
let totalArmor = 0
|
||||||
|
for (let armor of armors) {
|
||||||
|
totalArmor += armor.system.protection
|
||||||
|
}
|
||||||
|
let effectiveWounds = Math.max(woundData.rollResult - totalArmor, 0)
|
||||||
|
if (woundData.isLethal) {
|
||||||
|
effectiveWounds = this.system.hp.value // Killed!
|
||||||
|
}
|
||||||
|
// Apply armor reduction
|
||||||
|
let hp = Math.max(this.system.hp.value - effectiveWounds, 0)
|
||||||
|
if (this.system.hp.value !== hp) {
|
||||||
|
updates[`system.hp.value`] = hp
|
||||||
|
}
|
||||||
|
if (Object.keys(updates).length > 0) {
|
||||||
|
this.update(updates)
|
||||||
|
}
|
||||||
|
// Chat message for GM only
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let armorText = totalArmor > 0 ? game.i18n.format("CTHULHUETERNAL.Chat.armorAbsorbed", { armor: totalArmor }) : game.i18n.localize("CTHULHUETERNAL.Chat.noArmor")
|
||||||
|
ChatMessage.create({
|
||||||
|
user: game.user.id,
|
||||||
|
speaker: { alias: this.name },
|
||||||
|
rollMode: "gmroll",
|
||||||
|
content: game.i18n.format("CTHULHUETERNAL.Chat.woundsApplied", { name: this.name, effectiveWounds, armorText }),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async createEmbeddedDocuments(embeddedName, data, operation) {
|
async createEmbeddedDocuments(embeddedName, data, operation) {
|
||||||
let newData = []
|
let newData = []
|
||||||
if (embeddedName === "Item") {
|
if (embeddedName === "Item") {
|
||||||
@@ -71,18 +106,18 @@ export default class CthulhuEternalActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _preCreate(data, options, user) {
|
async _preCreate(data, options, user) {
|
||||||
await super._preCreate(data, options, user)
|
await super._preCreate(data, options, user)
|
||||||
|
|
||||||
// Configure prototype token settings
|
// Configure prototype token settings
|
||||||
const prototypeToken = {}
|
const prototypeToken = {}
|
||||||
if (this.type === "protagonist") {
|
if (this.type === "protagonist") {
|
||||||
Object.assign(prototypeToken, {
|
Object.assign(prototypeToken, {
|
||||||
sight: { enabled: true },
|
sight: { enabled: true },
|
||||||
actorLink: true,
|
actorLink: true,
|
||||||
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
|
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
|
||||||
})
|
})
|
||||||
this.updateSource({ prototypeToken })
|
this.updateSource({ prototypeToken })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -146,6 +146,15 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
|
|
||||||
ammoUsed = Number(ammoUsed)
|
ammoUsed = Number(ammoUsed)
|
||||||
|
|
||||||
|
let combatants = []
|
||||||
|
if (game?.combat?.combatants) {
|
||||||
|
for (let c of game.combat.combatants) {
|
||||||
|
if (c.actor.id !== actor.id) {
|
||||||
|
combatants.push({ id: c.actor.id, name: c.name })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (weapon.system.lethality > 0) {
|
if (weapon.system.lethality > 0) {
|
||||||
let lethalityRoll = new Roll("1d100")
|
let lethalityRoll = new Roll("1d100")
|
||||||
await lethalityRoll.evaluate()
|
await lethalityRoll.evaluate()
|
||||||
@@ -159,20 +168,22 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
}
|
}
|
||||||
let wounds = Math.floor(lethalityRoll.total / 10) + (lethalityRoll.total % 10)
|
let wounds = Math.floor(lethalityRoll.total / 10) + (lethalityRoll.total % 10)
|
||||||
let msgData = {
|
let msgData = {
|
||||||
|
actorId: actor.id,
|
||||||
weapon,
|
weapon,
|
||||||
wounds,
|
wounds,
|
||||||
lethalScore,
|
lethalScore,
|
||||||
isLethal,
|
isLethal,
|
||||||
ammoUsed,
|
ammoUsed,
|
||||||
rollResult: lethalityRoll.total,
|
rollResult: lethalityRoll.total,
|
||||||
|
combatants: combatants
|
||||||
}
|
}
|
||||||
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-lethal-damage.hbs", msgData)
|
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-lethal-damage.hbs", msgData)
|
||||||
ChatMessage.create({
|
let msg = await ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
content: flavor,
|
content: flavor,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||||
}, { rollMode: options.rollMode, create: true })
|
}, { rollMode: options.rollMode, create: true })
|
||||||
|
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,21 +201,24 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
"system.ammo.value": Math.max(0, weapon.system.ammo.value - ammoUsed)
|
"system.ammo.value": Math.max(0, weapon.system.ammo.value - ammoUsed)
|
||||||
}])
|
}])
|
||||||
}
|
}
|
||||||
console.log("Weapon damage formula", formula, weapon, ammoUsed)
|
|
||||||
let damageRoll = new Roll(formula)
|
let damageRoll = new Roll(formula)
|
||||||
await damageRoll.evaluate()
|
await damageRoll.evaluate()
|
||||||
let msgData = {
|
let msgData = {
|
||||||
weapon,
|
actorId: actor.id,
|
||||||
formula,
|
weapon,
|
||||||
ammoUsed,
|
formula,
|
||||||
rollResult: damageRoll.total,
|
ammoUsed,
|
||||||
}
|
rollResult: damageRoll.total,
|
||||||
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData)
|
combatants: combatants
|
||||||
ChatMessage.create({
|
}
|
||||||
user: game.user.id,
|
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData)
|
||||||
content: flavor,
|
let msg = await ChatMessage.create({
|
||||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
user: game.user.id,
|
||||||
}, { rollMode: options.rollMode, create: true })
|
content: flavor,
|
||||||
|
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||||
|
}, { rollMode: options.rollMode, create: true })
|
||||||
|
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -90,7 +90,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
prepareDerivedData() {
|
prepareDerivedData() {
|
||||||
super.prepareDerivedData();
|
super.prepareDerivedData();
|
||||||
|
|
||||||
if (!game.user.isGM ) {
|
if (!game.user.isGM) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,12 +140,15 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
if (!this.san.breakingPointReached && this.san.value <= this.san.breakingPoint) {
|
if (!this.san.breakingPointReached && this.san.value <= this.san.breakingPoint) {
|
||||||
updates[`system.san.breakingPointReached`] = true
|
updates[`system.san.breakingPointReached`] = true
|
||||||
this.san.breakingPointReached = true // Force local update to true
|
this.san.breakingPointReached = true // Force local update to true
|
||||||
ChatMessage.create({
|
let w = game.users.find(u => u.character?.name === this.parent?.name)
|
||||||
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.breakingPointReached", { bp: this.san.breakingPoint, san: this.san.value })}</p>`,
|
if (w) {
|
||||||
speaker: ChatMessage.getSpeaker({ actor: this.parent }),
|
ChatMessage.create({
|
||||||
// Get the user id of the actor owner
|
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.breakingPointReached", { bp: this.san.breakingPoint, san: this.san.value })}</p>`,
|
||||||
whisper: [game.users.find(u => u.character?.name === this.parent?.name).id ]
|
speaker: ChatMessage.getSpeaker({ actor: this.parent }),
|
||||||
})
|
// Get the user id of the actor owner
|
||||||
|
whisper: [w.id]
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unconsciousness management
|
// Unconsciousness management
|
||||||
@@ -207,7 +210,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
actorName: this.parent.name,
|
actorName: this.parent.name,
|
||||||
adaptedToHelplessness: this.biodata.adaptedToHelplessness,
|
adaptedToHelplessness: this.biodata.adaptedToHelplessness,
|
||||||
adaptedToViolence: this.biodata.adaptedToViolence,
|
adaptedToViolence: this.biodata.adaptedToViolence,
|
||||||
... rollData
|
...rollData
|
||||||
}
|
}
|
||||||
let updates = {}
|
let updates = {}
|
||||||
let template = ""
|
let template = ""
|
||||||
@@ -224,7 +227,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
}
|
}
|
||||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-temp-insanity.hbs"
|
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-temp-insanity.hbs"
|
||||||
|
|
||||||
} else if (rollData.sanLoss === 0) { // Manage if sanLoss is 0
|
} else if (rollData.sanLoss === 0) { // Manage if sanLoss is 0
|
||||||
rollData.resetMsg = false
|
rollData.resetMsg = false
|
||||||
if (rollData.sanType === "violence" && !this.biodata.adaptedToViolence) {
|
if (rollData.sanType === "violence" && !this.biodata.adaptedToViolence) {
|
||||||
updates[`system.san.violence`] = [false, false, false]
|
updates[`system.san.violence`] = [false, false, false]
|
||||||
@@ -236,7 +239,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
}
|
}
|
||||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-0.hbs"
|
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-0.hbs"
|
||||||
|
|
||||||
} else if (rollData.sanType === "violence" ) {
|
} else if (rollData.sanType === "violence") {
|
||||||
// Set the first false element of the violence array to true
|
// Set the first false element of the violence array to true
|
||||||
let violence = this.san.violence.slice()
|
let violence = this.san.violence.slice()
|
||||||
let index = violence.findIndex(v => !v)
|
let index = violence.findIndex(v => !v)
|
||||||
@@ -251,7 +254,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
updates[`system.san.violence`] = [false, false, false]
|
updates[`system.san.violence`] = [false, false, false]
|
||||||
msgData.adaptedToViolence = true
|
msgData.adaptedToViolence = true
|
||||||
}
|
}
|
||||||
} else if (rollData.sanType === "helplessness" ) {
|
} else if (rollData.sanType === "helplessness") {
|
||||||
// If sanType is "helplessness" and adapted to helplessness, set the first false element of the helplessness array to true
|
// If sanType is "helplessness" and adapted to helplessness, set the first false element of the helplessness array to true
|
||||||
let helplessness = this.san.helplessness.slice()
|
let helplessness = this.san.helplessness.slice()
|
||||||
let index = helplessness.findIndex(h => !h)
|
let index = helplessness.findIndex(h => !h)
|
||||||
@@ -266,7 +269,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
updates[`system.san.helplessness`] = [false, false, false]
|
updates[`system.san.helplessness`] = [false, false, false]
|
||||||
msgData.adaptedToHelplessness = true
|
msgData.adaptedToHelplessness = true
|
||||||
}
|
}
|
||||||
} else if (rollData.sanType === "unnatural" ) {
|
} else if (rollData.sanType === "unnatural") {
|
||||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-unnatural.hbs"
|
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-unnatural.hbs"
|
||||||
} else {
|
} else {
|
||||||
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-none.hbs"
|
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-none.hbs"
|
||||||
@@ -354,15 +357,15 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
*/
|
*/
|
||||||
async roll(rollType, rollItem) {
|
async roll(rollType, rollItem) {
|
||||||
|
|
||||||
if (this.hp.dead ) {
|
if (this.hp.dead) {
|
||||||
// Warn with chat message
|
// Warn with chat message
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.deadWarning", {con: this.characteristics.con.value} )}</p>`,
|
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.deadWarning", { con: this.characteristics.con.value })}</p>`,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: this.parent })
|
speaker: ChatMessage.getSpeaker({ actor: this.parent })
|
||||||
})
|
})
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
if (this.hp.unconscious ) {
|
if (this.hp.unconscious) {
|
||||||
// Warn with chat message
|
// Warn with chat message
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `<p>${game.i18n.localize("CTHULHUETERNAL.Label.unconsciousWarning")}</p>`,
|
content: `<p>${game.i18n.localize("CTHULHUETERNAL.Label.unconsciousWarning")}</p>`,
|
||||||
|
@@ -229,7 +229,7 @@ export default class CthulhuEternalUtils {
|
|||||||
let healingFormula = rollData.rollItem.system.healingFormula
|
let healingFormula = rollData.rollItem.system.healingFormula
|
||||||
let healingMsg = "CTHULHUETERNAL.Label.healingRoll"
|
let healingMsg = "CTHULHUETERNAL.Label.healingRoll"
|
||||||
if (rollData.resultType === "successCritical") {
|
if (rollData.resultType === "successCritical") {
|
||||||
healingFormula += " * 2"
|
healingFormula += " * 2"
|
||||||
}
|
}
|
||||||
if (rollData.resultType === "failureCritical") {
|
if (rollData.resultType === "failureCritical") {
|
||||||
healingMsg = "CTHULHUETERNAL.Label.healingRollFailure"
|
healingMsg = "CTHULHUETERNAL.Label.healingRollFailure"
|
||||||
@@ -268,11 +268,11 @@ export default class CthulhuEternalUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async registerBabeleTranslations(babele) {
|
static async registerBabeleTranslations(babele) {
|
||||||
babele.registerConverters( {
|
babele.registerConverters({
|
||||||
'translateRangeUnit': (originalValue) => {
|
'translateRangeUnit': (originalValue) => {
|
||||||
return CthulhuEternalUtils.translateRangeUnit(originalValue)
|
return CthulhuEternalUtils.translateRangeUnit(originalValue)
|
||||||
},
|
},
|
||||||
'translateRange' : (originalValue) => {
|
'translateRange': (originalValue) => {
|
||||||
return CthulhuEternalUtils.translateRange(originalValue)
|
return CthulhuEternalUtils.translateRange(originalValue)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -280,7 +280,7 @@ export default class CthulhuEternalUtils {
|
|||||||
|
|
||||||
static async damageRoll(rollMessage, formula = null) {
|
static async damageRoll(rollMessage, formula = null) {
|
||||||
let rollData = rollMessage.rolls[0]?.options?.rollData
|
let rollData = rollMessage.rolls[0]?.options?.rollData
|
||||||
let actor = game.actors.get(rollData.actorId)
|
let actor = game.actors.get(rollData.actorId)
|
||||||
if (!actor) {
|
if (!actor) {
|
||||||
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noActorFound"))
|
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noActorFound"))
|
||||||
return
|
return
|
||||||
@@ -336,8 +336,8 @@ export default class CthulhuEternalUtils {
|
|||||||
rejectClose: false, // Click on Close button will not launch an error
|
rejectClose: false, // Click on Close button will not launch an error
|
||||||
render: (event, dialog) => {
|
render: (event, dialog) => {
|
||||||
$(".nudged-score-select").change(event => {
|
$(".nudged-score-select").change(event => {
|
||||||
dialogContext.nudgedValue = Number(event.target.value)+1
|
dialogContext.nudgedValue = Number(event.target.value) + 1
|
||||||
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
|
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
|
||||||
$("#nudged-wp-cost").val(dialogContext.wpCost)
|
$("#nudged-wp-cost").val(dialogContext.wpCost)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -375,4 +375,24 @@ export default class CthulhuEternalUtils {
|
|||||||
document.documentElement.style.setProperty('--background-image-base', `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/${era}_background_main.webp")`);
|
document.documentElement.style.setProperty('--background-image-base', `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/${era}_background_main.webp")`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static applyWounds(message, event) {
|
||||||
|
let woundData = message.getFlag("fvtt-cthulhu-eternal", "woundData")
|
||||||
|
if (!woundData) {
|
||||||
|
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noRollDataFound"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let actor = game.actors.get(woundData.actorId)
|
||||||
|
if (!actor) {
|
||||||
|
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noActorFound"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Get the targetted actorId from the HTML select event
|
||||||
|
let targetActorId = event.target.value
|
||||||
|
let targetActor = game.actors.get(targetActorId)
|
||||||
|
if (!targetActor) {
|
||||||
|
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noTargetActorFound") + targetActorId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
targetActor.applyWounds(woundData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000230
|
MANIFEST-000249
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
2025/07/29-18:28:11.485462 7fbfdeffd6c0 Recovering log #227
|
2025/10/01-10:24:47.689741 7fc4987f86c0 Recovering log #246
|
||||||
2025/07/29-18:28:11.542963 7fbfdeffd6c0 Delete type=3 #225
|
2025/10/01-10:24:47.787870 7fc4987f86c0 Delete type=3 #244
|
||||||
2025/07/29-18:28:11.543020 7fbfdeffd6c0 Delete type=0 #227
|
2025/10/01-10:24:47.787986 7fc4987f86c0 Delete type=0 #246
|
||||||
2025/07/29-18:28:25.939648 7fbd3ffff6c0 Level-0 table #233: started
|
2025/10/01-11:24:12.555415 7fc497ff76c0 Level-0 table #252: started
|
||||||
2025/07/29-18:28:25.939685 7fbd3ffff6c0 Level-0 table #233: 0 bytes OK
|
2025/10/01-11:24:12.555461 7fc497ff76c0 Level-0 table #252: 0 bytes OK
|
||||||
2025/07/29-18:28:25.996353 7fbd3ffff6c0 Delete type=0 #231
|
2025/10/01-11:24:12.565317 7fc497ff76c0 Delete type=0 #250
|
||||||
2025/07/29-18:28:25.996608 7fbd3ffff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
2025/10/01-11:24:12.577205 7fc497ff76c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
2025/07/29-17:56:07.304105 7fbfddffb6c0 Delete type=3 #1
|
2025/10/01-09:23:25.493413 7fc499ffb6c0 Delete type=3 #1
|
||||||
2025/07/29-18:20:36.901079 7fbd3ffff6c0 Level-0 table #228: started
|
2025/10/01-09:24:30.037985 7fc497ff76c0 Level-0 table #247: started
|
||||||
2025/07/29-18:20:36.901119 7fbd3ffff6c0 Level-0 table #228: 0 bytes OK
|
2025/10/01-09:24:30.038031 7fc497ff76c0 Level-0 table #247: 0 bytes OK
|
||||||
2025/07/29-18:20:36.907068 7fbd3ffff6c0 Delete type=0 #226
|
2025/10/01-09:24:30.044462 7fc497ff76c0 Delete type=0 #245
|
||||||
2025/07/29-18:20:36.913035 7fbd3ffff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1
|
2025/10/01-09:24:30.069660 7fc497ff76c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1
|
||||||
2025/07/29-18:20:36.913051 7fbd3ffff6c0 Compacting 1@0 + 0@1 files
|
2025/10/01-09:24:30.069672 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||||
2025/07/29-18:20:36.917150 7fbd3ffff6c0 Generated table #229@0: 26 keys, 60964 bytes
|
2025/10/01-09:24:30.073695 7fc497ff76c0 Generated table #248@0: 26 keys, 60964 bytes
|
||||||
2025/07/29-18:20:36.917172 7fbd3ffff6c0 Compacted 1@0 + 0@1 files => 60964 bytes
|
2025/10/01-09:24:30.073722 7fc497ff76c0 Compacted 1@0 + 0@1 files => 60964 bytes
|
||||||
2025/07/29-18:20:36.923988 7fbd3ffff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
2025/10/01-09:24:30.080151 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||||
2025/07/29-18:20:36.924086 7fbd3ffff6c0 Delete type=2 #60
|
2025/10/01-09:24:30.080234 7fc497ff76c0 Delete type=2 #242
|
||||||
2025/07/29-18:20:36.941818 7fbd3ffff6c0 Manual compaction at level-0 from '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
2025/10/01-09:24:30.086925 7fc497ff76c0 Manual compaction at level-0 from '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||||
|
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000399
|
MANIFEST-000418
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
2025/07/29-18:28:11.326583 7fbfdd7fa6c0 Recovering log #396
|
2025/10/01-10:24:47.499257 7fc4997fa6c0 Recovering log #415
|
||||||
2025/07/29-18:28:11.422544 7fbfdd7fa6c0 Delete type=3 #394
|
2025/10/01-10:24:47.596647 7fc4997fa6c0 Delete type=3 #413
|
||||||
2025/07/29-18:28:11.422600 7fbfdd7fa6c0 Delete type=0 #396
|
2025/10/01-10:24:47.596724 7fc4997fa6c0 Delete type=0 #415
|
||||||
2025/07/29-18:28:25.859630 7fbd3ffff6c0 Level-0 table #402: started
|
2025/10/01-11:24:12.545465 7fc497ff76c0 Level-0 table #421: started
|
||||||
2025/07/29-18:28:25.859675 7fbd3ffff6c0 Level-0 table #402: 0 bytes OK
|
2025/10/01-11:24:12.545499 7fc497ff76c0 Level-0 table #421: 0 bytes OK
|
||||||
2025/07/29-18:28:25.902834 7fbd3ffff6c0 Delete type=0 #400
|
2025/10/01-11:24:12.555310 7fc497ff76c0 Delete type=0 #419
|
||||||
2025/07/29-18:28:25.996583 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
2025/10/01-11:24:12.577192 7fc497ff76c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
2025/07/29-17:56:07.265693 7fbfddffb6c0 Delete type=3 #1
|
2025/10/01-09:23:25.444068 7fc499ffb6c0 Delete type=3 #1
|
||||||
2025/07/29-18:20:36.941849 7fbd3ffff6c0 Level-0 table #397: started
|
2025/10/01-09:24:30.024822 7fc497ff76c0 Level-0 table #416: started
|
||||||
2025/07/29-18:20:36.941895 7fbd3ffff6c0 Level-0 table #397: 0 bytes OK
|
2025/10/01-09:24:30.024870 7fc497ff76c0 Level-0 table #416: 0 bytes OK
|
||||||
2025/07/29-18:20:36.948373 7fbd3ffff6c0 Delete type=0 #395
|
2025/10/01-09:24:30.030665 7fc497ff76c0 Delete type=0 #414
|
||||||
2025/07/29-18:20:36.960564 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at '!items!zvoUByzWSWZ87fxA' @ 1281 : 1
|
2025/10/01-09:24:30.044587 7fc497ff76c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at '!items!zvoUByzWSWZ87fxA' @ 1281 : 1
|
||||||
2025/07/29-18:20:36.960577 7fbd3ffff6c0 Compacting 1@0 + 0@1 files
|
2025/10/01-09:24:30.044598 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||||
2025/07/29-18:20:36.968003 7fbd3ffff6c0 Generated table #398@0: 556 keys, 320457 bytes
|
2025/10/01-09:24:30.051264 7fc497ff76c0 Generated table #417@0: 556 keys, 320457 bytes
|
||||||
2025/07/29-18:20:36.968044 7fbd3ffff6c0 Compacted 1@0 + 0@1 files => 320457 bytes
|
2025/10/01-09:24:30.051285 7fc497ff76c0 Compacted 1@0 + 0@1 files => 320457 bytes
|
||||||
2025/07/29-18:20:36.974076 7fbd3ffff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
2025/10/01-09:24:30.058278 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||||
2025/07/29-18:20:36.974209 7fbd3ffff6c0 Delete type=2 #277
|
2025/10/01-09:24:30.058439 7fc497ff76c0 Delete type=2 #411
|
||||||
2025/07/29-18:20:36.980862 7fbd3ffff6c0 Manual compaction at level-0 from '!items!zvoUByzWSWZ87fxA' @ 1281 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
2025/10/01-09:24:30.086897 7fc497ff76c0 Manual compaction at level-0 from '!items!zvoUByzWSWZ87fxA' @ 1281 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||||
|
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000045
|
MANIFEST-000064
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
2025/07/29-18:28:11.426069 7fbfde7fc6c0 Recovering log #42
|
2025/10/01-10:24:47.601344 7fc499ffb6c0 Recovering log #61
|
||||||
2025/07/29-18:28:11.482529 7fbfde7fc6c0 Delete type=3 #40
|
2025/10/01-10:24:47.686801 7fc499ffb6c0 Delete type=3 #59
|
||||||
2025/07/29-18:28:11.482582 7fbfde7fc6c0 Delete type=0 #42
|
2025/10/01-10:24:47.686869 7fc499ffb6c0 Delete type=0 #61
|
||||||
2025/07/29-18:28:25.996691 7fbd3ffff6c0 Level-0 table #48: started
|
2025/10/01-11:24:12.535658 7fc497ff76c0 Level-0 table #67: started
|
||||||
2025/07/29-18:28:25.996717 7fbd3ffff6c0 Level-0 table #48: 0 bytes OK
|
2025/10/01-11:24:12.535725 7fc497ff76c0 Level-0 table #67: 0 bytes OK
|
||||||
2025/07/29-18:28:26.032508 7fbd3ffff6c0 Delete type=0 #46
|
2025/10/01-11:24:12.545352 7fc497ff76c0 Delete type=0 #65
|
||||||
2025/07/29-18:28:26.140428 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
2025/10/01-11:24:12.577171 7fc497ff76c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
2025/07/29-17:56:07.286370 7fbfdeffd6c0 Delete type=3 #1
|
2025/10/01-09:23:25.469063 7fc499ffb6c0 Delete type=3 #1
|
||||||
2025/07/29-18:20:36.907148 7fbd3ffff6c0 Level-0 table #43: started
|
2025/10/01-09:24:30.030754 7fc497ff76c0 Level-0 table #62: started
|
||||||
2025/07/29-18:20:36.907174 7fbd3ffff6c0 Level-0 table #43: 0 bytes OK
|
2025/10/01-09:24:30.030783 7fc497ff76c0 Level-0 table #62: 0 bytes OK
|
||||||
2025/07/29-18:20:36.912933 7fbd3ffff6c0 Delete type=0 #41
|
2025/10/01-09:24:30.037809 7fc497ff76c0 Delete type=0 #60
|
||||||
2025/07/29-18:20:36.924240 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at '!items!zyxA9DhO36t5OBDv' @ 55 : 1
|
2025/10/01-09:24:30.058634 7fc497ff76c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at '!items!zyxA9DhO36t5OBDv' @ 55 : 1
|
||||||
2025/07/29-18:20:36.924252 7fbd3ffff6c0 Compacting 1@0 + 0@1 files
|
2025/10/01-09:24:30.058646 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||||
2025/07/29-18:20:36.928859 7fbd3ffff6c0 Generated table #44@0: 362 keys, 93592 bytes
|
2025/10/01-09:24:30.063565 7fc497ff76c0 Generated table #63@0: 362 keys, 93592 bytes
|
||||||
2025/07/29-18:20:36.928870 7fbd3ffff6c0 Compacted 1@0 + 0@1 files => 93592 bytes
|
2025/10/01-09:24:30.063591 7fc497ff76c0 Compacted 1@0 + 0@1 files => 93592 bytes
|
||||||
2025/07/29-18:20:36.935549 7fbd3ffff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
2025/10/01-09:24:30.069446 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||||
2025/07/29-18:20:36.935675 7fbd3ffff6c0 Delete type=2 #35
|
2025/10/01-09:24:30.069529 7fc497ff76c0 Delete type=2 #57
|
||||||
2025/07/29-18:20:36.941835 7fbd3ffff6c0 Manual compaction at level-0 from '!items!zyxA9DhO36t5OBDv' @ 55 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
2025/10/01-09:24:30.086915 7fc497ff76c0 Manual compaction at level-0 from '!items!zyxA9DhO36t5OBDv' @ 55 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||||
|
Binary file not shown.
@@ -11,8 +11,8 @@
|
|||||||
@import "weapon.less";
|
@import "weapon.less";
|
||||||
@import "armor.less";
|
@import "armor.less";
|
||||||
@import "motivation.less";
|
@import "motivation.less";
|
||||||
@import "mentaldisorder.less";
|
@import "mentaldisorder.less";
|
||||||
@import "bond.less";
|
@import "bond.less";
|
||||||
@import "chat.less";
|
@import "chat.less";
|
||||||
@import "gear.less";
|
@import "gear.less";
|
||||||
@import "arcane.less";
|
@import "arcane.less";
|
||||||
@@ -21,4 +21,4 @@
|
|||||||
@import "tome.less";
|
@import "tome.less";
|
||||||
}
|
}
|
||||||
|
|
||||||
@import "roll.less";
|
@import "roll.less";
|
||||||
|
@@ -53,6 +53,10 @@
|
|||||||
color: var(--color-dark-1);
|
color: var(--color-dark-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.li-apply-wounds {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
&.dice-roll {
|
&.dice-roll {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
@@ -70,7 +74,7 @@
|
|||||||
border: 0px;
|
border: 0px;
|
||||||
}
|
}
|
||||||
.intro-chat {
|
.intro-chat {
|
||||||
color:var(--color-dark-1);
|
color: var(--color-dark-1);
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -91,20 +95,20 @@
|
|||||||
li {
|
li {
|
||||||
margin: 0 10px;
|
margin: 0 10px;
|
||||||
font-family: var(--font-primary);
|
font-family: var(--font-primary);
|
||||||
font-size: calc(var(--font-size-standard) * 1.0);
|
font-size: calc(var(--font-size-standard) * 1);
|
||||||
}
|
}
|
||||||
.nudge-roll {
|
.nudge-roll {
|
||||||
font-size: calc(var(--font-size-standard) * 1.0);
|
font-size: calc(var(--font-size-standard) * 1);
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.healing-roll {
|
.healing-roll {
|
||||||
font-size: calc(var(--font-size-standard) * 1.0);
|
font-size: calc(var(--font-size-standard) * 1);
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.roll-damage {
|
.roll-damage {
|
||||||
font-size: calc(var(--font-size-standard) * 1.0);
|
font-size: calc(var(--font-size-standard) * 1);
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<div class="chat-lethal-damage">
|
<div class="chat-lethal-damage">
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.lethalityRoll"}}</strong></li>
|
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.lethalityRoll"}}</strong></li>
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{lethalScore}})</li>
|
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{lethalScore}})</li>
|
||||||
|
|
||||||
|
|
||||||
{{#if weapon.system.selectiveFireChoice}}
|
{{#if weapon.system.selectiveFireChoice}}
|
||||||
@@ -21,12 +21,20 @@
|
|||||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
<li class="li-apply-wounds">
|
||||||
|
<button type="button" class="apply-wounds">{{localize "CTHULHUETERNAL.Label.applyWounds"}}</button>
|
||||||
|
<select name="combatant" class="roll-skill-modifier">
|
||||||
|
{{selectOptions combatants valueAttr="id" labelAttr="name"}}
|
||||||
|
</select>
|
||||||
|
</li>
|
||||||
|
|
||||||
{{#if isLethal}}
|
{{#if isLethal}}
|
||||||
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityLethal"}}</li>
|
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityLethal"}}</li>
|
||||||
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityWounded"}}</li>
|
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityWounded"}}</li>
|
||||||
{{else}}
|
{{else}}
|
||||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotLethal"}}</li>
|
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotLethal"}}</li>
|
||||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotWounded"}}: <strong>{{wounds}}</strong></li>
|
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotWounded"}}: <strong>{{wounds}}</strong>
|
||||||
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<div class="chat-lethal-damage">
|
<div class="chat-lethal-damage">
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.damageRoll"}}</strong></li>
|
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.damageRoll"}}</strong></li>
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{formula}})</li>
|
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{formula}})</li>
|
||||||
|
|
||||||
{{#if (gt weapon.system.killRadius 0)}}
|
{{#if (gt weapon.system.killRadius 0)}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
||||||
@@ -12,11 +12,23 @@
|
|||||||
{{#if (gt weapon.system.armorPiercing 0)}}
|
{{#if (gt weapon.system.armorPiercing 0)}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{#if (gt weapon.system.penetration 0)}}
|
||||||
|
<li>{{localize "CTHULHUETERNAL.Label.penetration"}} : {{weapon.system.penetration}}</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if ammoUsed}}
|
{{#if ammoUsed}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.damageMessage"}}: <strong>{{rollResult}}</strong></li>
|
|
||||||
|
<li class="li-apply-wounds">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.applyWounds"}}
|
||||||
|
<select name="combatant" class="li-apply-wounds-select">
|
||||||
|
{{selectOptions combatants valueAttr="id" labelAttr="name"}}
|
||||||
|
</select>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.damageMessage"}}: <strong>{{rollResult}}</strong>
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user