diff --git a/assets/help/character-daily-resources.png b/assets/help/character-daily-resources.png
new file mode 100644
index 0000000..b9df72b
Binary files /dev/null and b/assets/help/character-daily-resources.png differ
diff --git a/assets/help/character-equipment.png b/assets/help/character-equipment.png
new file mode 100644
index 0000000..f608a1a
Binary files /dev/null and b/assets/help/character-equipment.png differ
diff --git a/assets/help/character-features.png b/assets/help/character-features.png
new file mode 100644
index 0000000..520abf4
Binary files /dev/null and b/assets/help/character-features.png differ
diff --git a/assets/help/character-overview.png b/assets/help/character-overview.png
new file mode 100644
index 0000000..e26f1c8
Binary files /dev/null and b/assets/help/character-overview.png differ
diff --git a/assets/help/combat-tracker.png b/assets/help/combat-tracker.png
new file mode 100644
index 0000000..8a6b64c
Binary files /dev/null and b/assets/help/combat-tracker.png differ
diff --git a/assets/help/compendiums-tab.png b/assets/help/compendiums-tab.png
new file mode 100644
index 0000000..353f586
Binary files /dev/null and b/assets/help/compendiums-tab.png differ
diff --git a/assets/help/creature-sheet.png b/assets/help/creature-sheet.png
new file mode 100644
index 0000000..e489e2c
Binary files /dev/null and b/assets/help/creature-sheet.png differ
diff --git a/assets/help/journal-entry.png b/assets/help/journal-entry.png
new file mode 100644
index 0000000..4b49020
Binary files /dev/null and b/assets/help/journal-entry.png differ
diff --git a/assets/help/main-ui.png b/assets/help/main-ui.png
new file mode 100644
index 0000000..831b8e2
Binary files /dev/null and b/assets/help/main-ui.png differ
diff --git a/assets/help/party-sheet.png b/assets/help/party-sheet.png
new file mode 100644
index 0000000..5830882
Binary files /dev/null and b/assets/help/party-sheet.png differ
diff --git a/assets/help/scenes-tab.png b/assets/help/scenes-tab.png
new file mode 100644
index 0000000..b4ac7a7
Binary files /dev/null and b/assets/help/scenes-tab.png differ
diff --git a/css/mgne.css b/css/mgne.css
index ef9247f..9001ee0 100644
--- a/css/mgne.css
+++ b/css/mgne.css
@@ -1501,8 +1501,8 @@
position: relative;
display: flex;
flex-direction: column;
- gap: 0.6rem;
- padding: 0.68rem;
+ gap: 0.5rem;
+ padding: 0.62rem 0.68rem;
color: #a08878;
background: radial-gradient(circle at top right, rgba(79, 125, 115, 0.1), transparent 22%), linear-gradient(135deg, rgba(216, 122, 79, 0.1), transparent 38%), linear-gradient(180deg, rgba(171, 139, 104, 0.04), transparent 24%), linear-gradient(180deg, rgba(27, 21, 18, 0.22), rgba(19, 16, 15, 0.18)), url("../assets/ui/page_background.webp") right bottom / cover no-repeat, rgba(41, 30, 24, 0.88);
}
@@ -1516,119 +1516,265 @@
}
.mgne-chat-card .chat-card-header {
display: flex;
- gap: 0.6rem;
+ gap: 0.55rem;
align-items: center;
+ padding-bottom: 0.4rem;
+ border-bottom: 1px solid rgba(196, 154, 69, 0.14);
}
.mgne-chat-card .chat-card-header img {
- width: 36px;
- height: 36px;
+ width: 34px;
+ height: 34px;
object-fit: cover;
border-radius: 50%;
- border: 1px solid rgba(196, 154, 69, 0.38);
- box-shadow: 0 0 0 2px rgba(204, 178, 146, 0.06);
+ border: 1px solid rgba(196, 154, 69, 0.32);
+ box-shadow: 0 0 0 2px rgba(204, 178, 146, 0.05);
+ flex-shrink: 0;
}
-.mgne-chat-card .chat-eyebrow {
- display: none;
+.mgne-chat-card .chat-header-text {
+ flex: 1;
+ min-width: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 0.05rem;
}
.mgne-chat-card h3 {
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
text-transform: uppercase;
letter-spacing: 0.08em;
margin: 0;
- color: #ab8b68;
- font-size: 0.82rem;
-}
-.mgne-chat-card .chat-actor,
-.mgne-chat-card .chat-subtitle,
-.mgne-chat-card .chat-formula,
-.mgne-chat-card .chat-special {
- margin: 0;
+ color: #5b3e2e;
+ font-size: 0.78rem;
+ line-height: 1.2;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.mgne-chat-card .chat-actor {
- color: #a08878;
+ margin: 0;
+ color: #7d553f;
+ font-size: 0.68rem;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
-.mgne-chat-card .chat-formula {
- color: #a08878;
-}
-.mgne-chat-card .chat-formula code {
- color: #ccb292;
- background: rgba(19, 16, 15, 0.75);
- padding: 0.1em 0.42em;
- border-radius: 3px;
-}
-.mgne-chat-card .chat-result-line {
- display: flex;
- justify-content: space-between;
- align-items: end;
- padding: 0.38rem 0.55rem;
- border: 1px solid rgba(196, 154, 69, 0.28);
- border-radius: 6px;
- background: rgba(19, 16, 15, 0.78);
-}
-.mgne-chat-card .chat-result-label {
+.mgne-chat-card .chat-mode-badge {
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
text-transform: uppercase;
letter-spacing: 0.08em;
- font-size: 0.62rem;
- color: #ccb292;
+ font-size: 0.6rem;
+ letter-spacing: 0.1em;
+ padding: 0.15rem 0.45rem;
+ border-radius: 999px;
+ background: rgba(19, 16, 15, 0.7);
+ border: 1px solid rgba(171, 139, 104, 0.22);
+ color: #958068;
+ flex-shrink: 0;
+ line-height: 1.3;
}
-.mgne-chat-card .chat-result-total {
+.mgne-chat-card .chat-card-body {
+ display: flex;
+ flex-direction: column;
+ gap: 0.4rem;
+}
+.mgne-chat-card .chat-subtitle {
+ margin: 0;
+ color: #996b51;
+ font-size: 0.72rem;
+ letter-spacing: 0.03em;
+}
+.mgne-chat-card .chat-formula-wrap {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.25rem 0.5rem;
+ background: rgba(19, 16, 15, 0.6);
+ border-radius: 6px;
+ border: 1px solid rgba(171, 139, 104, 0.1);
+}
+.mgne-chat-card .chat-formula-label {
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
- font-size: 1.08rem;
- color: #ccb292;
+ text-transform: uppercase;
+ font-size: 0.6rem;
+ color: #c49a45;
+ letter-spacing: 0.08em;
+ flex-shrink: 0;
+}
+.mgne-chat-card .chat-formula-code {
+ font-family: "Courier New", monospace;
+ font-size: 0.76rem;
+ color: #ccb292;
+ background: rgba(19, 16, 15, 0.5);
+ padding: 0.08rem 0.45rem;
+ border-radius: 3px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.mgne-chat-card .chat-outcome {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.4rem 0.55rem;
+ border-radius: 6px;
+ background: rgba(19, 16, 15, 0.68);
+ border-left: 3px solid rgba(232, 154, 95, 0.6);
+}
+.mgne-chat-card .chat-outcome.has-tooltip {
+ cursor: pointer;
+ user-select: none;
+}
+.mgne-chat-card .chat-outcome.has-tooltip:hover {
+ filter: brightness(1.1);
+}
+.mgne-chat-card .chat-outcome .chat-outcome-icon {
+ flex-shrink: 0;
+ font-size: 0.85rem;
+ width: 1.2rem;
+ text-align: center;
+ opacity: 0.8;
+}
+.mgne-chat-card .chat-outcome .chat-outcome-label {
+ font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ flex: 1;
+ font-size: 0.72rem;
+ letter-spacing: 0.06em;
+ color: #f0bc95;
+}
+.mgne-chat-card .chat-outcome .chat-outcome-total {
+ font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
+ font-size: 1.18rem;
+ font-weight: 700;
+ color: #ccb292;
+ line-height: 1;
+}
+.mgne-chat-card .chat-outcome .chat-tooltip-icon {
+ opacity: 0.5;
+ font-size: 0.7rem;
+ margin-left: 0.15rem;
+ flex-shrink: 0;
+ transition: opacity 0.15s;
+}
+.mgne-chat-card .chat-outcome.tooltip-open .chat-tooltip-icon {
+ opacity: 1;
+}
+.mgne-chat-card .chat-damage-total {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.45rem 0.6rem;
+ border-radius: 6px;
+ background: rgba(19, 16, 15, 0.68);
+ border-left: 3px solid rgba(232, 154, 95, 0.6);
}
-.mgne-chat-card .chat-outcome.has-tooltip,
.mgne-chat-card .chat-damage-total.has-tooltip {
cursor: pointer;
user-select: none;
}
-.mgne-chat-card .chat-outcome.has-tooltip:hover,
.mgne-chat-card .chat-damage-total.has-tooltip:hover {
- filter: brightness(1.12);
+ filter: brightness(1.1);
+}
+.mgne-chat-card .chat-damage-total .chat-damage-label {
+ font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ font-size: 0.65rem;
+ letter-spacing: 0.06em;
+ color: #958068;
+ flex: 1;
+}
+.mgne-chat-card .chat-damage-total .chat-damage-number {
+ font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
+ font-size: 1.3rem;
+ font-weight: 700;
+ color: #edb183;
+ line-height: 1;
}
-.mgne-chat-card .chat-outcome .chat-tooltip-icon,
.mgne-chat-card .chat-damage-total .chat-tooltip-icon {
- opacity: 0.55;
- font-size: 0.75em;
- margin-left: 0.3rem;
- vertical-align: middle;
+ opacity: 0.5;
+ font-size: 0.7rem;
+ flex-shrink: 0;
transition: opacity 0.15s;
}
-.mgne-chat-card .chat-outcome.tooltip-open .chat-tooltip-icon,
.mgne-chat-card .chat-damage-total.tooltip-open .chat-tooltip-icon {
opacity: 1;
}
+.mgne-chat-card.outcome-critical-success .chat-outcome,
+.mgne-chat-card.outcome-success .chat-outcome,
+.mgne-chat-card.outcome-steady .chat-outcome {
+ border-left-color: rgba(79, 125, 115, 0.75);
+}
+.mgne-chat-card.outcome-critical-success .chat-outcome .chat-outcome-label,
+.mgne-chat-card.outcome-success .chat-outcome .chat-outcome-label,
+.mgne-chat-card.outcome-steady .chat-outcome .chat-outcome-label {
+ color: #9bc0b8;
+}
+.mgne-chat-card.outcome-critical-success .chat-outcome .chat-outcome-icon,
+.mgne-chat-card.outcome-success .chat-outcome .chat-outcome-icon,
+.mgne-chat-card.outcome-steady .chat-outcome .chat-outcome-icon {
+ color: #a1c4bc;
+}
+.mgne-chat-card.outcome-critical-success .chat-damage-total,
+.mgne-chat-card.outcome-success .chat-damage-total,
+.mgne-chat-card.outcome-steady .chat-damage-total {
+ border-left-color: rgba(79, 125, 115, 0.6);
+}
+.mgne-chat-card.outcome-critical-success .chat-damage-total .chat-damage-number,
+.mgne-chat-card.outcome-success .chat-damage-total .chat-damage-number,
+.mgne-chat-card.outcome-steady .chat-damage-total .chat-damage-number {
+ color: #92bab1;
+}
+.mgne-chat-card.outcome-failure .chat-outcome,
+.mgne-chat-card.outcome-broken .chat-outcome,
+.mgne-chat-card.outcome-fumble .chat-outcome {
+ border-left-color: rgba(232, 154, 95, 0.75);
+}
+.mgne-chat-card.outcome-failure .chat-outcome .chat-outcome-label,
+.mgne-chat-card.outcome-broken .chat-outcome .chat-outcome-label,
+.mgne-chat-card.outcome-fumble .chat-outcome .chat-outcome-label {
+ color: #f4cdaf;
+}
+.mgne-chat-card.outcome-failure .chat-outcome .chat-outcome-icon,
+.mgne-chat-card.outcome-broken .chat-outcome .chat-outcome-icon,
+.mgne-chat-card.outcome-fumble .chat-outcome .chat-outcome-icon {
+ color: #ee857d;
+}
+.mgne-chat-card.outcome-failure .chat-damage-total,
+.mgne-chat-card.outcome-broken .chat-damage-total,
+.mgne-chat-card.outcome-fumble .chat-damage-total {
+ border-left-color: rgba(232, 154, 95, 0.6);
+}
.mgne-chat-card .chat-dice-tooltip {
- margin-top: 0.4rem;
- padding: 0.4rem 0.55rem;
+ padding: 0.35rem 0.5rem;
background: rgba(19, 16, 15, 0.85);
- border: 1px solid rgba(171, 139, 104, 0.22);
+ border: 1px solid rgba(171, 139, 104, 0.18);
border-radius: 6px;
}
.mgne-chat-card .chat-dice-tooltip .dice-roll {
display: flex;
flex-direction: column;
- gap: 0.2rem;
+ gap: 0.15rem;
}
.mgne-chat-card .chat-dice-tooltip .dice-formula {
font-family: "Courier New", monospace;
- font-size: 0.72rem;
- color: rgba(204, 178, 146, 0.78);
+ font-size: 0.7rem;
+ color: rgba(204, 178, 146, 0.72);
}
.mgne-chat-card .chat-dice-tooltip .dice-tooltip {
- font-size: 0.78rem;
+ font-size: 0.75rem;
}
.mgne-chat-card .chat-dice-tooltip .dice {
- margin: 0.15rem 0;
+ margin: 0.1rem 0;
}
.mgne-chat-card .chat-dice-tooltip .die-icon,
.mgne-chat-card .chat-dice-tooltip .die-face {
color: #c49a45;
- font-size: 0.8rem;
+ font-size: 0.78rem;
}
.mgne-chat-card .chat-dice-tooltip .part-formula {
- color: rgba(204, 178, 146, 0.82);
- font-size: 0.72rem;
+ color: rgba(204, 178, 146, 0.78);
+ font-size: 0.7rem;
}
.mgne-chat-card .chat-dice-tooltip .part-total {
color: #ccb292;
@@ -1641,66 +1787,78 @@
color: #eeb68c;
}
.mgne-chat-card .chat-dice-tooltip .dice-total {
- font-family: "CastorTwoMGNE", serif;
- font-size: 1.05rem;
- color: #c49a45;
- text-align: right;
- border-top: 1px solid rgba(171, 139, 104, 0.2);
- padding-top: 0.2rem;
- margin-top: 0.15rem;
-}
-.mgne-chat-card .chat-outcome {
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
- text-transform: uppercase;
- letter-spacing: 0.08em;
- margin: 0;
- padding: 0.3rem 0.55rem;
+ font-size: 1rem;
+ color: #c49a45;
+ text-align: center;
+ border-top: 1px solid rgba(171, 139, 104, 0.16);
+ padding-top: 0.2rem;
+ margin-top: 0.1rem;
+}
+.mgne-chat-card .chat-special-wrap {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.4rem;
+ padding: 0.35rem 0.5rem;
+ border-left: 2px solid rgba(232, 154, 95, 0.4);
+ background: rgba(17, 12, 10, 0.8);
border-radius: 6px;
- background: rgba(19, 16, 15, 0.72);
- border-left: 3px solid rgba(232, 154, 95, 0.7);
- color: #f0bc95;
- font-size: 0.8rem;
}
-.mgne-chat-card .chat-special {
- padding: 0.42rem 0.55rem;
- border-left: 3px solid rgba(232, 154, 95, 0.55);
- background: rgba(17, 12, 10, 0.85);
+.mgne-chat-card .chat-special-icon {
+ flex-shrink: 0;
+ font-size: 0.7rem;
+ color: #e89a5f;
+ margin-top: 0.08rem;
+}
+.mgne-chat-card .chat-special-text {
color: #ccb292;
+ font-size: 0.72rem;
+ line-height: 1.4;
}
-.mgne-chat-card.outcome-critical-success,
-.mgne-chat-card.outcome-success,
-.mgne-chat-card.outcome-steady {
- border-color: rgba(79, 125, 115, 0.42);
+.mgne-chat-card .chat-omen-remind,
+.mgne-chat-card .chat-omen-used {
+ margin: 0;
+ padding: 0.35rem 0.5rem;
+ border-radius: 6px;
+ font-size: 0.7rem;
+ display: flex;
+ align-items: center;
+ gap: 0.35rem;
}
-.mgne-chat-card.outcome-critical-success .chat-outcome,
-.mgne-chat-card.outcome-success .chat-outcome,
-.mgne-chat-card.outcome-steady .chat-outcome {
- color: #9bc0b8;
- border-left-color: rgba(79, 125, 115, 0.8);
+.mgne-chat-card .chat-omen-remind {
+ background: rgba(196, 154, 69, 0.18);
+ border: 1px solid rgba(196, 154, 69, 0.35);
+ color: #dac08b;
}
-.mgne-chat-card.outcome-failure,
-.mgne-chat-card.outcome-broken,
-.mgne-chat-card.outcome-fumble {
- border-color: rgba(232, 90, 80, 0.48);
+.mgne-chat-card .chat-omen-remind i {
+ color: #c49a45;
+ font-size: 0.7rem;
}
-.mgne-chat-card.outcome-failure .chat-outcome,
-.mgne-chat-card.outcome-broken .chat-outcome,
-.mgne-chat-card.outcome-fumble .chat-outcome {
- color: #f4cdaf;
- border-left-color: rgba(232, 154, 95, 0.8);
+.mgne-chat-card .chat-omen-neutralize {
+ background: rgba(232, 154, 95, 0.18);
+ border-color: rgba(232, 154, 95, 0.35);
+ color: #f2c4a2;
}
-.mgne-chat-card.mode-apply-damage .chat-result-total,
-.mgne-chat-card.mode-damage .chat-result-total {
- color: #edb183;
+.mgne-chat-card .chat-omen-neutralize i {
+ color: #e89a5f;
+}
+.mgne-chat-card .chat-omen-used {
+ background: rgba(79, 125, 115, 0.18);
+ border: 1px solid rgba(79, 125, 115, 0.32);
+ color: #a7c8c1;
+}
+.mgne-chat-card .chat-omen-used i {
+ color: #b1cec7;
+ font-size: 0.7rem;
}
.mgne-chat-card .chat-card-actions {
- margin-top: 0.2rem;
+ margin-top: 0.1rem;
}
.mgne-roll-damage-btn {
display: flex;
align-items: center;
justify-content: center;
- gap: 0.45rem;
+ gap: 0.4rem;
width: 100%;
padding: 0.38rem 0.7rem;
border: 1px solid #e89a5f;
@@ -1708,7 +1866,7 @@
background: #d87a4f;
color: #f8ede0;
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
- font-size: 0.78rem;
+ font-size: 0.76rem;
font-weight: 600;
letter-spacing: 0.06em;
cursor: pointer;
@@ -1716,7 +1874,7 @@
}
.mgne-roll-damage-btn .dmg-formula {
color: #fff5e8;
- font-size: 0.75rem;
+ font-size: 0.73rem;
font-weight: 700;
}
.mgne-roll-damage-btn:hover {
@@ -1741,7 +1899,7 @@
display: flex;
align-items: center;
justify-content: center;
- gap: 0.45rem;
+ gap: 0.4rem;
width: 100%;
padding: 0.38rem 0.7rem;
border: 1px solid #c49a45;
@@ -1749,7 +1907,7 @@
background: #8f6f2d;
color: #fff5d0;
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
- font-size: 0.78rem;
+ font-size: 0.76rem;
font-weight: 600;
letter-spacing: 0.06em;
cursor: pointer;
@@ -1761,7 +1919,7 @@
color: #fff;
}
.chat-apply-actions {
- margin-top: 0.35rem;
+ margin-top: 0.25rem;
}
.mgne-apply-damage-select {
width: 100%;
@@ -1771,7 +1929,7 @@
background: #1b1512;
color: #ab8b68;
font-family: "LoraMGNE", "Book Antiqua", serif;
- font-size: 0.8rem;
+ font-size: 0.78rem;
font-weight: 600;
cursor: pointer;
transition: border-color 0.15s, background 0.15s;
diff --git a/fvtt-machine-gods-noxian-expanse.mjs b/fvtt-machine-gods-noxian-expanse.mjs
index 221a13d..4c4635e 100644
--- a/fvtt-machine-gods-noxian-expanse.mjs
+++ b/fvtt-machine-gods-noxian-expanse.mjs
@@ -73,10 +73,25 @@ Hooks.once("init", () => {
Hooks.once("setup", () => {
localizeSystemConfig()
-})
+
+ // Strip phantom null-_id entries from all compendium indices.
+ // Foundry V14 LevelDatabase creates !items!null entries on open under Node24.
+ if (typeof CompendiumCollection !== "undefined") {
+ const orig = CompendiumCollection.prototype.getIndex;
+ CompendiumCollection.prototype.getIndex = async function(opts) {
+ const r = await orig.call(this, opts);
+ for (const k of [...this.index.keys()]) { if (!k) this.index.delete(k); }
+ return r;
+ };
+ }
+});
Hooks.once("ready", async () => {
console.info(`${SYSTEM_ID} | Ready`)
+ // Clean anything already in the index before we patched
+ for (const pack of game.packs) {
+ for (const k of [...pack.index.keys()]) { if (!k) pack.index.delete(k); }
+ }
if (!game.user.isGM) return
@@ -117,7 +132,7 @@ Hooks.on("deleteCombat", (combat) => {
if (!cores.length) return
const lines = cores.map(c => `
${c.parent.name} — ${c.name} (${c.system.usageDie})`).join("")
ChatMessage.create({
- content: `⚙️ ${game.i18n.localize("MGNE.Notification.RollUsageDiceReminder")}
`,
+ content: `⚙️ ${game.i18n.localize("MGNE.Notification.RollUsageDiceReminder")}
`,
})
})
@@ -242,6 +257,7 @@ Hooks.on("renderChatMessageHTML", (message, element) => {
const card = select.closest(".mgne-chat-card")
const damageTotal = parseInt(card?.dataset.damageTotal ?? "0", 10) || 0
const damageCritical = card?.dataset.damageCritical === "true"
+ const targetActorId = card?.dataset.targetActorId ?? null
const tokens = canvas.scene?.tokens.contents ?? []
for (const token of tokens) {
@@ -249,6 +265,9 @@ Hooks.on("renderChatMessageHTML", (message, element) => {
const opt = document.createElement("option")
opt.value = token.id
opt.textContent = token.name
+ if (targetActorId && token.actor.id === targetActorId) {
+ opt.selected = true
+ }
select.appendChild(opt)
}
@@ -292,7 +311,7 @@ Hooks.on("renderChatMessageHTML", (message, element) => {
await ChatMessage.create({
speaker: ChatMessage.getSpeaker({ actor: targetActor }),
rolls: [reduceRoll],
- content: ``,
+ content: ``,
})
}
}
diff --git a/less/chat.less b/less/chat.less
index 7b2e663..49eae19 100644
--- a/less/chat.less
+++ b/less/chat.less
@@ -3,8 +3,8 @@
.ornate-frame();
display: flex;
flex-direction: column;
- gap: 0.6rem;
- padding: 0.68rem;
+ gap: 0.5rem;
+ padding: 0.62rem 0.68rem;
color: @iron;
background:
radial-gradient(circle at top right, fade(@verdigris, 10%), transparent 22%),
@@ -17,189 +17,351 @@
.mgne-chat-card .chat-card-header {
display: flex;
- gap: 0.6rem;
+ gap: 0.55rem;
align-items: center;
+ padding-bottom: 0.4rem;
+ border-bottom: 1px solid fade(@gold-acid, 14%);
}
.mgne-chat-card .chat-card-header img {
- width: 36px;
- height: 36px;
+ width: 34px;
+ height: 34px;
object-fit: cover;
border-radius: 50%;
- border: 1px solid fade(@gold-acid, 38%);
- box-shadow: 0 0 0 2px fade(@parchment, 6%);
+ border: 1px solid fade(@gold-acid, 32%);
+ box-shadow: 0 0 0 2px fade(@parchment, 5%);
+ flex-shrink: 0;
}
-.mgne-chat-card .chat-eyebrow {
- display: none;
+.mgne-chat-card .chat-header-text {
+ flex: 1;
+ min-width: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 0.05rem;
}
.mgne-chat-card h3 {
.caps-heading();
margin: 0;
- color: @bone;
- font-size: 0.82rem;
-}
-
-.mgne-chat-card .chat-actor,
-.mgne-chat-card .chat-subtitle,
-.mgne-chat-card .chat-formula,
-.mgne-chat-card .chat-special {
- margin: 0;
+ color: darken(@label-ink, 22%);
+ font-size: 0.78rem;
+ line-height: 1.2;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.mgne-chat-card .chat-actor {
- color: @iron;
+ margin: 0;
+ color: darken(@label-ink, 12%);
+ font-size: 0.68rem;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
-.mgne-chat-card .chat-formula {
- color: @iron;
-
- code {
- color: @parchment;
- background: fade(@bg-void, 75%);
- padding: 0.1em 0.42em;
- border-radius: 3px;
- }
-}
-
-.mgne-chat-card .chat-result-line {
- display: flex;
- justify-content: space-between;
- align-items: end;
- padding: 0.38rem 0.55rem;
- border: 1px solid fade(@gold-acid, 28%);
- border-radius: @radius-sm;
- background: fade(@bg-void, 78%);
-}
-
-.mgne-chat-card .chat-result-label {
+.mgne-chat-card .chat-mode-badge {
.caps-heading();
- font-size: 0.62rem;
- color: @parchment;
+ font-size: 0.6rem;
+ letter-spacing: 0.1em;
+ padding: 0.15rem 0.45rem;
+ border-radius: 999px;
+ background: fade(@bg-void, 70%);
+ border: 1px solid fade(@bone, 22%);
+ color: @ash;
+ flex-shrink: 0;
+ line-height: 1.3;
}
-.mgne-chat-card .chat-result-total {
- font-family: @font-display;
- font-size: 1.08rem;
- color: @parchment;
+.mgne-chat-card .chat-card-body {
+ display: flex;
+ flex-direction: column;
+ gap: 0.4rem;
}
-.mgne-chat-card .chat-outcome,
-.mgne-chat-card .chat-damage-total {
+// Subtitle line
+.mgne-chat-card .chat-subtitle {
+ margin: 0;
+ color: darken(@label-soft, 10%);
+ font-size: 0.72rem;
+ letter-spacing: 0.03em;
+}
+
+// Formula display
+.mgne-chat-card .chat-formula-wrap {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.25rem 0.5rem;
+ background: fade(@bg-void, 60%);
+ border-radius: @radius-sm;
+ border: 1px solid fade(@bone, 10%);
+}
+
+.mgne-chat-card .chat-formula-label {
+ .caps-heading();
+ font-size: 0.6rem;
+ color: @gold-acid;
+ letter-spacing: 0.08em;
+ flex-shrink: 0;
+}
+
+.mgne-chat-card .chat-formula-code {
+ font-family: "Courier New", monospace;
+ font-size: 0.76rem;
+ color: @parchment;
+ background: fade(@bg-void, 50%);
+ padding: 0.08rem 0.45rem;
+ border-radius: 3px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+// Outcome display (check results, morale)
+.mgne-chat-card .chat-outcome {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.4rem 0.55rem;
+ border-radius: @radius-sm;
+ background: fade(@bg-void, 68%);
+ border-left: 3px solid fade(@ember-bright, 60%);
+
&.has-tooltip {
cursor: pointer;
user-select: none;
- &:hover { filter: brightness(1.12); }
+ &:hover { filter: brightness(1.1); }
}
+
+ .chat-outcome-icon {
+ flex-shrink: 0;
+ font-size: 0.85rem;
+ width: 1.2rem;
+ text-align: center;
+ opacity: 0.8;
+ }
+
+ .chat-outcome-label {
+ .caps-heading();
+ flex: 1;
+ font-size: 0.72rem;
+ letter-spacing: 0.06em;
+ color: lighten(@ember-bright, 12%);
+ }
+
+ .chat-outcome-total {
+ font-family: @font-display;
+ font-size: 1.18rem;
+ font-weight: 700;
+ color: @parchment;
+ line-height: 1;
+ }
+
.chat-tooltip-icon {
- opacity: 0.55;
- font-size: 0.75em;
- margin-left: 0.3rem;
- vertical-align: middle;
+ opacity: 0.5;
+ font-size: 0.7rem;
+ margin-left: 0.15rem;
+ flex-shrink: 0;
transition: opacity 0.15s;
}
+
&.tooltip-open .chat-tooltip-icon { opacity: 1; }
}
+// Damage total display
+.mgne-chat-card .chat-damage-total {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.45rem 0.6rem;
+ border-radius: @radius-sm;
+ background: fade(@bg-void, 68%);
+ border-left: 3px solid fade(@ember-bright, 60%);
+
+ &.has-tooltip {
+ cursor: pointer;
+ user-select: none;
+ &:hover { filter: brightness(1.1); }
+ }
+
+ .chat-damage-label {
+ .caps-heading();
+ font-size: 0.65rem;
+ letter-spacing: 0.06em;
+ color: @ash;
+ flex: 1;
+ }
+
+ .chat-damage-number {
+ font-family: @font-display;
+ font-size: 1.3rem;
+ font-weight: 700;
+ color: lighten(@ember-bright, 8%);
+ line-height: 1;
+ }
+
+ .chat-tooltip-icon {
+ opacity: 0.5;
+ font-size: 0.7rem;
+ flex-shrink: 0;
+ transition: opacity 0.15s;
+ }
+
+ &.tooltip-open .chat-tooltip-icon { opacity: 1; }
+}
+
+// Outcome classes — success/crit/steady color
+.mgne-chat-card.outcome-critical-success,
+.mgne-chat-card.outcome-success,
+.mgne-chat-card.outcome-steady {
+ .chat-outcome {
+ border-left-color: fade(@verdigris, 75%);
+ .chat-outcome-label { color: lighten(@verdigris, 28%); }
+ .chat-outcome-icon { color: lighten(@verdigris, 30%); }
+ }
+ .chat-damage-total {
+ border-left-color: fade(@verdigris, 60%);
+ .chat-damage-number { color: lighten(@verdigris, 25%); }
+ }
+}
+
+// Outcome classes — failure/broken/fumble color
+.mgne-chat-card.outcome-failure,
+.mgne-chat-card.outcome-broken,
+.mgne-chat-card.outcome-fumble {
+ .chat-outcome {
+ border-left-color: fade(@ember-bright, 75%);
+ .chat-outcome-label { color: lighten(@ember-bright, 18%); }
+ .chat-outcome-icon { color: lighten(@blood, 10%); }
+ }
+ .chat-damage-total {
+ border-left-color: fade(@ember-bright, 60%);
+ }
+}
+
// Dice tooltip reveal panel
.mgne-chat-card .chat-dice-tooltip {
- margin-top: 0.4rem;
- padding: 0.4rem 0.55rem;
+ padding: 0.35rem 0.5rem;
background: fade(@bg-void, 85%);
- border: 1px solid fade(@bone, 22%);
+ border: 1px solid fade(@bone, 18%);
border-radius: @radius-sm;
- // Foundry's standard dice-roll markup
.dice-roll {
display: flex;
flex-direction: column;
- gap: 0.2rem;
+ gap: 0.15rem;
}
.dice-formula {
font-family: "Courier New", monospace;
- font-size: 0.72rem;
- color: fade(@parchment, 78%);
+ font-size: 0.7rem;
+ color: fade(@parchment, 72%);
}
.dice-tooltip {
- font-size: 0.78rem;
+ font-size: 0.75rem;
}
.dice {
- margin: 0.15rem 0;
+ margin: 0.1rem 0;
}
.die-icon, .die-face {
color: @gold-acid;
- font-size: 0.8rem;
+ font-size: 0.78rem;
}
- .part-formula { color: fade(@parchment, 82%); font-size: 0.72rem; }
+ .part-formula { color: fade(@parchment, 78%); font-size: 0.7rem; }
.part-total { color: @parchment; font-weight: 600; }
.max { color: lighten(@verdigris, 20%); }
.min { color: lighten(@ember-bright, 10%); }
.dice-total {
- font-family: "CastorTwoMGNE", serif;
- font-size: 1.05rem;
+ font-family: @font-display;
+ font-size: 1rem;
color: @gold-acid;
- text-align: right;
- border-top: 1px solid fade(@bone, 20%);
+ text-align: center;
+ border-top: 1px solid fade(@bone, 16%);
padding-top: 0.2rem;
- margin-top: 0.15rem;
+ margin-top: 0.1rem;
}
}
-.mgne-chat-card .chat-outcome {
- .caps-heading();
- margin: 0;
- padding: 0.3rem 0.55rem;
+// Special text
+.mgne-chat-card .chat-special-wrap {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.4rem;
+ padding: 0.35rem 0.5rem;
+ border-left: 2px solid fade(@ember-bright, 40%);
+ background: fade(@bg-input, 80%);
border-radius: @radius-sm;
- background: fade(@bg-void, 72%);
- border-left: 3px solid fade(@ember-bright, 70%);
- color: lighten(@ember-bright, 12%);
- font-size: 0.8rem;
}
-.mgne-chat-card .chat-special {
- padding: 0.42rem 0.55rem;
- border-left: 3px solid fade(@ember-bright, 55%);
- background: fade(@bg-input, 85%);
+.mgne-chat-card .chat-special-icon {
+ flex-shrink: 0;
+ font-size: 0.7rem;
+ color: @ember-bright;
+ margin-top: 0.08rem;
+}
+
+.mgne-chat-card .chat-special-text {
color: @parchment;
+ font-size: 0.72rem;
+ line-height: 1.4;
}
-.mgne-chat-card.outcome-critical-success,
-.mgne-chat-card.outcome-success,
-.mgne-chat-card.outcome-steady {
- border-color: fade(@verdigris, 42%);
+// Omen reminders
+.mgne-chat-card .chat-omen-remind,
+.mgne-chat-card .chat-omen-used {
+ margin: 0;
+ padding: 0.35rem 0.5rem;
+ border-radius: @radius-sm;
+ font-size: 0.7rem;
+ display: flex;
+ align-items: center;
+ gap: 0.35rem;
+}
- .chat-outcome {
- color: lighten(@verdigris, 28%);
- border-left-color: fade(@verdigris, 80%);
+.mgne-chat-card .chat-omen-remind {
+ background: fade(@gold-acid, 18%);
+ border: 1px solid fade(@gold-acid, 35%);
+ color: lighten(@gold-acid, 18%);
+
+ i {
+ color: @gold-acid;
+ font-size: 0.7rem;
}
}
-.mgne-chat-card.outcome-failure,
-.mgne-chat-card.outcome-broken,
-.mgne-chat-card.outcome-fumble {
- border-color: fade(@blood, 48%);
+.mgne-chat-card .chat-omen-neutralize {
+ background: fade(@ember-bright, 18%);
+ border-color: fade(@ember-bright, 35%);
+ color: lighten(@ember-bright, 15%);
- .chat-outcome {
- color: lighten(@ember-bright, 18%);
- border-left-color: fade(@ember-bright, 80%);
+ i {
+ color: @ember-bright;
}
}
-.mgne-chat-card.mode-apply-damage .chat-result-total,
-.mgne-chat-card.mode-damage .chat-result-total {
- color: lighten(@ember-bright, 8%);
+.mgne-chat-card .chat-omen-used {
+ background: fade(@verdigris, 18%);
+ border: 1px solid fade(@verdigris, 32%);
+ color: lighten(@verdigris, 32%);
+
+ i {
+ color: lighten(@verdigris, 35%);
+ font-size: 0.7rem;
+ }
}
+// Card action buttons container
.mgne-chat-card .chat-card-actions {
- margin-top: 0.2rem;
+ margin-top: 0.1rem;
}
+// Roll damage button
.mgne-roll-damage-btn {
display: flex;
align-items: center;
justify-content: center;
- gap: 0.45rem;
+ gap: 0.4rem;
width: 100%;
padding: 0.38rem 0.7rem;
border: 1px solid @ember-bright;
@@ -207,7 +369,7 @@
background: @ember;
color: #f8ede0;
font-family: @font-display;
- font-size: 0.78rem;
+ font-size: 0.76rem;
font-weight: 600;
letter-spacing: 0.06em;
cursor: pointer;
@@ -215,7 +377,7 @@
.dmg-formula {
color: #fff5e8;
- font-size: 0.75rem;
+ font-size: 0.73rem;
font-weight: 700;
}
@@ -242,11 +404,12 @@
}
}
+// Omen reroll button
.mgne-omen-reroll-btn {
display: flex;
align-items: center;
justify-content: center;
- gap: 0.45rem;
+ gap: 0.4rem;
width: 100%;
padding: 0.38rem 0.7rem;
border: 1px solid @gold-acid;
@@ -254,7 +417,7 @@
background: darken(@gold-acid, 15%);
color: #fff5d0;
font-family: @font-display;
- font-size: 0.78rem;
+ font-size: 0.76rem;
font-weight: 600;
letter-spacing: 0.06em;
cursor: pointer;
@@ -267,8 +430,9 @@
}
}
+// Apply damage select
.chat-apply-actions {
- margin-top: 0.35rem;
+ margin-top: 0.25rem;
}
.mgne-apply-damage-select {
@@ -279,7 +443,7 @@
background: @bg-char;
color: @bone;
font-family: @font-body;
- font-size: 0.8rem;
+ font-size: 0.78rem;
font-weight: 600;
cursor: pointer;
transition: border-color 0.15s, background 0.15s;
diff --git a/module/config/system.mjs b/module/config/system.mjs
index 7370893..d039571 100644
--- a/module/config/system.mjs
+++ b/module/config/system.mjs
@@ -139,7 +139,7 @@ export const SYSTEM = {
{ name: "Clothing (Average)", type: "armor", armorDie: "d2", penalty: 0 },
{ name: "Helm", type: "armor", armorDie: "d2", penalty: 0 },
{ name: "Medium Shield", type: "shield", armorDie: "d4", penalty: 0 },
- { name: "Gambeson", type: "armor", armorDie: "d4", penalty: 0 },
+ { name: "Gambeson", type: "armor", armorDie: "d2", penalty: 0 },
{ name: "Padded Leather", type: "armor", armorDie: "d4", penalty: 1 },
{ name: "Chain Shirt", type: "armor", armorDie: "d6", penalty: 1 },
{ name: "Half Plate", type: "armor", armorDie: "d8", penalty: 2 },
diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs
index b752b82..c706c0d 100644
--- a/module/documents/roll.mjs
+++ b/module/documents/roll.mjs
@@ -48,14 +48,28 @@ function numericOptions(min, max, current = null) {
})
}
+const OUTCOME_ICONS = {
+ "critical-success": '',
+ "success": '',
+ "steady": '',
+ "failure": '',
+ "broken": '',
+ "fumble": '',
+ "rolled": '',
+}
+
+const SPECIAL_ICONS = {
+ default: '',
+}
+
async function renderCard(context) {
const outcomeClass = `${context.outcome ?? ""}`
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-|-$/g, "")
- const eyebrow = context.eyebrow ?? getChatModeLabel(context.mode ?? "generic")
- const normalizedEyebrow = `${eyebrow}`.trim().toLowerCase()
- const normalizedLabel = `${context.label ?? ""}`.trim().toLowerCase()
+ const modeLabel = getChatModeLabel(context.mode ?? "generic")
+ const outcomeIcon = OUTCOME_ICONS[outcomeClass] || ""
+ const specialIcon = SPECIAL_ICONS.default
// Render dice tooltip HTML if a roll was provided
const diceTooltip = context._roll ? await context._roll.render() : null
@@ -63,8 +77,10 @@ async function renderCard(context) {
return foundry.applications.handlebars.renderTemplate(`systems/${SYSTEM_ID}/templates/chat-message.hbs`, {
...context,
modeClass: context.mode ?? "generic",
- eyebrow: "",
+ modeLabel,
outcomeClass,
+ outcomeIcon,
+ specialIcon,
diceTooltip,
})
}
@@ -208,7 +224,7 @@ export default class MGNERoll {
return { roll, broken }
}
- static async rollDamage({ actor, item }) {
+ static async rollDamage({ actor, item, targetActor = null }) {
const damageBonus = await actor.consumePendingDamageBonus(item.id)
const multiplier = damageBonus?.multiplier ?? 1
const baseFormula = item.system.damage || "1"
@@ -242,7 +258,7 @@ export default class MGNERoll {
mode: "damage",
actorName: actor.name,
actorImg: actor.img,
- label: `${item.name} Damage`,
+ label: f("MGNE.Roll.ItemDamageLabel", { item: item.name }),
subtitle: null,
formula: roll.formula,
total: roll.total,
@@ -252,6 +268,7 @@ export default class MGNERoll {
showApplyButton: true,
damageTotal: roll.total,
damageCritical: isCritical,
+ damageTargetActorId: targetActor?.id ?? null,
_roll: roll,
})
@@ -264,7 +281,7 @@ export default class MGNERoll {
return { roll }
}
- static async rollFlatDamage({ actor, label, formula }) {
+ static async rollFlatDamage({ actor, label, formula, targetActor = null }) {
const damageBonus = await actor.consumePendingDamageBonus("profile-attack")
const multiplier = damageBonus?.multiplier ?? 1
const baseFormula = formula || "1"
@@ -284,6 +301,7 @@ export default class MGNERoll {
showApplyButton: true,
damageTotal: roll.total,
damageCritical: isCritical,
+ damageTargetActorId: targetActor?.id ?? null,
_roll: roll,
})
diff --git a/module/models/character.mjs b/module/models/character.mjs
index 83b05b7..17f835f 100644
--- a/module/models/character.mjs
+++ b/module/models/character.mjs
@@ -54,7 +54,7 @@ export default class MGNECharacter extends foundry.abstract.TypeDataModel {
// Compute current load per RAW:
// Only items with a weight field count — features and creature-traits are excluded
- // trivial = 0, light = 10 per slot, normal = 1, heavy = fills remaining capacity (max 1)
+ // trivial = 0, light = 10 per slot, normal = 1, heavy = 2
let normalLoad = 0
let lightCount = 0
let heavyCount = 0
@@ -71,15 +71,7 @@ export default class MGNECharacter extends foundry.abstract.TypeDataModel {
this.lightItemCount = lightCount
this.heavyItemCount = heavyCount
- if (heavyCount >= 2) {
- // Can't carry two heavy items — automatically overloaded
- this.currentLoad = this.carryCapacity + (heavyCount - 1)
- } else if (heavyCount === 1) {
- // Heavy fills remaining capacity; other items fit alongside it
- this.currentLoad = Math.max(normalLoad, this.carryCapacity)
- } else {
- this.currentLoad = normalLoad
- }
+ this.currentLoad = normalLoad + heavyCount * 2
this.overloaded = this.currentLoad > this.carryCapacity
}
diff --git a/package-lock.json b/package-lock.json
index d39cc39..25dcb38 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,9 +7,11 @@
"": {
"name": "fvtt-machine-gods-noxian-expanse",
"version": "0.1.0",
+ "hasInstallScript": true,
"license": "UNLICENSED",
"devDependencies": {
"@foundryvtt/foundryvtt-cli": "^3.0.3",
+ "classic-level": "^3.0.0",
"less": "^4.6.4",
"patch-package": "^8.0.1"
}
@@ -36,6 +38,53 @@
"node": ">17.0.0"
}
},
+ "node_modules/@foundryvtt/foundryvtt-cli/node_modules/abstract-level": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz",
+ "integrity": "sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "catering": "^2.1.0",
+ "is-buffer": "^2.0.5",
+ "level-supports": "^4.0.0",
+ "level-transcoder": "^1.0.1",
+ "module-error": "^1.0.1",
+ "queue-microtask": "^1.2.3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@foundryvtt/foundryvtt-cli/node_modules/classic-level": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz",
+ "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-level": "^1.0.2",
+ "catering": "^2.1.0",
+ "module-error": "^1.0.1",
+ "napi-macros": "^2.2.2",
+ "node-gyp-build": "^4.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@foundryvtt/foundryvtt-cli/node_modules/level-supports": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
+ "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@seald-io/binary-search-tree": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz",
@@ -62,22 +111,21 @@
"license": "BSD-2-Clause"
},
"node_modules/abstract-level": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz",
- "integrity": "sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-3.1.1.tgz",
+ "integrity": "sha512-CW2gKbJFTuX1feMvOrvsVMmijAOgI9kg2Ie9Dq3gOcMt/dVVoVmqNlLcEUCT13NxHFMEajcUcVBIplbyDroDiw==",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer": "^6.0.3",
- "catering": "^2.1.0",
"is-buffer": "^2.0.5",
- "level-supports": "^4.0.0",
+ "level-supports": "^6.2.0",
"level-transcoder": "^1.0.1",
- "module-error": "^1.0.1",
- "queue-microtask": "^1.2.3"
+ "maybe-combine-errors": "^1.0.0",
+ "module-error": "^1.0.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/ansi-regex": {
@@ -278,21 +326,20 @@
}
},
"node_modules/classic-level": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz",
- "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-3.0.0.tgz",
+ "integrity": "sha512-yGy8j8LjPbN0Bh3+ygmyYvrmskVita92pD/zCoalfcC9XxZj6iDtZTAnz+ot7GG8p9KLTG+MZ84tSA4AhkgVZQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "abstract-level": "^1.0.2",
- "catering": "^2.1.0",
+ "abstract-level": "^3.1.0",
"module-error": "^1.0.1",
"napi-macros": "^2.2.2",
"node-gyp-build": "^4.3.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/cliui": {
@@ -1017,13 +1064,13 @@
}
},
"node_modules/level-supports": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
- "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-6.2.0.tgz",
+ "integrity": "sha512-QNxVXP0IRnBmMsJIh+sb2kwNCYcKciQZJEt+L1hPCHrKNELllXhvrlClVHXBYZVT+a7aTSM6StgNXdAldoab3w==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=16"
}
},
"node_modules/level-transcoder": {
@@ -1085,6 +1132,16 @@
"node": ">= 0.4"
}
},
+ "node_modules/maybe-combine-errors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/maybe-combine-errors/-/maybe-combine-errors-1.0.0.tgz",
+ "integrity": "sha512-eefp6IduNPT6fVdwPp+1NgD0PML1NU5P6j1Mj5nz1nidX8/sWY7119WL8vTAHgqfsY74TzW0w1XPgdYEKkGZ5A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
diff --git a/package.json b/package.json
index 960b646..c3d48ec 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
},
"devDependencies": {
"@foundryvtt/foundryvtt-cli": "^3.0.3",
+ "classic-level": "^3.0.0",
"less": "^4.6.4",
"patch-package": "^8.0.1"
}
diff --git a/packs-system/armor/000080.log b/packs-system/armor/000019.log
similarity index 100%
rename from packs-system/armor/000080.log
rename to packs-system/armor/000019.log
diff --git a/packs-system/armor/000021.ldb b/packs-system/armor/000021.ldb
new file mode 100644
index 0000000..5b14307
Binary files /dev/null and b/packs-system/armor/000021.ldb differ
diff --git a/packs-system/armor/000034.ldb b/packs-system/armor/000034.ldb
deleted file mode 100644
index b186cc7..0000000
Binary files a/packs-system/armor/000034.ldb and /dev/null differ
diff --git a/packs-system/armor/000082.ldb b/packs-system/armor/000082.ldb
deleted file mode 100644
index 676c07d..0000000
Binary files a/packs-system/armor/000082.ldb and /dev/null differ
diff --git a/packs-system/armor/CURRENT b/packs-system/armor/CURRENT
index 741d918..056df57 100644
--- a/packs-system/armor/CURRENT
+++ b/packs-system/armor/CURRENT
@@ -1 +1 @@
-MANIFEST-000078
+MANIFEST-000017
diff --git a/packs-system/armor/LOG b/packs-system/armor/LOG
index c1e8ee7..9401fc6 100644
--- a/packs-system/armor/LOG
+++ b/packs-system/armor/LOG
@@ -1,15 +1,13 @@
-2026/06/04-19:59:31.303282 7f480abff6c0 Recovering log #75
-2026/06/04-19:59:31.312491 7f480abff6c0 Delete type=3 #73
-2026/06/04-19:59:31.312518 7f480abff6c0 Delete type=0 #75
-2026/06/04-20:00:50.106068 7f4808bfb6c0 Level-0 table #81: started
-2026/06/04-20:00:50.109748 7f4808bfb6c0 Level-0 table #81: 1354 bytes OK
-2026/06/04-20:00:50.116095 7f4808bfb6c0 Delete type=0 #79
-2026/06/04-20:00:50.133136 7f4808bfb6c0 Manual compaction at level-0 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.133294 7f4808bfb6c0 Manual compaction at level-1 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 130 : 1
-2026/06/04-20:00:50.133299 7f4808bfb6c0 Compacting 1@1 + 1@2 files
-2026/06/04-20:00:50.136397 7f4808bfb6c0 Generated table #82@1: 1 keys, 685 bytes
-2026/06/04-20:00:50.136409 7f4808bfb6c0 Compacted 1@1 + 1@2 files => 685 bytes
-2026/06/04-20:00:50.142598 7f4808bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/04-20:00:50.142662 7f4808bfb6c0 Delete type=2 #77
-2026/06/04-20:00:50.142750 7f4808bfb6c0 Delete type=2 #81
-2026/06/04-20:00:50.170090 7f4808bfb6c0 Manual compaction at level-1 from '!items!null' @ 130 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.428299 7f5208bff6c0 Delete type=3 #1
+2026/06/08-22:19:11.056868 7f51ba7fc6c0 Level-0 table #20: started
+2026/06/08-22:19:11.059874 7f51ba7fc6c0 Level-0 table #20: 1820 bytes OK
+2026/06/08-22:19:11.066080 7f51ba7fc6c0 Delete type=0 #18
+2026/06/08-22:19:11.078344 7f51ba7fc6c0 Manual compaction at level-0 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 9 : 1
+2026/06/08-22:19:11.078355 7f51ba7fc6c0 Compacting 3@0 + 0@1 files
+2026/06/08-22:19:11.081644 7f51ba7fc6c0 Generated table #21@0: 9 keys, 1445 bytes
+2026/06/08-22:19:11.081666 7f51ba7fc6c0 Compacted 3@0 + 0@1 files => 1445 bytes
+2026/06/08-22:19:11.087510 7f51ba7fc6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
+2026/06/08-22:19:11.087564 7f51ba7fc6c0 Delete type=2 #5
+2026/06/08-22:19:11.087613 7f51ba7fc6c0 Delete type=2 #15
+2026/06/08-22:19:11.087653 7f51ba7fc6c0 Delete type=2 #20
+2026/06/08-22:19:11.094063 7f51ba7fc6c0 Manual compaction at level-0 from '!items!null' @ 9 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
diff --git a/packs-system/armor/LOG.old b/packs-system/armor/LOG.old
index c52bc09..48c2dcd 100644
--- a/packs-system/armor/LOG.old
+++ b/packs-system/armor/LOG.old
@@ -1,15 +1,5 @@
-2026/06/02-19:43:31.530779 7f2215bfe6c0 Recovering log #70
-2026/06/02-19:43:31.541230 7f2215bfe6c0 Delete type=3 #68
-2026/06/02-19:43:31.541267 7f2215bfe6c0 Delete type=0 #70
-2026/06/02-19:44:40.424603 7f1ff7fff6c0 Level-0 table #76: started
-2026/06/02-19:44:40.428039 7f1ff7fff6c0 Level-0 table #76: 1354 bytes OK
-2026/06/02-19:44:40.435632 7f1ff7fff6c0 Delete type=0 #74
-2026/06/02-19:44:40.446442 7f1ff7fff6c0 Manual compaction at level-0 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.446598 7f1ff7fff6c0 Manual compaction at level-1 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 122 : 1
-2026/06/02-19:44:40.446608 7f1ff7fff6c0 Compacting 1@1 + 1@2 files
-2026/06/02-19:44:40.449973 7f1ff7fff6c0 Generated table #77@1: 1 keys, 685 bytes
-2026/06/02-19:44:40.450003 7f1ff7fff6c0 Compacted 1@1 + 1@2 files => 685 bytes
-2026/06/02-19:44:40.456735 7f1ff7fff6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/02-19:44:40.457031 7f1ff7fff6c0 Delete type=2 #72
-2026/06/02-19:44:40.457165 7f1ff7fff6c0 Delete type=2 #76
-2026/06/02-19:44:40.489581 7f1ff7fff6c0 Manual compaction at level-1 from '!items!null' @ 122 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.414330 7f5208bff6c0 Log #14: 0 ops saved to Table #16 OK
+2026/06/08-22:14:53.414360 7f5208bff6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/armor/000014.log: OK
+2026/06/08-22:14:53.414379 7f5208bff6c0 Table #5: 8 entries OK
+2026/06/08-22:14:53.414393 7f5208bff6c0 Table #15: 8 entries OK
+2026/06/08-22:14:53.417435 7f5208bff6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/armor; recovered 2 files; 3045 bytes. Some data may have been lost. ****
diff --git a/packs-system/armor/MANIFEST-000017 b/packs-system/armor/MANIFEST-000017
new file mode 100644
index 0000000..0753f99
Binary files /dev/null and b/packs-system/armor/MANIFEST-000017 differ
diff --git a/packs-system/armor/MANIFEST-000078 b/packs-system/armor/MANIFEST-000078
deleted file mode 100644
index 0ea1c3c..0000000
Binary files a/packs-system/armor/MANIFEST-000078 and /dev/null differ
diff --git a/packs-system/companions/000080.log b/packs-system/armor/lost/000014.log
similarity index 100%
rename from packs-system/companions/000080.log
rename to packs-system/armor/lost/000014.log
diff --git a/packs-system/features/000080.log b/packs-system/companions/000017.log
similarity index 100%
rename from packs-system/features/000080.log
rename to packs-system/companions/000017.log
diff --git a/packs-system/companions/000019.ldb b/packs-system/companions/000019.ldb
new file mode 100644
index 0000000..15e2857
Binary files /dev/null and b/packs-system/companions/000019.ldb differ
diff --git a/packs-system/companions/000034.ldb b/packs-system/companions/000034.ldb
deleted file mode 100644
index 84c7520..0000000
Binary files a/packs-system/companions/000034.ldb and /dev/null differ
diff --git a/packs-system/companions/000082.ldb b/packs-system/companions/000082.ldb
deleted file mode 100644
index 7ede5d8..0000000
Binary files a/packs-system/companions/000082.ldb and /dev/null differ
diff --git a/packs-system/companions/CURRENT b/packs-system/companions/CURRENT
index 741d918..42c62b6 100644
--- a/packs-system/companions/CURRENT
+++ b/packs-system/companions/CURRENT
@@ -1 +1 @@
-MANIFEST-000078
+MANIFEST-000015
diff --git a/packs-system/companions/LOG b/packs-system/companions/LOG
index 14cc42d..b561b5b 100644
--- a/packs-system/companions/LOG
+++ b/packs-system/companions/LOG
@@ -1,15 +1,13 @@
-2026/06/04-19:59:31.279596 7f48093fc6c0 Recovering log #75
-2026/06/04-19:59:31.289218 7f48093fc6c0 Delete type=3 #73
-2026/06/04-19:59:31.289235 7f48093fc6c0 Delete type=0 #75
-2026/06/04-20:00:50.045800 7f4808bfb6c0 Level-0 table #81: started
-2026/06/04-20:00:50.049176 7f4808bfb6c0 Level-0 table #81: 4899 bytes OK
-2026/06/04-20:00:50.055679 7f4808bfb6c0 Delete type=0 #79
-2026/06/04-20:00:50.066108 7f4808bfb6c0 Manual compaction at level-0 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.076443 7f4808bfb6c0 Manual compaction at level-1 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at '!actors!null' @ 66 : 1
-2026/06/04-20:00:50.076453 7f4808bfb6c0 Compacting 1@1 + 1@2 files
-2026/06/04-20:00:50.079696 7f4808bfb6c0 Generated table #82@1: 1 keys, 1984 bytes
-2026/06/04-20:00:50.079711 7f4808bfb6c0 Compacted 1@1 + 1@2 files => 1984 bytes
-2026/06/04-20:00:50.085900 7f4808bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/04-20:00:50.085969 7f4808bfb6c0 Delete type=2 #77
-2026/06/04-20:00:50.086069 7f4808bfb6c0 Delete type=2 #81
-2026/06/04-20:00:50.096347 7f4808bfb6c0 Manual compaction at level-1 from '!actors!null' @ 66 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.395457 7f5208bff6c0 Delete type=3 #1
+2026/06/08-22:19:10.911852 7f51ba7fc6c0 Level-0 table #18: started
+2026/06/08-22:19:10.915426 7f51ba7fc6c0 Level-0 table #18: 4899 bytes OK
+2026/06/08-22:19:10.921268 7f51ba7fc6c0 Delete type=0 #16
+2026/06/08-22:19:10.949522 7f51ba7fc6c0 Manual compaction at level-0 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at '!actors!null' @ 5 : 1
+2026/06/08-22:19:10.949526 7f51ba7fc6c0 Compacting 3@0 + 0@1 files
+2026/06/08-22:19:10.952376 7f51ba7fc6c0 Generated table #19@0: 5 keys, 3562 bytes
+2026/06/08-22:19:10.952384 7f51ba7fc6c0 Compacted 3@0 + 0@1 files => 3562 bytes
+2026/06/08-22:19:10.958012 7f51ba7fc6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
+2026/06/08-22:19:10.958266 7f51ba7fc6c0 Delete type=2 #5
+2026/06/08-22:19:10.958306 7f51ba7fc6c0 Delete type=2 #13
+2026/06/08-22:19:10.958337 7f51ba7fc6c0 Delete type=2 #18
+2026/06/08-22:19:10.985998 7f51ba7fc6c0 Manual compaction at level-0 from '!actors!null' @ 5 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
diff --git a/packs-system/companions/LOG.old b/packs-system/companions/LOG.old
index 1e17b10..d414f23 100644
--- a/packs-system/companions/LOG.old
+++ b/packs-system/companions/LOG.old
@@ -1,15 +1,5 @@
-2026/06/02-19:43:31.502187 7f22153fd6c0 Recovering log #70
-2026/06/02-19:43:31.512581 7f22153fd6c0 Delete type=3 #68
-2026/06/02-19:43:31.512620 7f22153fd6c0 Delete type=0 #70
-2026/06/02-19:44:40.413927 7f1ff7fff6c0 Level-0 table #76: started
-2026/06/02-19:44:40.417618 7f1ff7fff6c0 Level-0 table #76: 4899 bytes OK
-2026/06/02-19:44:40.424469 7f1ff7fff6c0 Delete type=0 #74
-2026/06/02-19:44:40.446430 7f1ff7fff6c0 Manual compaction at level-0 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.468275 7f1ff7fff6c0 Manual compaction at level-1 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at '!actors!null' @ 62 : 1
-2026/06/02-19:44:40.468288 7f1ff7fff6c0 Compacting 1@1 + 1@2 files
-2026/06/02-19:44:40.471670 7f1ff7fff6c0 Generated table #77@1: 1 keys, 1984 bytes
-2026/06/02-19:44:40.471701 7f1ff7fff6c0 Compacted 1@1 + 1@2 files => 1984 bytes
-2026/06/02-19:44:40.477948 7f1ff7fff6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/02-19:44:40.478072 7f1ff7fff6c0 Delete type=2 #72
-2026/06/02-19:44:40.478253 7f1ff7fff6c0 Delete type=2 #76
-2026/06/02-19:44:40.489611 7f1ff7fff6c0 Manual compaction at level-1 from '!actors!null' @ 62 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.381718 7f5208bff6c0 Log #12: 0 ops saved to Table #14 OK
+2026/06/08-22:14:53.381752 7f5208bff6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/companions/000012.log: OK
+2026/06/08-22:14:53.381773 7f5208bff6c0 Table #5: 4 entries OK
+2026/06/08-22:14:53.381792 7f5208bff6c0 Table #13: 4 entries OK
+2026/06/08-22:14:53.384902 7f5208bff6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/companions; recovered 2 files; 7496 bytes. Some data may have been lost. ****
diff --git a/packs-system/companions/MANIFEST-000015 b/packs-system/companions/MANIFEST-000015
new file mode 100644
index 0000000..638eda3
Binary files /dev/null and b/packs-system/companions/MANIFEST-000015 differ
diff --git a/packs-system/companions/MANIFEST-000078 b/packs-system/companions/MANIFEST-000078
deleted file mode 100644
index 99efb2b..0000000
Binary files a/packs-system/companions/MANIFEST-000078 and /dev/null differ
diff --git a/packs-system/names/000082.log b/packs-system/companions/lost/000012.log
similarity index 100%
rename from packs-system/names/000082.log
rename to packs-system/companions/lost/000012.log
diff --git a/packs-system/resonations/000080.log b/packs-system/features/000017.log
similarity index 100%
rename from packs-system/resonations/000080.log
rename to packs-system/features/000017.log
diff --git a/packs-system/features/000034.ldb b/packs-system/features/000019.ldb
similarity index 61%
rename from packs-system/features/000034.ldb
rename to packs-system/features/000019.ldb
index 2014f0e..843a0e9 100644
Binary files a/packs-system/features/000034.ldb and b/packs-system/features/000019.ldb differ
diff --git a/packs-system/features/000082.ldb b/packs-system/features/000082.ldb
deleted file mode 100644
index 1e359ac..0000000
Binary files a/packs-system/features/000082.ldb and /dev/null differ
diff --git a/packs-system/features/CURRENT b/packs-system/features/CURRENT
index 741d918..42c62b6 100644
--- a/packs-system/features/CURRENT
+++ b/packs-system/features/CURRENT
@@ -1 +1 @@
-MANIFEST-000078
+MANIFEST-000015
diff --git a/packs-system/features/LOG b/packs-system/features/LOG
index 54edeaf..79044cf 100644
--- a/packs-system/features/LOG
+++ b/packs-system/features/LOG
@@ -1,15 +1,13 @@
-2026/06/04-19:59:31.268808 7f480a3fe6c0 Recovering log #75
-2026/06/04-19:59:31.278025 7f480a3fe6c0 Delete type=3 #73
-2026/06/04-19:59:31.278064 7f480a3fe6c0 Delete type=0 #75
-2026/06/04-20:00:50.055792 7f4808bfb6c0 Level-0 table #81: started
-2026/06/04-20:00:50.059981 7f4808bfb6c0 Level-0 table #81: 10404 bytes OK
-2026/06/04-20:00:50.065983 7f4808bfb6c0 Delete type=0 #79
-2026/06/04-20:00:50.096324 7f4808bfb6c0 Manual compaction at level-0 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.096480 7f4808bfb6c0 Manual compaction at level-1 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 578 : 1
-2026/06/04-20:00:50.096485 7f4808bfb6c0 Compacting 1@1 + 1@2 files
-2026/06/04-20:00:50.099620 7f4808bfb6c0 Generated table #82@1: 1 keys, 728 bytes
-2026/06/04-20:00:50.099636 7f4808bfb6c0 Compacted 1@1 + 1@2 files => 728 bytes
-2026/06/04-20:00:50.105851 7f4808bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/04-20:00:50.105910 7f4808bfb6c0 Delete type=2 #77
-2026/06/04-20:00:50.105999 7f4808bfb6c0 Delete type=2 #81
-2026/06/04-20:00:50.133122 7f4808bfb6c0 Manual compaction at level-1 from '!items!null' @ 578 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.380282 7f51baffd6c0 Delete type=3 #1
+2026/06/08-22:19:10.931121 7f51ba7fc6c0 Level-0 table #18: started
+2026/06/08-22:19:10.934184 7f51ba7fc6c0 Level-0 table #18: 10411 bytes OK
+2026/06/08-22:19:10.939850 7f51ba7fc6c0 Delete type=0 #16
+2026/06/08-22:19:10.967505 7f51ba7fc6c0 Manual compaction at level-0 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 37 : 1
+2026/06/08-22:19:10.967509 7f51ba7fc6c0 Compacting 3@0 + 0@1 files
+2026/06/08-22:19:10.971430 7f51ba7fc6c0 Generated table #19@0: 37 keys, 8891 bytes
+2026/06/08-22:19:10.971443 7f51ba7fc6c0 Compacted 3@0 + 0@1 files => 8891 bytes
+2026/06/08-22:19:10.977132 7f51ba7fc6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
+2026/06/08-22:19:10.977169 7f51ba7fc6c0 Delete type=2 #5
+2026/06/08-22:19:10.977215 7f51ba7fc6c0 Delete type=2 #13
+2026/06/08-22:19:10.977242 7f51ba7fc6c0 Delete type=2 #18
+2026/06/08-22:19:10.986012 7f51ba7fc6c0 Manual compaction at level-0 from '!items!null' @ 37 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
diff --git a/packs-system/features/LOG.old b/packs-system/features/LOG.old
index 65a4fe8..a163f0e 100644
--- a/packs-system/features/LOG.old
+++ b/packs-system/features/LOG.old
@@ -1,15 +1,5 @@
-2026/06/02-19:43:31.488540 7f2215bfe6c0 Recovering log #70
-2026/06/02-19:43:31.498827 7f2215bfe6c0 Delete type=3 #68
-2026/06/02-19:43:31.498873 7f2215bfe6c0 Delete type=0 #70
-2026/06/02-19:44:40.435761 7f1ff7fff6c0 Level-0 table #76: started
-2026/06/02-19:44:40.439546 7f1ff7fff6c0 Level-0 table #76: 10405 bytes OK
-2026/06/02-19:44:40.446253 7f1ff7fff6c0 Delete type=0 #74
-2026/06/02-19:44:40.446564 7f1ff7fff6c0 Manual compaction at level-0 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.478358 7f1ff7fff6c0 Manual compaction at level-1 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 542 : 1
-2026/06/02-19:44:40.478373 7f1ff7fff6c0 Compacting 1@1 + 1@2 files
-2026/06/02-19:44:40.482365 7f1ff7fff6c0 Generated table #77@1: 1 keys, 728 bytes
-2026/06/02-19:44:40.482397 7f1ff7fff6c0 Compacted 1@1 + 1@2 files => 728 bytes
-2026/06/02-19:44:40.489232 7f1ff7fff6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/02-19:44:40.489356 7f1ff7fff6c0 Delete type=2 #72
-2026/06/02-19:44:40.489491 7f1ff7fff6c0 Delete type=2 #76
-2026/06/02-19:44:40.489825 7f1ff7fff6c0 Manual compaction at level-1 from '!items!null' @ 542 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.366714 7f51baffd6c0 Log #12: 0 ops saved to Table #14 OK
+2026/06/08-22:14:53.366760 7f51baffd6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/features/000012.log: OK
+2026/06/08-22:14:53.366800 7f51baffd6c0 Table #5: 36 entries OK
+2026/06/08-22:14:53.366827 7f51baffd6c0 Table #13: 36 entries OK
+2026/06/08-22:14:53.369778 7f51baffd6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/features; recovered 2 files; 19088 bytes. Some data may have been lost. ****
diff --git a/packs-system/features/MANIFEST-000015 b/packs-system/features/MANIFEST-000015
new file mode 100644
index 0000000..02754ff
Binary files /dev/null and b/packs-system/features/MANIFEST-000015 differ
diff --git a/packs-system/features/MANIFEST-000078 b/packs-system/features/MANIFEST-000078
deleted file mode 100644
index 3f450a4..0000000
Binary files a/packs-system/features/MANIFEST-000078 and /dev/null differ
diff --git a/packs-system/scenes/000016.log b/packs-system/features/lost/000012.log
similarity index 100%
rename from packs-system/scenes/000016.log
rename to packs-system/features/lost/000012.log
diff --git a/packs-system/weapons/000080.log b/packs-system/names/000018.log
similarity index 100%
rename from packs-system/weapons/000080.log
rename to packs-system/names/000018.log
diff --git a/packs-system/names/000020.ldb b/packs-system/names/000020.ldb
new file mode 100644
index 0000000..b04fbfd
Binary files /dev/null and b/packs-system/names/000020.ldb differ
diff --git a/packs-system/names/000084.ldb b/packs-system/names/000084.ldb
deleted file mode 100644
index 38e4e07..0000000
Binary files a/packs-system/names/000084.ldb and /dev/null differ
diff --git a/packs-system/names/CURRENT b/packs-system/names/CURRENT
index e73ded3..32108be 100644
--- a/packs-system/names/CURRENT
+++ b/packs-system/names/CURRENT
@@ -1 +1 @@
-MANIFEST-000080
+MANIFEST-000016
diff --git a/packs-system/names/LOG b/packs-system/names/LOG
index 17e75c1..e1262c6 100644
--- a/packs-system/names/LOG
+++ b/packs-system/names/LOG
@@ -1,15 +1,12 @@
-2026/06/04-19:59:31.314227 7f480a3fe6c0 Recovering log #77
-2026/06/04-19:59:31.324228 7f480a3fe6c0 Delete type=3 #75
-2026/06/04-19:59:31.324261 7f480a3fe6c0 Delete type=0 #77
-2026/06/04-20:00:50.116271 7f4808bfb6c0 Level-0 table #83: started
-2026/06/04-20:00:50.120528 7f4808bfb6c0 Level-0 table #83: 36363 bytes OK
-2026/06/04-20:00:50.126851 7f4808bfb6c0 Delete type=0 #81
-2026/06/04-20:00:50.133146 7f4808bfb6c0 Manual compaction at level-0 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zwUjCB2xwyG4KtF8' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.142815 7f4808bfb6c0 Manual compaction at level-1 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zwUjCB2xwyG4KtF8' @ 0 : 0; will stop at '!tables.results!zwUjCB2xwyG4KtF8' @ 6608 : 1
-2026/06/04-20:00:50.142822 7f4808bfb6c0 Compacting 1@1 + 1@2 files
-2026/06/04-20:00:50.147353 7f4808bfb6c0 Generated table #84@1: 436 keys, 40657 bytes
-2026/06/04-20:00:50.147367 7f4808bfb6c0 Compacted 1@1 + 1@2 files => 40657 bytes
-2026/06/04-20:00:50.153433 7f4808bfb6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/06/04-20:00:50.153502 7f4808bfb6c0 Delete type=2 #79
-2026/06/04-20:00:50.153631 7f4808bfb6c0 Delete type=2 #83
-2026/06/04-20:00:50.170103 7f4808bfb6c0 Manual compaction at level-1 from '!tables.results!zwUjCB2xwyG4KtF8' @ 6608 : 1 .. '!tables.results!zwUjCB2xwyG4KtF8' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.442808 7f5208bff6c0 Delete type=3 #1
+2026/06/08-22:19:10.998524 7f51ba7fc6c0 Level-0 table #19: started
+2026/06/08-22:19:11.001773 7f51ba7fc6c0 Level-0 table #19: 36644 bytes OK
+2026/06/08-22:19:11.007734 7f51ba7fc6c0 Delete type=0 #17
+2026/06/08-22:19:11.017605 7f51ba7fc6c0 Manual compaction at level-0 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zsVzjhOcmPM5BpOa' @ 0 : 0; will stop at '!tables.results!zu1umyi8Rap9kjGg' @ 660 : 0
+2026/06/08-22:19:11.017609 7f51ba7fc6c0 Compacting 2@0 + 0@1 files
+2026/06/08-22:19:11.021331 7f51ba7fc6c0 Generated table #20@0: 436 keys, 40467 bytes
+2026/06/08-22:19:11.021354 7f51ba7fc6c0 Compacted 2@0 + 0@1 files => 40467 bytes
+2026/06/08-22:19:11.027529 7f51ba7fc6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
+2026/06/08-22:19:11.027616 7f51ba7fc6c0 Delete type=2 #14
+2026/06/08-22:19:11.027682 7f51ba7fc6c0 Delete type=2 #19
+2026/06/08-22:19:11.040159 7f51ba7fc6c0 Manual compaction at level-0 from '!tables.results!zu1umyi8Rap9kjGg' @ 660 : 0 .. '!tables.results!zsVzjhOcmPM5BpOa' @ 0 : 0; will stop at (end)
diff --git a/packs-system/names/LOG.old b/packs-system/names/LOG.old
index 61ae15c..991810d 100644
--- a/packs-system/names/LOG.old
+++ b/packs-system/names/LOG.old
@@ -1,15 +1,4 @@
-2026/06/02-19:43:31.544375 7f22153fd6c0 Recovering log #72
-2026/06/02-19:43:31.554816 7f22153fd6c0 Delete type=3 #70
-2026/06/02-19:43:31.554878 7f22153fd6c0 Delete type=0 #72
-2026/06/02-19:44:40.500606 7f1ff7fff6c0 Level-0 table #78: started
-2026/06/02-19:44:40.505562 7f1ff7fff6c0 Level-0 table #78: 36499 bytes OK
-2026/06/02-19:44:40.512075 7f1ff7fff6c0 Delete type=0 #76
-2026/06/02-19:44:40.526628 7f1ff7fff6c0 Manual compaction at level-0 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zjAZ7bctIvTyKfff' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.526936 7f1ff7fff6c0 Manual compaction at level-1 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zjAZ7bctIvTyKfff' @ 0 : 0; will stop at '!tables.results!zjAZ7bctIvTyKfff' @ 6129 : 1
-2026/06/02-19:44:40.526943 7f1ff7fff6c0 Compacting 1@1 + 1@2 files
-2026/06/02-19:44:40.531590 7f1ff7fff6c0 Generated table #79@1: 436 keys, 40570 bytes
-2026/06/02-19:44:40.531624 7f1ff7fff6c0 Compacted 1@1 + 1@2 files => 40570 bytes
-2026/06/02-19:44:40.538399 7f1ff7fff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
-2026/06/02-19:44:40.538517 7f1ff7fff6c0 Delete type=2 #74
-2026/06/02-19:44:40.538677 7f1ff7fff6c0 Delete type=2 #78
-2026/06/02-19:44:40.564184 7f1ff7fff6c0 Manual compaction at level-1 from '!tables.results!zjAZ7bctIvTyKfff' @ 6129 : 1 .. '!tables.results!zjAZ7bctIvTyKfff' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.429821 7f5208bff6c0 Log #12: 0 ops saved to Table #15 OK
+2026/06/08-22:14:53.429856 7f5208bff6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/names/000012.log: OK
+2026/06/08-22:14:53.429946 7f5208bff6c0 Table #14: 436 entries OK
+2026/06/08-22:14:53.432967 7f5208bff6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/names; recovered 1 files; 40343 bytes. Some data may have been lost. ****
diff --git a/packs-system/names/MANIFEST-000016 b/packs-system/names/MANIFEST-000016
new file mode 100644
index 0000000..d583c9a
Binary files /dev/null and b/packs-system/names/MANIFEST-000016 differ
diff --git a/packs-system/names/MANIFEST-000080 b/packs-system/names/MANIFEST-000080
deleted file mode 100644
index 98c54aa..0000000
Binary files a/packs-system/names/MANIFEST-000080 and /dev/null differ
diff --git a/packs-system/names/lost/000012.log b/packs-system/names/lost/000012.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs-system/resonations/000017.log b/packs-system/resonations/000017.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs-system/resonations/000019.ldb b/packs-system/resonations/000019.ldb
new file mode 100644
index 0000000..41c1bb0
Binary files /dev/null and b/packs-system/resonations/000019.ldb differ
diff --git a/packs-system/resonations/000034.ldb b/packs-system/resonations/000034.ldb
deleted file mode 100644
index 22f0cc0..0000000
Binary files a/packs-system/resonations/000034.ldb and /dev/null differ
diff --git a/packs-system/resonations/000082.ldb b/packs-system/resonations/000082.ldb
deleted file mode 100644
index 3aa59e1..0000000
Binary files a/packs-system/resonations/000082.ldb and /dev/null differ
diff --git a/packs-system/resonations/CURRENT b/packs-system/resonations/CURRENT
index 741d918..42c62b6 100644
--- a/packs-system/resonations/CURRENT
+++ b/packs-system/resonations/CURRENT
@@ -1 +1 @@
-MANIFEST-000078
+MANIFEST-000015
diff --git a/packs-system/resonations/LOG b/packs-system/resonations/LOG
index de692db..960c09c 100644
--- a/packs-system/resonations/LOG
+++ b/packs-system/resonations/LOG
@@ -1,15 +1,13 @@
-2026/06/04-19:59:31.255965 7f48093fc6c0 Recovering log #75
-2026/06/04-19:59:31.266393 7f48093fc6c0 Delete type=3 #73
-2026/06/04-19:59:31.266452 7f48093fc6c0 Delete type=0 #75
-2026/06/04-20:00:50.024423 7f4808bfb6c0 Level-0 table #81: started
-2026/06/04-20:00:50.028206 7f4808bfb6c0 Level-0 table #81: 7108 bytes OK
-2026/06/04-20:00:50.034820 7f4808bfb6c0 Delete type=0 #79
-2026/06/04-20:00:50.066089 7f4808bfb6c0 Manual compaction at level-0 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.066131 7f4808bfb6c0 Manual compaction at level-1 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 322 : 1
-2026/06/04-20:00:50.066135 7f4808bfb6c0 Compacting 1@1 + 1@2 files
-2026/06/04-20:00:50.069225 7f4808bfb6c0 Generated table #82@1: 1 keys, 911 bytes
-2026/06/04-20:00:50.069242 7f4808bfb6c0 Compacted 1@1 + 1@2 files => 911 bytes
-2026/06/04-20:00:50.075815 7f4808bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/04-20:00:50.076200 7f4808bfb6c0 Delete type=2 #77
-2026/06/04-20:00:50.076357 7f4808bfb6c0 Delete type=2 #81
-2026/06/04-20:00:50.096339 7f4808bfb6c0 Manual compaction at level-1 from '!items!null' @ 322 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.363783 7f51bbfff6c0 Delete type=3 #1
+2026/06/08-22:19:10.921385 7f51ba7fc6c0 Level-0 table #18: started
+2026/06/08-22:19:10.924862 7f51ba7fc6c0 Level-0 table #18: 7117 bytes OK
+2026/06/08-22:19:10.931063 7f51ba7fc6c0 Delete type=0 #16
+2026/06/08-22:19:10.958364 7f51ba7fc6c0 Manual compaction at level-0 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 21 : 1
+2026/06/08-22:19:10.958368 7f51ba7fc6c0 Compacting 3@0 + 0@1 files
+2026/06/08-22:19:10.961342 7f51ba7fc6c0 Generated table #19@0: 21 keys, 6260 bytes
+2026/06/08-22:19:10.961359 7f51ba7fc6c0 Compacted 3@0 + 0@1 files => 6260 bytes
+2026/06/08-22:19:10.967342 7f51ba7fc6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
+2026/06/08-22:19:10.967422 7f51ba7fc6c0 Delete type=2 #5
+2026/06/08-22:19:10.967460 7f51ba7fc6c0 Delete type=2 #13
+2026/06/08-22:19:10.967485 7f51ba7fc6c0 Delete type=2 #18
+2026/06/08-22:19:10.986005 7f51ba7fc6c0 Manual compaction at level-0 from '!items!null' @ 21 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
diff --git a/packs-system/resonations/LOG.old b/packs-system/resonations/LOG.old
index f0b5440..ab6bd49 100644
--- a/packs-system/resonations/LOG.old
+++ b/packs-system/resonations/LOG.old
@@ -1,15 +1,5 @@
-2026/06/02-19:43:31.473126 7f22163ff6c0 Recovering log #70
-2026/06/02-19:43:31.484666 7f22163ff6c0 Delete type=3 #68
-2026/06/02-19:43:31.484705 7f22163ff6c0 Delete type=0 #70
-2026/06/02-19:44:40.402774 7f1ff7fff6c0 Level-0 table #76: started
-2026/06/02-19:44:40.407015 7f1ff7fff6c0 Level-0 table #76: 7108 bytes OK
-2026/06/02-19:44:40.413760 7f1ff7fff6c0 Delete type=0 #74
-2026/06/02-19:44:40.446409 7f1ff7fff6c0 Manual compaction at level-0 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.457226 7f1ff7fff6c0 Manual compaction at level-1 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 302 : 1
-2026/06/02-19:44:40.457235 7f1ff7fff6c0 Compacting 1@1 + 1@2 files
-2026/06/02-19:44:40.461196 7f1ff7fff6c0 Generated table #77@1: 1 keys, 911 bytes
-2026/06/02-19:44:40.461226 7f1ff7fff6c0 Compacted 1@1 + 1@2 files => 911 bytes
-2026/06/02-19:44:40.467956 7f1ff7fff6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/02-19:44:40.468078 7f1ff7fff6c0 Delete type=2 #72
-2026/06/02-19:44:40.468198 7f1ff7fff6c0 Delete type=2 #76
-2026/06/02-19:44:40.489599 7f1ff7fff6c0 Manual compaction at level-1 from '!items!null' @ 302 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.349042 7f51bbfff6c0 Log #12: 0 ops saved to Table #14 OK
+2026/06/08-22:14:53.349146 7f51bbfff6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/resonations/000012.log: OK
+2026/06/08-22:14:53.349200 7f51bbfff6c0 Table #5: 20 entries OK
+2026/06/08-22:14:53.349226 7f51bbfff6c0 Table #13: 20 entries OK
+2026/06/08-22:14:53.352182 7f51bbfff6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/resonations; recovered 2 files; 13154 bytes. Some data may have been lost. ****
diff --git a/packs-system/resonations/MANIFEST-000015 b/packs-system/resonations/MANIFEST-000015
new file mode 100644
index 0000000..2d7a69b
Binary files /dev/null and b/packs-system/resonations/MANIFEST-000015 differ
diff --git a/packs-system/resonations/MANIFEST-000078 b/packs-system/resonations/MANIFEST-000078
deleted file mode 100644
index c88a040..0000000
Binary files a/packs-system/resonations/MANIFEST-000078 and /dev/null differ
diff --git a/packs-system/resonations/lost/000012.log b/packs-system/resonations/lost/000012.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs-system/scenes/000005.ldb b/packs-system/scenes/000005.ldb
deleted file mode 100644
index 41c249d..0000000
Binary files a/packs-system/scenes/000005.ldb and /dev/null differ
diff --git a/packs-system/scenes/000067.log b/packs-system/scenes/000067.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs-system/scenes/000069.ldb b/packs-system/scenes/000069.ldb
new file mode 100644
index 0000000..d03584e
Binary files /dev/null and b/packs-system/scenes/000069.ldb differ
diff --git a/packs-system/scenes/CURRENT b/packs-system/scenes/CURRENT
index 23b73d9..625c880 100644
--- a/packs-system/scenes/CURRENT
+++ b/packs-system/scenes/CURRENT
@@ -1 +1 @@
-MANIFEST-000014
+MANIFEST-000065
diff --git a/packs-system/scenes/LOG b/packs-system/scenes/LOG
index b36d0e5..ecc2d37 100644
--- a/packs-system/scenes/LOG
+++ b/packs-system/scenes/LOG
@@ -1,8 +1,15 @@
-2026/06/04-19:59:31.337020 7f480a3fe6c0 Recovering log #12
-2026/06/04-19:59:31.346261 7f480a3fe6c0 Delete type=3 #10
-2026/06/04-19:59:31.346300 7f480a3fe6c0 Delete type=0 #12
-2026/06/04-20:00:50.126988 7f4808bfb6c0 Level-0 table #17: started
-2026/06/04-20:00:50.127020 7f4808bfb6c0 Level-0 table #17: 0 bytes OK
-2026/06/04-20:00:50.133026 7f4808bfb6c0 Delete type=0 #15
-2026/06/04-20:00:50.133229 7f4808bfb6c0 Manual compaction at level-0 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.133257 7f4808bfb6c0 Manual compaction at level-1 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.456377 7f5208bff6c0 Recovering log #63
+2026/06/08-22:14:53.466701 7f5208bff6c0 Delete type=3 #61
+2026/06/08-22:14:53.466728 7f5208bff6c0 Delete type=0 #63
+2026/06/08-22:19:11.007802 7f51ba7fc6c0 Level-0 table #68: started
+2026/06/08-22:19:11.011119 7f51ba7fc6c0 Level-0 table #68: 3062 bytes OK
+2026/06/08-22:19:11.017527 7f51ba7fc6c0 Delete type=0 #66
+2026/06/08-22:19:11.034073 7f51ba7fc6c0 Manual compaction at level-0 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
+2026/06/08-22:19:11.040181 7f51ba7fc6c0 Manual compaction at level-1 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 5 : 1
+2026/06/08-22:19:11.040185 7f51ba7fc6c0 Compacting 1@1 + 1@2 files
+2026/06/08-22:19:11.043830 7f51ba7fc6c0 Generated table #69@1: 2 keys, 1600 bytes
+2026/06/08-22:19:11.043850 7f51ba7fc6c0 Compacted 1@1 + 1@2 files => 1600 bytes
+2026/06/08-22:19:11.050713 7f51ba7fc6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
+2026/06/08-22:19:11.050812 7f51ba7fc6c0 Delete type=2 #5
+2026/06/08-22:19:11.050908 7f51ba7fc6c0 Delete type=2 #68
+2026/06/08-22:19:11.066169 7f51ba7fc6c0 Manual compaction at level-1 from '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 5 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
diff --git a/packs-system/scenes/LOG.old b/packs-system/scenes/LOG.old
index 46ef740..d0ec7e4 100644
--- a/packs-system/scenes/LOG.old
+++ b/packs-system/scenes/LOG.old
@@ -1,8 +1,8 @@
-2026/06/02-19:43:31.609465 7f22153fd6c0 Recovering log #8
-2026/06/02-19:43:31.620427 7f22153fd6c0 Delete type=3 #6
-2026/06/02-19:43:31.620485 7f22153fd6c0 Delete type=0 #8
-2026/06/02-19:44:40.512258 7f1ff7fff6c0 Level-0 table #13: started
-2026/06/02-19:44:40.512300 7f1ff7fff6c0 Level-0 table #13: 0 bytes OK
-2026/06/02-19:44:40.519094 7f1ff7fff6c0 Delete type=0 #11
-2026/06/02-19:44:40.526642 7f1ff7fff6c0 Manual compaction at level-0 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.526909 7f1ff7fff6c0 Manual compaction at level-1 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
+2026/06/08-22:12:19.424205 7f51bb7fe6c0 Recovering log #59
+2026/06/08-22:12:19.435666 7f51bb7fe6c0 Delete type=3 #57
+2026/06/08-22:12:19.435692 7f51bb7fe6c0 Delete type=0 #59
+2026/06/08-22:14:44.678825 7f51ba7fc6c0 Level-0 table #64: started
+2026/06/08-22:14:44.678844 7f51ba7fc6c0 Level-0 table #64: 0 bytes OK
+2026/06/08-22:14:44.684759 7f51ba7fc6c0 Delete type=0 #62
+2026/06/08-22:14:44.700835 7f51ba7fc6c0 Manual compaction at level-0 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:44.700850 7f51ba7fc6c0 Manual compaction at level-1 from '!scenes!D6yaY8sk0WN8mCr5' @ 72057594037927935 : 1 .. '!scenes.levels!D6yaY8sk0WN8mCr5.defaultLevel0000' @ 0 : 0; will stop at (end)
diff --git a/packs-system/scenes/MANIFEST-000014 b/packs-system/scenes/MANIFEST-000014
deleted file mode 100644
index 00b760c..0000000
Binary files a/packs-system/scenes/MANIFEST-000014 and /dev/null differ
diff --git a/packs-system/scenes/MANIFEST-000065 b/packs-system/scenes/MANIFEST-000065
new file mode 100644
index 0000000..329658c
Binary files /dev/null and b/packs-system/scenes/MANIFEST-000065 differ
diff --git a/packs-system/weapons/000019.log b/packs-system/weapons/000019.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs-system/weapons/000021.ldb b/packs-system/weapons/000021.ldb
new file mode 100644
index 0000000..577cabc
Binary files /dev/null and b/packs-system/weapons/000021.ldb differ
diff --git a/packs-system/weapons/000034.ldb b/packs-system/weapons/000034.ldb
deleted file mode 100644
index 26e98d3..0000000
Binary files a/packs-system/weapons/000034.ldb and /dev/null differ
diff --git a/packs-system/weapons/000082.ldb b/packs-system/weapons/000082.ldb
deleted file mode 100644
index ba3c285..0000000
Binary files a/packs-system/weapons/000082.ldb and /dev/null differ
diff --git a/packs-system/weapons/CURRENT b/packs-system/weapons/CURRENT
index 741d918..056df57 100644
--- a/packs-system/weapons/CURRENT
+++ b/packs-system/weapons/CURRENT
@@ -1 +1 @@
-MANIFEST-000078
+MANIFEST-000017
diff --git a/packs-system/weapons/LOG b/packs-system/weapons/LOG
index a623252..808d5d6 100644
--- a/packs-system/weapons/LOG
+++ b/packs-system/weapons/LOG
@@ -1,15 +1,13 @@
-2026/06/04-19:59:31.291257 7f480abff6c0 Recovering log #75
-2026/06/04-19:59:31.301289 7f480abff6c0 Delete type=3 #73
-2026/06/04-19:59:31.301323 7f480abff6c0 Delete type=0 #75
-2026/06/04-20:00:50.034965 7f4808bfb6c0 Level-0 table #81: started
-2026/06/04-20:00:50.038649 7f4808bfb6c0 Level-0 table #81: 1966 bytes OK
-2026/06/04-20:00:50.045673 7f4808bfb6c0 Delete type=0 #79
-2026/06/04-20:00:50.066100 7f4808bfb6c0 Manual compaction at level-0 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/04-20:00:50.086146 7f4808bfb6c0 Manual compaction at level-1 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 194 : 1
-2026/06/04-20:00:50.086154 7f4808bfb6c0 Compacting 1@1 + 1@2 files
-2026/06/04-20:00:50.089546 7f4808bfb6c0 Generated table #82@1: 1 keys, 626 bytes
-2026/06/04-20:00:50.089562 7f4808bfb6c0 Compacted 1@1 + 1@2 files => 626 bytes
-2026/06/04-20:00:50.096082 7f4808bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/04-20:00:50.096151 7f4808bfb6c0 Delete type=2 #77
-2026/06/04-20:00:50.096257 7f4808bfb6c0 Delete type=2 #81
-2026/06/04-20:00:50.096468 7f4808bfb6c0 Manual compaction at level-1 from '!items!null' @ 194 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.412970 7f51bb7fe6c0 Delete type=3 #1
+2026/06/08-22:19:10.939887 7f51ba7fc6c0 Level-0 table #20: started
+2026/06/08-22:19:10.942756 7f51ba7fc6c0 Level-0 table #20: 2478 bytes OK
+2026/06/08-22:19:10.949471 7f51ba7fc6c0 Delete type=0 #18
+2026/06/08-22:19:10.977266 7f51ba7fc6c0 Manual compaction at level-0 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 13 : 1
+2026/06/08-22:19:10.977270 7f51ba7fc6c0 Compacting 3@0 + 0@1 files
+2026/06/08-22:19:10.980140 7f51ba7fc6c0 Generated table #21@0: 13 keys, 2314 bytes
+2026/06/08-22:19:10.980158 7f51ba7fc6c0 Compacted 3@0 + 0@1 files => 2314 bytes
+2026/06/08-22:19:10.985838 7f51ba7fc6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
+2026/06/08-22:19:10.985892 7f51ba7fc6c0 Delete type=2 #5
+2026/06/08-22:19:10.985947 7f51ba7fc6c0 Delete type=2 #15
+2026/06/08-22:19:10.985973 7f51ba7fc6c0 Delete type=2 #20
+2026/06/08-22:19:10.986143 7f51ba7fc6c0 Manual compaction at level-0 from '!items!null' @ 13 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
diff --git a/packs-system/weapons/LOG.old b/packs-system/weapons/LOG.old
index b3aa775..5929ac0 100644
--- a/packs-system/weapons/LOG.old
+++ b/packs-system/weapons/LOG.old
@@ -1,15 +1,5 @@
-2026/06/02-19:43:31.516359 7f22153fd6c0 Recovering log #70
-2026/06/02-19:43:31.527478 7f22153fd6c0 Delete type=3 #68
-2026/06/02-19:43:31.527540 7f22153fd6c0 Delete type=0 #70
-2026/06/02-19:44:40.489853 7f1ff7fff6c0 Level-0 table #76: started
-2026/06/02-19:44:40.493463 7f1ff7fff6c0 Level-0 table #76: 1965 bytes OK
-2026/06/02-19:44:40.500444 7f1ff7fff6c0 Delete type=0 #74
-2026/06/02-19:44:40.526600 7f1ff7fff6c0 Manual compaction at level-0 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
-2026/06/02-19:44:40.538777 7f1ff7fff6c0 Manual compaction at level-1 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 182 : 1
-2026/06/02-19:44:40.538789 7f1ff7fff6c0 Compacting 1@1 + 1@2 files
-2026/06/02-19:44:40.542122 7f1ff7fff6c0 Generated table #77@1: 1 keys, 626 bytes
-2026/06/02-19:44:40.542154 7f1ff7fff6c0 Compacted 1@1 + 1@2 files => 626 bytes
-2026/06/02-19:44:40.549101 7f1ff7fff6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
-2026/06/02-19:44:40.549243 7f1ff7fff6c0 Delete type=2 #72
-2026/06/02-19:44:40.549396 7f1ff7fff6c0 Delete type=2 #76
-2026/06/02-19:44:40.564205 7f1ff7fff6c0 Manual compaction at level-1 from '!items!null' @ 182 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
+2026/06/08-22:14:53.398241 7f51bb7fe6c0 Log #14: 0 ops saved to Table #16 OK
+2026/06/08-22:14:53.398301 7f51bb7fe6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/weapons/000014.log: OK
+2026/06/08-22:14:53.398328 7f51bb7fe6c0 Table #5: 12 entries OK
+2026/06/08-22:14:53.398345 7f51bb7fe6c0 Table #15: 12 entries OK
+2026/06/08-22:14:53.402148 7f51bb7fe6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-machine-gods-noxian-expanse/packs-system/weapons; recovered 2 files; 4577 bytes. Some data may have been lost. ****
diff --git a/packs-system/weapons/MANIFEST-000017 b/packs-system/weapons/MANIFEST-000017
new file mode 100644
index 0000000..c7e3bf4
Binary files /dev/null and b/packs-system/weapons/MANIFEST-000017 differ
diff --git a/packs-system/weapons/MANIFEST-000078 b/packs-system/weapons/MANIFEST-000078
deleted file mode 100644
index b5fcddf..0000000
Binary files a/packs-system/weapons/MANIFEST-000078 and /dev/null differ
diff --git a/packs-system/weapons/lost/000014.log b/packs-system/weapons/lost/000014.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs_src/armor/Chain_Shirt.yaml b/packs_src/armor/Chain_Shirt.yaml
index aa776cc..ba454f8 100644
--- a/packs_src/armor/Chain_Shirt.yaml
+++ b/packs_src/armor/Chain_Shirt.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/chain-shirt.svg
system:
armorDie: "d6"
- currentDie: "d6"
- penalty: -1
- description: "Interlocked metal rings. Good protection but heavy. Agility -1 DR."
+ penalty: 1
+ weight: "normal"
+ description: "Interlocked metal rings. Good protection."
equipped: false
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/armor/Clothing_Average.yaml b/packs_src/armor/Clothing_Average.yaml
index 877ec33..594ed5e 100644
--- a/packs_src/armor/Clothing_Average.yaml
+++ b/packs_src/armor/Clothing_Average.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/clothing-average.svg
system:
armorDie: "d2"
- currentDie: "d2"
penalty: 0
+ weight: "light"
description: "Basic clothing offering minimal protection."
equipped: false
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/armor/Full_Plate.yaml b/packs_src/armor/Full_Plate.yaml
index beac911..730a956 100644
--- a/packs_src/armor/Full_Plate.yaml
+++ b/packs_src/armor/Full_Plate.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/full-plate.svg
system:
armorDie: "d10"
- currentDie: "d10"
- penalty: -3
- description: "Complete metal encasement. Maximum protection. Agility -3 DR."
+ penalty: 2
+ weight: "heavy"
+ description: "Complete metal encasement. Maximum protection."
equipped: false
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/armor/Gambeson.yaml b/packs_src/armor/Gambeson.yaml
index 7f261c1..d81ffec 100644
--- a/packs_src/armor/Gambeson.yaml
+++ b/packs_src/armor/Gambeson.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/gambeson.svg
system:
armorDie: "d2"
- currentDie: "d2"
penalty: 0
+ weight: "normal"
description: "Padded cloth armor. Light and flexible."
equipped: false
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/armor/Half_Plate.yaml b/packs_src/armor/Half_Plate.yaml
index ad77839..c6a4874 100644
--- a/packs_src/armor/Half_Plate.yaml
+++ b/packs_src/armor/Half_Plate.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/half-plate.svg
system:
armorDie: "d8"
- currentDie: "d8"
- penalty: -2
- description: "Heavy metal plates covering vital areas. Agility -2 DR."
+ penalty: 2
+ weight: "heavy"
+ description: "Heavy metal plates covering vital areas."
equipped: false
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/armor/Helm.yaml b/packs_src/armor/Helm.yaml
index 6e91bb6..790a179 100644
--- a/packs_src/armor/Helm.yaml
+++ b/packs_src/armor/Helm.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/helm.svg
system:
armorDie: "d2"
- currentDie: "d2"
penalty: 0
+ weight: "normal"
description: "A protective head covering. Bonus armor item."
equipped: false
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/armor/Medium_Shield.yaml b/packs_src/armor/Medium_Shield.yaml
index 646fa45..8eae575 100644
--- a/packs_src/armor/Medium_Shield.yaml
+++ b/packs_src/armor/Medium_Shield.yaml
@@ -5,7 +5,9 @@ type: shield
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/medium-shield.svg
system:
armorDie: "d4"
- currentDie: "d4"
- penalty: -1
- description: "A sturdy wooden and metal shield. Can be broken to negate all damage from one attack. Agility -1 DR."
+ penalty: 0
+ weight: "normal"
+ description: "A sturdy wooden and metal shield. +1 Armor, +2 DR to Agility checks. Can be broken to reduce incoming attack damage by D8."
equipped: false
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/armor/Padded_Leather.yaml b/packs_src/armor/Padded_Leather.yaml
index dccfaf3..81d4d36 100644
--- a/packs_src/armor/Padded_Leather.yaml
+++ b/packs_src/armor/Padded_Leather.yaml
@@ -5,7 +5,9 @@ type: armor
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/padded-leather.svg
system:
armorDie: "d4"
- currentDie: "d4"
- penalty: 0
+ penalty: 1
+ weight: "normal"
description: "Hardened leather over padding. Moderate protection."
equipped: false
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/weapons/Club.yaml b/packs_src/weapons/Club.yaml
index 5f91445..bcf8526 100644
--- a/packs_src/weapons/Club.yaml
+++ b/packs_src/weapons/Club.yaml
@@ -4,10 +4,14 @@ name: "Club"
type: weapon
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/club.svg
system:
- damage: "1d4"
+ damage: "1d6"
category: "melee"
- range: ""
- properties: ""
- description: "A simple bludgeoning weapon. One-handed."
+ range: "Touch"
+ properties: [durant]
+ weight: "normal"
+ description: "A simple bludgeoning weapon. Wielded one-handed. Durable."
equipped: false
- usageDie: "d6"
+ quantity: 1
+ usageDie: "d8"
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/weapons/Dagger.yaml b/packs_src/weapons/Dagger.yaml
index 066934a..47cf43c 100644
--- a/packs_src/weapons/Dagger.yaml
+++ b/packs_src/weapons/Dagger.yaml
@@ -6,8 +6,12 @@ img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/dagger.svg
system:
damage: "1d4"
category: "melee"
- range: ""
- properties: ""
- description: "A short blade. Can be thrown."
+ range: "Touch"
+ properties: [fling, precise, razored]
+ weight: "light"
+ description: "A short blade. Can be thrown. Precise, Razored."
equipped: false
+ quantity: 1
usageDie: "d6"
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/weapons/Halberd.yaml b/packs_src/weapons/Halberd.yaml
index 2c0e0bd..c006e98 100644
--- a/packs_src/weapons/Halberd.yaml
+++ b/packs_src/weapons/Halberd.yaml
@@ -6,8 +6,12 @@ img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/halberd.svg
system:
damage: "1d10"
category: "melee"
- range: ""
- properties: ""
- description: "A polearm with axe and spike. Two-handed. Reach."
+ range: "Touch"
+ properties: [ringing, two-handed, unwieldy]
+ weight: "heavy"
+ description: "A polearm with axe and spike. Two-handed. Ringing, Unwieldy."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/weapons/Handaxe.yaml b/packs_src/weapons/Handaxe.yaml
index 4c67a07..38db3e5 100644
--- a/packs_src/weapons/Handaxe.yaml
+++ b/packs_src/weapons/Handaxe.yaml
@@ -6,8 +6,12 @@ img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/handaxe.svg
system:
damage: "1d6"
category: "melee"
- range: ""
- properties: ""
- description: "A versatile one-handed axe. Can be thrown."
+ range: "Touch"
+ properties: [durant, razored]
+ weight: "normal"
+ description: "A sturdy one-handed axe. Durable, Razored."
equipped: false
- usageDie: "d6"
+ quantity: 1
+ usageDie: "d8"
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/weapons/Heavy_Crossbow_and_Quiver.yaml b/packs_src/weapons/Heavy_Crossbow_and_Quiver.yaml
index 67d7f26..ead87c7 100644
--- a/packs_src/weapons/Heavy_Crossbow_and_Quiver.yaml
+++ b/packs_src/weapons/Heavy_Crossbow_and_Quiver.yaml
@@ -4,10 +4,14 @@ name: "Heavy Crossbow and Quiver"
type: weapon
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/heavy-crossbow.svg
system:
- damage: "1d8"
+ damage: "1d10"
category: "ranged"
- range: ""
- properties: ""
+ range: "200/800"
+ properties: [ammo, overbearing, two-handed, unwieldy]
+ weight: "heavy"
description: "A powerful crossbow. Comes with bolts. Ranged. Slow to reload."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/weapons/Longsword.yaml b/packs_src/weapons/Longsword.yaml
index 3965c2d..7c150ed 100644
--- a/packs_src/weapons/Longsword.yaml
+++ b/packs_src/weapons/Longsword.yaml
@@ -6,8 +6,12 @@ img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/longsword.svg
system:
damage: "1d8"
category: "melee"
- range: ""
- properties: ""
- description: "A versatile fighting blade. One or two-handed."
+ range: "Touch"
+ properties: [fragile, versatile]
+ weight: "normal"
+ description: "A versatile fighting blade. One or two-handed. Fragile."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d4"
+ broken: false
diff --git a/packs_src/weapons/Maul.yaml b/packs_src/weapons/Maul.yaml
index 2f3580c..915c43d 100644
--- a/packs_src/weapons/Maul.yaml
+++ b/packs_src/weapons/Maul.yaml
@@ -4,10 +4,14 @@ name: "Maul"
type: weapon
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/maul.svg
system:
- damage: "1d10"
+ damage: "1d12"
category: "melee"
- range: ""
- properties: ""
+ range: "Touch"
+ properties: [two-handed]
+ weight: "heavy"
description: "A massive two-handed bludgeon. Two-handed."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/weapons/Quarterstaff.yaml b/packs_src/weapons/Quarterstaff.yaml
index 1a628e7..4ce2303 100644
--- a/packs_src/weapons/Quarterstaff.yaml
+++ b/packs_src/weapons/Quarterstaff.yaml
@@ -4,10 +4,14 @@ name: "Quarterstaff"
type: weapon
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/quarterstaff.svg
system:
- damage: "1d4"
+ damage: "1d6"
category: "melee"
- range: ""
- properties: ""
- description: "A long wooden staff. Two-handed."
+ range: "Touch"
+ properties: [durant, parrying, precise, two-handed]
+ weight: "normal"
+ description: "A long wooden staff. Two-handed. Durable, Parrying, Precise."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d8"
+ broken: false
diff --git a/packs_src/weapons/Rapier.yaml b/packs_src/weapons/Rapier.yaml
index 138aad4..656dd2d 100644
--- a/packs_src/weapons/Rapier.yaml
+++ b/packs_src/weapons/Rapier.yaml
@@ -4,10 +4,14 @@ name: "Rapier"
type: weapon
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/rapier.svg
system:
- damage: "1d6"
+ damage: "1d8"
category: "melee"
- range: ""
- properties: ""
- description: "A swift and precise thrusting sword."
+ range: "Touch"
+ properties: [fragile, precise]
+ weight: "normal"
+ description: "A swift and precise thrusting sword. Fragile."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d4"
+ broken: false
diff --git a/packs_src/weapons/Shortbow_and_Quiver.yaml b/packs_src/weapons/Shortbow_and_Quiver.yaml
index cb124c3..1cd76cb 100644
--- a/packs_src/weapons/Shortbow_and_Quiver.yaml
+++ b/packs_src/weapons/Shortbow_and_Quiver.yaml
@@ -6,8 +6,12 @@ img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/shortbow.svg
system:
damage: "1d6"
category: "ranged"
- range: ""
- properties: ""
- description: "A light bow. Comes with a quiver of arrows. Ranged."
+ range: "100/400"
+ properties: [ammo, glinting, precise, razored, two-handed]
+ weight: "normal"
+ description: "A light bow. Comes with a quiver of arrows. Ranged. Precise, Razored, Glinting."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/weapons/Spear.yaml b/packs_src/weapons/Spear.yaml
index bd7f9e8..fd2aeee 100644
--- a/packs_src/weapons/Spear.yaml
+++ b/packs_src/weapons/Spear.yaml
@@ -4,10 +4,14 @@ name: "Spear"
type: weapon
img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/spear.svg
system:
- damage: "1d6"
+ damage: "1d8"
category: "melee"
- range: ""
- properties: ""
- description: "A thrusting polearm. Can be thrown. One or two-handed."
+ range: "Touch"
+ properties: [precise, two-handed]
+ weight: "normal"
+ description: "A thrusting polearm. Two-handed. Precise."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d6"
+ broken: false
diff --git a/packs_src/weapons/Whip.yaml b/packs_src/weapons/Whip.yaml
index 79b9214..28bc94f 100644
--- a/packs_src/weapons/Whip.yaml
+++ b/packs_src/weapons/Whip.yaml
@@ -6,8 +6,12 @@ img: systems/fvtt-machine-gods-noxian-expanse/assets/icons/whip.svg
system:
damage: "1d4"
category: "melee"
- range: ""
- properties: ""
- description: "A flexible lash with reach."
+ range: "Touch"
+ properties: [finesse, binding]
+ weight: "normal"
+ description: "A flexible lash with reach. Finesse."
equipped: false
+ quantity: 1
usageDie: "d8"
+ durabilityDie: "d6"
+ broken: false
diff --git a/templates/chat-message.hbs b/templates/chat-message.hbs
index a65d97d..3019fae 100644
--- a/templates/chat-message.hbs
+++ b/templates/chat-message.hbs
@@ -1,34 +1,48 @@
+ {{#if showApplyButton}}data-damage-total="{{damageTotal}}" data-damage-critical="{{damageCritical}}"{{/if}}
+ {{#if damageTargetActorId}}data-target-actor-id="{{damageTargetActorId}}"{{/if}}>