diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml
index 358801a..611bcba 100644
--- a/.gitea/workflows/release.yaml
+++ b/.gitea/workflows/release.yaml
@@ -60,4 +60,4 @@ jobs:
manifest: 'https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal/releases/download/latest/system.json'
notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-cthulhu-eternal.zip'
compatibility-minimum: '13'
- compatibility-verified: '13'
\ No newline at end of file
+ compatibility-verified: '14'
\ No newline at end of file
diff --git a/cthulhu-eternal.mjs b/cthulhu-eternal.mjs
index 948d53d..e89c61b 100644
--- a/cthulhu-eternal.mjs
+++ b/cthulhu-eternal.mjs
@@ -170,6 +170,9 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
$(html).find(".healing-roll").each((i, btn) => {
btn.style.display = "inline"
})
+ $(html).find(".worn-weapon-check").each((i, btn) => {
+ btn.style.display = "inline"
+ })
if (game.user.isGM) {
$(html).find(".opposed-roll").each((i, btn) => {
btn.style.display = "inline"
@@ -185,6 +188,9 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
$(html).find(".healing-roll").click((event) => {
CthulhuEternalUtils.healingRoll(message)
})
+ $(html).find(".worn-weapon-check").click((event) => {
+ CthulhuEternalUtils.wornWeaponCheck(message)
+ })
$(html).find(".san-loose").click((event) => {
CthulhuEternalUtils.applySANLoss(message, event)
})
diff --git a/lang/en.json b/lang/en.json
index 15d66b0..5c6dcd0 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -571,6 +571,8 @@
}
},
"Label": {
+ "JunkWeapon": "This weapon is in 'Junk' state, -20% applied. Critical failure on a roll of 96-100",
+ "WornWeapon": "This weapon is 'Worn', a Luck roll will be performed.",
"noTarget": "No target selected",
"noDefenseRoll": "No defense roll available",
"opposedRoll": "Opposed Roll",
@@ -606,6 +608,10 @@
"rollNudge": "Roll Nudge",
"rollDamage": "Roll Damage",
"rollHealing": "Roll Healing",
+ "wornWeaponCheck": "Check Weapon Condition",
+ "wornWeaponCheckTitle": "Worn Weapon Condition Check",
+ "wornWeaponCheckSuccess": "{weapon}: Luck roll succeeded ({roll}/50) - Weapon remains worn.",
+ "wornWeaponCheckFailure": "{weapon}: Luck roll failed ({roll}/50) - Weapon became junk!",
"result": "Result",
"damageMessage": "Damage to apply",
"lethalityRoll": "Lethality Roll",
@@ -617,6 +623,7 @@
"ZeroWP": "Zero WP : Automatic failure (ie 0%)",
"LowWP": "Low WP",
"Exhausted": "Exhausted",
+ "wornWeaponWarning": "Worn weapon: Don't forget to make the luck roll after the attack!",
"creature": "Creature",
"Rituals": "Rituals",
"Tomes": "Tomes",
@@ -814,6 +821,8 @@
"WrongEra": "The era of the item does not match the ear of the system",
"NoSelectiveFireChoices": "Not enough ammo fo Selective Fire choices for this weapon.",
"NoAmmo": "No more ammo for this weapon. ",
+ "WeaponBecameJunk": "Weapon {weapon} became junk!",
+ "noWeaponFound": "No weapon found.",
"noRollDataFound": "No roll data found",
"noActorFound": "No actor found for this item.",
"noSanLossFound": "No SAN loss value found.",
diff --git a/lang/fr.json b/lang/fr.json
index d44eec5..b3e3f6e 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -565,6 +565,8 @@
}
},
"Label": {
+ "JunkWeapon": "Cette arme est 'Défectueuse'', -20% appliqué. Échec critique sur un jet de 96-100",
+ "WornWeapon": "Cette arme est 'Usée', un jet de Chance sera effectué.",
"noTarget": "Aucune cible sélectionnée",
"noDefenseRoll": "Aucun jet de défense existant",
"opposedRoll": "Jet opposé",
@@ -600,6 +602,10 @@
"rollNudge": "Modifier le jet",
"rollDamage": "Jet de dégâts",
"rollHealing": "Jet de soin",
+ "wornWeaponCheck": "Vérifier l'état de l'arme",
+ "wornWeaponCheckTitle": "Vérification d'état d'arme usée",
+ "wornWeaponCheckSuccess": "{weapon} : Jet de chance réussi ({roll}/50) - L'arme reste usée.",
+ "wornWeaponCheckFailure": "{weapon} : Jet de chance échoué ({roll}/50) - L'arme devient défectueuse !",
"result": "Resultat",
"damageMessage": "Dégâts à appliquer",
"lethalityRoll": "Jet de Létalité",
@@ -610,8 +616,7 @@
"Weapon": "Arme",
"ZeroWP": "PVO à 0 : Echec automatique (ie 0%)",
"LowWP": "PVO faibles",
- "Exhausted": "Epuisé",
- "creature": "Créature",
+ "Exhausted": "Epuisé", "wornWeaponWarning": "Arme usée : N'oubliez pas de faire le jet de chance après l'attaque !", "creature": "Créature",
"Rituals": "Rituels",
"Tomes": "Ouvrages",
"otherBenefits": "Autres avantages",
@@ -810,6 +815,8 @@
"WrongEra": "L'époque de l'item ne correspond pas à celle du jeu en cours.",
"NoSelectiveFireChoices": "Aucune option de tir sélectif n'est disponible pour cette arme : pas assez de munitions.",
"NoAmmo": "Aucune munition disponible pour cette arme.",
+ "WeaponBecameJunk": "L'arme {weapon} est devenue défectueuse !",
+ "noWeaponFound": "Aucune arme trouvée.",
"noRollDataFound": "Aucune donnée de jet trouvée.",
"noActorFound": "Aucun protagoniste trouvé.",
"noSanLossFound": "Aucune valeur de perte de SAN trouvée.",
diff --git a/module/applications/hud/action-handler.js b/module/applications/hud/action-handler.js
index ffdb544..1a21be3 100644
--- a/module/applications/hud/action-handler.js
+++ b/module/applications/hud/action-handler.js
@@ -203,7 +203,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => {
skills = skills.sort((a, b) => a.name.localeCompare(b.name))
console.log('Building skills actions for skills:', skills)
for (const skill of skills) {
- console.log('Processing skill item:', skill)
+ //console.log('Processing skill item:', skill)
if (skill.system.skillTotal > 0) {
const tooltip = {
content: String(skill.system.skillTotal),
diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs
index 8fa9112..e4fce04 100644
--- a/module/documents/roll.mjs
+++ b/module/documents/roll.mjs
@@ -310,7 +310,13 @@ export default class CthulhuEternalRoll extends Roll {
options.rollItem = CthulhuEternalUtils.getWeaponSkill(actor, options.rollItem, era)
options.initialScore = options.rollItem.system.skillTotal
- console.log("WEAPON", era, options.rollItem)
+ if (options.weapon.system.state === "junk") {
+ options.isJunk = true
+ options.initialScore = Math.max(0, options.initialScore - 20) // -20% for junk weapons
+ }
+ if (options.weapon.system.state === "worn") {
+ options.isWorn = true
+ }
}
break
default:
@@ -341,6 +347,8 @@ export default class CthulhuEternalRoll extends Roll {
targetScore: options.initialScore,
isLowWP: options.isLowWP,
isZeroWP: options.isZeroWP,
+ isJunk: options.isJunk,
+ isWorn: options.isWorn,
isExhausted: options.isExhausted,
enableHand: options.rollItem.enableHand,
enableStowed: options.rollItem.enableStowed,
@@ -464,14 +472,15 @@ export default class CthulhuEternalRoll extends Roll {
const roll = new this(formula, options.data, rollData)
await roll.evaluate()
- roll.displayRollResult(roll, options, rollData)
+ await roll.displayRollResult(roll, options, rollData)
if (Hooks.call("fvtt-cthulhu-eternal.Roll", options, rollData, roll) === false) return
+
return roll
}
- displayRollResult(formula, options, rollData) {
+ async displayRollResult(formula, options, rollData) {
// Compute the result quality
let resultType = "failure"
@@ -489,6 +498,11 @@ export default class CthulhuEternalRoll extends Roll {
resultType = "failureCritical"
}
}
+ if (rollData.weapon?.system?.state === "junk" && this.total > 95) {
+ this.options.isDestroyed = true
+ rollData.isDestroyed = true
+ resultType = "failureCritical"
+ }
// As per the rules, a roll of 100 is always a failure, even if the target is above 100
if (this.total === 100) {
resultType = "failureCritical"
diff --git a/module/utils.mjs b/module/utils.mjs
index 3d0dcd9..ece313f 100644
--- a/module/utils.mjs
+++ b/module/utils.mjs
@@ -483,6 +483,66 @@ export default class CthulhuEternalUtils {
actor.system.roll("damage", rollData.weapon)
}
+ static async wornWeaponCheck(rollMessage) {
+ let rollData = rollMessage.rolls[0]?.options?.rollData
+ if (!rollData) {
+ rollData = rollMessage.getFlag("fvtt-cthulhu-eternal", "rollData")
+ }
+ if (!rollData) {
+ ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noRollDataFound"))
+ return
+ }
+ let actor = game.actors.get(rollData.actorId)
+ if (!actor) {
+ ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noActorFound"))
+ return
+ }
+ let weapon = rollData.weapon
+ if (!weapon) {
+ ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noWeaponFound"))
+ return
+ }
+
+ // Lance un jet de chance (50%)
+ let luckRoll = new Roll("1d100")
+ await luckRoll.evaluate()
+
+ let isSuccess = luckRoll.total <= 50
+ let resultMsg = ""
+
+ if (isSuccess) {
+ // Succès - l'arme reste worn
+ resultMsg = game.i18n.format("CTHULHUETERNAL.Label.wornWeaponCheckSuccess", {
+ weapon: weapon.name,
+ roll: luckRoll.total
+ })
+ } else {
+ // Échec - l'arme devient junk
+ resultMsg = game.i18n.format("CTHULHUETERNAL.Label.wornWeaponCheckFailure", {
+ weapon: weapon.name,
+ roll: luckRoll.total
+ })
+
+ // Mettre à jour l'état de l'arme
+ await actor.updateEmbeddedDocuments("Item", [{
+ _id: weapon._id,
+ "system.state": "junk"
+ }])
+
+ ui.notifications.warn(game.i18n.format("CTHULHUETERNAL.Notifications.WeaponBecameJunk", { weapon: weapon.name }))
+ }
+
+ // Créer un message de chat avec le résultat
+ await ChatMessage.create({
+ user: game.user.id,
+ content: `
+
${game.i18n.localize("CTHULHUETERNAL.Label.wornWeaponCheckTitle")}
+
${resultMsg}
+
`,
+ speaker: ChatMessage.getSpeaker({ actor: actor }),
+ })
+ }
+
static async nudgeRoll(rollMessage) {
let dialogContext = rollMessage.rolls[0]?.options
diff --git a/packs-system/rituals/000275.log b/packs-system/rituals/000283.log
similarity index 100%
rename from packs-system/rituals/000275.log
rename to packs-system/rituals/000283.log
diff --git a/packs-system/rituals/CURRENT b/packs-system/rituals/CURRENT
index aa8e945..852186d 100644
--- a/packs-system/rituals/CURRENT
+++ b/packs-system/rituals/CURRENT
@@ -1 +1 @@
-MANIFEST-000273
+MANIFEST-000281
diff --git a/packs-system/rituals/LOG b/packs-system/rituals/LOG
index d99b9f7..0cfd861 100644
--- a/packs-system/rituals/LOG
+++ b/packs-system/rituals/LOG
@@ -1,7 +1,7 @@
-2025/11/21-23:23:35.521610 7f21eeffd6c0 Recovering log #271
-2025/11/21-23:23:35.612353 7f21eeffd6c0 Delete type=3 #269
-2025/11/21-23:23:35.612430 7f21eeffd6c0 Delete type=0 #271
-2025/11/21-23:35:34.796894 7f21ed7fa6c0 Level-0 table #276: started
-2025/11/21-23:35:34.796917 7f21ed7fa6c0 Level-0 table #276: 0 bytes OK
-2025/11/21-23:35:34.806397 7f21ed7fa6c0 Delete type=0 #274
-2025/11/21-23:35:34.806600 7f21ed7fa6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
+2026/04/01-22:53:01.206674 7fcc60fed6c0 Recovering log #279
+2026/04/01-22:53:01.217456 7fcc60fed6c0 Delete type=3 #277
+2026/04/01-22:53:01.217537 7fcc60fed6c0 Delete type=0 #279
+2026/04/01-22:56:08.533863 7fcc4affd6c0 Level-0 table #284: started
+2026/04/01-22:56:08.533906 7fcc4affd6c0 Level-0 table #284: 0 bytes OK
+2026/04/01-22:56:08.586584 7fcc4affd6c0 Delete type=0 #282
+2026/04/01-22:56:08.586750 7fcc4affd6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
diff --git a/packs-system/rituals/LOG.old b/packs-system/rituals/LOG.old
index 270cf2a..4cc33d9 100644
--- a/packs-system/rituals/LOG.old
+++ b/packs-system/rituals/LOG.old
@@ -1,7 +1,7 @@
-2025/11/12-23:48:30.686758 7f4781ffb6c0 Recovering log #267
-2025/11/12-23:48:30.697449 7f4781ffb6c0 Delete type=3 #265
-2025/11/12-23:48:30.697507 7f4781ffb6c0 Delete type=0 #267
-2025/11/13-13:58:42.410831 7f4780bff6c0 Level-0 table #272: started
-2025/11/13-13:58:42.410865 7f4780bff6c0 Level-0 table #272: 0 bytes OK
-2025/11/13-13:58:42.417362 7f4780bff6c0 Delete type=0 #270
-2025/11/13-13:58:42.434870 7f4780bff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
+2025/12/23-21:58:00.777018 7f1118ff96c0 Recovering log #275
+2025/12/23-21:58:00.909461 7f1118ff96c0 Delete type=3 #273
+2025/12/23-21:58:00.909547 7f1118ff96c0 Delete type=0 #275
+2025/12/23-22:36:20.406495 7f0e7bfff6c0 Level-0 table #280: started
+2025/12/23-22:36:20.406537 7f0e7bfff6c0 Level-0 table #280: 0 bytes OK
+2025/12/23-22:36:20.412428 7f0e7bfff6c0 Delete type=0 #278
+2025/12/23-22:36:20.419890 7f0e7bfff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
diff --git a/packs-system/rituals/MANIFEST-000273 b/packs-system/rituals/MANIFEST-000281
similarity index 73%
rename from packs-system/rituals/MANIFEST-000273
rename to packs-system/rituals/MANIFEST-000281
index d327a0b..67085a5 100644
Binary files a/packs-system/rituals/MANIFEST-000273 and b/packs-system/rituals/MANIFEST-000281 differ
diff --git a/packs-system/skills/000444.log b/packs-system/skills/000452.log
similarity index 100%
rename from packs-system/skills/000444.log
rename to packs-system/skills/000452.log
diff --git a/packs-system/skills/CURRENT b/packs-system/skills/CURRENT
index 808eb86..cf972fb 100644
--- a/packs-system/skills/CURRENT
+++ b/packs-system/skills/CURRENT
@@ -1 +1 @@
-MANIFEST-000442
+MANIFEST-000450
diff --git a/packs-system/skills/LOG b/packs-system/skills/LOG
index 04e7900..ca82534 100644
--- a/packs-system/skills/LOG
+++ b/packs-system/skills/LOG
@@ -1,7 +1,7 @@
-2025/11/21-23:23:35.280848 7f21edffb6c0 Recovering log #440
-2025/11/21-23:23:35.368467 7f21edffb6c0 Delete type=3 #438
-2025/11/21-23:23:35.368552 7f21edffb6c0 Delete type=0 #440
-2025/11/21-23:35:34.777225 7f21ed7fa6c0 Level-0 table #445: started
-2025/11/21-23:35:34.777275 7f21ed7fa6c0 Level-0 table #445: 0 bytes OK
-2025/11/21-23:35:34.786357 7f21ed7fa6c0 Delete type=0 #443
-2025/11/21-23:35:34.806576 7f21ed7fa6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
+2026/04/01-22:53:01.173017 7fcc60fed6c0 Recovering log #448
+2026/04/01-22:53:01.184049 7fcc60fed6c0 Delete type=3 #446
+2026/04/01-22:53:01.184114 7fcc60fed6c0 Delete type=0 #448
+2026/04/01-22:56:08.365689 7fcc4affd6c0 Level-0 table #453: started
+2026/04/01-22:56:08.365761 7fcc4affd6c0 Level-0 table #453: 0 bytes OK
+2026/04/01-22:56:08.421424 7fcc4affd6c0 Delete type=0 #451
+2026/04/01-22:56:08.586720 7fcc4affd6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
diff --git a/packs-system/skills/LOG.old b/packs-system/skills/LOG.old
index da9cd42..8ec90fd 100644
--- a/packs-system/skills/LOG.old
+++ b/packs-system/skills/LOG.old
@@ -1,7 +1,7 @@
-2025/11/12-23:48:30.659183 7f47817fa6c0 Recovering log #436
-2025/11/12-23:48:30.670042 7f47817fa6c0 Delete type=3 #434
-2025/11/12-23:48:30.670124 7f47817fa6c0 Delete type=0 #436
-2025/11/13-13:58:42.417482 7f4780bff6c0 Level-0 table #441: started
-2025/11/13-13:58:42.417509 7f4780bff6c0 Level-0 table #441: 0 bytes OK
-2025/11/13-13:58:42.423396 7f4780bff6c0 Delete type=0 #439
-2025/11/13-13:58:42.434882 7f4780bff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
+2025/12/23-21:58:00.532068 7f1119ffb6c0 Recovering log #444
+2025/12/23-21:58:00.647819 7f1119ffb6c0 Delete type=3 #442
+2025/12/23-21:58:00.647954 7f1119ffb6c0 Delete type=0 #444
+2025/12/23-22:36:20.355345 7f0e7bfff6c0 Level-0 table #449: started
+2025/12/23-22:36:20.355397 7f0e7bfff6c0 Level-0 table #449: 0 bytes OK
+2025/12/23-22:36:20.362045 7f0e7bfff6c0 Delete type=0 #447
+2025/12/23-22:36:20.385891 7f0e7bfff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
diff --git a/packs-system/skills/MANIFEST-000442 b/packs-system/skills/MANIFEST-000450
similarity index 71%
rename from packs-system/skills/MANIFEST-000442
rename to packs-system/skills/MANIFEST-000450
index 30737d2..24dfdfd 100644
Binary files a/packs-system/skills/MANIFEST-000442 and b/packs-system/skills/MANIFEST-000450 differ
diff --git a/packs-system/weapons/000090.log b/packs-system/weapons/000098.log
similarity index 100%
rename from packs-system/weapons/000090.log
rename to packs-system/weapons/000098.log
diff --git a/packs-system/weapons/CURRENT b/packs-system/weapons/CURRENT
index 948a0b6..6274e55 100644
--- a/packs-system/weapons/CURRENT
+++ b/packs-system/weapons/CURRENT
@@ -1 +1 @@
-MANIFEST-000088
+MANIFEST-000096
diff --git a/packs-system/weapons/LOG b/packs-system/weapons/LOG
index 9963912..69c9c76 100644
--- a/packs-system/weapons/LOG
+++ b/packs-system/weapons/LOG
@@ -1,7 +1,7 @@
-2025/11/21-23:23:35.396467 7f21ef7fe6c0 Recovering log #86
-2025/11/21-23:23:35.502570 7f21ef7fe6c0 Delete type=3 #84
-2025/11/21-23:23:35.502631 7f21ef7fe6c0 Delete type=0 #86
-2025/11/21-23:35:34.786516 7f21ed7fa6c0 Level-0 table #91: started
-2025/11/21-23:35:34.786543 7f21ed7fa6c0 Level-0 table #91: 0 bytes OK
-2025/11/21-23:35:34.796797 7f21ed7fa6c0 Delete type=0 #89
-2025/11/21-23:35:34.806589 7f21ed7fa6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
+2026/04/01-22:53:01.192292 7fcc4b7fe6c0 Recovering log #94
+2026/04/01-22:53:01.202349 7fcc4b7fe6c0 Delete type=3 #92
+2026/04/01-22:53:01.202397 7fcc4b7fe6c0 Delete type=0 #94
+2026/04/01-22:56:08.421577 7fcc4affd6c0 Level-0 table #99: started
+2026/04/01-22:56:08.421606 7fcc4affd6c0 Level-0 table #99: 0 bytes OK
+2026/04/01-22:56:08.475595 7fcc4affd6c0 Delete type=0 #97
+2026/04/01-22:56:08.586731 7fcc4affd6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
diff --git a/packs-system/weapons/LOG.old b/packs-system/weapons/LOG.old
index ef33517..62c24cf 100644
--- a/packs-system/weapons/LOG.old
+++ b/packs-system/weapons/LOG.old
@@ -1,7 +1,7 @@
-2025/11/12-23:48:30.674156 7f4781ffb6c0 Recovering log #82
-2025/11/12-23:48:30.683495 7f4781ffb6c0 Delete type=3 #80
-2025/11/12-23:48:30.683546 7f4781ffb6c0 Delete type=0 #82
-2025/11/13-13:58:42.404378 7f4780bff6c0 Level-0 table #87: started
-2025/11/13-13:58:42.404437 7f4780bff6c0 Level-0 table #87: 0 bytes OK
-2025/11/13-13:58:42.410719 7f4780bff6c0 Delete type=0 #85
-2025/11/13-13:58:42.434856 7f4780bff6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
+2025/12/23-21:58:00.654695 7f1119ffb6c0 Recovering log #90
+2025/12/23-21:58:00.773269 7f1119ffb6c0 Delete type=3 #88
+2025/12/23-21:58:00.773360 7f1119ffb6c0 Delete type=0 #90
+2025/12/23-22:36:20.362172 7f0e7bfff6c0 Level-0 table #95: started
+2025/12/23-22:36:20.362202 7f0e7bfff6c0 Level-0 table #95: 0 bytes OK
+2025/12/23-22:36:20.368698 7f0e7bfff6c0 Delete type=0 #93
+2025/12/23-22:36:20.385910 7f0e7bfff6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
diff --git a/packs-system/weapons/MANIFEST-000088 b/packs-system/weapons/MANIFEST-000096
similarity index 73%
rename from packs-system/weapons/MANIFEST-000088
rename to packs-system/weapons/MANIFEST-000096
index 09e9896..87bf891 100644
Binary files a/packs-system/weapons/MANIFEST-000088 and b/packs-system/weapons/MANIFEST-000096 differ
diff --git a/system.json b/system.json
index 0bf1a92..dd05ee7 100644
--- a/system.json
+++ b/system.json
@@ -33,7 +33,7 @@
},
"compatibility": {
"minimum": "13",
- "verified": "13"
+ "verified": "14"
},
"esmodules": [
"cthulhu-eternal.mjs"
diff --git a/templates/chat-message.hbs b/templates/chat-message.hbs
index 255f8f5..8e89c8d 100644
--- a/templates/chat-message.hbs
+++ b/templates/chat-message.hbs
@@ -54,6 +54,13 @@
: -20%
{{/if}}
+ {{#if isWorn}}
+
+ {{localize "CTHULHUETERNAL.Label.wornWeaponWarning"}}
+ {{/if}}
+
{{#if (eq rollType "resource")}}
{{localize "CTHULHUETERNAL.Label.multiplier"}}
:
@@ -206,6 +213,18 @@
{{/if}}
{{/if}}
+ {{#if (eq rollType "weapon")}}
+ {{#if isWorn}}
+
+
+
+ {{/if}}
+ {{/if}}
+
{{#if isFailure}}
{{#if isNudge}}
{{localize
+ "CTHULHUETERNAL.Label.JunkWeapon"
+ }}
+ {{/if}}
+ {{#if isWorn}}
+ {{localize
+ "CTHULHUETERNAL.Label.WornWeapon"
+ }}
+ {{/if}}
{{localize "CTHULHUETERNAL.Label.Weapon"}}
:
{{weapon.name}}