Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1b10a77748 | |||
| 374854cc8b | |||
| a572c66678 |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||||
|
<!-- Claw / trait mark: three slash marks with a radiating spark -->
|
||||||
|
<g fill="none" stroke="#c0392b" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<!-- Three diagonal claw marks -->
|
||||||
|
<line x1="22" y1="20" x2="48" y2="62" stroke-width="7" opacity="0.9"/>
|
||||||
|
<line x1="36" y1="18" x2="58" y2="60" stroke-width="7" opacity="0.75"/>
|
||||||
|
<line x1="50" y1="18" x2="68" y2="58" stroke-width="7" opacity="0.6"/>
|
||||||
|
<!-- Bolt / energy accent -->
|
||||||
|
<polyline points="60,30 52,50 64,50 54,72" stroke="#e74c3c" stroke-width="4" opacity="0.85"/>
|
||||||
|
</g>
|
||||||
|
<!-- Outer ring frame -->
|
||||||
|
<circle cx="50" cy="50" r="46" fill="none" stroke="#7f1d1d" stroke-width="3" opacity="0.5"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 750 B |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||||
|
<!-- Resonation icon: stylised signal/energy wave within a circuit frame -->
|
||||||
|
<circle cx="50" cy="50" r="46" fill="none" stroke="#c8a94a" stroke-width="3" opacity="0.85"/>
|
||||||
|
<circle cx="50" cy="50" r="36" fill="none" stroke="#c8a94a" stroke-width="1.5" opacity="0.45"/>
|
||||||
|
<!-- Wave / resonation lines -->
|
||||||
|
<path d="M18 50 Q26 34 34 50 Q42 66 50 50 Q58 34 66 50 Q74 66 82 50"
|
||||||
|
fill="none" stroke="#dd9b2a" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<!-- Corner circuit nodes -->
|
||||||
|
<circle cx="50" cy="18" r="4" fill="#c8a94a" opacity="0.9"/>
|
||||||
|
<circle cx="50" cy="82" r="4" fill="#c8a94a" opacity="0.9"/>
|
||||||
|
<line x1="50" y1="22" x2="50" y2="37" stroke="#c8a94a" stroke-width="2" opacity="0.6"/>
|
||||||
|
<line x1="50" y1="63" x2="50" y2="78" stroke="#c8a94a" stroke-width="2" opacity="0.6"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 892 B |
+722
-95
@@ -167,6 +167,39 @@
|
|||||||
border: 1px solid rgba(196, 154, 69, 0.16);
|
border: 1px solid rgba(196, 154, 69, 0.16);
|
||||||
border-radius: calc(8px - 4px);
|
border-radius: calc(8px - 4px);
|
||||||
}
|
}
|
||||||
|
.application.mgne fieldset .editor,
|
||||||
|
.application.mgne fieldset .editor-content,
|
||||||
|
.application.mgne fieldset .ProseMirror,
|
||||||
|
.application.mgne fieldset .document-editor {
|
||||||
|
color: #d9c6ae;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.application.mgne fieldset .editor-content p,
|
||||||
|
.application.mgne fieldset .ProseMirror p,
|
||||||
|
.application.mgne fieldset .editor-content li,
|
||||||
|
.application.mgne fieldset .ProseMirror li {
|
||||||
|
color: #d9c6ae;
|
||||||
|
}
|
||||||
|
.application.mgne fieldset .editor-content h1,
|
||||||
|
.application.mgne fieldset .ProseMirror h1,
|
||||||
|
.application.mgne fieldset .editor-content h2,
|
||||||
|
.application.mgne fieldset .ProseMirror h2,
|
||||||
|
.application.mgne fieldset .editor-content h3,
|
||||||
|
.application.mgne fieldset .ProseMirror h3 {
|
||||||
|
color: #c49a45;
|
||||||
|
}
|
||||||
|
.application.mgne fieldset .editor-content .is-empty::before,
|
||||||
|
.application.mgne fieldset .ProseMirror .is-empty::before {
|
||||||
|
color: rgba(196, 154, 69, 0.4);
|
||||||
|
}
|
||||||
|
.application.mgne fieldset .editor-menu button {
|
||||||
|
color: #ab8b68;
|
||||||
|
background: rgba(19, 16, 15, 0.55);
|
||||||
|
}
|
||||||
|
.application.mgne fieldset .editor-menu button:hover {
|
||||||
|
color: #d9c6ae;
|
||||||
|
background: rgba(196, 154, 69, 0.2);
|
||||||
|
}
|
||||||
.application.mgne legend {
|
.application.mgne legend {
|
||||||
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
@@ -337,10 +370,15 @@
|
|||||||
min-width: 0;
|
min-width: 0;
|
||||||
}
|
}
|
||||||
.application.mgne .condition-value-grid {
|
.application.mgne .condition-value-grid {
|
||||||
grid-template-columns: max-content 1fr;
|
grid-template-columns: max-content minmax(auto, 9rem);
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 0.6rem;
|
margin-bottom: 0.6rem;
|
||||||
}
|
}
|
||||||
|
.application.mgne .condition-value-grid select {
|
||||||
|
width: auto;
|
||||||
|
min-width: 5rem;
|
||||||
|
max-width: 9rem;
|
||||||
|
}
|
||||||
.application.mgne .condition-flag-grid {
|
.application.mgne .condition-flag-grid {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(7rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(7rem, 1fr));
|
||||||
gap: 0.3rem 0.6rem;
|
gap: 0.3rem 0.6rem;
|
||||||
@@ -375,7 +413,6 @@
|
|||||||
.application.mgne .resource-box-compact > label {
|
.application.mgne .resource-box-compact > label {
|
||||||
font-size: 0.68rem;
|
font-size: 0.68rem;
|
||||||
letter-spacing: 0.11em;
|
letter-spacing: 0.11em;
|
||||||
color: #ab8b68;
|
|
||||||
}
|
}
|
||||||
.application.mgne .resource-box-inline {
|
.application.mgne .resource-box-inline {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -610,25 +647,6 @@
|
|||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
margin-top: 0.12rem;
|
margin-top: 0.12rem;
|
||||||
}
|
}
|
||||||
.application.mgne .resonation-blocked-banner {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 0.4rem;
|
|
||||||
margin-top: 0.2rem;
|
|
||||||
padding: 0.28rem 0.5rem;
|
|
||||||
border-radius: 4px;
|
|
||||||
background: rgba(180, 40, 20, 0.22);
|
|
||||||
border-left: 3px solid rgba(220, 80, 40, 0.7);
|
|
||||||
color: #e69062;
|
|
||||||
font-size: 0.73rem;
|
|
||||||
}
|
|
||||||
.application.mgne .resonation-blocked-banner .btn-clear-block {
|
|
||||||
flex-shrink: 0;
|
|
||||||
padding: 0.1rem 0.5rem;
|
|
||||||
font-size: 0.7rem;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.application.mgne .resource-box-actions-rest {
|
.application.mgne .resource-box-actions-rest {
|
||||||
gap: 0.32rem;
|
gap: 0.32rem;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
@@ -695,10 +713,22 @@
|
|||||||
gap: 0.35rem;
|
gap: 0.35rem;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
|
padding: 0.1rem 0.3rem 0.1rem 0.2rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background 0.15s, color 0.15s;
|
||||||
}
|
}
|
||||||
.application.mgne .checkbox-line.active {
|
.application.mgne .checkbox-line.active {
|
||||||
color: #dd6b2d;
|
color: #f5dfa0;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
text-shadow: 0 0 8px rgba(196, 154, 69, 0.55);
|
||||||
|
background: rgba(196, 154, 69, 0.14);
|
||||||
|
border: 1px solid rgba(196, 154, 69, 0.28);
|
||||||
|
margin: -1px;
|
||||||
|
}
|
||||||
|
.application.mgne .checkbox-line:not(.active) {
|
||||||
|
color: #ab8b68;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
margin: -1px;
|
||||||
}
|
}
|
||||||
.application.mgne .check-grid input[type="checkbox"],
|
.application.mgne .check-grid input[type="checkbox"],
|
||||||
.application.mgne .checkbox-line input[type="checkbox"] {
|
.application.mgne .checkbox-line input[type="checkbox"] {
|
||||||
@@ -787,6 +817,572 @@
|
|||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.item-weight-badge {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 0.45em;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: "LoraMGNE", "Book Antiqua", serif;
|
||||||
|
font-size: 0.7em;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
white-space: nowrap;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
.item-weight-badge.weight-trivial {
|
||||||
|
color: rgba(171, 139, 104, 0.45);
|
||||||
|
border-color: rgba(171, 139, 104, 0.2);
|
||||||
|
}
|
||||||
|
.item-weight-badge.weight-light {
|
||||||
|
color: #ab8b68;
|
||||||
|
border-color: rgba(171, 139, 104, 0.35);
|
||||||
|
background: rgba(171, 139, 104, 0.08);
|
||||||
|
}
|
||||||
|
.item-weight-badge.weight-normal {
|
||||||
|
color: #c49a45;
|
||||||
|
border-color: rgba(196, 154, 69, 0.4);
|
||||||
|
background: rgba(196, 154, 69, 0.1);
|
||||||
|
}
|
||||||
|
.item-weight-badge.weight-heavy {
|
||||||
|
color: #7f1d17;
|
||||||
|
border-color: rgba(127, 29, 23, 0.45);
|
||||||
|
background: rgba(127, 29, 23, 0.12);
|
||||||
|
}
|
||||||
|
.load-display {
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.load-overloaded {
|
||||||
|
color: #7f1d17 !important;
|
||||||
|
text-shadow: 0 0 6px rgba(127, 29, 23, 0.5);
|
||||||
|
}
|
||||||
|
.resource-box-overloaded {
|
||||||
|
border-color: rgba(127, 29, 23, 0.6) !important;
|
||||||
|
background: rgba(127, 29, 23, 0.1) !important;
|
||||||
|
}
|
||||||
|
.resource-box-overloaded .resource-label-accent {
|
||||||
|
color: #7f1d17 !important;
|
||||||
|
}
|
||||||
|
.item-name[data-tooltip] {
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
.item-name[data-tooltip]:hover {
|
||||||
|
text-decoration: underline dotted rgba(196, 154, 69, 0.55);
|
||||||
|
}
|
||||||
|
#tooltip.mgne-item-tooltip {
|
||||||
|
max-width: 22rem;
|
||||||
|
font-family: "LoraMGNE", "Book Antiqua", serif;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #ccb292;
|
||||||
|
background: rgba(51, 38, 30, 0.66);
|
||||||
|
border: 1px solid rgba(196, 154, 69, 0.35);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0.5rem 0.7rem;
|
||||||
|
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.55);
|
||||||
|
}
|
||||||
|
.item-broken-badge {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.3em;
|
||||||
|
padding: 0.05em 0.4em;
|
||||||
|
font-size: 0.65em;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
color: #7f1d17;
|
||||||
|
background: rgba(127, 29, 23, 0.14);
|
||||||
|
border: 1px solid rgba(127, 29, 23, 0.45);
|
||||||
|
border-radius: 3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.item-burned-badge {
|
||||||
|
color: #c49a45;
|
||||||
|
background: rgba(196, 154, 69, 0.12);
|
||||||
|
border-color: rgba(196, 154, 69, 0.4);
|
||||||
|
}
|
||||||
|
.item-durability-badge {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.25em;
|
||||||
|
padding: 0.1em 0.45em;
|
||||||
|
font-size: 0.7em;
|
||||||
|
font-weight: 700;
|
||||||
|
color: rgba(171, 139, 104, 0.65);
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
white-space: nowrap;
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
}
|
||||||
|
.item-durability-badge.durability-broken {
|
||||||
|
color: #7f1d17;
|
||||||
|
border-color: rgba(127, 29, 23, 0.4);
|
||||||
|
background: rgba(127, 29, 23, 0.1);
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
.item-row-broken {
|
||||||
|
opacity: 0.6;
|
||||||
|
filter: grayscale(0.4);
|
||||||
|
}
|
||||||
|
.item-row-broken .item-name {
|
||||||
|
text-decoration: line-through;
|
||||||
|
color: rgba(204, 178, 146, 0.55);
|
||||||
|
}
|
||||||
|
.weapon-properties-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.35rem 0.6rem;
|
||||||
|
padding: 0.5rem 0.6rem;
|
||||||
|
background: rgba(171, 139, 104, 0.04);
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.12);
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
.weapon-properties-grid .property-check {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3em;
|
||||||
|
font-family: "LoraMGNE", "Book Antiqua", serif;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
color: #ccb292;
|
||||||
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 0.15em 0.4em;
|
||||||
|
border-radius: 3px;
|
||||||
|
transition: background 0.15s;
|
||||||
|
}
|
||||||
|
.weapon-properties-grid .property-check:hover {
|
||||||
|
background: rgba(196, 154, 69, 0.08);
|
||||||
|
}
|
||||||
|
.weapon-properties-grid .property-check input[type="checkbox"] {
|
||||||
|
accent-color: #c49a45;
|
||||||
|
}
|
||||||
|
.weapon-property-badge {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.3em;
|
||||||
|
padding: 0.05em 0.35em;
|
||||||
|
font-size: 0.62em;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: rgba(196, 154, 69, 0.85);
|
||||||
|
background: rgba(196, 154, 69, 0.1);
|
||||||
|
border: 1px solid rgba(196, 154, 69, 0.3);
|
||||||
|
border-radius: 3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.creature-trait-trigger {
|
||||||
|
font-size: 0.82em;
|
||||||
|
color: rgba(204, 178, 146, 0.65);
|
||||||
|
font-style: italic;
|
||||||
|
margin-left: 0.2em;
|
||||||
|
}
|
||||||
|
.creature-traits-container {
|
||||||
|
border: 1px solid rgba(127, 29, 23, 0.35);
|
||||||
|
border-left: 3px solid rgba(127, 29, 23, 0.65);
|
||||||
|
border-radius: 4px;
|
||||||
|
background: linear-gradient(135deg, rgba(127, 29, 23, 0.05), transparent 60%), rgba(64, 47, 37, 0.85);
|
||||||
|
padding: 0.6rem 0.75rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
.creature-traits-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 0.5rem;
|
||||||
|
border-bottom: 1px solid rgba(127, 29, 23, 0.25);
|
||||||
|
padding-bottom: 0.4rem;
|
||||||
|
margin-bottom: 0.1rem;
|
||||||
|
}
|
||||||
|
.creature-traits-header h3 {
|
||||||
|
margin: 0;
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
color: rgba(127, 29, 23, 0.9);
|
||||||
|
}
|
||||||
|
.creature-traits-header button {
|
||||||
|
font-size: 0.72rem;
|
||||||
|
padding: 0.15em 0.6em;
|
||||||
|
background: rgba(127, 29, 23, 0.12);
|
||||||
|
border: 1px solid rgba(127, 29, 23, 0.35);
|
||||||
|
color: rgba(127, 29, 23, 0.8);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.15s, color 0.15s;
|
||||||
|
}
|
||||||
|
.creature-traits-header button:hover {
|
||||||
|
background: rgba(127, 29, 23, 0.22);
|
||||||
|
color: #aa271f;
|
||||||
|
}
|
||||||
|
.creature-traits-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.3rem;
|
||||||
|
}
|
||||||
|
.creature-trait-card {
|
||||||
|
background: rgba(19, 16, 15, 0.3);
|
||||||
|
border: 1px solid rgba(127, 29, 23, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0.35rem 0.5rem;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
}
|
||||||
|
.creature-trait-card:hover {
|
||||||
|
background: rgba(127, 29, 23, 0.08);
|
||||||
|
border-color: rgba(127, 29, 23, 0.35);
|
||||||
|
}
|
||||||
|
.creature-trait-card-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.creature-trait-name {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.35em;
|
||||||
|
font-family: "LoraMGNE", "Book Antiqua", serif;
|
||||||
|
font-size: 0.88rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #ccb292;
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.creature-trait-name i {
|
||||||
|
color: rgba(127, 29, 23, 0.7);
|
||||||
|
font-size: 0.75em;
|
||||||
|
}
|
||||||
|
.creature-trait-trigger {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-style: italic;
|
||||||
|
color: rgba(204, 178, 146, 0.55);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.creature-trait-card .item-actions {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.25rem;
|
||||||
|
margin-left: auto;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.creature-trait-card .item-actions button {
|
||||||
|
width: 1.6rem;
|
||||||
|
height: 1.6rem;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.18);
|
||||||
|
color: rgba(171, 139, 104, 0.5);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||||
|
}
|
||||||
|
.creature-trait-card .item-actions button:hover {
|
||||||
|
background: rgba(171, 139, 104, 0.1);
|
||||||
|
color: #ab8b68;
|
||||||
|
border-color: rgba(171, 139, 104, 0.35);
|
||||||
|
}
|
||||||
|
.creature-meta-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0.45rem 0.6rem;
|
||||||
|
background: rgba(64, 47, 37, 0.5);
|
||||||
|
border: 1px solid rgba(183, 70, 31, 0.2);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.creature-meta-label {
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.07em;
|
||||||
|
color: rgba(183, 70, 31, 0.8);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.creature-type-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.creature-type-checkbox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3em;
|
||||||
|
font-size: 0.83rem;
|
||||||
|
color: #ccb292;
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.creature-type-checkbox input[type="checkbox"] {
|
||||||
|
accent-color: #b7461f;
|
||||||
|
width: 0.9rem;
|
||||||
|
height: 0.9rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.creature-number-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.4rem;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.creature-number-input {
|
||||||
|
width: 4rem;
|
||||||
|
text-align: center;
|
||||||
|
font-family: "LoraMGNE", "Book Antiqua", serif;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #ccb292;
|
||||||
|
background: rgba(17, 12, 10, 0.72);
|
||||||
|
border: 1px solid rgba(183, 70, 31, 0.3);
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0.15em 0.3em;
|
||||||
|
}
|
||||||
|
.creature-number-input:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: rgba(183, 70, 31, 0.6);
|
||||||
|
background: rgba(17, 12, 10, 0.9);
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.5rem 0.75rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
min-height: 2.4rem;
|
||||||
|
font-size: 0.88rem;
|
||||||
|
color: #ccb292;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone i {
|
||||||
|
font-size: 1em;
|
||||||
|
color: #b7461f;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone .action-table-name {
|
||||||
|
font-weight: 600;
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
color: #ccb292;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone.drop-hint {
|
||||||
|
border: 2px dashed rgba(183, 70, 31, 0.35);
|
||||||
|
background: rgba(183, 70, 31, 0.04);
|
||||||
|
color: rgba(204, 178, 146, 0.5);
|
||||||
|
font-style: italic;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: default;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone.drop-hint i {
|
||||||
|
color: rgba(183, 70, 31, 0.5);
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone.drop-hint:hover,
|
||||||
|
.creature-action-table-section .action-table-drop-zone.drop-hint.drag-over {
|
||||||
|
background: rgba(183, 70, 31, 0.09);
|
||||||
|
border-color: rgba(183, 70, 31, 0.6);
|
||||||
|
color: rgba(204, 178, 146, 0.7);
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-drop-zone.drop-hint:hover i,
|
||||||
|
.creature-action-table-section .action-table-drop-zone.drop-hint.drag-over i {
|
||||||
|
color: #b7461f;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.3rem;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-buttons button {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
padding: 0.15em 0.55em;
|
||||||
|
background: rgba(183, 70, 31, 0.1);
|
||||||
|
border: 1px solid rgba(183, 70, 31, 0.3);
|
||||||
|
color: rgba(183, 70, 31, 0.8);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.15s, color 0.15s;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3em;
|
||||||
|
}
|
||||||
|
.creature-action-table-section .action-table-buttons button:hover {
|
||||||
|
background: rgba(183, 70, 31, 0.22);
|
||||||
|
color: #b7461f;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-credits-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.6rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border: 1px solid rgba(196, 154, 69, 0.35);
|
||||||
|
border-radius: 6px;
|
||||||
|
background: rgba(17, 12, 10, 0.7);
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-credits-stepper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .credits-input {
|
||||||
|
width: 5rem;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
font-weight: 700;
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
color: #c49a45;
|
||||||
|
background: rgba(19, 16, 15, 0.6);
|
||||||
|
border: 1px solid rgba(196, 154, 69, 0.3);
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .credits-symbol {
|
||||||
|
color: #c49a45;
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin: 0 0.1rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .credits-btn {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 2rem;
|
||||||
|
padding: 0.15rem 0.4rem;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.28);
|
||||||
|
border-radius: 6px;
|
||||||
|
background: rgba(17, 12, 10, 0.8);
|
||||||
|
color: #ab8b68;
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
}
|
||||||
|
.application.mgne.party .credits-btn:hover {
|
||||||
|
background: rgba(196, 154, 69, 0.18);
|
||||||
|
border-color: rgba(196, 154, 69, 0.55);
|
||||||
|
color: #c49a45;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
margin-top: 0.4rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2rem 1fr 5rem 6rem 5.5rem;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0.3rem 0.4rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-row.party-member-header {
|
||||||
|
color: #7e664f;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
border-bottom: 1px solid rgba(171, 139, 104, 0.18);
|
||||||
|
padding-bottom: 0.25rem;
|
||||||
|
margin-bottom: 0.1rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-row:not(.party-member-header) {
|
||||||
|
background: rgba(17, 12, 10, 0.75);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-row:not(.party-member-header):hover {
|
||||||
|
border-color: rgba(196, 154, 69, 0.22);
|
||||||
|
background: rgba(17, 12, 10, 0.9);
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-portrait {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.25);
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-name a {
|
||||||
|
color: #ccb292;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-name a:hover {
|
||||||
|
color: #c49a45;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-hp {
|
||||||
|
color: #dd6b2d;
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-member-type {
|
||||||
|
color: #7e664f;
|
||||||
|
font-size: 0.78rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-loot-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
margin-top: 0.4rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-loot-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2rem 1fr 7rem 4rem;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0.3rem 0.4rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-loot-row.party-loot-header {
|
||||||
|
color: #7e664f;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
border-bottom: 1px solid rgba(171, 139, 104, 0.18);
|
||||||
|
padding-bottom: 0.25rem;
|
||||||
|
margin-bottom: 0.1rem;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-loot-row:not(.party-loot-header) {
|
||||||
|
background: rgba(17, 12, 10, 0.75);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-loot-row:not(.party-loot-header):hover {
|
||||||
|
border-color: rgba(196, 154, 69, 0.22);
|
||||||
|
background: rgba(17, 12, 10, 0.9);
|
||||||
|
}
|
||||||
|
.application.mgne.party .item-portrait {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.25);
|
||||||
|
}
|
||||||
|
.application.mgne.party .item-type-label {
|
||||||
|
color: #7e664f;
|
||||||
|
font-size: 0.78rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.application.mgne.party .party-drop-hint {
|
||||||
|
color: rgba(126, 102, 79, 0.7);
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-style: italic;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
padding: 0.3rem;
|
||||||
|
border: 1px dashed rgba(171, 139, 104, 0.18);
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
.application.mgne.roll-dialog .window-content {
|
.application.mgne.roll-dialog .window-content {
|
||||||
padding: 0.55rem;
|
padding: 0.55rem;
|
||||||
background: radial-gradient(circle at top left, rgba(221, 107, 45, 0.14), transparent 26%), linear-gradient(180deg, rgba(27, 21, 18, 0.26), rgba(19, 16, 15, 0.22)), url("../assets/ui/page_background.webp") center center / cover no-repeat, linear-gradient(180deg, #1b1512, #13100f 120%);
|
background: radial-gradient(circle at top left, rgba(221, 107, 45, 0.14), transparent 26%), linear-gradient(180deg, rgba(27, 21, 18, 0.26), rgba(19, 16, 15, 0.22)), url("../assets/ui/page_background.webp") center center / cover no-repeat, linear-gradient(180deg, #1b1512, #13100f 120%);
|
||||||
@@ -895,52 +1491,117 @@
|
|||||||
}
|
}
|
||||||
.mgne-chat-card .chat-formula {
|
.mgne-chat-card .chat-formula {
|
||||||
color: #52453c;
|
color: #52453c;
|
||||||
font-size: 0.72rem;
|
|
||||||
font-style: italic;
|
|
||||||
margin: 0;
|
|
||||||
}
|
}
|
||||||
.mgne-chat-card .chat-formula code {
|
.mgne-chat-card .chat-formula code {
|
||||||
color: #ab8b68;
|
color: #ccb292;
|
||||||
background: rgba(19, 16, 15, 0.65);
|
background: rgba(19, 16, 15, 0.75);
|
||||||
padding: 0.08em 0.38em;
|
padding: 0.1em 0.42em;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
font-style: normal;
|
|
||||||
}
|
}
|
||||||
.mgne-chat-card .chat-outcome {
|
.mgne-chat-card .chat-result-line {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: end;
|
||||||
gap: 0.6rem;
|
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 {
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
font-size: 0.62rem;
|
||||||
|
color: #ccb292;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-result-total {
|
||||||
|
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
||||||
|
font-size: 1.08rem;
|
||||||
|
color: #ccb292;
|
||||||
|
}
|
||||||
|
.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);
|
||||||
|
}
|
||||||
|
.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;
|
||||||
|
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 .chat-dice-tooltip {
|
||||||
|
margin-top: 0.4rem;
|
||||||
|
padding: 0.4rem 0.55rem;
|
||||||
|
background: rgba(19, 16, 15, 0.85);
|
||||||
|
border: 1px solid rgba(171, 139, 104, 0.22);
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .dice-roll {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.2rem;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .dice-formula {
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
color: rgba(204, 178, 146, 0.65);
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .dice-tooltip {
|
||||||
|
font-size: 0.78rem;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .dice {
|
||||||
|
margin: 0.15rem 0;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .die-icon,
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .die-face {
|
||||||
|
color: #c49a45;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .part-formula {
|
||||||
|
color: rgba(204, 178, 146, 0.7);
|
||||||
|
font-size: 0.72rem;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .part-total {
|
||||||
|
color: #ccb292;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .max {
|
||||||
|
color: #82b0a6;
|
||||||
|
}
|
||||||
|
.mgne-chat-card .chat-dice-tooltip .min {
|
||||||
|
color: #e48a59;
|
||||||
|
}
|
||||||
|
.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;
|
margin: 0;
|
||||||
padding: 0.42rem 0.65rem 0.42rem 0.8rem;
|
padding: 0.3rem 0.55rem;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
background: rgba(19, 16, 15, 0.72);
|
background: rgba(19, 16, 15, 0.72);
|
||||||
border-left: 3px solid rgba(221, 107, 45, 0.7);
|
border-left: 3px solid rgba(221, 107, 45, 0.7);
|
||||||
}
|
|
||||||
.mgne-chat-card .chat-outcome-label {
|
|
||||||
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.1em;
|
|
||||||
font-size: 0.88rem;
|
|
||||||
color: #e69062;
|
color: #e69062;
|
||||||
line-height: 1.1;
|
font-size: 0.8rem;
|
||||||
}
|
|
||||||
.mgne-chat-card .chat-outcome-total {
|
|
||||||
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
|
||||||
font-size: 1.7rem;
|
|
||||||
line-height: 1;
|
|
||||||
color: rgba(204, 178, 146, 0.88);
|
|
||||||
text-shadow: 0 0 18px rgba(221, 107, 45, 0.18);
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
.mgne-chat-card .chat-damage-total {
|
|
||||||
text-align: center;
|
|
||||||
font-family: "CastorTwoMGNE", "Palatino Linotype", serif;
|
|
||||||
font-size: 2.2rem;
|
|
||||||
line-height: 1;
|
|
||||||
color: #e38450;
|
|
||||||
text-shadow: 0 0 20px rgba(183, 70, 31, 0.3);
|
|
||||||
padding: 0.3rem 0;
|
|
||||||
}
|
}
|
||||||
.mgne-chat-card .chat-special {
|
.mgne-chat-card .chat-special {
|
||||||
padding: 0.42rem 0.55rem;
|
padding: 0.42rem 0.55rem;
|
||||||
@@ -948,26 +1609,6 @@
|
|||||||
background: rgba(17, 12, 10, 0.85);
|
background: rgba(17, 12, 10, 0.85);
|
||||||
color: #ccb292;
|
color: #ccb292;
|
||||||
}
|
}
|
||||||
.mgne-chat-card .chat-omen-remind {
|
|
||||||
padding: 0.38rem 0.55rem;
|
|
||||||
border-left: 3px solid rgba(196, 154, 69, 0.6);
|
|
||||||
background: rgba(30, 22, 8, 0.82);
|
|
||||||
color: #c9a84c;
|
|
||||||
font-size: 0.75rem;
|
|
||||||
margin: 0;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
.mgne-chat-card .chat-omen-neutralize {
|
|
||||||
border-left-color: rgba(79, 125, 115, 0.7);
|
|
||||||
color: #9bc0b8;
|
|
||||||
}
|
|
||||||
.mgne-chat-card .chat-omen-used {
|
|
||||||
padding: 0.28rem 0.55rem;
|
|
||||||
color: #c9a84c;
|
|
||||||
font-size: 0.74rem;
|
|
||||||
margin: 0;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
.mgne-chat-card.outcome-critical-success,
|
.mgne-chat-card.outcome-critical-success,
|
||||||
.mgne-chat-card.outcome-success,
|
.mgne-chat-card.outcome-success,
|
||||||
.mgne-chat-card.outcome-steady {
|
.mgne-chat-card.outcome-steady {
|
||||||
@@ -976,18 +1617,8 @@
|
|||||||
.mgne-chat-card.outcome-critical-success .chat-outcome,
|
.mgne-chat-card.outcome-critical-success .chat-outcome,
|
||||||
.mgne-chat-card.outcome-success .chat-outcome,
|
.mgne-chat-card.outcome-success .chat-outcome,
|
||||||
.mgne-chat-card.outcome-steady .chat-outcome {
|
.mgne-chat-card.outcome-steady .chat-outcome {
|
||||||
border-left-color: rgba(79, 125, 115, 0.8);
|
|
||||||
}
|
|
||||||
.mgne-chat-card.outcome-critical-success .chat-outcome-label,
|
|
||||||
.mgne-chat-card.outcome-success .chat-outcome-label,
|
|
||||||
.mgne-chat-card.outcome-steady .chat-outcome-label {
|
|
||||||
color: #9bc0b8;
|
color: #9bc0b8;
|
||||||
}
|
border-left-color: rgba(79, 125, 115, 0.8);
|
||||||
.mgne-chat-card.outcome-critical-success .chat-outcome-total,
|
|
||||||
.mgne-chat-card.outcome-success .chat-outcome-total,
|
|
||||||
.mgne-chat-card.outcome-steady .chat-outcome-total {
|
|
||||||
color: rgba(155, 192, 184, 0.9);
|
|
||||||
text-shadow: 0 0 18px rgba(79, 125, 115, 0.3);
|
|
||||||
}
|
}
|
||||||
.mgne-chat-card.outcome-failure,
|
.mgne-chat-card.outcome-failure,
|
||||||
.mgne-chat-card.outcome-broken,
|
.mgne-chat-card.outcome-broken,
|
||||||
@@ -997,15 +1628,11 @@
|
|||||||
.mgne-chat-card.outcome-failure .chat-outcome,
|
.mgne-chat-card.outcome-failure .chat-outcome,
|
||||||
.mgne-chat-card.outcome-broken .chat-outcome,
|
.mgne-chat-card.outcome-broken .chat-outcome,
|
||||||
.mgne-chat-card.outcome-fumble .chat-outcome {
|
.mgne-chat-card.outcome-fumble .chat-outcome {
|
||||||
|
color: #eaa37c;
|
||||||
border-left-color: rgba(221, 107, 45, 0.8);
|
border-left-color: rgba(221, 107, 45, 0.8);
|
||||||
}
|
}
|
||||||
.mgne-chat-card.outcome-failure .chat-outcome-label,
|
.mgne-chat-card.mode-apply-damage .chat-result-total,
|
||||||
.mgne-chat-card.outcome-broken .chat-outcome-label,
|
.mgne-chat-card.mode-damage .chat-result-total {
|
||||||
.mgne-chat-card.outcome-fumble .chat-outcome-label {
|
|
||||||
color: #eaa37c;
|
|
||||||
}
|
|
||||||
.mgne-chat-card.mode-apply-damage .chat-damage-total,
|
|
||||||
.mgne-chat-card.mode-damage .chat-damage-total {
|
|
||||||
color: #e38450;
|
color: #e38450;
|
||||||
}
|
}
|
||||||
.mgne-chat-card .chat-card-actions {
|
.mgne-chat-card .chat-card-actions {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ Hooks.once("init", () => {
|
|||||||
character: models.MGNECharacter,
|
character: models.MGNECharacter,
|
||||||
creature: models.MGNECreature,
|
creature: models.MGNECreature,
|
||||||
companion: models.MGNECompanion,
|
companion: models.MGNECompanion,
|
||||||
|
party: models.MGNEParty,
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG.Combat.documentClass = documents.MGNECombat
|
CONFIG.Combat.documentClass = documents.MGNECombat
|
||||||
@@ -32,6 +33,7 @@ Hooks.once("init", () => {
|
|||||||
"resonance-core": models.MGNEResonanceCore,
|
"resonance-core": models.MGNEResonanceCore,
|
||||||
artifact: models.MGNEArtifact,
|
artifact: models.MGNEArtifact,
|
||||||
feature: models.MGNEFeature,
|
feature: models.MGNEFeature,
|
||||||
|
"creature-trait": models.MGNECreatureTrait,
|
||||||
}
|
}
|
||||||
|
|
||||||
foundry.applications.sheets.ActorSheetV2 && foundry.documents.collections.Actors.unregisterSheet(
|
foundry.applications.sheets.ActorSheetV2 && foundry.documents.collections.Actors.unregisterSheet(
|
||||||
@@ -43,6 +45,7 @@ Hooks.once("init", () => {
|
|||||||
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNECharacterSheet, { types: ["character"], makeDefault: true, label: SYSTEM.actorTypes.character.label })
|
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNECharacterSheet, { types: ["character"], makeDefault: true, label: SYSTEM.actorTypes.character.label })
|
||||||
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNECreatureSheet, { types: ["creature"], makeDefault: true, label: SYSTEM.actorTypes.creature.label })
|
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNECreatureSheet, { types: ["creature"], makeDefault: true, label: SYSTEM.actorTypes.creature.label })
|
||||||
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNECompanionSheet, { types: ["companion"], makeDefault: true, label: SYSTEM.actorTypes.companion.label })
|
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNECompanionSheet, { types: ["companion"], makeDefault: true, label: SYSTEM.actorTypes.companion.label })
|
||||||
|
foundry.documents.collections.Actors.registerSheet(SYSTEM_ID, applications.MGNEPartySheet, { types: ["party"], makeDefault: true, label: SYSTEM.actorTypes.party.label })
|
||||||
|
|
||||||
foundry.applications.sheets.ItemSheetV2 && foundry.documents.collections.Items.unregisterSheet(
|
foundry.applications.sheets.ItemSheetV2 && foundry.documents.collections.Items.unregisterSheet(
|
||||||
"core",
|
"core",
|
||||||
@@ -57,8 +60,15 @@ Hooks.once("init", () => {
|
|||||||
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNEResonanceCoreSheet, { types: ["resonance-core"], makeDefault: true, label: SYSTEM.itemTypes["resonance-core"].label })
|
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNEResonanceCoreSheet, { types: ["resonance-core"], makeDefault: true, label: SYSTEM.itemTypes["resonance-core"].label })
|
||||||
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNEArtifactSheet, { types: ["artifact"], makeDefault: true, label: SYSTEM.itemTypes.artifact.label })
|
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNEArtifactSheet, { types: ["artifact"], makeDefault: true, label: SYSTEM.itemTypes.artifact.label })
|
||||||
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNEFeatureSheet, { types: ["feature"], makeDefault: true, label: SYSTEM.itemTypes.feature.label })
|
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNEFeatureSheet, { types: ["feature"], makeDefault: true, label: SYSTEM.itemTypes.feature.label })
|
||||||
|
foundry.documents.collections.Items.registerSheet(SYSTEM_ID, applications.MGNECreatureTraitSheet, { types: ["creature-trait"], makeDefault: true, label: SYSTEM.itemTypes["creature-trait"].label })
|
||||||
|
|
||||||
Handlebars.registerHelper("isEqual", (left, right) => left === right)
|
Handlebars.registerHelper("isEqual", (left, right) => left === right)
|
||||||
|
Handlebars.registerHelper("includes", (collection, value) => {
|
||||||
|
if (!collection) return false
|
||||||
|
if (collection instanceof Set) return collection.has(value)
|
||||||
|
if (Array.isArray(collection)) return collection.includes(value)
|
||||||
|
return false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Hooks.once("setup", () => {
|
Hooks.once("setup", () => {
|
||||||
@@ -111,6 +121,17 @@ Hooks.on("renderChatMessageHTML", (message, element) => {
|
|||||||
const root = element instanceof HTMLElement ? element : element?.[0]
|
const root = element instanceof HTMLElement ? element : element?.[0]
|
||||||
if (!root) return
|
if (!root) return
|
||||||
|
|
||||||
|
// Dice tooltip toggle
|
||||||
|
root.querySelectorAll("[data-action='toggle-dice-tooltip']").forEach(trigger => {
|
||||||
|
trigger.addEventListener("click", () => {
|
||||||
|
const tooltip = trigger.closest(".chat-card-body")?.querySelector(".chat-dice-tooltip")
|
||||||
|
if (!tooltip) return
|
||||||
|
const isHidden = tooltip.hidden
|
||||||
|
tooltip.hidden = !isHidden
|
||||||
|
trigger.classList.toggle("tooltip-open", isHidden)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
root.querySelectorAll(".mgne-roll-damage-btn").forEach(btn => {
|
root.querySelectorAll(".mgne-roll-damage-btn").forEach(btn => {
|
||||||
btn.addEventListener("click", async () => {
|
btn.addEventListener("click", async () => {
|
||||||
const actorId = btn.dataset.actorId
|
const actorId = btn.dataset.actorId
|
||||||
|
|||||||
+152
-37
@@ -4,7 +4,8 @@
|
|||||||
"ActorTypes": {
|
"ActorTypes": {
|
||||||
"character": "Character",
|
"character": "Character",
|
||||||
"creature": "Creature",
|
"creature": "Creature",
|
||||||
"companion": "Companion"
|
"companion": "Companion",
|
||||||
|
"party": "Party"
|
||||||
},
|
},
|
||||||
"ItemTypes": {
|
"ItemTypes": {
|
||||||
"weapon": "Weapon",
|
"weapon": "Weapon",
|
||||||
@@ -13,7 +14,8 @@
|
|||||||
"equipment": "Equipment",
|
"equipment": "Equipment",
|
||||||
"resonance-core": "Resonance Core",
|
"resonance-core": "Resonance Core",
|
||||||
"artifact": "Artifact",
|
"artifact": "Artifact",
|
||||||
"feature": "Feature"
|
"feature": "Feature",
|
||||||
|
"creature-trait": "Creature Trait"
|
||||||
},
|
},
|
||||||
"Abilities": {
|
"Abilities": {
|
||||||
"agility": "Agility",
|
"agility": "Agility",
|
||||||
@@ -37,6 +39,24 @@
|
|||||||
"melee": "Melee",
|
"melee": "Melee",
|
||||||
"ranged": "Ranged"
|
"ranged": "Ranged"
|
||||||
},
|
},
|
||||||
|
"WeaponProperties": {
|
||||||
|
"ammo": "Ammo",
|
||||||
|
"awkward": "Awkward",
|
||||||
|
"binding": "Binding",
|
||||||
|
"durant": "Durant",
|
||||||
|
"finesse": "Finesse",
|
||||||
|
"fling": "Fling",
|
||||||
|
"fragile": "Fragile",
|
||||||
|
"glinting": "Glinting",
|
||||||
|
"overbearing": "Overbearing",
|
||||||
|
"parrying": "Parrying",
|
||||||
|
"precise": "Precise",
|
||||||
|
"razored": "Razored",
|
||||||
|
"ringing": "Ringing",
|
||||||
|
"two-handed": "Two-Handed",
|
||||||
|
"unwieldy": "Unwieldy",
|
||||||
|
"versatile": "Versatile"
|
||||||
|
},
|
||||||
"Resonations": {
|
"Resonations": {
|
||||||
"accelerate": "Accelerate",
|
"accelerate": "Accelerate",
|
||||||
"blast": "Blast",
|
"blast": "Blast",
|
||||||
@@ -71,7 +91,9 @@
|
|||||||
"daily": "Daily Resources",
|
"daily": "Daily Resources",
|
||||||
"equipment": "Equipment",
|
"equipment": "Equipment",
|
||||||
"features": "Features",
|
"features": "Features",
|
||||||
"notes": "Notes"
|
"notes": "Notes",
|
||||||
|
"members": "Members",
|
||||||
|
"loot": "Loot"
|
||||||
},
|
},
|
||||||
"Character": {
|
"Character": {
|
||||||
"Background": "Background",
|
"Background": "Background",
|
||||||
@@ -92,6 +114,7 @@
|
|||||||
"ResonancePerDay": "Resonance per Day",
|
"ResonancePerDay": "Resonance per Day",
|
||||||
"ArtifactSync": "Artifact Sync",
|
"ArtifactSync": "Artifact Sync",
|
||||||
"CarryingCapacity": "Carrying Capacity",
|
"CarryingCapacity": "Carrying Capacity",
|
||||||
|
"Load": "Load",
|
||||||
"Rations": "Rations",
|
"Rations": "Rations",
|
||||||
"Kiffol": "Kiffol",
|
"Kiffol": "Kiffol",
|
||||||
"Weapons": "Weapons",
|
"Weapons": "Weapons",
|
||||||
@@ -231,22 +254,23 @@
|
|||||||
},
|
},
|
||||||
"Creature": {
|
"Creature": {
|
||||||
"Special": "Special",
|
"Special": "Special",
|
||||||
|
"Traits": "Traits",
|
||||||
|
"AddTrait": "Add Trait",
|
||||||
|
"Type": "Type",
|
||||||
|
"Number": "Number",
|
||||||
|
"ActionTable": "Action Table",
|
||||||
|
"RollAction": "Roll Action",
|
||||||
|
"DropTableHint": "Drop a Roll Table here to link it",
|
||||||
|
"ClearTable": "Clear",
|
||||||
|
"OpenTable": "Open Table",
|
||||||
|
"NoTableLinked": "No action table is linked to this creature.",
|
||||||
|
"TableNotFound": "The linked action table could not be found.",
|
||||||
|
"Types": {
|
||||||
|
"Human": "Human",
|
||||||
|
"Construct": "Construct",
|
||||||
|
"Animal": "Animal"
|
||||||
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"abilities": {
|
|
||||||
"label": "Abilities",
|
|
||||||
"agility": {
|
|
||||||
"label": "Agility"
|
|
||||||
},
|
|
||||||
"presence": {
|
|
||||||
"label": "Presence"
|
|
||||||
},
|
|
||||||
"strength": {
|
|
||||||
"label": "Strength"
|
|
||||||
},
|
|
||||||
"toughness": {
|
|
||||||
"label": "Toughness"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hp": {
|
"hp": {
|
||||||
"label": "HP",
|
"label": "HP",
|
||||||
"value": {
|
"value": {
|
||||||
@@ -265,20 +289,17 @@
|
|||||||
"label": "Armor Die"
|
"label": "Armor Die"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"attack": {
|
"creatureType": {
|
||||||
"label": "Attack",
|
"label": "Type"
|
||||||
"damage": {
|
},
|
||||||
"label": "Damage"
|
"number": {
|
||||||
}
|
"label": "Number"
|
||||||
|
},
|
||||||
|
"actionTableUuid": {
|
||||||
|
"label": "Action Table"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"label": "Description"
|
"label": "Description"
|
||||||
},
|
|
||||||
"special": {
|
|
||||||
"label": "Special"
|
|
||||||
},
|
|
||||||
"notes": {
|
|
||||||
"label": "Notes"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -288,6 +309,9 @@
|
|||||||
"Specialty": "Specialty",
|
"Specialty": "Specialty",
|
||||||
"AdventuringBehavior": "Adventuring Behavior",
|
"AdventuringBehavior": "Adventuring Behavior",
|
||||||
"CombatBehavior": "Combat Behavior",
|
"CombatBehavior": "Combat Behavior",
|
||||||
|
"RollBehavior": "Roll Behavior",
|
||||||
|
"NoTableLinked": "No behavior table is linked.",
|
||||||
|
"TableNotFound": "The linked behavior table could not be found.",
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"abilities": {
|
"abilities": {
|
||||||
"label": "Abilities",
|
"label": "Abilities",
|
||||||
@@ -337,11 +361,11 @@
|
|||||||
"specialtyText": {
|
"specialtyText": {
|
||||||
"label": "Specialty"
|
"label": "Specialty"
|
||||||
},
|
},
|
||||||
"adventuringBehavior": {
|
"adventuringBehaviorUuid": {
|
||||||
"label": "Adventuring Behavior"
|
"label": "Adventuring Behavior Table"
|
||||||
},
|
},
|
||||||
"combatBehavior": {
|
"combatBehaviorUuid": {
|
||||||
"label": "Combat Behavior"
|
"label": "Combat Behavior Table"
|
||||||
},
|
},
|
||||||
"upkeep": {
|
"upkeep": {
|
||||||
"label": "Upkeep"
|
"label": "Upkeep"
|
||||||
@@ -354,6 +378,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Party": {
|
||||||
|
"Members": "Members",
|
||||||
|
"Loot": "Shared Loot",
|
||||||
|
"Credits": "Credits",
|
||||||
|
"MoveUp": "Move Up",
|
||||||
|
"MoveDown": "Move Down",
|
||||||
|
"RemoveMember": "Remove Member",
|
||||||
|
"DropMemberHint": "Drop a Character or Companion actor here to add them to the party.",
|
||||||
|
"DropLootHint": "Drop items here to add them to the shared loot.",
|
||||||
|
"FIELDS": {
|
||||||
|
"memberRefs": {
|
||||||
|
"label": "Members"
|
||||||
|
},
|
||||||
|
"credits": {
|
||||||
|
"label": "Credits"
|
||||||
|
},
|
||||||
|
"notes": {
|
||||||
|
"label": "Notes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"DataModel": {
|
"DataModel": {
|
||||||
"abilities": {
|
"abilities": {
|
||||||
"agility": {
|
"agility": {
|
||||||
@@ -373,6 +418,7 @@
|
|||||||
"Common": {
|
"Common": {
|
||||||
"Attack": "Attack",
|
"Attack": "Attack",
|
||||||
"ArmorDie": "Armor Die",
|
"ArmorDie": "Armor Die",
|
||||||
|
"ArmorSave": "Armor Save",
|
||||||
"ArtifactId": "Artifact Id",
|
"ArtifactId": "Artifact Id",
|
||||||
"Broken": "Broken",
|
"Broken": "Broken",
|
||||||
"BurnedOut": "Burned Out",
|
"BurnedOut": "Burned Out",
|
||||||
@@ -383,6 +429,7 @@
|
|||||||
"Current": "Current",
|
"Current": "Current",
|
||||||
"Damage": "Damage",
|
"Damage": "Damage",
|
||||||
"Depleted": "Depleted",
|
"Depleted": "Depleted",
|
||||||
|
"Durability": "Durability",
|
||||||
"Defense": "Defense",
|
"Defense": "Defense",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Description": "Description",
|
"Description": "Description",
|
||||||
@@ -416,15 +463,23 @@
|
|||||||
"Unsynchronized": "Unsynchronized",
|
"Unsynchronized": "Unsynchronized",
|
||||||
"Usage": "Usage",
|
"Usage": "Usage",
|
||||||
"UsageDie": "Usage Die",
|
"UsageDie": "Usage Die",
|
||||||
|
"DurabilityDie": "Durability Die",
|
||||||
|
"RollDurability": "Roll Durability",
|
||||||
"Used": "Used",
|
"Used": "Used",
|
||||||
"Value": "Value"
|
"Value": "Value",
|
||||||
|
"Weight": "Weight",
|
||||||
|
"Name": "Name",
|
||||||
|
"Type": "Type"
|
||||||
},
|
},
|
||||||
"Empty": {
|
"Empty": {
|
||||||
"NoArtifacts": "No artifacts yet.",
|
"NoArtifacts": "No artifacts yet.",
|
||||||
"NoEquipment": "No equipment yet.",
|
"NoEquipment": "No equipment yet.",
|
||||||
"NoFeatures": "No features yet.",
|
"NoFeatures": "No features yet.",
|
||||||
"NoResonanceCores": "No resonance cores yet.",
|
"NoResonanceCores": "No resonance cores yet.",
|
||||||
"NoWeapons": "No weapons yet."
|
"NoTraits": "No traits yet.",
|
||||||
|
"NoWeapons": "No weapons yet.",
|
||||||
|
"NoMembers": "No members yet. Drop a character or companion here.",
|
||||||
|
"NoLoot": "No shared loot yet. Drop items here."
|
||||||
},
|
},
|
||||||
"RulesSnapshot": {
|
"RulesSnapshot": {
|
||||||
"Checks": "Checks use d20 + ability vs DR.",
|
"Checks": "Checks use d20 + ability vs DR.",
|
||||||
@@ -462,6 +517,8 @@
|
|||||||
"ItemBroken": "{item} is broken.",
|
"ItemBroken": "{item} is broken.",
|
||||||
"ItemBurnedOut": "{item} is burned out.",
|
"ItemBurnedOut": "{item} is burned out.",
|
||||||
"ItemDepleted": "{item} is already depleted.",
|
"ItemDepleted": "{item} is already depleted.",
|
||||||
|
"ItemDurabilityDepleted": "{item} durability is already depleted.",
|
||||||
|
"NoArmorEquipped": "No armor or shield equipped.",
|
||||||
"ResonancePerDayReached": "{actor} has already used all resonations for today.",
|
"ResonancePerDayReached": "{actor} has already used all resonations for today.",
|
||||||
"ResonationBlocked": "{actor} cannot invoke Resonations — feedback block active (1 hour). Clear it manually once the hour has passed.",
|
"ResonationBlocked": "{actor} cannot invoke Resonations — feedback block active (1 hour). Clear it manually once the hour has passed.",
|
||||||
"ResonationFeedbackBlocked": "Feedback! {actor} suffers D2 damage (bypasses armor) and cannot invoke Resonations for 1 hour.",
|
"ResonationFeedbackBlocked": "Feedback! {actor} suffers D2 damage (bypasses armor) and cannot invoke Resonations for 1 hour.",
|
||||||
@@ -473,6 +530,7 @@
|
|||||||
"ApplyDamageTo": "Apply {amount} damage to {target}",
|
"ApplyDamageTo": "Apply {amount} damage to {target}",
|
||||||
"AppliedDamageText": "Applied damage: {amount}.",
|
"AppliedDamageText": "Applied damage: {amount}.",
|
||||||
"ArmorAbsorbed": "Armor absorbed {amount}.",
|
"ArmorAbsorbed": "Armor absorbed {amount}.",
|
||||||
|
"ArmorSave": "Armor Save",
|
||||||
"ArmorDegradedCritical": "Critical: {item} armor downgraded to {die}.",
|
"ArmorDegradedCritical": "Critical: {item} armor downgraded to {die}.",
|
||||||
"ArmorNothingToDegrade": "Critical: no armor to downgrade.",
|
"ArmorNothingToDegrade": "Critical: no armor to downgrade.",
|
||||||
"AttackFumble": "Attack fumble: the weapon breaks.",
|
"AttackFumble": "Attack fumble: the weapon breaks.",
|
||||||
@@ -504,6 +562,9 @@
|
|||||||
"ItemAttackLabel": "{item} Attack",
|
"ItemAttackLabel": "{item} Attack",
|
||||||
"ItemDamageLabel": "{item} Damage",
|
"ItemDamageLabel": "{item} Damage",
|
||||||
"ItemNowDepleted": "The item is depleted.",
|
"ItemNowDepleted": "The item is depleted.",
|
||||||
|
"ItemNowBroken": "The item is now broken.",
|
||||||
|
"ItemDurabilityLabel": "{item} Durability",
|
||||||
|
"DurabilityLabel": "{item} Durability Check",
|
||||||
"ItemUsageLabel": "{item} Usage",
|
"ItemUsageLabel": "{item} Usage",
|
||||||
"MoraleBrokenText": "The actor breaks down and may flee, surrender, or grant +d4 damage to opponents.",
|
"MoraleBrokenText": "The actor breaks down and may flee, surrender, or grant +d4 damage to opponents.",
|
||||||
"MoraleCheck": "Morale Check",
|
"MoraleCheck": "Morale Check",
|
||||||
@@ -536,8 +597,10 @@
|
|||||||
"Mode": {
|
"Mode": {
|
||||||
"action": "Action",
|
"action": "Action",
|
||||||
"apply-damage": "Damage",
|
"apply-damage": "Damage",
|
||||||
|
"armor": "Armor",
|
||||||
"check": "Check",
|
"check": "Check",
|
||||||
"damage": "Damage",
|
"damage": "Damage",
|
||||||
|
"durability": "Durability",
|
||||||
"flee": "Fleeing",
|
"flee": "Fleeing",
|
||||||
"generic": "Roll",
|
"generic": "Roll",
|
||||||
"morale": "Morale",
|
"morale": "Morale",
|
||||||
@@ -573,6 +636,12 @@
|
|||||||
},
|
},
|
||||||
"broken": {
|
"broken": {
|
||||||
"label": "Broken"
|
"label": "Broken"
|
||||||
|
},
|
||||||
|
"durabilityDie": {
|
||||||
|
"label": "Durability Die"
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"label": "Weight"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -592,6 +661,12 @@
|
|||||||
},
|
},
|
||||||
"broken": {
|
"broken": {
|
||||||
"label": "Broken"
|
"label": "Broken"
|
||||||
|
},
|
||||||
|
"durabilityDie": {
|
||||||
|
"label": "Durability Die"
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"label": "Weight"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -611,6 +686,12 @@
|
|||||||
},
|
},
|
||||||
"broken": {
|
"broken": {
|
||||||
"label": "Broken"
|
"label": "Broken"
|
||||||
|
},
|
||||||
|
"durabilityDie": {
|
||||||
|
"label": "Durability Die"
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"label": "Weight"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -636,6 +717,15 @@
|
|||||||
},
|
},
|
||||||
"consumable": {
|
"consumable": {
|
||||||
"label": "Consumable"
|
"label": "Consumable"
|
||||||
|
},
|
||||||
|
"broken": {
|
||||||
|
"label": "Broken"
|
||||||
|
},
|
||||||
|
"durabilityDie": {
|
||||||
|
"label": "Durability Die"
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"label": "Weight"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -652,6 +742,15 @@
|
|||||||
},
|
},
|
||||||
"burnedOut": {
|
"burnedOut": {
|
||||||
"label": "Burned Out"
|
"label": "Burned Out"
|
||||||
|
},
|
||||||
|
"broken": {
|
||||||
|
"label": "Broken"
|
||||||
|
},
|
||||||
|
"durabilityDie": {
|
||||||
|
"label": "Durability Die"
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"label": "Weight"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -674,6 +773,12 @@
|
|||||||
},
|
},
|
||||||
"synchronizedTo": {
|
"synchronizedTo": {
|
||||||
"label": "Synchronized To"
|
"label": "Synchronized To"
|
||||||
|
},
|
||||||
|
"durabilityDie": {
|
||||||
|
"label": "Durability Die"
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"label": "Weight"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -686,13 +791,22 @@
|
|||||||
"label": "Feature Id"
|
"label": "Feature Id"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"CreatureTrait": {
|
||||||
|
"Trigger": "Trigger",
|
||||||
|
"TriggerPlaceholder": "e.g. When the creature attacks, on a critical hit…",
|
||||||
|
"FIELDS": {
|
||||||
|
"description": { "label": "Description" },
|
||||||
|
"trigger": { "label": "Trigger" }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TYPES": {
|
"TYPES": {
|
||||||
"Actor": {
|
"Actor": {
|
||||||
"character": "Character",
|
"character": "Character",
|
||||||
"creature": "Creature",
|
"creature": "Creature",
|
||||||
"companion": "Companion"
|
"companion": "Companion",
|
||||||
|
"party": "Party"
|
||||||
},
|
},
|
||||||
"Item": {
|
"Item": {
|
||||||
"weapon": "Weapon",
|
"weapon": "Weapon",
|
||||||
@@ -701,7 +815,8 @@
|
|||||||
"equipment": "Equipment",
|
"equipment": "Equipment",
|
||||||
"resonance-core": "Resonance Core",
|
"resonance-core": "Resonance Core",
|
||||||
"artifact": "Artifact",
|
"artifact": "Artifact",
|
||||||
"feature": "Feature"
|
"feature": "Feature",
|
||||||
|
"creature-trait": "Creature Trait"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,6 +157,31 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProseMirror / toggled editor inside fieldset — enforce contrast on dark bg
|
||||||
|
.application.mgne fieldset {
|
||||||
|
.editor,
|
||||||
|
.editor-content,
|
||||||
|
.ProseMirror,
|
||||||
|
.document-editor {
|
||||||
|
color: lighten(@parchment, 8%);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.editor-content,
|
||||||
|
.ProseMirror {
|
||||||
|
p, li { color: lighten(@parchment, 8%); }
|
||||||
|
h1, h2, h3 { color: @gold-acid; }
|
||||||
|
.is-empty::before { color: fade(@gold-acid, 40%); }
|
||||||
|
}
|
||||||
|
.editor-menu button {
|
||||||
|
color: @bone;
|
||||||
|
background: fade(@bg-void, 55%);
|
||||||
|
&:hover {
|
||||||
|
color: lighten(@parchment, 8%);
|
||||||
|
background: fade(@gold-acid, 20%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.application.mgne legend {
|
.application.mgne legend {
|
||||||
.caps-heading();
|
.caps-heading();
|
||||||
color: @gold-acid;
|
color: @gold-acid;
|
||||||
|
|||||||
@@ -85,6 +85,67 @@
|
|||||||
color: @parchment;
|
color: @parchment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mgne-chat-card .chat-outcome,
|
||||||
|
.mgne-chat-card .chat-damage-total {
|
||||||
|
&.has-tooltip {
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
&:hover { filter: brightness(1.12); }
|
||||||
|
}
|
||||||
|
.chat-tooltip-icon {
|
||||||
|
opacity: 0.55;
|
||||||
|
font-size: 0.75em;
|
||||||
|
margin-left: 0.3rem;
|
||||||
|
vertical-align: middle;
|
||||||
|
transition: opacity 0.15s;
|
||||||
|
}
|
||||||
|
&.tooltip-open .chat-tooltip-icon { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dice tooltip reveal panel
|
||||||
|
.mgne-chat-card .chat-dice-tooltip {
|
||||||
|
margin-top: 0.4rem;
|
||||||
|
padding: 0.4rem 0.55rem;
|
||||||
|
background: fade(@bg-void, 85%);
|
||||||
|
border: 1px solid fade(@bone, 22%);
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
|
||||||
|
// Foundry's standard dice-roll markup
|
||||||
|
.dice-roll {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.2rem;
|
||||||
|
}
|
||||||
|
.dice-formula {
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
color: fade(@parchment, 65%);
|
||||||
|
}
|
||||||
|
.dice-tooltip {
|
||||||
|
font-size: 0.78rem;
|
||||||
|
}
|
||||||
|
.dice {
|
||||||
|
margin: 0.15rem 0;
|
||||||
|
}
|
||||||
|
.die-icon, .die-face {
|
||||||
|
color: @gold-acid;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
.part-formula { color: fade(@parchment, 70%); font-size: 0.72rem; }
|
||||||
|
.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;
|
||||||
|
color: @gold-acid;
|
||||||
|
text-align: right;
|
||||||
|
border-top: 1px solid fade(@bone, 20%);
|
||||||
|
padding-top: 0.2rem;
|
||||||
|
margin-top: 0.15rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.mgne-chat-card .chat-outcome {
|
.mgne-chat-card .chat-outcome {
|
||||||
.caps-heading();
|
.caps-heading();
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
+670
-2
@@ -123,9 +123,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.application.mgne .condition-value-grid {
|
.application.mgne .condition-value-grid {
|
||||||
grid-template-columns: max-content 1fr;
|
grid-template-columns: max-content minmax(auto, 9rem);
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 0.6rem;
|
margin-bottom: 0.6rem;
|
||||||
|
|
||||||
|
select {
|
||||||
|
width: auto;
|
||||||
|
min-width: 5rem;
|
||||||
|
max-width: 9rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.application.mgne .condition-flag-grid {
|
.application.mgne .condition-flag-grid {
|
||||||
@@ -530,10 +536,23 @@
|
|||||||
gap: 0.35rem;
|
gap: 0.35rem;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
|
padding: 0.1rem 0.3rem 0.1rem 0.2rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background 0.15s, color 0.15s;
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
color: @ember-bright;
|
color: #f5dfa0;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
text-shadow: 0 0 8px fade(@gold-acid, 55%);
|
||||||
|
background: fade(@gold-acid, 14%);
|
||||||
|
border: 1px solid fade(@gold-acid, 28%);
|
||||||
|
margin: -1px; // compensate border so layout doesn't shift
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.active) {
|
||||||
|
color: @bone;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
margin: -1px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,3 +660,652 @@
|
|||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ─── Weight badges ────────────────────────────────────────────────────────────
|
||||||
|
.item-weight-badge {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 0.45em;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: @font-body;
|
||||||
|
font-size: 0.7em;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
white-space: nowrap;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
|
&.weight-trivial {
|
||||||
|
color: fade(@bone, 45%);
|
||||||
|
border-color: fade(@bone, 20%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.weight-light {
|
||||||
|
color: @bone;
|
||||||
|
border-color: fade(@bone, 35%);
|
||||||
|
background: fade(@bone, 8%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.weight-normal {
|
||||||
|
color: @gold-acid;
|
||||||
|
border-color: fade(@gold-acid, 40%);
|
||||||
|
background: fade(@gold-acid, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.weight-heavy {
|
||||||
|
color: @blood;
|
||||||
|
border-color: fade(@blood, 45%);
|
||||||
|
background: fade(@blood, 12%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Load display ─────────────────────────────────────────────────────────────
|
||||||
|
.load-display {
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-overloaded {
|
||||||
|
color: @blood !important;
|
||||||
|
text-shadow: 0 0 6px fade(@blood, 50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.resource-box-overloaded {
|
||||||
|
border-color: fade(@blood, 60%) !important;
|
||||||
|
background: fade(@blood, 10%) !important;
|
||||||
|
|
||||||
|
.resource-label-accent {
|
||||||
|
color: @blood !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Item description tooltip ─────────────────────────────────────────────────
|
||||||
|
.item-name[data-tooltip] {
|
||||||
|
cursor: help;
|
||||||
|
&:hover { text-decoration: underline dotted fade(@gold-acid, 55%); }
|
||||||
|
}
|
||||||
|
|
||||||
|
#tooltip.mgne-item-tooltip {
|
||||||
|
max-width: 22rem;
|
||||||
|
font-family: @font-body;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: @parchment;
|
||||||
|
background: darken(@bg-panel-soft, 4%);
|
||||||
|
border: 1px solid fade(@gold-acid, 35%);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0.5rem 0.7rem;
|
||||||
|
box-shadow: 0 4px 14px fade(#000, 55%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Broken / Durability badges ───────────────────────────────────────────────
|
||||||
|
.item-broken-badge {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.3em;
|
||||||
|
padding: 0.05em 0.4em;
|
||||||
|
font-size: 0.65em;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
color: @blood;
|
||||||
|
background: fade(@blood, 14%);
|
||||||
|
border: 1px solid fade(@blood, 45%);
|
||||||
|
border-radius: 3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-burned-badge {
|
||||||
|
color: @gold-acid;
|
||||||
|
background: fade(@gold-acid, 12%);
|
||||||
|
border-color: fade(@gold-acid, 40%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-durability-badge {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.25em;
|
||||||
|
padding: 0.1em 0.45em;
|
||||||
|
font-size: 0.7em;
|
||||||
|
font-weight: 700;
|
||||||
|
color: fade(@bone, 65%);
|
||||||
|
border: 1px solid fade(@bone, 20%);
|
||||||
|
border-radius: 3px;
|
||||||
|
white-space: nowrap;
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
|
||||||
|
&.durability-broken {
|
||||||
|
color: @blood;
|
||||||
|
border-color: fade(@blood, 40%);
|
||||||
|
background: fade(@blood, 10%);
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-row-broken {
|
||||||
|
opacity: 0.6;
|
||||||
|
filter: grayscale(0.4);
|
||||||
|
|
||||||
|
.item-name {
|
||||||
|
text-decoration: line-through;
|
||||||
|
color: fade(@parchment, 55%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Weapon properties ────────────────────────────────────────────────────────
|
||||||
|
.weapon-properties-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.35rem 0.6rem;
|
||||||
|
padding: 0.5rem 0.6rem;
|
||||||
|
background: fade(@bone, 4%);
|
||||||
|
border: 1px solid fade(@bone, 12%);
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
|
||||||
|
.property-check {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3em;
|
||||||
|
font-family: @font-body;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
color: @parchment;
|
||||||
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 0.15em 0.4em;
|
||||||
|
border-radius: 3px;
|
||||||
|
transition: background 0.15s;
|
||||||
|
|
||||||
|
&:hover { background: fade(@gold-acid, 8%); }
|
||||||
|
|
||||||
|
input[type="checkbox"] { accent-color: @gold-acid; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.weapon-property-badge {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.3em;
|
||||||
|
padding: 0.05em 0.35em;
|
||||||
|
font-size: 0.62em;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: fade(@gold-acid, 85%);
|
||||||
|
background: fade(@gold-acid, 10%);
|
||||||
|
border: 1px solid fade(@gold-acid, 30%);
|
||||||
|
border-radius: 3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Creature trait trigger ───────────────────────────────────────────────────
|
||||||
|
.creature-trait-trigger {
|
||||||
|
font-size: 0.82em;
|
||||||
|
color: fade(@parchment, 65%);
|
||||||
|
font-style: italic;
|
||||||
|
margin-left: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Creature traits container ────────────────────────────────────────────────
|
||||||
|
.creature-traits-container {
|
||||||
|
border: 1px solid fade(@blood, 35%);
|
||||||
|
border-left: 3px solid fade(@blood, 65%);
|
||||||
|
border-radius: 4px;
|
||||||
|
background: linear-gradient(135deg, fade(@blood, 5%), transparent 60%),
|
||||||
|
fade(@bg-panel-soft, 85%);
|
||||||
|
padding: 0.6rem 0.75rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-traits-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 0.5rem;
|
||||||
|
border-bottom: 1px solid fade(@blood, 25%);
|
||||||
|
padding-bottom: 0.4rem;
|
||||||
|
margin-bottom: 0.1rem;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 0;
|
||||||
|
font-family: @font-display;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
color: fade(@blood, 90%);
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
font-size: 0.72rem;
|
||||||
|
padding: 0.15em 0.6em;
|
||||||
|
background: fade(@blood, 12%);
|
||||||
|
border: 1px solid fade(@blood, 35%);
|
||||||
|
color: fade(@blood, 80%);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.15s, color 0.15s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: fade(@blood, 22%);
|
||||||
|
color: lighten(@blood, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-traits-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-trait-card {
|
||||||
|
background: fade(@bg-void, 30%);
|
||||||
|
border: 1px solid fade(@blood, 20%);
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0.35rem 0.5rem;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: fade(@blood, 8%);
|
||||||
|
border-color: fade(@blood, 35%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-trait-card-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-trait-name {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.35em;
|
||||||
|
font-family: @font-body;
|
||||||
|
font-size: 0.88rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: @parchment;
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
cursor: default;
|
||||||
|
|
||||||
|
i { color: fade(@blood, 70%); font-size: 0.75em; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-trait-trigger {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-style: italic;
|
||||||
|
color: fade(@parchment, 55%);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-trait-card .item-actions {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.25rem;
|
||||||
|
margin-left: auto;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 1.6rem;
|
||||||
|
height: 1.6rem;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid fade(@bone, 18%);
|
||||||
|
color: fade(@bone, 50%);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: fade(@bone, 10%);
|
||||||
|
color: @bone;
|
||||||
|
border-color: fade(@bone, 35%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// CREATURE SHEET — META ROW + ACTION TABLE
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
.creature-meta-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0.45rem 0.6rem;
|
||||||
|
background: fade(@bg-panel-soft, 50%);
|
||||||
|
border: 1px solid fade(@ember, 20%);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-meta-label {
|
||||||
|
font-family: @font-display;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.07em;
|
||||||
|
color: fade(@ember, 80%);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-type-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-type-checkbox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3em;
|
||||||
|
font-size: 0.83rem;
|
||||||
|
color: @parchment;
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
input[type="checkbox"] {
|
||||||
|
accent-color: @ember;
|
||||||
|
width: 0.9rem;
|
||||||
|
height: 0.9rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-number-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.4rem;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-number-input {
|
||||||
|
width: 4rem;
|
||||||
|
text-align: center;
|
||||||
|
font-family: @font-body;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: @parchment;
|
||||||
|
background: @bg-input;
|
||||||
|
border: 1px solid fade(@ember, 30%);
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0.15em 0.3em;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: fade(@ember, 60%);
|
||||||
|
background: fade(@bg-input, 90%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.creature-action-table-section {
|
||||||
|
.action-table-drop-zone {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.5rem 0.75rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
min-height: 2.4rem;
|
||||||
|
font-size: 0.88rem;
|
||||||
|
color: @parchment;
|
||||||
|
|
||||||
|
i { font-size: 1em; color: @ember; }
|
||||||
|
|
||||||
|
.action-table-name {
|
||||||
|
font-weight: 600;
|
||||||
|
font-family: @font-display;
|
||||||
|
color: @parchment;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.drop-hint {
|
||||||
|
border: 2px dashed fade(@ember, 35%);
|
||||||
|
background: fade(@ember, 4%);
|
||||||
|
color: fade(@parchment, 50%);
|
||||||
|
font-style: italic;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: default;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
|
||||||
|
i { color: fade(@ember, 50%); }
|
||||||
|
|
||||||
|
&:hover, &.drag-over {
|
||||||
|
background: fade(@ember, 9%);
|
||||||
|
border-color: fade(@ember, 60%);
|
||||||
|
color: fade(@parchment, 70%);
|
||||||
|
i { color: @ember; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-table-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.3rem;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
button {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
padding: 0.15em 0.55em;
|
||||||
|
background: fade(@ember, 10%);
|
||||||
|
border: 1px solid fade(@ember, 30%);
|
||||||
|
color: fade(@ember, 80%);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.15s, color 0.15s;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3em;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: fade(@ember, 22%);
|
||||||
|
color: @ember;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// PARTY ACTOR SHEET
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
.application.mgne.party {
|
||||||
|
|
||||||
|
.party-credits-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.6rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border: 1px solid fade(@gold-acid, 35%);
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
background: fade(@bg-input, 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.party-credits-stepper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.credits-input {
|
||||||
|
width: 5rem;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
font-weight: 700;
|
||||||
|
font-family: @font-display;
|
||||||
|
color: @gold-acid;
|
||||||
|
background: fade(@bg-void, 60%);
|
||||||
|
border: 1px solid fade(@gold-acid, 30%);
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.credits-symbol {
|
||||||
|
color: @gold-acid;
|
||||||
|
font-family: @font-display;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin: 0 0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.credits-btn {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 2rem;
|
||||||
|
padding: 0.15rem 0.4rem;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
border: 1px solid fade(@bone, 28%);
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
background: fade(@bg-input, 80%);
|
||||||
|
color: @bone;
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: fade(@gold-acid, 18%);
|
||||||
|
border-color: fade(@gold-acid, 55%);
|
||||||
|
color: @gold-acid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Party member list ─────────────────────────────────────────
|
||||||
|
.application.mgne.party .party-member-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
margin-top: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .party-member-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2rem 1fr 5rem 6rem 5.5rem;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0.3rem 0.4rem;
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
|
||||||
|
&.party-member-header {
|
||||||
|
color: @dust;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
border-bottom: 1px solid fade(@bone, 18%);
|
||||||
|
padding-bottom: 0.25rem;
|
||||||
|
margin-bottom: 0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.party-member-header) {
|
||||||
|
background: fade(@bg-input, 75%);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: fade(@gold-acid, 22%);
|
||||||
|
background: fade(@bg-input, 90%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .party-member-portrait {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid fade(@bone, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .party-member-name a {
|
||||||
|
color: @parchment;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
|
||||||
|
&:hover { color: @gold-acid; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .party-member-hp {
|
||||||
|
color: @ember-bright;
|
||||||
|
font-family: @font-display;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .party-member-type {
|
||||||
|
color: @dust;
|
||||||
|
font-size: 0.78rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Party loot list ────────────────────────────────────────────
|
||||||
|
.application.mgne.party .party-loot-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
margin-top: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .party-loot-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2rem 1fr 7rem 4rem;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0.3rem 0.4rem;
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
|
||||||
|
&.party-loot-header {
|
||||||
|
color: @dust;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
border-bottom: 1px solid fade(@bone, 18%);
|
||||||
|
padding-bottom: 0.25rem;
|
||||||
|
margin-bottom: 0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.party-loot-header) {
|
||||||
|
background: fade(@bg-input, 75%);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: fade(@gold-acid, 22%);
|
||||||
|
background: fade(@bg-input, 90%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .item-portrait {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid fade(@bone, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.application.mgne.party .item-type-label {
|
||||||
|
color: @dust;
|
||||||
|
font-size: 0.78rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Party drop hint ────────────────────────────────────────────
|
||||||
|
.application.mgne.party .party-drop-hint {
|
||||||
|
color: fade(@dust, 70%);
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-style: italic;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
padding: 0.3rem;
|
||||||
|
border: 1px dashed fade(@bone, 18%);
|
||||||
|
border-radius: @radius-sm;
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ export { default as MGNEItemSheet } from "./sheets/base-item-sheet.mjs"
|
|||||||
export { default as MGNECharacterSheet } from "./sheets/character-sheet.mjs"
|
export { default as MGNECharacterSheet } from "./sheets/character-sheet.mjs"
|
||||||
export { default as MGNECreatureSheet } from "./sheets/creature-sheet.mjs"
|
export { default as MGNECreatureSheet } from "./sheets/creature-sheet.mjs"
|
||||||
export { default as MGNECompanionSheet } from "./sheets/companion-sheet.mjs"
|
export { default as MGNECompanionSheet } from "./sheets/companion-sheet.mjs"
|
||||||
|
export { default as MGNEPartySheet } from "./sheets/party-sheet.mjs"
|
||||||
export { default as MGNEWeaponSheet } from "./sheets/weapon-sheet.mjs"
|
export { default as MGNEWeaponSheet } from "./sheets/weapon-sheet.mjs"
|
||||||
export { default as MGNEArmorSheet } from "./sheets/armor-sheet.mjs"
|
export { default as MGNEArmorSheet } from "./sheets/armor-sheet.mjs"
|
||||||
export { default as MGNEShieldSheet } from "./sheets/shield-sheet.mjs"
|
export { default as MGNEShieldSheet } from "./sheets/shield-sheet.mjs"
|
||||||
@@ -10,3 +11,4 @@ export { default as MGNEEquipmentSheet } from "./sheets/equipment-sheet.mjs"
|
|||||||
export { default as MGNEResonanceCoreSheet } from "./sheets/resonance-core-sheet.mjs"
|
export { default as MGNEResonanceCoreSheet } from "./sheets/resonance-core-sheet.mjs"
|
||||||
export { default as MGNEArtifactSheet } from "./sheets/artifact-sheet.mjs"
|
export { default as MGNEArtifactSheet } from "./sheets/artifact-sheet.mjs"
|
||||||
export { default as MGNEFeatureSheet } from "./sheets/feature-sheet.mjs"
|
export { default as MGNEFeatureSheet } from "./sheets/feature-sheet.mjs"
|
||||||
|
export { default as MGNECreatureTraitSheet } from "./sheets/creature-trait-sheet.mjs"
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ export default class MGNEActorSheet extends HandlebarsApplicationMixin(foundry.a
|
|||||||
switch (rollType) {
|
switch (rollType) {
|
||||||
case "ability":
|
case "ability":
|
||||||
return this.document.rollAbility(target.dataset.abilityId)
|
return this.document.rollAbility(target.dataset.abilityId)
|
||||||
|
case "armor":
|
||||||
|
return this.document.rollArmorSave()
|
||||||
case "defense":
|
case "defense":
|
||||||
return this.document.rollDefense()
|
return this.document.rollDefense()
|
||||||
case "weapon":
|
case "weapon":
|
||||||
@@ -78,6 +80,8 @@ export default class MGNEActorSheet extends HandlebarsApplicationMixin(foundry.a
|
|||||||
return this.document.rollResonation(itemId)
|
return this.document.rollResonation(itemId)
|
||||||
case "morale":
|
case "morale":
|
||||||
return this.document.rollMorale()
|
return this.document.rollMorale()
|
||||||
|
case "durability":
|
||||||
|
return this.document.rollDurability(itemId)
|
||||||
case "usage":
|
case "usage":
|
||||||
return this.document.rollUsage(itemId)
|
return this.document.rollUsage(itemId)
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ import MGNEActorSheet from "./base-actor-sheet.mjs"
|
|||||||
import { SYSTEM } from "../../config/system.mjs"
|
import { SYSTEM } from "../../config/system.mjs"
|
||||||
import { buildCharacterSelectOptions } from "./select-options.mjs"
|
import { buildCharacterSelectOptions } from "./select-options.mjs"
|
||||||
|
|
||||||
|
export function stripHtml(html) {
|
||||||
|
return (html ?? "").replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim()
|
||||||
|
}
|
||||||
|
|
||||||
export default class MGNECharacterSheet extends MGNEActorSheet {
|
export default class MGNECharacterSheet extends MGNEActorSheet {
|
||||||
static DEFAULT_OPTIONS = {
|
static DEFAULT_OPTIONS = {
|
||||||
classes: ["character"],
|
classes: ["character"],
|
||||||
@@ -79,16 +83,16 @@ export default class MGNECharacterSheet extends MGNEActorSheet {
|
|||||||
break
|
break
|
||||||
case "equipment":
|
case "equipment":
|
||||||
context.tab = context.tabs.equipment
|
context.tab = context.tabs.equipment
|
||||||
context.weapons = doc.itemTypes.weapon
|
context.weapons = doc.itemTypes.weapon.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
context.armors = doc.itemTypes.armor
|
context.armors = doc.itemTypes.armor.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
context.shields = doc.itemTypes.shield
|
context.shields = doc.itemTypes.shield.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
context.equipmentItems = doc.itemTypes.equipment
|
context.equipmentItems = doc.itemTypes.equipment.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
context.cores = doc.itemTypes["resonance-core"]
|
context.cores = doc.itemTypes["resonance-core"].map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
context.artifacts = doc.itemTypes.artifact
|
context.artifacts = doc.itemTypes.artifact.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
break
|
break
|
||||||
case "features":
|
case "features":
|
||||||
context.tab = context.tabs.features
|
context.tab = context.tabs.features
|
||||||
context.features = doc.itemTypes.feature
|
context.features = doc.itemTypes.feature.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
break
|
break
|
||||||
case "notes":
|
case "notes":
|
||||||
context.tab = context.tabs.notes
|
context.tab = context.tabs.notes
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import MGNEActorSheet from "./base-actor-sheet.mjs"
|
import MGNEActorSheet from "./base-actor-sheet.mjs"
|
||||||
import { SYSTEM } from "../../config/system.mjs"
|
|
||||||
|
|
||||||
export default class MGNECompanionSheet extends MGNEActorSheet {
|
export default class MGNECompanionSheet extends MGNEActorSheet {
|
||||||
static DEFAULT_OPTIONS = {
|
static DEFAULT_OPTIONS = {
|
||||||
@@ -8,6 +7,14 @@ export default class MGNECompanionSheet extends MGNEActorSheet {
|
|||||||
width: 820,
|
width: 820,
|
||||||
height: 700,
|
height: 700,
|
||||||
},
|
},
|
||||||
|
actions: {
|
||||||
|
rollAdventuringBehavior: MGNECompanionSheet.prototype._rollAdventuringBehavior,
|
||||||
|
clearAdventuringBehavior: MGNECompanionSheet.prototype._clearAdventuringBehavior,
|
||||||
|
openAdventuringBehavior: MGNECompanionSheet.prototype._openAdventuringBehavior,
|
||||||
|
rollCombatBehavior: MGNECompanionSheet.prototype._rollCombatBehavior,
|
||||||
|
clearCombatBehavior: MGNECompanionSheet.prototype._clearCombatBehavior,
|
||||||
|
openCombatBehavior: MGNECompanionSheet.prototype._openCombatBehavior,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
static PARTS = {
|
static PARTS = {
|
||||||
@@ -16,11 +23,68 @@ export default class MGNECompanionSheet extends MGNEActorSheet {
|
|||||||
|
|
||||||
async _prepareContext() {
|
async _prepareContext() {
|
||||||
const context = await super._prepareContext()
|
const context = await super._prepareContext()
|
||||||
context.abilityList = SYSTEM.abilityOrder.map(id => ({
|
|
||||||
id,
|
const resolveTable = async (uuid) => {
|
||||||
...SYSTEM.abilities[id],
|
if (!uuid) return null
|
||||||
value: context.source.system.abilities?.[id]?.value ?? 0,
|
const table = await fromUuid(uuid).catch(() => null)
|
||||||
}))
|
return table ? { name: table.name, uuid } : null
|
||||||
|
}
|
||||||
|
|
||||||
|
context.adventuringTable = await resolveTable(this.document.system.adventuringBehaviorUuid)
|
||||||
|
context.combatTable = await resolveTable(this.document.system.combatBehaviorUuid)
|
||||||
|
|
||||||
return context
|
return context
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _onDrop(event) {
|
||||||
|
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||||
|
if (data?.type === "RollTable") {
|
||||||
|
const table = await fromUuid(data.uuid)
|
||||||
|
if (!table) return super._onDrop(event)
|
||||||
|
|
||||||
|
// Determine drop target by proximity to each section
|
||||||
|
const target = event.target.closest("[data-behavior-slot]")
|
||||||
|
const slot = target?.dataset.behaviorSlot
|
||||||
|
if (slot === "adventuring") {
|
||||||
|
await this.document.update({ "system.adventuringBehaviorUuid": data.uuid })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (slot === "combat") {
|
||||||
|
await this.document.update({ "system.combatBehaviorUuid": data.uuid })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Fallback: first empty slot, then adventuring
|
||||||
|
const sys = this.document.system
|
||||||
|
if (!sys.adventuringBehaviorUuid) {
|
||||||
|
await this.document.update({ "system.adventuringBehaviorUuid": data.uuid })
|
||||||
|
} else {
|
||||||
|
await this.document.update({ "system.combatBehaviorUuid": data.uuid })
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return super._onDrop(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
async _rollAdventuringBehavior() { await this._rollTable("adventuringBehaviorUuid") }
|
||||||
|
async _clearAdventuringBehavior() { await this.document.update({ "system.adventuringBehaviorUuid": "" }) }
|
||||||
|
async _openAdventuringBehavior() { await this._openTable("adventuringBehaviorUuid") }
|
||||||
|
|
||||||
|
async _rollCombatBehavior() { await this._rollTable("combatBehaviorUuid") }
|
||||||
|
async _clearCombatBehavior() { await this.document.update({ "system.combatBehaviorUuid": "" }) }
|
||||||
|
async _openCombatBehavior() { await this._openTable("combatBehaviorUuid") }
|
||||||
|
|
||||||
|
async _rollTable(uuidField) {
|
||||||
|
const uuid = this.document.system[uuidField]
|
||||||
|
if (!uuid) return ui.notifications.warn(game.i18n.localize("MGNE.Companion.NoTableLinked"))
|
||||||
|
const table = await fromUuid(uuid).catch(() => null)
|
||||||
|
if (!table) return ui.notifications.warn(game.i18n.localize("MGNE.Companion.TableNotFound"))
|
||||||
|
await table.draw()
|
||||||
|
}
|
||||||
|
|
||||||
|
async _openTable(uuidField) {
|
||||||
|
const uuid = this.document.system[uuidField]
|
||||||
|
if (!uuid) return
|
||||||
|
const table = await fromUuid(uuid).catch(() => null)
|
||||||
|
if (table) table.sheet.render(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
import MGNEActorSheet from "./base-actor-sheet.mjs"
|
import MGNEActorSheet from "./base-actor-sheet.mjs"
|
||||||
import { SYSTEM } from "../../config/system.mjs"
|
import { stripHtml } from "./character-sheet.mjs"
|
||||||
|
|
||||||
export default class MGNECreatureSheet extends MGNEActorSheet {
|
export default class MGNECreatureSheet extends MGNEActorSheet {
|
||||||
static DEFAULT_OPTIONS = {
|
static DEFAULT_OPTIONS = {
|
||||||
classes: ["creature"],
|
classes: ["creature"],
|
||||||
position: {
|
position: {
|
||||||
width: 760,
|
width: 760,
|
||||||
height: 640,
|
height: 680,
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
rollActionTable: MGNECreatureSheet.prototype._rollActionTable,
|
||||||
|
clearActionTable: MGNECreatureSheet.prototype._clearActionTable,
|
||||||
|
openActionTable: MGNECreatureSheet.prototype._openActionTable,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14,13 +19,67 @@ export default class MGNECreatureSheet extends MGNEActorSheet {
|
|||||||
main: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/creature-main.hbs" },
|
main: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/creature-main.hbs" },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_processSubmitData(event, form, submitData) {
|
||||||
|
// Foundry sends null for unchecked checkboxes in a SetField array — strip them
|
||||||
|
if (Array.isArray(submitData.system?.creatureType)) {
|
||||||
|
submitData.system.creatureType = submitData.system.creatureType.filter(v => v != null && v !== "")
|
||||||
|
}
|
||||||
|
return super._processSubmitData(event, form, submitData)
|
||||||
|
}
|
||||||
|
|
||||||
async _prepareContext() {
|
async _prepareContext() {
|
||||||
const context = await super._prepareContext()
|
const context = await super._prepareContext()
|
||||||
context.abilityList = SYSTEM.abilityOrder.map(id => ({
|
context.traits = (this.document.itemTypes["creature-trait"] ?? [])
|
||||||
id,
|
.map(i => ({ ...i, tooltip: stripHtml(i.system.description) }))
|
||||||
...SYSTEM.abilities[id],
|
|
||||||
value: context.source.system.abilities?.[id]?.value ?? 0,
|
// Resolve linked action table
|
||||||
|
const uuid = this.document.system.actionTableUuid
|
||||||
|
if (uuid) {
|
||||||
|
const table = await fromUuid(uuid).catch(() => null)
|
||||||
|
context.actionTable = table ? { name: table.name, uuid } : null
|
||||||
|
} else {
|
||||||
|
context.actionTable = null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build creature type checkboxes
|
||||||
|
const typeSet = this.document.system.creatureType ?? new Set()
|
||||||
|
context.creatureTypes = ["human", "construct", "animal"].map(key => ({
|
||||||
|
key,
|
||||||
|
label: game.i18n.localize(`MGNE.Creature.Types.${key.charAt(0).toUpperCase() + key.slice(1)}`),
|
||||||
|
checked: typeSet.has(key),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
return context
|
return context
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _onDrop(event) {
|
||||||
|
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||||
|
if (data?.type === "RollTable") {
|
||||||
|
const table = await fromUuid(data.uuid)
|
||||||
|
if (table) {
|
||||||
|
await this.document.update({ "system.actionTableUuid": data.uuid })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super._onDrop(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
async _rollActionTable() {
|
||||||
|
const uuid = this.document.system.actionTableUuid
|
||||||
|
if (!uuid) return ui.notifications.warn(game.i18n.localize("MGNE.Creature.NoTableLinked"))
|
||||||
|
const table = await fromUuid(uuid).catch(() => null)
|
||||||
|
if (!table) return ui.notifications.warn(game.i18n.localize("MGNE.Creature.TableNotFound"))
|
||||||
|
await table.draw()
|
||||||
|
}
|
||||||
|
|
||||||
|
async _clearActionTable() {
|
||||||
|
await this.document.update({ "system.actionTableUuid": "" })
|
||||||
|
}
|
||||||
|
|
||||||
|
async _openActionTable() {
|
||||||
|
const uuid = this.document.system.actionTableUuid
|
||||||
|
if (!uuid) return
|
||||||
|
const table = await fromUuid(uuid).catch(() => null)
|
||||||
|
if (table) table.sheet.render(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import MGNEItemSheet from "./base-item-sheet.mjs"
|
||||||
|
|
||||||
|
export default class MGNECreatureTraitSheet extends MGNEItemSheet {
|
||||||
|
static PARTS = {
|
||||||
|
main: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/creature-trait.hbs" },
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
import MGNEActorSheet from "./base-actor-sheet.mjs"
|
||||||
|
|
||||||
|
const SYSTEM_ID = "fvtt-machine-gods-noxian-expanse"
|
||||||
|
|
||||||
|
const PARTY_LOOT_TYPES = new Set(["weapon", "armor", "shield", "equipment", "resonance-core", "artifact"])
|
||||||
|
|
||||||
|
export default class MGNEPartySheet extends MGNEActorSheet {
|
||||||
|
/** @override */
|
||||||
|
static DEFAULT_OPTIONS = {
|
||||||
|
classes: ["party"],
|
||||||
|
position: { width: 820, height: 640 },
|
||||||
|
actions: {
|
||||||
|
openMember: MGNEPartySheet.#onOpenMember,
|
||||||
|
removeMember: MGNEPartySheet.#onRemoveMember,
|
||||||
|
moveMemberUp: MGNEPartySheet.#onMoveMemberUp,
|
||||||
|
moveMemberDown: MGNEPartySheet.#onMoveMemberDown,
|
||||||
|
adjustCredits: MGNEPartySheet.#onAdjustCredits,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static PARTS = {
|
||||||
|
main: { template: `systems/${SYSTEM_ID}/templates/party-main.hbs` },
|
||||||
|
tabs: { template: `systems/${SYSTEM_ID}/templates/party-tabs.hbs` },
|
||||||
|
members: { template: `systems/${SYSTEM_ID}/templates/party-members.hbs` },
|
||||||
|
loot: { template: `systems/${SYSTEM_ID}/templates/party-loot.hbs` },
|
||||||
|
notes: { template: `systems/${SYSTEM_ID}/templates/party-notes.hbs` },
|
||||||
|
}
|
||||||
|
|
||||||
|
tabGroups = { sheet: "members" }
|
||||||
|
|
||||||
|
#getTabs() {
|
||||||
|
const tabs = {
|
||||||
|
members: { id: "members", group: "sheet", label: game.i18n.localize("MGNE.Tabs.members") },
|
||||||
|
loot: { id: "loot", group: "sheet", label: game.i18n.localize("MGNE.Tabs.loot") },
|
||||||
|
notes: { id: "notes", group: "sheet", label: game.i18n.localize("MGNE.Tabs.notes") },
|
||||||
|
}
|
||||||
|
for (const tab of Object.values(tabs)) {
|
||||||
|
tab.active = this.tabGroups[tab.group] === tab.id
|
||||||
|
tab.cssClass = tab.active ? "active" : ""
|
||||||
|
}
|
||||||
|
return tabs
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _prepareContext() {
|
||||||
|
const context = await super._prepareContext()
|
||||||
|
context.tabs = this.#getTabs()
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _preparePartContext(partId, context) {
|
||||||
|
const doc = this.document
|
||||||
|
switch (partId) {
|
||||||
|
case "members": {
|
||||||
|
context.tab = context.tabs.members
|
||||||
|
// Build member list using actorId for moves; store refIdx (position in
|
||||||
|
// memberRefs) so move actions always operate on the correct slot even
|
||||||
|
// when some refs point to deleted actors.
|
||||||
|
const refs = doc.system.memberRefs ?? []
|
||||||
|
const members = []
|
||||||
|
for (let refIdx = 0; refIdx < refs.length; refIdx++) {
|
||||||
|
const actor = game.actors?.get(refs[refIdx].id)
|
||||||
|
if (!actor) continue
|
||||||
|
members.push({
|
||||||
|
id: actor.id,
|
||||||
|
refIdx,
|
||||||
|
name: actor.name,
|
||||||
|
img: actor.img,
|
||||||
|
type: actor.type,
|
||||||
|
typeLabel: game.i18n.localize(`TYPES.Actor.${actor.type}`),
|
||||||
|
hp: actor.system.hp
|
||||||
|
? `${actor.system.hp.value ?? "—"}/${actor.system.hp.max ?? "—"}`
|
||||||
|
: "—",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// isFirst/isLast based on visible list, but swap uses refIdx
|
||||||
|
for (let vi = 0; vi < members.length; vi++) {
|
||||||
|
members[vi].isFirst = vi === 0
|
||||||
|
members[vi].isLast = vi === members.length - 1
|
||||||
|
}
|
||||||
|
context.members = members
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
case "loot": {
|
||||||
|
context.tab = context.tabs.loot
|
||||||
|
context.lootItems = doc.items.contents
|
||||||
|
.filter(i => PARTY_LOOT_TYPES.has(i.type))
|
||||||
|
.map(i => ({
|
||||||
|
id: i.id,
|
||||||
|
img: i.img,
|
||||||
|
name: i.name,
|
||||||
|
typeLabel: game.i18n.localize(`TYPES.Item.${i.type}`),
|
||||||
|
}))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
case "notes":
|
||||||
|
context.tab = context.tabs.notes
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _onDrop(event) {
|
||||||
|
if (!this.isEditable) return
|
||||||
|
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||||
|
|
||||||
|
if (data.type === "Actor") {
|
||||||
|
const actor = await fromUuid(data.uuid)
|
||||||
|
if (!actor || !["character", "companion"].includes(actor.type)) return
|
||||||
|
const refs = foundry.utils.deepClone(this.document.system.memberRefs ?? [])
|
||||||
|
if (refs.some(r => r.id === actor.id)) return
|
||||||
|
refs.push({ id: actor.id })
|
||||||
|
return this.document.update({ "system.memberRefs": refs })
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.type === "Item") {
|
||||||
|
const item = await fromUuid(data.uuid)
|
||||||
|
if (!item || !PARTY_LOOT_TYPES.has(item.type)) return
|
||||||
|
return this.document.createEmbeddedDocuments("Item", [item.toObject()])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Actions ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
static async #onOpenMember(_event, target) {
|
||||||
|
const actor = game.actors?.get(target.dataset.actorId)
|
||||||
|
if (actor) actor.sheet.render(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
static async #onRemoveMember(_event, target) {
|
||||||
|
const id = target.dataset.actorId
|
||||||
|
const refs = (this.document.system.memberRefs ?? []).filter(r => r.id !== id)
|
||||||
|
await this.document.update({ "system.memberRefs": refs })
|
||||||
|
}
|
||||||
|
|
||||||
|
static async #onMoveMemberUp(_event, target) {
|
||||||
|
const refIdx = parseInt(target.dataset.refIdx, 10)
|
||||||
|
if (refIdx <= 0) return
|
||||||
|
const refs = foundry.utils.deepClone(this.document.system.memberRefs ?? []);
|
||||||
|
[refs[refIdx - 1], refs[refIdx]] = [refs[refIdx], refs[refIdx - 1]]
|
||||||
|
await this.document.update({ "system.memberRefs": refs })
|
||||||
|
}
|
||||||
|
|
||||||
|
static async #onMoveMemberDown(_event, target) {
|
||||||
|
const refIdx = parseInt(target.dataset.refIdx, 10)
|
||||||
|
const refs = foundry.utils.deepClone(this.document.system.memberRefs ?? [])
|
||||||
|
if (refIdx >= refs.length - 1) return;
|
||||||
|
[refs[refIdx], refs[refIdx + 1]] = [refs[refIdx + 1], refs[refIdx]]
|
||||||
|
await this.document.update({ "system.memberRefs": refs })
|
||||||
|
}
|
||||||
|
|
||||||
|
static async #onAdjustCredits(_event, target) {
|
||||||
|
const delta = parseInt(target.dataset.delta, 10)
|
||||||
|
const current = this.document.system.credits ?? 0
|
||||||
|
await this.document.update({ "system.credits": Math.max(0, current + delta) })
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,12 +31,13 @@ export function buildSharedSelectOptions() {
|
|||||||
armorPenalties: numericOptions(0, 6),
|
armorPenalties: numericOptions(0, 6),
|
||||||
shieldPenalties: numericOptions(0, 4),
|
shieldPenalties: numericOptions(0, 4),
|
||||||
weaponCategories: objectOptions(SYSTEM.weaponCategories),
|
weaponCategories: objectOptions(SYSTEM.weaponCategories),
|
||||||
|
weaponProperties: Object.entries(SYSTEM.weaponProperties).map(([key, p]) => ({ value: key, label: p.label, hint: p.hint })),
|
||||||
|
weightCategories: objectOptions(SYSTEM.weightCategories),
|
||||||
usageDice: objectOptions(SYSTEM.usageDieChoices),
|
usageDice: objectOptions(SYSTEM.usageDieChoices),
|
||||||
armorDice: objectOptions(SYSTEM.armorDieChoices),
|
armorDice: objectOptions(SYSTEM.armorDieChoices),
|
||||||
omenDice: objectOptions(SYSTEM.omenDieChoices),
|
omenDice: objectOptions(SYSTEM.omenDieChoices),
|
||||||
resonanceList: objectOptions(SYSTEM.resonanceList),
|
resonanceList: objectOptions(SYSTEM.resonanceList),
|
||||||
equipmentSubtypes: objectOptions(SYSTEM.equipmentSubtypes),
|
equipmentSubtypes: objectOptions(SYSTEM.equipmentSubtypes),
|
||||||
artifactIds: objectOptions(SYSTEM.artifactChoices),
|
|
||||||
featureIds: objectOptions(SYSTEM.featureChoices),
|
featureIds: objectOptions(SYSTEM.featureChoices),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ export const SYSTEM = {
|
|||||||
character: { id: "character", label: "Character" },
|
character: { id: "character", label: "Character" },
|
||||||
creature: { id: "creature", label: "Creature" },
|
creature: { id: "creature", label: "Creature" },
|
||||||
companion: { id: "companion", label: "Companion" },
|
companion: { id: "companion", label: "Companion" },
|
||||||
|
party: { id: "party", label: "Party" },
|
||||||
},
|
},
|
||||||
itemTypes: {
|
itemTypes: {
|
||||||
weapon: { id: "weapon", label: "Weapon", icon: itemIcon("weapon") },
|
weapon: { id: "weapon", label: "Weapon", icon: itemIcon("weapon") },
|
||||||
@@ -37,6 +38,7 @@ export const SYSTEM = {
|
|||||||
"resonance-core": { id: "resonance-core", label: "Resonance Core", icon: itemIcon("resonance-core") },
|
"resonance-core": { id: "resonance-core", label: "Resonance Core", icon: itemIcon("resonance-core") },
|
||||||
artifact: { id: "artifact", label: "Artifact", icon: itemIcon("artifact") },
|
artifact: { id: "artifact", label: "Artifact", icon: itemIcon("artifact") },
|
||||||
feature: { id: "feature", label: "Feature", icon: itemIcon("feature") },
|
feature: { id: "feature", label: "Feature", icon: itemIcon("feature") },
|
||||||
|
"creature-trait": { id: "creature-trait", label: "Creature Trait", icon: itemIcon("creature-trait") },
|
||||||
},
|
},
|
||||||
abilities: {
|
abilities: {
|
||||||
agility: { id: "agility", label: "Agility" },
|
agility: { id: "agility", label: "Agility" },
|
||||||
@@ -63,10 +65,37 @@ export const SYSTEM = {
|
|||||||
armorDieChoices: dieChoiceLabels(["d12", "d10", "d8", "d6", "d4", "d2", "0"]),
|
armorDieChoices: dieChoiceLabels(["d12", "d10", "d8", "d6", "d4", "d2", "0"]),
|
||||||
omenDice: ["d2", "d4", "d6", "d8"],
|
omenDice: ["d2", "d4", "d6", "d8"],
|
||||||
omenDieChoices: dieChoiceLabels(["d2", "d4", "d6", "d8"]),
|
omenDieChoices: dieChoiceLabels(["d2", "d4", "d6", "d8"]),
|
||||||
|
weightCategories: {
|
||||||
|
trivial: "Trivial",
|
||||||
|
light: "Light",
|
||||||
|
normal: "Normal",
|
||||||
|
heavy: "Heavy",
|
||||||
|
},
|
||||||
weaponCategories: {
|
weaponCategories: {
|
||||||
melee: "Melee",
|
melee: "Melee",
|
||||||
ranged: "Ranged",
|
ranged: "Ranged",
|
||||||
},
|
},
|
||||||
|
weaponProperties: {
|
||||||
|
ammo: { label: "Ammo", hint: "Requires ammunition. Improvised in melee or without ammo." },
|
||||||
|
awkward: { label: "Awkward", hint: "+1 DR to attacks." },
|
||||||
|
binding: { label: "Binding", hint: "Beat DR by 4+ on same-size or smaller target: inflict Restrained." },
|
||||||
|
durant: { label: "Durant", hint: "Durability die is D8." },
|
||||||
|
finesse: { label: "Finesse", hint: "Attacks can use either Presence or Strength." },
|
||||||
|
fling: { label: "Fling", hint: "Can make ranged attacks. Roll D4 Usage Die to avoid losing it." },
|
||||||
|
fragile: { label: "Fragile", hint: "Durability die is D4." },
|
||||||
|
glinting: { label: "Glinting", hint: "After attacking, next attack vs same target this combat gains -1 DR." },
|
||||||
|
overbearing:{ label: "Overbearing",hint: "+2 damage." },
|
||||||
|
parrying: { label: "Parrying", hint: "-1 DR to avoiding melee attacks while wielding." },
|
||||||
|
precise: { label: "Precise", hint: "-1 DR to hit." },
|
||||||
|
razored: { label: "Razored", hint: "Beat DR by 4+: inflict Bleeding (1)." },
|
||||||
|
ringing: { label: "Ringing", hint: "Beat DR by 4+ and target not Stunned: inflict Stunned (1)." },
|
||||||
|
"two-handed":{ label: "Two-Handed",hint: "Requires both hands." },
|
||||||
|
unwieldy: { label: "Unwieldy", hint: "Cannot attack more than once per Round." },
|
||||||
|
versatile: { label: "Versatile", hint: "Two-handed: -1 DR to hit and +1 damage." },
|
||||||
|
},
|
||||||
|
get weaponPropertyLabels() {
|
||||||
|
return Object.fromEntries(Object.entries(this.weaponProperties).map(([k, v]) => [k, v.label]))
|
||||||
|
},
|
||||||
resonanceList: {
|
resonanceList: {
|
||||||
accelerate: "Accelerate",
|
accelerate: "Accelerate",
|
||||||
blast: "Blast",
|
blast: "Blast",
|
||||||
|
|||||||
@@ -93,6 +93,10 @@ export default class MGNEActor extends Actor {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async rollArmorSave() {
|
||||||
|
return MGNERoll.rollArmorSave(this)
|
||||||
|
}
|
||||||
|
|
||||||
async rollWeapon(itemId) {
|
async rollWeapon(itemId) {
|
||||||
const item = this.items.get(itemId)
|
const item = this.items.get(itemId)
|
||||||
if (!item) return null
|
if (!item) return null
|
||||||
@@ -129,7 +133,10 @@ export default class MGNEActor extends Actor {
|
|||||||
async rollProfileAttack() {
|
async rollProfileAttack() {
|
||||||
const attackBaseLabel = normalizeGenericActionLabel(this.system.attack?.label ?? t("MGNE.Common.Attack"), t("MGNE.Common.Attack"))
|
const attackBaseLabel = normalizeGenericActionLabel(this.system.attack?.label ?? t("MGNE.Common.Attack"), t("MGNE.Common.Attack"))
|
||||||
const attackLabel = formatActionLabel(attackBaseLabel, t("MGNE.Common.Attack"))
|
const attackLabel = formatActionLabel(attackBaseLabel, t("MGNE.Common.Attack"))
|
||||||
const result = await this.rollAbility("strength", {
|
// Creatures have no ability scores; ability value defaults to 0 via roll.mjs
|
||||||
|
const result = await MGNERoll.promptCheck({
|
||||||
|
actor: this,
|
||||||
|
abilityId: "strength",
|
||||||
label: attackLabel,
|
label: attackLabel,
|
||||||
rollType: "attack",
|
rollType: "attack",
|
||||||
})
|
})
|
||||||
@@ -220,6 +227,12 @@ export default class MGNEActor extends Actor {
|
|||||||
return item.rollUsage()
|
return item.rollUsage()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async rollDurability(itemId) {
|
||||||
|
const item = this.items.get(itemId)
|
||||||
|
if (!item) return null
|
||||||
|
return MGNERoll.rollDurability(item)
|
||||||
|
}
|
||||||
|
|
||||||
async quickRest() {
|
async quickRest() {
|
||||||
const roll = await (new Roll("1d4")).evaluate()
|
const roll = await (new Roll("1d4")).evaluate()
|
||||||
const hp = this.system.hp?.value ?? 0
|
const hp = this.system.hp?.value ?? 0
|
||||||
|
|||||||
@@ -57,11 +57,15 @@ async function renderCard(context) {
|
|||||||
const normalizedEyebrow = `${eyebrow}`.trim().toLowerCase()
|
const normalizedEyebrow = `${eyebrow}`.trim().toLowerCase()
|
||||||
const normalizedLabel = `${context.label ?? ""}`.trim().toLowerCase()
|
const normalizedLabel = `${context.label ?? ""}`.trim().toLowerCase()
|
||||||
|
|
||||||
|
// Render dice tooltip HTML if a roll was provided
|
||||||
|
const diceTooltip = context._roll ? await context._roll.render() : null
|
||||||
|
|
||||||
return foundry.applications.handlebars.renderTemplate(`systems/${SYSTEM_ID}/templates/chat-message.hbs`, {
|
return foundry.applications.handlebars.renderTemplate(`systems/${SYSTEM_ID}/templates/chat-message.hbs`, {
|
||||||
...context,
|
...context,
|
||||||
modeClass: context.mode ?? "generic",
|
modeClass: context.mode ?? "generic",
|
||||||
eyebrow: "",
|
eyebrow: "",
|
||||||
outcomeClass,
|
outcomeClass,
|
||||||
|
diceTooltip,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,6 +160,7 @@ export default class MGNERoll {
|
|||||||
damageItemId: showDamageButton ? item.id : null,
|
damageItemId: showDamageButton ? item.id : null,
|
||||||
damageFormula: showDamageButton ? (item.system.damage || "1") : null,
|
damageFormula: showDamageButton ? (item.system.damage || "1") : null,
|
||||||
damageCritical: showDamageButton && critical,
|
damageCritical: showDamageButton && critical,
|
||||||
|
_roll: roll,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
@@ -181,6 +186,7 @@ export default class MGNERoll {
|
|||||||
total: roll.total,
|
total: roll.total,
|
||||||
outcome: broken ? t("MGNE.Roll.OutcomeBroken") : t("MGNE.Roll.OutcomeSteady"),
|
outcome: broken ? t("MGNE.Roll.OutcomeBroken") : t("MGNE.Roll.OutcomeSteady"),
|
||||||
specialText: broken ? t("MGNE.Roll.MoraleBrokenText") : "",
|
specialText: broken ? t("MGNE.Roll.MoraleBrokenText") : "",
|
||||||
|
_roll: roll,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
@@ -236,6 +242,7 @@ export default class MGNERoll {
|
|||||||
showApplyButton: true,
|
showApplyButton: true,
|
||||||
damageTotal: roll.total,
|
damageTotal: roll.total,
|
||||||
damageCritical: isCritical,
|
damageCritical: isCritical,
|
||||||
|
_roll: roll,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
@@ -267,6 +274,7 @@ export default class MGNERoll {
|
|||||||
showApplyButton: true,
|
showApplyButton: true,
|
||||||
damageTotal: roll.total,
|
damageTotal: roll.total,
|
||||||
damageCritical: isCritical,
|
damageCritical: isCritical,
|
||||||
|
_roll: roll,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
@@ -278,6 +286,39 @@ export default class MGNERoll {
|
|||||||
return { roll }
|
return { roll }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async rollArmorSave(actor) {
|
||||||
|
const formula = actor.getArmorRollFormula()
|
||||||
|
const items = actor.getEquippedArmorItems()
|
||||||
|
|
||||||
|
if (formula === "0") {
|
||||||
|
ui.notifications.warn(t("MGNE.Notification.NoArmorEquipped"))
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const roll = await (new Roll(formula)).evaluate()
|
||||||
|
const armorNames = items.map(i => i.name).join(" + ")
|
||||||
|
|
||||||
|
const contentHtml = await renderCard({
|
||||||
|
mode: "armor",
|
||||||
|
actorName: actor.name,
|
||||||
|
actorImg: actor.img,
|
||||||
|
label: t("MGNE.Roll.ArmorSave"),
|
||||||
|
subtitle: armorNames,
|
||||||
|
formula: roll.formula,
|
||||||
|
total: roll.total,
|
||||||
|
outcome: f("MGNE.Roll.ArmorAbsorbed", { amount: roll.total }),
|
||||||
|
_roll: roll,
|
||||||
|
})
|
||||||
|
|
||||||
|
await ChatMessage.create({
|
||||||
|
speaker: ChatMessage.getSpeaker({ actor }),
|
||||||
|
rolls: [roll],
|
||||||
|
content: contentHtml,
|
||||||
|
})
|
||||||
|
|
||||||
|
return roll
|
||||||
|
}
|
||||||
|
|
||||||
static async rollUsage(item) {
|
static async rollUsage(item) {
|
||||||
const currentDie = item.system.usageDie
|
const currentDie = item.system.usageDie
|
||||||
if (!currentDie || currentDie === "depleted") {
|
if (!currentDie || currentDie === "depleted") {
|
||||||
@@ -303,6 +344,7 @@ export default class MGNERoll {
|
|||||||
total: roll.total,
|
total: roll.total,
|
||||||
outcome: depleted ? f("MGNE.Roll.DowngradedTo", { die: nextDie.toUpperCase() }) : t("MGNE.Roll.NoChange"),
|
outcome: depleted ? f("MGNE.Roll.DowngradedTo", { die: nextDie.toUpperCase() }) : t("MGNE.Roll.NoChange"),
|
||||||
specialText: depleted && nextDie === "depleted" ? t("MGNE.Roll.ItemNowDepleted") : "",
|
specialText: depleted && nextDie === "depleted" ? t("MGNE.Roll.ItemNowDepleted") : "",
|
||||||
|
_roll: roll,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
@@ -314,6 +356,48 @@ export default class MGNERoll {
|
|||||||
return { roll, depleted, nextDie }
|
return { roll, depleted, nextDie }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async rollDurability(item) {
|
||||||
|
const currentDie = item.system.durabilityDie
|
||||||
|
if (!currentDie || currentDie === "depleted") {
|
||||||
|
ui.notifications.warn(f("MGNE.Notification.ItemDurabilityDepleted", { item: item.name }))
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const roll = await (new Roll(`1${currentDie}`)).evaluate()
|
||||||
|
const degraded = roll.total <= 2
|
||||||
|
const nextDie = degraded ? stepDownDie(currentDie) : currentDie
|
||||||
|
const nowBroken = degraded && nextDie === "depleted"
|
||||||
|
const updates = { "system.durabilityDie": nextDie }
|
||||||
|
if (nowBroken) {
|
||||||
|
updates["system.broken"] = true
|
||||||
|
if ("equipped" in (item.system ?? {})) updates["system.equipped"] = false
|
||||||
|
}
|
||||||
|
await item.update(updates)
|
||||||
|
|
||||||
|
const contentHtml = await renderCard({
|
||||||
|
mode: "durability",
|
||||||
|
actorName: item.parent?.name ?? item.name,
|
||||||
|
actorImg: item.img,
|
||||||
|
label: f("MGNE.Roll.DurabilityLabel", { item: item.name }),
|
||||||
|
subtitle: f("MGNE.Roll.CurrentDie", { die: currentDie.toUpperCase() }),
|
||||||
|
formula: roll.formula,
|
||||||
|
total: roll.total,
|
||||||
|
outcome: degraded
|
||||||
|
? f("MGNE.Roll.DowngradedTo", { die: nextDie.toUpperCase() })
|
||||||
|
: t("MGNE.Roll.NoChange"),
|
||||||
|
specialText: nowBroken ? t("MGNE.Roll.ItemNowBroken") : "",
|
||||||
|
_roll: roll,
|
||||||
|
})
|
||||||
|
|
||||||
|
await ChatMessage.create({
|
||||||
|
speaker: ChatMessage.getSpeaker({ actor: item.parent ?? null }),
|
||||||
|
rolls: [roll],
|
||||||
|
content: contentHtml,
|
||||||
|
})
|
||||||
|
|
||||||
|
return { roll, degraded, nextDie, nowBroken }
|
||||||
|
}
|
||||||
|
|
||||||
static async applyDamageCard({ actor, sourceActor = null, sourceItem = null, amount, armorRoll = null, appliedDamage, newHp, breakText = "", defenseFumbleText = "", criticalArmorText = "" }) {
|
static async applyDamageCard({ actor, sourceActor = null, sourceItem = null, amount, armorRoll = null, appliedDamage, newHp, breakText = "", defenseFumbleText = "", criticalArmorText = "" }) {
|
||||||
const contentHtml = await renderCard({
|
const contentHtml = await renderCard({
|
||||||
mode: "apply-damage",
|
mode: "apply-damage",
|
||||||
@@ -335,6 +419,7 @@ export default class MGNERoll {
|
|||||||
criticalArmorText,
|
criticalArmorText,
|
||||||
breakText ? f("MGNE.Roll.BreakText", { text: breakText }) : "",
|
breakText ? f("MGNE.Roll.BreakText", { text: breakText }) : "",
|
||||||
]),
|
]),
|
||||||
|
_roll: armorRoll ?? null,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
@@ -359,6 +444,7 @@ export default class MGNERoll {
|
|||||||
total: roll.total,
|
total: roll.total,
|
||||||
outcome,
|
outcome,
|
||||||
specialText,
|
specialText,
|
||||||
|
_roll: roll,
|
||||||
})
|
})
|
||||||
|
|
||||||
await ChatMessage.create({
|
await ChatMessage.create({
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
export { default as MGNECharacter } from "./character.mjs"
|
export { default as MGNECharacter } from "./character.mjs"
|
||||||
export { default as MGNECreature } from "./creature.mjs"
|
export { default as MGNECreature } from "./creature.mjs"
|
||||||
export { default as MGNECompanion } from "./companion.mjs"
|
export { default as MGNECompanion } from "./companion.mjs"
|
||||||
|
export { default as MGNEParty } from "./party.mjs"
|
||||||
export { default as MGNEWeapon } from "./weapon.mjs"
|
export { default as MGNEWeapon } from "./weapon.mjs"
|
||||||
export { default as MGNEArmor } from "./armor.mjs"
|
export { default as MGNEArmor } from "./armor.mjs"
|
||||||
export { default as MGNEShield } from "./shield.mjs"
|
export { default as MGNEShield } from "./shield.mjs"
|
||||||
@@ -8,3 +9,4 @@ export { default as MGNEEquipment } from "./equipment.mjs"
|
|||||||
export { default as MGNEResonanceCore } from "./resonance-core.mjs"
|
export { default as MGNEResonanceCore } from "./resonance-core.mjs"
|
||||||
export { default as MGNEArtifact } from "./artifact.mjs"
|
export { default as MGNEArtifact } from "./artifact.mjs"
|
||||||
export { default as MGNEFeature } from "./feature.mjs"
|
export { default as MGNEFeature } from "./feature.mjs"
|
||||||
|
export { default as MGNECreatureTrait } from "./creature-trait.mjs"
|
||||||
|
|||||||
@@ -12,8 +12,16 @@ export default class MGNEArmor extends foundry.abstract.TypeDataModel {
|
|||||||
choices: SYSTEM.armorDieChoices,
|
choices: SYSTEM.armorDieChoices,
|
||||||
}),
|
}),
|
||||||
penalty: numberField(0, 0, 6),
|
penalty: numberField(0, 0, 6),
|
||||||
|
weight: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "heavy",
|
||||||
|
choices: SYSTEM.weightCategories,
|
||||||
|
}),
|
||||||
equipped: booleanField(false),
|
equipped: booleanField(false),
|
||||||
broken: booleanField(false),
|
broken: booleanField(false),
|
||||||
|
durabilityDie: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "d6",
|
||||||
|
choices: SYSTEM.usageDieChoices,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,6 @@ export default class MGNEArtifact extends foundry.abstract.TypeDataModel {
|
|||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
return {
|
return {
|
||||||
description: htmlField(""),
|
description: htmlField(""),
|
||||||
artifactId: new foundry.data.fields.StringField({
|
|
||||||
required: true,
|
|
||||||
nullable: false,
|
|
||||||
initial: "shiver-lens",
|
|
||||||
choices: SYSTEM.artifactChoices,
|
|
||||||
}),
|
|
||||||
synchronized: booleanField(false),
|
synchronized: booleanField(false),
|
||||||
synchronizedTo: stringField(""),
|
synchronizedTo: stringField(""),
|
||||||
usageDie: new foundry.data.fields.StringField({
|
usageDie: new foundry.data.fields.StringField({
|
||||||
@@ -20,6 +14,14 @@ export default class MGNEArtifact extends foundry.abstract.TypeDataModel {
|
|||||||
choices: SYSTEM.usageDieChoices,
|
choices: SYSTEM.usageDieChoices,
|
||||||
}),
|
}),
|
||||||
broken: booleanField(false),
|
broken: booleanField(false),
|
||||||
|
durabilityDie: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "d6",
|
||||||
|
choices: SYSTEM.usageDieChoices,
|
||||||
|
}),
|
||||||
|
weight: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "normal",
|
||||||
|
choices: SYSTEM.weightCategories,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,34 @@ export default class MGNECharacter extends foundry.abstract.TypeDataModel {
|
|||||||
this.syncLimit = Math.max(0, this.abilities.toughness?.value ?? 0)
|
this.syncLimit = Math.max(0, this.abilities.toughness?.value ?? 0)
|
||||||
this.syncRemaining = Math.max(0, this.syncLimit - (this.artifactSync.used ?? 0))
|
this.syncRemaining = Math.max(0, this.syncLimit - (this.artifactSync.used ?? 0))
|
||||||
this.armorFormula = this.parent?.getArmorRollFormula?.() ?? "0"
|
this.armorFormula = this.parent?.getArmorRollFormula?.() ?? "0"
|
||||||
|
|
||||||
|
// Compute current load per RAW:
|
||||||
|
// trivial = 0, light = 10 per slot, normal = 1, heavy = fills remaining capacity (max 1)
|
||||||
|
let normalLoad = 0
|
||||||
|
let lightCount = 0
|
||||||
|
let heavyCount = 0
|
||||||
|
for (const item of (this.parent?.items ?? [])) {
|
||||||
|
if (item.system?.carried === false) continue // not being carried
|
||||||
|
const w = item.system?.weight ?? "normal"
|
||||||
|
if (w === "trivial") continue
|
||||||
|
else if (w === "light") lightCount++
|
||||||
|
else if (w === "normal") normalLoad++
|
||||||
|
else if (w === "heavy") heavyCount++
|
||||||
|
}
|
||||||
|
normalLoad += Math.floor(lightCount / 10)
|
||||||
|
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.overloaded = this.currentLoad > this.carryCapacity
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
import { abilitySchema, htmlField, numberField, stringField, trackSchema } from "./shared.mjs"
|
import { htmlField, numberField, stringField, trackSchema } from "./shared.mjs"
|
||||||
|
|
||||||
export default class MGNECompanion extends foundry.abstract.TypeDataModel {
|
export default class MGNECompanion extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
|
|
||||||
return {
|
return {
|
||||||
abilities: abilitySchema(),
|
|
||||||
hp: trackSchema(1, 1),
|
hp: trackSchema(1, 1),
|
||||||
morale: numberField(7, 2, 12),
|
morale: numberField(7, 2, 12),
|
||||||
armor: new fields.SchemaField({
|
armor: new fields.SchemaField({
|
||||||
@@ -19,8 +18,8 @@ export default class MGNECompanion extends foundry.abstract.TypeDataModel {
|
|||||||
valueText: stringField(""),
|
valueText: stringField(""),
|
||||||
traitText: stringField(""),
|
traitText: stringField(""),
|
||||||
specialtyText: stringField(""),
|
specialtyText: stringField(""),
|
||||||
adventuringBehavior: htmlField(""),
|
adventuringBehaviorUuid: stringField(""),
|
||||||
combatBehavior: htmlField(""),
|
combatBehaviorUuid: stringField(""),
|
||||||
upkeep: stringField("3d10c per full rest"),
|
upkeep: stringField("3d10c per full rest"),
|
||||||
description: htmlField(""),
|
description: htmlField(""),
|
||||||
notes: htmlField(""),
|
notes: htmlField(""),
|
||||||
@@ -29,4 +28,12 @@ export default class MGNECompanion extends foundry.abstract.TypeDataModel {
|
|||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static LOCALIZATION_PREFIXES = ["MGNE.Companion"]
|
static LOCALIZATION_PREFIXES = ["MGNE.Companion"]
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static migrateData(source) {
|
||||||
|
// Remove old html behavior fields if present
|
||||||
|
if ("adventuringBehavior" in source) delete source.adventuringBehavior
|
||||||
|
if ("combatBehavior" in source) delete source.combatBehavior
|
||||||
|
return super.migrateData(source)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { htmlField, stringField } from "./shared.mjs"
|
||||||
|
|
||||||
|
export default class MGNECreatureTrait extends foundry.abstract.TypeDataModel {
|
||||||
|
static defineSchema() {
|
||||||
|
return {
|
||||||
|
description: htmlField(""),
|
||||||
|
trigger: stringField(""),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static LOCALIZATION_PREFIXES = ["MGNE.CreatureTrait"]
|
||||||
|
}
|
||||||
@@ -1,27 +1,39 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
import { abilitySchema, htmlField, numberField, stringField, trackSchema } from "./shared.mjs"
|
import { htmlField, numberField, stringField, trackSchema } from "./shared.mjs"
|
||||||
|
|
||||||
|
const CREATURE_TYPES = ["human", "construct", "animal"]
|
||||||
|
|
||||||
export default class MGNECreature extends foundry.abstract.TypeDataModel {
|
export default class MGNECreature extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
|
|
||||||
return {
|
return {
|
||||||
abilities: abilitySchema(),
|
|
||||||
hp: trackSchema(1, 1),
|
hp: trackSchema(1, 1),
|
||||||
morale: numberField(7, 2, 12),
|
morale: numberField(7, 2, 12),
|
||||||
armor: new fields.SchemaField({
|
armor: new fields.SchemaField({
|
||||||
die: new fields.StringField({ required: true, nullable: false, initial: "0", choices: SYSTEM.armorDieChoices }),
|
die: new fields.StringField({ required: true, nullable: false, initial: "0", choices: SYSTEM.armorDieChoices }),
|
||||||
}),
|
}),
|
||||||
attack: new fields.SchemaField({
|
creatureType: new fields.SetField(
|
||||||
label: stringField("Attack"),
|
new fields.StringField({ required: true, choices: CREATURE_TYPES }),
|
||||||
damage: stringField("1d4"),
|
{ required: true, nullable: false, initial: [] }
|
||||||
}),
|
),
|
||||||
|
number: stringField("1"),
|
||||||
|
actionTableUuid: stringField(""),
|
||||||
description: htmlField(""),
|
description: htmlField(""),
|
||||||
special: htmlField(""),
|
|
||||||
notes: htmlField(""),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static LOCALIZATION_PREFIXES = ["MGNE.Creature"]
|
static LOCALIZATION_PREFIXES = ["MGNE.Creature"]
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static migrateData(source) {
|
||||||
|
// Remove old attack field if present (no longer part of the schema)
|
||||||
|
if ("attack" in source) delete source.attack
|
||||||
|
// Form submissions send null for unchecked checkboxes in array fields — filter them out
|
||||||
|
if (Array.isArray(source.creatureType)) {
|
||||||
|
source.creatureType = source.creatureType.filter(v => v != null && v !== "")
|
||||||
|
}
|
||||||
|
return super.migrateData(source)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,15 @@ export default class MGNEEquipment extends foundry.abstract.TypeDataModel {
|
|||||||
choices: SYSTEM.usageDieChoices,
|
choices: SYSTEM.usageDieChoices,
|
||||||
}),
|
}),
|
||||||
consumable: booleanField(false),
|
consumable: booleanField(false),
|
||||||
|
broken: booleanField(false),
|
||||||
|
durabilityDie: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "d6",
|
||||||
|
choices: SYSTEM.usageDieChoices,
|
||||||
|
}),
|
||||||
|
weight: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "normal",
|
||||||
|
choices: SYSTEM.weightCategories,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ export default class MGNEFeature extends foundry.abstract.TypeDataModel {
|
|||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
return {
|
return {
|
||||||
featureId: new foundry.data.fields.StringField({
|
featureId: new foundry.data.fields.StringField({
|
||||||
required: true,
|
required: false,
|
||||||
nullable: false,
|
nullable: true,
|
||||||
initial: "akimbo-hit-priest",
|
blank: true,
|
||||||
choices: SYSTEM.featureChoices,
|
initial: "",
|
||||||
}),
|
}),
|
||||||
description: htmlField(""),
|
description: htmlField(""),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { htmlField } from "./shared.mjs"
|
||||||
|
|
||||||
|
export default class MGNEParty extends foundry.abstract.TypeDataModel {
|
||||||
|
static defineSchema() {
|
||||||
|
const fields = foundry.data.fields
|
||||||
|
|
||||||
|
return {
|
||||||
|
memberRefs: new fields.ArrayField(
|
||||||
|
new fields.SchemaField({
|
||||||
|
id: new fields.StringField({ required: true, nullable: false, blank: false }),
|
||||||
|
})
|
||||||
|
),
|
||||||
|
credits: new fields.NumberField({ required: true, nullable: false, integer: true, initial: 0, min: 0 }),
|
||||||
|
notes: htmlField(""),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
static LOCALIZATION_PREFIXES = ["MGNE.Party"]
|
||||||
|
}
|
||||||
@@ -18,6 +18,15 @@ export default class MGNEResonanceCore extends foundry.abstract.TypeDataModel {
|
|||||||
choices: SYSTEM.usageDieChoices,
|
choices: SYSTEM.usageDieChoices,
|
||||||
}),
|
}),
|
||||||
burnedOut: booleanField(false),
|
burnedOut: booleanField(false),
|
||||||
|
broken: booleanField(false),
|
||||||
|
durabilityDie: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "d6",
|
||||||
|
choices: SYSTEM.usageDieChoices,
|
||||||
|
}),
|
||||||
|
weight: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "trivial",
|
||||||
|
choices: SYSTEM.weightCategories,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,16 @@ export default class MGNEShield extends foundry.abstract.TypeDataModel {
|
|||||||
choices: SYSTEM.armorDieChoices,
|
choices: SYSTEM.armorDieChoices,
|
||||||
}),
|
}),
|
||||||
penalty: numberField(0, 0, 4),
|
penalty: numberField(0, 0, 4),
|
||||||
|
weight: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "normal",
|
||||||
|
choices: SYSTEM.weightCategories,
|
||||||
|
}),
|
||||||
equipped: booleanField(false),
|
equipped: booleanField(false),
|
||||||
broken: booleanField(false),
|
broken: booleanField(false),
|
||||||
|
durabilityDie: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "d6",
|
||||||
|
choices: SYSTEM.usageDieChoices,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,14 @@ export default class MGNEWeapon extends foundry.abstract.TypeDataModel {
|
|||||||
}),
|
}),
|
||||||
damage: stringField("1d4"),
|
damage: stringField("1d4"),
|
||||||
range: stringField("Touch"),
|
range: stringField("Touch"),
|
||||||
properties: stringField(""),
|
properties: new foundry.data.fields.SetField(
|
||||||
|
new foundry.data.fields.StringField({ required: true, nullable: false, blank: false }),
|
||||||
|
{ required: true, nullable: false, initial: [] }
|
||||||
|
),
|
||||||
|
weight: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "normal",
|
||||||
|
choices: SYSTEM.weightCategories,
|
||||||
|
}),
|
||||||
usageDie: new foundry.data.fields.StringField({
|
usageDie: new foundry.data.fields.StringField({
|
||||||
required: true,
|
required: true,
|
||||||
nullable: false,
|
nullable: false,
|
||||||
@@ -23,9 +30,29 @@ export default class MGNEWeapon extends foundry.abstract.TypeDataModel {
|
|||||||
quantity: numberField(1, 0),
|
quantity: numberField(1, 0),
|
||||||
equipped: booleanField(false),
|
equipped: booleanField(false),
|
||||||
broken: booleanField(false),
|
broken: booleanField(false),
|
||||||
|
durabilityDie: new foundry.data.fields.StringField({
|
||||||
|
required: true, nullable: false, initial: "d6",
|
||||||
|
choices: SYSTEM.usageDieChoices,
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static LOCALIZATION_PREFIXES = ["MGNE.Weapon"]
|
static LOCALIZATION_PREFIXES = ["MGNE.Weapon"]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migrate old string-based properties field to the new SetField format.
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
static migrateData(source) {
|
||||||
|
// Old data stored properties as a plain string; convert to empty array
|
||||||
|
if (typeof source.properties === "string") {
|
||||||
|
source.properties = []
|
||||||
|
}
|
||||||
|
// Remove any null/undefined/blank entries that may have crept in
|
||||||
|
if (Array.isArray(source.properties)) {
|
||||||
|
source.properties = source.properties.filter(p => p != null && p !== "")
|
||||||
|
}
|
||||||
|
return super.migrateData(source)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+453
-3
@@ -10,7 +10,8 @@
|
|||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@foundryvtt/foundryvtt-cli": "^3.0.3",
|
"@foundryvtt/foundryvtt-cli": "^3.0.3",
|
||||||
"less": "^4.6.4"
|
"less": "^4.6.4",
|
||||||
|
"patch-package": "^8.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@foundryvtt/foundryvtt-cli": {
|
"node_modules/@foundryvtt/foundryvtt-cli": {
|
||||||
@@ -53,6 +54,13 @@
|
|||||||
"util": "^0.12.5"
|
"util": "^0.12.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@yarnpkg/lockfile": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-2-Clause"
|
||||||
|
},
|
||||||
"node_modules/abstract-level": {
|
"node_modules/abstract-level": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz",
|
||||||
@@ -142,6 +150,19 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/braces": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"fill-range": "^7.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/buffer": {
|
"node_modules/buffer": {
|
||||||
"version": "6.0.3",
|
"version": "6.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||||
@@ -240,6 +261,22 @@
|
|||||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ci-info": {
|
||||||
|
"version": "3.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
|
||||||
|
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/sibiraj-s"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/classic-level": {
|
"node_modules/classic-level": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz",
|
||||||
@@ -309,6 +346,21 @@
|
|||||||
"url": "https://github.com/sponsors/mesqueeb"
|
"url": "https://github.com/sponsors/mesqueeb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cross-spawn": {
|
||||||
|
"version": "7.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||||
|
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"path-key": "^3.1.0",
|
||||||
|
"shebang-command": "^2.0.0",
|
||||||
|
"which": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/define-data-property": {
|
"node_modules/define-data-property": {
|
||||||
"version": "1.1.4",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
||||||
@@ -416,6 +468,29 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fill-range": {
|
||||||
|
"version": "7.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||||
|
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"to-regex-range": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/find-yarn-workspace-root": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"micromatch": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/for-each": {
|
"node_modules/for-each": {
|
||||||
"version": "0.3.5",
|
"version": "0.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
||||||
@@ -432,6 +507,21 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fs-extra": {
|
||||||
|
"version": "10.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||||
|
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"graceful-fs": "^4.2.0",
|
||||||
|
"jsonfile": "^6.0.1",
|
||||||
|
"universalify": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/function-bind": {
|
"node_modules/function-bind": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
@@ -519,8 +609,17 @@
|
|||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC"
|
||||||
"optional": true
|
},
|
||||||
|
"node_modules/has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/has-property-descriptors": {
|
"node_modules/has-property-descriptors": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@@ -694,6 +793,22 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-docker": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"is-docker": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-fullwidth-code-point": {
|
"node_modules/is-fullwidth-code-point": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
@@ -724,6 +839,16 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-number": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.12.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-regex": {
|
"node_modules/is-regex": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
|
||||||
@@ -772,6 +897,33 @@
|
|||||||
"url": "https://github.com/sponsors/mesqueeb"
|
"url": "https://github.com/sponsors/mesqueeb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-wsl": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"is-docker": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/isarray": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/isexe": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
|
||||||
@@ -785,6 +937,59 @@
|
|||||||
"js-yaml": "bin/js-yaml.js"
|
"js-yaml": "bin/js-yaml.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/json-stable-stringify": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.8",
|
||||||
|
"call-bound": "^1.0.4",
|
||||||
|
"isarray": "^2.0.5",
|
||||||
|
"jsonify": "^0.0.1",
|
||||||
|
"object-keys": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/jsonfile": {
|
||||||
|
"version": "6.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
|
||||||
|
"integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"universalify": "^2.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"graceful-fs": "^4.1.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/jsonify": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
|
||||||
|
"integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Public Domain",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/klaw-sync": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"graceful-fs": "^4.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/less": {
|
"node_modules/less": {
|
||||||
"version": "4.6.4",
|
"version": "4.6.4",
|
||||||
"resolved": "https://registry.npmjs.org/less/-/less-4.6.4.tgz",
|
"resolved": "https://registry.npmjs.org/less/-/less-4.6.4.tgz",
|
||||||
@@ -880,6 +1085,20 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/micromatch": {
|
||||||
|
"version": "4.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
||||||
|
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"braces": "^3.0.3",
|
||||||
|
"picomatch": "^2.3.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/mime": {
|
"node_modules/mime": {
|
||||||
"version": "1.6.0",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||||
@@ -894,6 +1113,16 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/minimist": {
|
||||||
|
"version": "1.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||||
|
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/mkdirp": {
|
"node_modules/mkdirp": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
|
||||||
@@ -967,6 +1196,33 @@
|
|||||||
"node-gyp-build-test": "build-test.js"
|
"node-gyp-build-test": "build-test.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/object-keys": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/open": {
|
||||||
|
"version": "7.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
|
||||||
|
"integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"is-docker": "^2.0.0",
|
||||||
|
"is-wsl": "^2.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/parse-node-version": {
|
"node_modules/parse-node-version": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
|
||||||
@@ -977,6 +1233,89 @@
|
|||||||
"node": ">= 0.10"
|
"node": ">= 0.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/patch-package": {
|
||||||
|
"version": "8.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz",
|
||||||
|
"integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@yarnpkg/lockfile": "^1.1.0",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"ci-info": "^3.7.0",
|
||||||
|
"cross-spawn": "^7.0.3",
|
||||||
|
"find-yarn-workspace-root": "^2.0.0",
|
||||||
|
"fs-extra": "^10.0.0",
|
||||||
|
"json-stable-stringify": "^1.0.2",
|
||||||
|
"klaw-sync": "^6.0.0",
|
||||||
|
"minimist": "^1.2.6",
|
||||||
|
"open": "^7.4.2",
|
||||||
|
"semver": "^7.5.3",
|
||||||
|
"slash": "^2.0.0",
|
||||||
|
"tmp": "^0.2.4",
|
||||||
|
"yaml": "^2.2.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"patch-package": "index.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14",
|
||||||
|
"npm": ">5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/patch-package/node_modules/chalk": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/patch-package/node_modules/semver": {
|
||||||
|
"version": "7.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
|
||||||
|
"integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-key": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/picomatch": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||||
|
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pify": {
|
"node_modules/pify": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
|
||||||
@@ -1103,6 +1442,39 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/shebang-command": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"shebang-regex": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/shebang-regex": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/slash": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/source-map": {
|
"node_modules/source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
@@ -1142,6 +1514,52 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tmp": {
|
||||||
|
"version": "0.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
|
||||||
|
"integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/to-regex-range": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"is-number": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/universalify": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/util": {
|
"node_modules/util": {
|
||||||
"version": "0.12.5",
|
"version": "0.12.5",
|
||||||
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
|
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
|
||||||
@@ -1156,6 +1574,22 @@
|
|||||||
"which-typed-array": "^1.1.2"
|
"which-typed-array": "^1.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/which": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"isexe": "^2.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"node-which": "bin/node-which"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/which-typed-array": {
|
"node_modules/which-typed-array": {
|
||||||
"version": "1.1.20",
|
"version": "1.1.20",
|
||||||
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz",
|
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz",
|
||||||
@@ -1206,6 +1640,22 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/yaml": {
|
||||||
|
"version": "2.8.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz",
|
||||||
|
"integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"yaml": "bin.mjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 14.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/eemeli"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/yargs": {
|
"node_modules/yargs": {
|
||||||
"version": "17.7.2",
|
"version": "17.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
||||||
|
|||||||
+4
-2
@@ -10,10 +10,12 @@
|
|||||||
"watch:css": "lessc --watch less/mgne.less css/mgne.css",
|
"watch:css": "lessc --watch less/mgne.less css/mgne.css",
|
||||||
"build:packs": "node ./tools/packCompendiums.mjs",
|
"build:packs": "node ./tools/packCompendiums.mjs",
|
||||||
"unpack:packs": "node ./tools/unpackCompendiums.mjs",
|
"unpack:packs": "node ./tools/unpackCompendiums.mjs",
|
||||||
"build": "npm run build:css && npm run build:packs"
|
"build": "npm run build:css && npm run build:packs",
|
||||||
|
"postinstall": "patch-package"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@foundryvtt/foundryvtt-cli": "^3.0.3",
|
"@foundryvtt/foundryvtt-cli": "^3.0.3",
|
||||||
"less": "^4.6.4"
|
"less": "^4.6.4",
|
||||||
|
"patch-package": "^8.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000006
|
MANIFEST-000025
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
2026/05/08-21:55:31.407696 7f90423fc6c0 Recovering log #4
|
|
||||||
2026/05/08-21:55:31.469619 7f90423fc6c0 Delete type=3 #2
|
|
||||||
2026/05/08-21:55:31.469673 7f90423fc6c0 Delete type=0 #4
|
|
||||||
2026/05/08-23:13:08.593524 7f9040fff6c0 Level-0 table #9: started
|
|
||||||
2026/05/08-23:13:08.596826 7f9040fff6c0 Level-0 table #9: 1354 bytes OK
|
|
||||||
2026/05/08-23:13:08.603659 7f9040fff6c0 Delete type=0 #7
|
|
||||||
2026/05/08-23:13:08.630872 7f9040fff6c0 Manual compaction at level-0 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
2026/05/08-23:13:08.630900 7f9040fff6c0 Manual compaction at level-1 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
2026/05/08-21:43:50.273188 7fe6227fc6c0 Delete type=3 #1
|
2026/05/17-15:40:00.779700 7f1642bfd6c0 Recovering log #22
|
||||||
2026/05/08-21:43:50.275745 7fe621ffb6c0 Level-0 table #5: started
|
2026/05/17-15:40:00.789740 7f1642bfd6c0 Delete type=3 #20
|
||||||
2026/05/08-21:43:50.279227 7fe621ffb6c0 Level-0 table #5: 1176 bytes OK
|
2026/05/17-15:40:00.789807 7f1642bfd6c0 Delete type=0 #22
|
||||||
2026/05/08-21:43:50.285623 7fe621ffb6c0 Delete type=0 #3
|
|
||||||
2026/05/08-21:43:50.285800 7fe621ffb6c0 Manual compaction at level-0 from '!items!mgne-arm-chainshirt' @ 72057594037927935 : 1 .. '!items!mgne-shd-medshield' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000006
|
MANIFEST-000025
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
2026/05/08-21:55:31.289051 7f90433fe6c0 Recovering log #4
|
2026/05/17-15:40:00.750239 7f16423fc6c0 Recovering log #22
|
||||||
2026/05/08-21:55:31.355282 7f90433fe6c0 Delete type=3 #2
|
2026/05/17-15:40:00.760411 7f16423fc6c0 Delete type=3 #20
|
||||||
2026/05/08-21:55:31.355328 7f90433fe6c0 Delete type=0 #4
|
2026/05/17-15:40:00.760461 7f16423fc6c0 Delete type=0 #22
|
||||||
2026/05/08-23:13:08.563586 7f9040fff6c0 Level-0 table #9: started
|
|
||||||
2026/05/08-23:13:08.566679 7f9040fff6c0 Level-0 table #9: 4899 bytes OK
|
|
||||||
2026/05/08-23:13:08.572808 7f9040fff6c0 Delete type=0 #7
|
|
||||||
2026/05/08-23:13:08.593335 7f9040fff6c0 Manual compaction at level-0 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
|
|
||||||
2026/05/08-23:13:08.593380 7f9040fff6c0 Manual compaction at level-1 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
2026/05/08-21:43:50.302039 7fe6227fc6c0 Delete type=3 #1
|
2026/05/17-13:26:05.090885 7f16423fc6c0 Recovering log #17
|
||||||
2026/05/08-21:43:50.303179 7fe621ffb6c0 Level-0 table #5: started
|
2026/05/17-13:26:05.101315 7f16423fc6c0 Delete type=3 #15
|
||||||
2026/05/08-21:43:50.306422 7fe621ffb6c0 Level-0 table #5: 2597 bytes OK
|
2026/05/17-13:26:05.101364 7f16423fc6c0 Delete type=0 #17
|
||||||
2026/05/08-21:43:50.313231 7fe621ffb6c0 Delete type=0 #3
|
2026/05/17-15:39:46.172949 7f1641bfb6c0 Level-0 table #23: started
|
||||||
2026/05/08-21:43:50.313379 7fe621ffb6c0 Manual compaction at level-0 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!mgne-comp-silicon-cantor' @ 0 : 0; will stop at (end)
|
2026/05/17-15:39:46.177184 7f1641bfb6c0 Level-0 table #23: 4899 bytes OK
|
||||||
|
2026/05/17-15:39:46.183241 7f1641bfb6c0 Delete type=0 #21
|
||||||
|
2026/05/17-15:39:46.215307 7f1641bfb6c0 Manual compaction at level-0 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
|
||||||
|
2026/05/17-15:39:46.224653 7f1641bfb6c0 Manual compaction at level-1 from '!actors!mgne-comp-beguiled-noble' @ 72057594037927935 : 1 .. '!actors!null' @ 0 : 0; will stop at '!actors!null' @ 17 : 1
|
||||||
|
2026/05/17-15:39:46.224663 7f1641bfb6c0 Compacting 1@1 + 1@2 files
|
||||||
|
2026/05/17-15:39:46.227820 7f1641bfb6c0 Generated table #24@1: 1 keys, 1984 bytes
|
||||||
|
2026/05/17-15:39:46.227830 7f1641bfb6c0 Compacted 1@1 + 1@2 files => 1984 bytes
|
||||||
|
2026/05/17-15:39:46.233855 7f1641bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
|
||||||
|
2026/05/17-15:39:46.233946 7f1641bfb6c0 Delete type=2 #19
|
||||||
|
2026/05/17-15:39:46.234305 7f1641bfb6c0 Delete type=2 #23
|
||||||
|
2026/05/17-15:39:46.253812 7f1641bfb6c0 Manual compaction at level-1 from '!actors!null' @ 17 : 1 .. '!actors!null' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000006
|
MANIFEST-000025
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
2026/05/08-21:55:31.191179 7f90423fc6c0 Recovering log #4
|
2026/05/17-15:40:00.736377 7f1643bff6c0 Recovering log #22
|
||||||
2026/05/08-21:55:31.286675 7f90423fc6c0 Delete type=3 #2
|
2026/05/17-15:40:00.746313 7f1643bff6c0 Delete type=3 #20
|
||||||
2026/05/08-21:55:31.286748 7f90423fc6c0 Delete type=0 #4
|
2026/05/17-15:40:00.746417 7f1643bff6c0 Delete type=0 #22
|
||||||
2026/05/08-23:13:08.553332 7f9040fff6c0 Level-0 table #9: started
|
|
||||||
2026/05/08-23:13:08.556569 7f9040fff6c0 Level-0 table #9: 10414 bytes OK
|
|
||||||
2026/05/08-23:13:08.563470 7f9040fff6c0 Delete type=0 #7
|
|
||||||
2026/05/08-23:13:08.593313 7f9040fff6c0 Manual compaction at level-0 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
2026/05/08-23:13:08.593373 7f9040fff6c0 Manual compaction at level-1 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
2026/05/08-21:43:50.329948 7fe6227fc6c0 Delete type=3 #1
|
2026/05/17-13:26:05.076690 7f1643bff6c0 Recovering log #17
|
||||||
2026/05/08-21:43:50.330941 7fe621ffb6c0 Level-0 table #5: started
|
2026/05/17-13:26:05.087217 7f1643bff6c0 Delete type=3 #15
|
||||||
2026/05/08-21:43:50.335360 7fe621ffb6c0 Level-0 table #5: 8674 bytes OK
|
2026/05/17-13:26:05.087270 7f1643bff6c0 Delete type=0 #17
|
||||||
2026/05/08-21:43:50.341467 7fe621ffb6c0 Delete type=0 #3
|
2026/05/17-15:39:46.194394 7f1641bfb6c0 Level-0 table #23: started
|
||||||
2026/05/08-21:43:50.341610 7fe621ffb6c0 Manual compaction at level-0 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!mgne-feat-66' @ 0 : 0; will stop at (end)
|
2026/05/17-15:39:46.197937 7f1641bfb6c0 Level-0 table #23: 10414 bytes OK
|
||||||
|
2026/05/17-15:39:46.204111 7f1641bfb6c0 Delete type=0 #21
|
||||||
|
2026/05/17-15:39:46.215335 7f1641bfb6c0 Manual compaction at level-0 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
||||||
|
2026/05/17-15:39:46.234408 7f1641bfb6c0 Manual compaction at level-1 from '!items!mgne-feat-11' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 145 : 1
|
||||||
|
2026/05/17-15:39:46.234419 7f1641bfb6c0 Compacting 1@1 + 1@2 files
|
||||||
|
2026/05/17-15:39:46.238287 7f1641bfb6c0 Generated table #24@1: 1 keys, 727 bytes
|
||||||
|
2026/05/17-15:39:46.238317 7f1641bfb6c0 Compacted 1@1 + 1@2 files => 727 bytes
|
||||||
|
2026/05/17-15:39:46.244549 7f1641bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
|
||||||
|
2026/05/17-15:39:46.244607 7f1641bfb6c0 Delete type=2 #19
|
||||||
|
2026/05/17-15:39:46.244675 7f1641bfb6c0 Delete type=2 #23
|
||||||
|
2026/05/17-15:39:46.253828 7f1641bfb6c0 Manual compaction at level-1 from '!items!null' @ 145 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000008
|
MANIFEST-000026
|
||||||
|
|||||||
+3
-15
@@ -1,15 +1,3 @@
|
|||||||
2026/05/08-21:55:31.471617 7f9043bff6c0 Recovering log #7
|
2026/05/17-15:40:00.792467 7f16423fc6c0 Recovering log #23
|
||||||
2026/05/08-21:55:31.534327 7f9043bff6c0 Delete type=0 #7
|
2026/05/17-15:40:00.805587 7f16423fc6c0 Delete type=3 #21
|
||||||
2026/05/08-21:55:31.534392 7f9043bff6c0 Delete type=3 #6
|
2026/05/17-15:40:00.805652 7f16423fc6c0 Delete type=0 #23
|
||||||
2026/05/08-23:13:08.603800 7f9040fff6c0 Level-0 table #11: started
|
|
||||||
2026/05/08-23:13:08.607838 7f9040fff6c0 Level-0 table #11: 30878 bytes OK
|
|
||||||
2026/05/08-23:13:08.613810 7f9040fff6c0 Delete type=0 #9
|
|
||||||
2026/05/08-23:13:08.630881 7f9040fff6c0 Manual compaction at level-0 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zpxl7WL2sfrQwhFr' @ 0 : 0; will stop at (end)
|
|
||||||
2026/05/08-23:13:08.630910 7f9040fff6c0 Manual compaction at level-1 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zpxl7WL2sfrQwhFr' @ 0 : 0; will stop at '!tables.results!zpxl7WL2sfrQwhFr' @ 428 : 1
|
|
||||||
2026/05/08-23:13:08.630915 7f9040fff6c0 Compacting 1@1 + 1@2 files
|
|
||||||
2026/05/08-23:13:08.634532 7f9040fff6c0 Generated table #12@1: 436 keys, 40143 bytes
|
|
||||||
2026/05/08-23:13:08.634545 7f9040fff6c0 Compacted 1@1 + 1@2 files => 40143 bytes
|
|
||||||
2026/05/08-23:13:08.641716 7f9040fff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
|
||||||
2026/05/08-23:13:08.641873 7f9040fff6c0 Delete type=2 #5
|
|
||||||
2026/05/08-23:13:08.642088 7f9040fff6c0 Delete type=2 #11
|
|
||||||
2026/05/08-23:13:08.669116 7f9040fff6c0 Manual compaction at level-1 from '!tables.results!zpxl7WL2sfrQwhFr' @ 428 : 1 .. '!tables.results!zpxl7WL2sfrQwhFr' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,3 +1,15 @@
|
|||||||
2026/05/08-21:43:50.541628 7f42173ff6c0 Recovering log #4
|
2026/05/17-13:26:05.132672 7f16423fc6c0 Recovering log #18
|
||||||
2026/05/08-21:43:50.552528 7f42173ff6c0 Delete type=3 #2
|
2026/05/17-13:26:05.142773 7f16423fc6c0 Delete type=3 #16
|
||||||
2026/05/08-21:43:50.552584 7f42173ff6c0 Delete type=0 #4
|
2026/05/17-13:26:05.142824 7f16423fc6c0 Delete type=0 #18
|
||||||
|
2026/05/17-15:39:46.374557 7f1641bfb6c0 Level-0 table #24: started
|
||||||
|
2026/05/17-15:39:46.380380 7f1641bfb6c0 Level-0 table #24: 36276 bytes OK
|
||||||
|
2026/05/17-15:39:46.386967 7f1641bfb6c0 Delete type=0 #22
|
||||||
|
2026/05/17-15:39:46.393402 7f1641bfb6c0 Manual compaction at level-0 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zjYp8qq96SSCUgBi' @ 0 : 0; will stop at (end)
|
||||||
|
2026/05/17-15:39:46.403700 7f1641bfb6c0 Manual compaction at level-1 from '!tables!mgne-tbl-armor' @ 72057594037927935 : 1 .. '!tables.results!zjYp8qq96SSCUgBi' @ 0 : 0; will stop at '!tables.results!zuw1vPYn2wNmreKL' @ 1530 : 0
|
||||||
|
2026/05/17-15:39:46.403711 7f1641bfb6c0 Compacting 1@1 + 1@2 files
|
||||||
|
2026/05/17-15:39:46.422351 7f1641bfb6c0 Generated table #25@1: 436 keys, 40426 bytes
|
||||||
|
2026/05/17-15:39:46.422374 7f1641bfb6c0 Compacted 1@1 + 1@2 files => 40426 bytes
|
||||||
|
2026/05/17-15:39:46.428514 7f1641bfb6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||||
|
2026/05/17-15:39:46.428618 7f1641bfb6c0 Delete type=2 #20
|
||||||
|
2026/05/17-15:39:46.428754 7f1641bfb6c0 Delete type=2 #24
|
||||||
|
2026/05/17-15:39:46.428833 7f1641bfb6c0 Manual compaction at level-1 from '!tables.results!zuw1vPYn2wNmreKL' @ 1530 : 0 .. '!tables.results!zjYp8qq96SSCUgBi' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000006
|
MANIFEST-000025
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
2026/05/08-21:55:31.136074 7f9043bff6c0 Recovering log #4
|
2026/05/17-15:40:00.721783 7f16433fe6c0 Recovering log #22
|
||||||
2026/05/08-21:55:31.188878 7f9043bff6c0 Delete type=3 #2
|
2026/05/17-15:40:00.732595 7f16433fe6c0 Delete type=3 #20
|
||||||
2026/05/08-21:55:31.188952 7f9043bff6c0 Delete type=0 #4
|
2026/05/17-15:40:00.732660 7f16433fe6c0 Delete type=0 #22
|
||||||
2026/05/08-23:13:08.572904 7f9040fff6c0 Level-0 table #9: started
|
|
||||||
2026/05/08-23:13:08.576083 7f9040fff6c0 Level-0 table #9: 7115 bytes OK
|
|
||||||
2026/05/08-23:13:08.582427 7f9040fff6c0 Delete type=0 #7
|
|
||||||
2026/05/08-23:13:08.593352 7f9040fff6c0 Manual compaction at level-0 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
2026/05/08-23:13:08.593387 7f9040fff6c0 Manual compaction at level-1 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
2026/05/08-21:43:50.391398 7fe6227fc6c0 Delete type=3 #1
|
2026/05/17-13:26:05.061355 7f1642bfd6c0 Recovering log #17
|
||||||
2026/05/08-21:43:50.392499 7fe621ffb6c0 Level-0 table #5: started
|
2026/05/17-13:26:05.072897 7f1642bfd6c0 Delete type=3 #15
|
||||||
2026/05/08-21:43:50.396077 7fe621ffb6c0 Level-0 table #5: 6039 bytes OK
|
2026/05/17-13:26:05.072969 7f1642bfd6c0 Delete type=0 #17
|
||||||
2026/05/08-21:43:50.402332 7fe621ffb6c0 Delete type=0 #3
|
2026/05/17-15:39:46.204241 7f1641bfb6c0 Level-0 table #23: started
|
||||||
2026/05/08-21:43:50.402433 7fe621ffb6c0 Manual compaction at level-0 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!mgne-res-summonmist' @ 0 : 0; will stop at (end)
|
2026/05/17-15:39:46.207933 7f1641bfb6c0 Level-0 table #23: 7117 bytes OK
|
||||||
|
2026/05/17-15:39:46.215151 7f1641bfb6c0 Delete type=0 #21
|
||||||
|
2026/05/17-15:39:46.215347 7f1641bfb6c0 Manual compaction at level-0 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
||||||
|
2026/05/17-15:39:46.244725 7f1641bfb6c0 Manual compaction at level-1 from '!items!mgne-res-accelerate' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 81 : 1
|
||||||
|
2026/05/17-15:39:46.244731 7f1641bfb6c0 Compacting 1@1 + 1@2 files
|
||||||
|
2026/05/17-15:39:46.247722 7f1641bfb6c0 Generated table #24@1: 1 keys, 910 bytes
|
||||||
|
2026/05/17-15:39:46.247731 7f1641bfb6c0 Compacted 1@1 + 1@2 files => 910 bytes
|
||||||
|
2026/05/17-15:39:46.253408 7f1641bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
|
||||||
|
2026/05/17-15:39:46.253506 7f1641bfb6c0 Delete type=2 #19
|
||||||
|
2026/05/17-15:39:46.253663 7f1641bfb6c0 Delete type=2 #23
|
||||||
|
2026/05/17-15:39:46.253842 7f1641bfb6c0 Manual compaction at level-1 from '!items!null' @ 81 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000006
|
MANIFEST-000025
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
2026/05/08-21:55:31.357207 7f90433fe6c0 Recovering log #4
|
2026/05/17-15:40:00.764360 7f16423fc6c0 Recovering log #22
|
||||||
2026/05/08-21:55:31.405871 7f90433fe6c0 Delete type=3 #2
|
2026/05/17-15:40:00.775885 7f16423fc6c0 Delete type=3 #20
|
||||||
2026/05/08-21:55:31.405923 7f90433fe6c0 Delete type=0 #4
|
2026/05/17-15:40:00.775980 7f16423fc6c0 Delete type=0 #22
|
||||||
2026/05/08-23:13:08.582538 7f9040fff6c0 Level-0 table #9: started
|
|
||||||
2026/05/08-23:13:08.586427 7f9040fff6c0 Level-0 table #9: 1965 bytes OK
|
|
||||||
2026/05/08-23:13:08.593091 7f9040fff6c0 Delete type=0 #7
|
|
||||||
2026/05/08-23:13:08.593365 7f9040fff6c0 Manual compaction at level-0 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
2026/05/08-23:13:08.593394 7f9040fff6c0 Manual compaction at level-1 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
2026/05/08-21:43:50.418303 7fe6227fc6c0 Delete type=3 #1
|
2026/05/17-13:26:05.105018 7f16423fc6c0 Recovering log #17
|
||||||
2026/05/08-21:43:50.419161 7fe621ffb6c0 Level-0 table #5: started
|
2026/05/17-13:26:05.114474 7f16423fc6c0 Delete type=3 #15
|
||||||
2026/05/08-21:43:50.422322 7fe621ffb6c0 Level-0 table #5: 1295 bytes OK
|
2026/05/17-13:26:05.114527 7f16423fc6c0 Delete type=0 #17
|
||||||
2026/05/08-21:43:50.428355 7fe621ffb6c0 Delete type=0 #3
|
2026/05/17-15:39:46.183373 7f1641bfb6c0 Level-0 table #23: started
|
||||||
2026/05/08-21:43:50.428476 7fe621ffb6c0 Manual compaction at level-0 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!mgne-wpn-whip' @ 0 : 0; will stop at (end)
|
2026/05/17-15:39:46.187330 7f1641bfb6c0 Level-0 table #23: 1965 bytes OK
|
||||||
|
2026/05/17-15:39:46.194074 7f1641bfb6c0 Delete type=0 #21
|
||||||
|
2026/05/17-15:39:46.215323 7f1641bfb6c0 Manual compaction at level-0 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
||||||
|
2026/05/17-15:39:46.215362 7f1641bfb6c0 Manual compaction at level-1 from '!items!mgne-wpn-club' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 49 : 1
|
||||||
|
2026/05/17-15:39:46.215370 7f1641bfb6c0 Compacting 1@1 + 1@2 files
|
||||||
|
2026/05/17-15:39:46.218482 7f1641bfb6c0 Generated table #24@1: 1 keys, 626 bytes
|
||||||
|
2026/05/17-15:39:46.218497 7f1641bfb6c0 Compacted 1@1 + 1@2 files => 626 bytes
|
||||||
|
2026/05/17-15:39:46.224247 7f1641bfb6c0 compacted to: files[ 0 0 2 0 0 0 0 ]
|
||||||
|
2026/05/17-15:39:46.224396 7f1641bfb6c0 Delete type=2 #19
|
||||||
|
2026/05/17-15:39:46.224564 7f1641bfb6c0 Delete type=2 #23
|
||||||
|
2026/05/17-15:39:46.253795 7f1641bfb6c0 Manual compaction at level-1 from '!items!null' @ 49 : 1 .. '!items!null' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -7,61 +7,61 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-cat-01
|
- _id: mgne-tbl-cat-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Synaptic Feedback. You are reduced to 0 HP."
|
text: "Synaptic Feedback. You are reduced to 0 HP."
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-01"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-01"
|
||||||
- _id: mgne-tbl-cat-02
|
- _id: mgne-tbl-cat-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Malicious Inversion. If cast on an enemy, the Resonation targets you. If cast on a friendly target, it targets your nearest enemy."
|
text: "Malicious Inversion. If cast on an enemy, the Resonation targets you. If cast on a friendly target, it targets your nearest enemy."
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-02"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-02"
|
||||||
- _id: mgne-tbl-cat-03
|
- _id: mgne-tbl-cat-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Desynchronitic Burst. A random nearby Artifact explodes, destroying it and dealing D6 damage to its carrier."
|
text: "Desynchronitic Burst. A random nearby Artifact explodes, destroying it and dealing D6 damage to its carrier."
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-03"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-03"
|
||||||
- _id: mgne-tbl-cat-04
|
- _id: mgne-tbl-cat-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Inadvertent Reduplication. The Resonation casts twice, the targets for both are determined randomly."
|
text: "Inadvertent Reduplication. The Resonation casts twice, the targets for both are determined randomly."
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-04"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-04"
|
||||||
- _id: mgne-tbl-cat-05
|
- _id: mgne-tbl-cat-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Calcifying Conjuration. You are Restrained by a prison of bone that forms in the air around you. For five minutes, you cannot break yourself out, and the difficulty for others to free you is +3 DR."
|
text: "Calcifying Conjuration. You are Restrained by a prison of bone that forms in the air around you. For five minutes, you cannot break yourself out, and the difficulty for others to free you is +3 DR."
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-05"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-05"
|
||||||
- _id: mgne-tbl-cat-06
|
- _id: mgne-tbl-cat-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Backblast. You are knocked Prone by the energetic backlash and suffer Stunned (2)."
|
text: "Backblast. You are knocked Prone by the energetic backlash and suffer Stunned (2)."
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-06"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-06"
|
||||||
- _id: mgne-tbl-cat-07
|
- _id: mgne-tbl-cat-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Nanofeed. Your Resonation invokes normally, but it consumes all of your worn armor in the process."
|
text: "Nanofeed. Your Resonation invokes normally, but it consumes all of your worn armor in the process."
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-07"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-07"
|
||||||
- _id: mgne-tbl-cat-08
|
- _id: mgne-tbl-cat-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Drained. You suffer Fatigued (1). The amount of Fatigued suffered doubles every time you roll this result during the same day."
|
text: "Drained. You suffer Fatigued (1). The amount of Fatigued suffered doubles every time you roll this result during the same day."
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-08"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-08"
|
||||||
- _id: mgne-tbl-cat-09
|
- _id: mgne-tbl-cat-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Antiluck. Discard an Omen. This result cannot be rerolled and the fumble cannot be neutralized."
|
text: "Antiluck. Discard an Omen. This result cannot be rerolled and the fumble cannot be neutralized."
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-09"
|
_key: "!tables.results!mgne-tbl-catastrophe.mgne-tbl-cat-09"
|
||||||
- _id: mgne-tbl-cat-10
|
- _id: mgne-tbl-cat-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Total Collapse. All of your Artifacts de-Synchronize. You cannot invoke Resonations for the rest of the day. You are damaged to 1 HP."
|
text: "Total Collapse. All of your Artifacts de-Synchronize. You cannot invoke Resonations for the rest of the day. You are damaged to 1 HP."
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,61 +7,61 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-euc-01
|
- _id: mgne-tbl-euc-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Restorative Warming. You recover D4 HP."
|
text: "Restorative Warming. You recover D4 HP."
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-01"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-01"
|
||||||
- _id: mgne-tbl-euc-02
|
- _id: mgne-tbl-euc-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Twinvocation. You may immediately invoke the Resonation again."
|
text: "Twinvocation. You may immediately invoke the Resonation again."
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-02"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-02"
|
||||||
- _id: mgne-tbl-euc-03
|
- _id: mgne-tbl-euc-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Synchronal Amplification. You may Synchronize an additional Artifact for the rest of the day."
|
text: "Synchronal Amplification. You may Synchronize an additional Artifact for the rest of the day."
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-03"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-03"
|
||||||
- _id: mgne-tbl-euc-04
|
- _id: mgne-tbl-euc-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Harmonization. You gain -1 DR to invoking Resonations for the next five minutes."
|
text: "Harmonization. You gain -1 DR to invoking Resonations for the next five minutes."
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-04"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-04"
|
||||||
- _id: mgne-tbl-euc-05
|
- _id: mgne-tbl-euc-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Rebate. The total number of Resonations you can invoke increases by two for the rest of the day."
|
text: "Rebate. The total number of Resonations you can invoke increases by two for the rest of the day."
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-05"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-05"
|
||||||
- _id: mgne-tbl-euc-06
|
- _id: mgne-tbl-euc-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Ambient Levitation. You gain +1 Carrying Capacity for the rest of the day."
|
text: "Ambient Levitation. You gain +1 Carrying Capacity for the rest of the day."
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-06"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-06"
|
||||||
- _id: mgne-tbl-euc-07
|
- _id: mgne-tbl-euc-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Fortunetelling. You receive sudden insight into the near future and -4 DR to your next check in the next five minutes."
|
text: "Fortunetelling. You receive sudden insight into the near future and -4 DR to your next check in the next five minutes."
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-07"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-07"
|
||||||
- _id: mgne-tbl-euc-08
|
- _id: mgne-tbl-euc-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Dermal Strengthening. You gain +1 max HP for the rest of the day."
|
text: "Dermal Strengthening. You gain +1 max HP for the rest of the day."
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-08"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-08"
|
||||||
- _id: mgne-tbl-euc-09
|
- _id: mgne-tbl-euc-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Investiture By Powers Unknown. You recover an Omen."
|
text: "Investiture By Powers Unknown. You recover an Omen."
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-09"
|
_key: "!tables.results!mgne-tbl-eucatastrophe.mgne-tbl-euc-09"
|
||||||
- _id: mgne-tbl-euc-10
|
- _id: mgne-tbl-euc-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Collective Intelligence. You gain a random Feature from a nearby character for the next ten minutes. If there are no nearby characters with Features, you increase a random Ability by 1 until the end of the day (D4: 1 – Strength, 2 – Presence, 3 – Agility, 4 – Toughness)."
|
text: "Collective Intelligence. You gain a random Feature from a nearby character for the next ten minutes. If there are no nearby characters with Features, you increase a random Ability by 1 until the end of the day (D4: 1 – Strength, 2 – Presence, 3 – Agility, 4 – Toughness)."
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,61 +7,61 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-mis-01
|
- _id: mgne-tbl-mis-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Mishandling. The Usage Dice for any equipment involved in the check decreases by a step, and any consumables involved break. If no items were involved, suffer D4 damage bypassing Armor."
|
text: "Mishandling. The Usage Dice for any equipment involved in the check decreases by a step, and any consumables involved break. If no items were involved, suffer D4 damage bypassing Armor."
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-01"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-01"
|
||||||
- _id: mgne-tbl-mis-02
|
- _id: mgne-tbl-mis-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Irritating Fumble. A random creature from the surrounding area comes to investigate, its disposition hostile."
|
text: "Irritating Fumble. A random creature from the surrounding area comes to investigate, its disposition hostile."
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-02"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-02"
|
||||||
- _id: mgne-tbl-mis-03
|
- _id: mgne-tbl-mis-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Smoke Point. You start an uncontrolled fire in your environment. If this is impossible, you suffer D4 damage bypassing Armor instead."
|
text: "Smoke Point. You start an uncontrolled fire in your environment. If this is impossible, you suffer D4 damage bypassing Armor instead."
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-03"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-03"
|
||||||
- _id: mgne-tbl-mis-04
|
- _id: mgne-tbl-mis-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Tetanus Nail. You are exposed to pathogens and suffer Infected."
|
text: "Tetanus Nail. You are exposed to pathogens and suffer Infected."
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-04"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-04"
|
||||||
- _id: mgne-tbl-mis-05
|
- _id: mgne-tbl-mis-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Shaken Confidence. You suffer +1 DR on checks until you fully rest."
|
text: "Shaken Confidence. You suffer +1 DR on checks until you fully rest."
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-05"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-05"
|
||||||
- _id: mgne-tbl-mis-06
|
- _id: mgne-tbl-mis-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Oof, My Larynx. You cannot invoke Resonations for D8 hours."
|
text: "Oof, My Larynx. You cannot invoke Resonations for D8 hours."
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-06"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-06"
|
||||||
- _id: mgne-tbl-mis-07
|
- _id: mgne-tbl-mis-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Gaff. You suffer +3 DR on your next check this hour, and if that check fails it is also a fumble."
|
text: "Gaff. You suffer +3 DR on your next check this hour, and if that check fails it is also a fumble."
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-07"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-07"
|
||||||
- _id: mgne-tbl-mis-08
|
- _id: mgne-tbl-mis-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Blunder. You suffer D6 damage bypassing Armor. This cannot reduce you below 1 HP."
|
text: "Blunder. You suffer D6 damage bypassing Armor. This cannot reduce you below 1 HP."
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-08"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-08"
|
||||||
- _id: mgne-tbl-mis-09
|
- _id: mgne-tbl-mis-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Internal Hemorrhage. You suffer Bleeding (1) if in combat, and D4 damage bypassing Armor if outside of combat."
|
text: "Internal Hemorrhage. You suffer Bleeding (1) if in combat, and D4 damage bypassing Armor if outside of combat."
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-09"
|
_key: "!tables.results!mgne-tbl-mishaps.mgne-tbl-mis-09"
|
||||||
- _id: mgne-tbl-mis-10
|
- _id: mgne-tbl-mis-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Cascading Failure. Roll twice and take both results."
|
text: "Cascading Failure. Roll twice and take both results."
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,61 +7,61 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-tri-01
|
- _id: mgne-tbl-tri-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Windfall. You uncover a resource. Roll on the Scavenging table."
|
text: "Windfall. You uncover a resource. Roll on the Scavenging table."
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-01"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-01"
|
||||||
- _id: mgne-tbl-tri-02
|
- _id: mgne-tbl-tri-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Getting The Hang Of It. You gain -3 DR to your next check within five minutes."
|
text: "Getting The Hang Of It. You gain -3 DR to your next check within five minutes."
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-02"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-02"
|
||||||
- _id: mgne-tbl-tri-03
|
- _id: mgne-tbl-tri-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Swift Recovery. You may discard a Condition. If you have no Conditions, recover D2 HP."
|
text: "Swift Recovery. You may discard a Condition. If you have no Conditions, recover D2 HP."
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-03"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-03"
|
||||||
- _id: mgne-tbl-tri-04
|
- _id: mgne-tbl-tri-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Stylish. You may pick a nearby target and inspire them, granting them -2 DR on their next check this hour."
|
text: "Stylish. You may pick a nearby target and inspire them, granting them -2 DR on their next check this hour."
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-04"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-04"
|
||||||
- _id: mgne-tbl-tri-05
|
- _id: mgne-tbl-tri-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Fearless. You ignore all penalties to your next check this hour."
|
text: "Fearless. You ignore all penalties to your next check this hour."
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-05"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-05"
|
||||||
- _id: mgne-tbl-tri-06
|
- _id: mgne-tbl-tri-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Reposition. You may discard Prone and Restrained and free yourself from all bindings and move immediately to a point nearby. You gain -1 DR to your next attack in the next five minutes."
|
text: "Reposition. You may discard Prone and Restrained and free yourself from all bindings and move immediately to a point nearby. You gain -1 DR to your next attack in the next five minutes."
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-06"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-06"
|
||||||
- _id: mgne-tbl-tri-07
|
- _id: mgne-tbl-tri-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Patchwork. You may restore the Usage Die on one of your weapons or armor by a dice step, up to its starting value."
|
text: "Patchwork. You may restore the Usage Die on one of your weapons or armor by a dice step, up to its starting value."
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-07"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-07"
|
||||||
- _id: mgne-tbl-tri-08
|
- _id: mgne-tbl-tri-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Opportunist. If in combat, you may immediately take an Action—although you cannot use the Action to attack. If outside of combat, you find 3D10¢."
|
text: "Opportunist. If in combat, you may immediately take an Action—although you cannot use the Action to attack. If outside of combat, you find 3D10¢."
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-08"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-08"
|
||||||
- _id: mgne-tbl-tri-09
|
- _id: mgne-tbl-tri-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Flourish. If in combat, you may immediately take an Action. If you have already rolled this result this Round, reroll. If outside of combat, you gain -2 DR to your next check within five minutes."
|
text: "Flourish. If in combat, you may immediately take an Action. If you have already rolled this result this Round, reroll. If outside of combat, you gain -2 DR to your next check within five minutes."
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-09"
|
_key: "!tables.results!mgne-tbl-triumphs.mgne-tbl-tri-09"
|
||||||
- _id: mgne-tbl-tri-10
|
- _id: mgne-tbl-tri-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Dynamic. You may move a point from one Ability to another. It remains reallocated for the next hour."
|
text: "Dynamic. You may move a point from one Ability to another. It remains reallocated for the next hour."
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,25 +7,25 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-va-01
|
- _id: mgne-tbl-va-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Weapon of Your Choice"
|
text: "Weapon of Your Choice"
|
||||||
range: [1, 3]
|
range: [1, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vital-asset.mgne-tbl-va-01"
|
_key: "!tables.results!mgne-tbl-vital-asset.mgne-tbl-va-01"
|
||||||
- _id: mgne-tbl-va-02
|
- _id: mgne-tbl-va-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Armor of Your Choice"
|
text: "Armor of Your Choice"
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vital-asset.mgne-tbl-va-02"
|
_key: "!tables.results!mgne-tbl-vital-asset.mgne-tbl-va-02"
|
||||||
- _id: mgne-tbl-va-03
|
- _id: mgne-tbl-va-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Random Resonance Core"
|
text: "Random Resonance Core"
|
||||||
range: [5, 9]
|
range: [5, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vital-asset.mgne-tbl-va-03"
|
_key: "!tables.results!mgne-tbl-vital-asset.mgne-tbl-va-03"
|
||||||
- _id: mgne-tbl-va-04
|
- _id: mgne-tbl-va-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Random Artifact"
|
text: "Random Artifact"
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,73 +7,73 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-conv-01
|
- _id: mgne-tbl-conv-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Thieves' Tools"
|
text: "Thieves' Tools"
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-01"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-01"
|
||||||
- _id: mgne-tbl-conv-02
|
- _id: mgne-tbl-conv-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Rope"
|
text: "Rope"
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-02"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-02"
|
||||||
- _id: mgne-tbl-conv-03
|
- _id: mgne-tbl-conv-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Lamp Oil"
|
text: "Lamp Oil"
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-03"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-03"
|
||||||
- _id: mgne-tbl-conv-04
|
- _id: mgne-tbl-conv-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Medical Supplies"
|
text: "Medical Supplies"
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-04"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-04"
|
||||||
- _id: mgne-tbl-conv-05
|
- _id: mgne-tbl-conv-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Net"
|
text: "Net"
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-05"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-05"
|
||||||
- _id: mgne-tbl-conv-06
|
- _id: mgne-tbl-conv-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Crowbar"
|
text: "Crowbar"
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-06"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-06"
|
||||||
- _id: mgne-tbl-conv-07
|
- _id: mgne-tbl-conv-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Lamp"
|
text: "Lamp"
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-07"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-07"
|
||||||
- _id: mgne-tbl-conv-08
|
- _id: mgne-tbl-conv-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Flint and Steel"
|
text: "Flint and Steel"
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-08"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-08"
|
||||||
- _id: mgne-tbl-conv-09
|
- _id: mgne-tbl-conv-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Grappling Hook"
|
text: "Grappling Hook"
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-09"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-09"
|
||||||
- _id: mgne-tbl-conv-10
|
- _id: mgne-tbl-conv-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Flask"
|
text: "Flask"
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-10"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-10"
|
||||||
- _id: mgne-tbl-conv-11
|
- _id: mgne-tbl-conv-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Spyglass"
|
text: "Spyglass"
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-11"
|
_key: "!tables.results!mgne-tbl-convenience.mgne-tbl-conv-11"
|
||||||
- _id: mgne-tbl-conv-12
|
- _id: mgne-tbl-conv-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Clothing (Noble)"
|
text: "Clothing (Noble)"
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,73 +7,73 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-scar-01
|
- _id: mgne-tbl-scar-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Perpetual sunburn."
|
text: "Perpetual sunburn."
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-01"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-01"
|
||||||
- _id: mgne-tbl-scar-02
|
- _id: mgne-tbl-scar-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "D6 missing fingers."
|
text: "D6 missing fingers."
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-02"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-02"
|
||||||
- _id: mgne-tbl-scar-03
|
- _id: mgne-tbl-scar-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "D4 teeth replaced with metal."
|
text: "D4 teeth replaced with metal."
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-03"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-03"
|
||||||
- _id: mgne-tbl-scar-04
|
- _id: mgne-tbl-scar-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Plasma burns (D4: 1 – Face, 2 – Arms, 3 – Chest, 4 – Whole body)."
|
text: "Plasma burns (D4: 1 – Face, 2 – Arms, 3 – Chest, 4 – Whole body)."
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-04"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-04"
|
||||||
- _id: mgne-tbl-scar-05
|
- _id: mgne-tbl-scar-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Odd habit (D10: 1 – Involuntary tic, 2 – Superstition about doorways, 3 – Can't sit still, 4 – Overly formal, 5 – Repeats rituals, 6 – Talks with corpses, 7 – Recites litany, 8 – Hides food, 9 – Unblinking fixed contact dead-eyed stare, 10 – Shares quirky stories from past that are actually traumatic)."
|
text: "Odd habit (D10: 1 – Involuntary tic, 2 – Superstition about doorways, 3 – Can't sit still, 4 – Overly formal, 5 – Repeats rituals, 6 – Talks with corpses, 7 – Recites litany, 8 – Hides food, 9 – Unblinking fixed contact dead-eyed stare, 10 – Shares quirky stories from past that are actually traumatic)."
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-05"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-05"
|
||||||
- _id: mgne-tbl-scar-06
|
- _id: mgne-tbl-scar-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Physical scarring (D4: 1 – Face, 2 – Arms, 3 – Chest, 4 – Whole body)."
|
text: "Physical scarring (D4: 1 – Face, 2 – Arms, 3 – Chest, 4 – Whole body)."
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-06"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-06"
|
||||||
- _id: mgne-tbl-scar-07
|
- _id: mgne-tbl-scar-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Squeamish around (D4: 1 – Geometric patterns, 2 – Insects, 3 – Flashing lights, 4 – Nonbelievers)."
|
text: "Squeamish around (D4: 1 – Geometric patterns, 2 – Insects, 3 – Flashing lights, 4 – Nonbelievers)."
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-07"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-07"
|
||||||
- _id: mgne-tbl-scar-08
|
- _id: mgne-tbl-scar-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Wounded and badly healed (D4: 1 – Leg, 2 – Arm, 3 – Chest, 4 – Head)."
|
text: "Wounded and badly healed (D4: 1 – Leg, 2 – Arm, 3 – Chest, 4 – Head)."
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-08"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-08"
|
||||||
- _id: mgne-tbl-scar-09
|
- _id: mgne-tbl-scar-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Bad reputation (D4: 1 – Gambling, 2 – Heresy, 3 – Starting fights, 4 – Bad luck charm)."
|
text: "Bad reputation (D4: 1 – Gambling, 2 – Heresy, 3 – Starting fights, 4 – Bad luck charm)."
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-09"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-09"
|
||||||
- _id: mgne-tbl-scar-10
|
- _id: mgne-tbl-scar-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Persistent illness (D6: 1 – Fatigue, 2 – Cough, 3 – Dizziness, 4 – Aches, 5 – Nausea, 6 – Progressive skin to nanometal conversion)."
|
text: "Persistent illness (D6: 1 – Fatigue, 2 – Cough, 3 – Dizziness, 4 – Aches, 5 – Nausea, 6 – Progressive skin to nanometal conversion)."
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-10"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-10"
|
||||||
- _id: mgne-tbl-scar-11
|
- _id: mgne-tbl-scar-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Hunted by something (D4: 1 – Beast, 2 – Demon, 3 – Human, 4 – Personal history)."
|
text: "Hunted by something (D4: 1 – Beast, 2 – Demon, 3 – Human, 4 – Personal history)."
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-11"
|
_key: "!tables.results!mgne-tbl-scars.mgne-tbl-scar-11"
|
||||||
- _id: mgne-tbl-scar-12
|
- _id: mgne-tbl-scar-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Lost (D8: 1 – Traveling partners, 2 – Spouse, 3 – Child, 4 – Pet, 5 – Inheritance, 6 – Faith, 7 – Home, 8 – Purpose)."
|
text: "Lost (D8: 1 – Traveling partners, 2 – Spouse, 3 – Child, 4 – Pet, 5 – Inheritance, 6 – Faith, 7 – Home, 8 – Purpose)."
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,73 +7,73 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-wpn-01
|
- _id: mgne-tbl-wpn-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Club"
|
text: "Club"
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-01"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-01"
|
||||||
- _id: mgne-tbl-wpn-02
|
- _id: mgne-tbl-wpn-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Dagger"
|
text: "Dagger"
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-02"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-02"
|
||||||
- _id: mgne-tbl-wpn-03
|
- _id: mgne-tbl-wpn-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Handaxe"
|
text: "Handaxe"
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-03"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-03"
|
||||||
- _id: mgne-tbl-wpn-04
|
- _id: mgne-tbl-wpn-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Quarterstaff"
|
text: "Quarterstaff"
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-04"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-04"
|
||||||
- _id: mgne-tbl-wpn-05
|
- _id: mgne-tbl-wpn-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Whip"
|
text: "Whip"
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-05"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-05"
|
||||||
- _id: mgne-tbl-wpn-06
|
- _id: mgne-tbl-wpn-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Shortbow and Quiver"
|
text: "Shortbow and Quiver"
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-06"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-06"
|
||||||
- _id: mgne-tbl-wpn-07
|
- _id: mgne-tbl-wpn-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Spear"
|
text: "Spear"
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-07"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-07"
|
||||||
- _id: mgne-tbl-wpn-08
|
- _id: mgne-tbl-wpn-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Longsword"
|
text: "Longsword"
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-08"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-08"
|
||||||
- _id: mgne-tbl-wpn-09
|
- _id: mgne-tbl-wpn-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Heavy Crossbow and Quiver"
|
text: "Heavy Crossbow and Quiver"
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-09"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-09"
|
||||||
- _id: mgne-tbl-wpn-10
|
- _id: mgne-tbl-wpn-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Rapier"
|
text: "Rapier"
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-10"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-10"
|
||||||
- _id: mgne-tbl-wpn-11
|
- _id: mgne-tbl-wpn-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Halberd"
|
text: "Halberd"
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-11"
|
_key: "!tables.results!mgne-tbl-weapons.mgne-tbl-wpn-11"
|
||||||
- _id: mgne-tbl-wpn-12
|
- _id: mgne-tbl-wpn-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Maul"
|
text: "Maul"
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,121 +7,121 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-bg-01
|
- _id: mgne-tbl-bg-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Disgraced Knight"
|
text: "Disgraced Knight"
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-01"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-01"
|
||||||
- _id: mgne-tbl-bg-02
|
- _id: mgne-tbl-bg-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Caravan Guard"
|
text: "Caravan Guard"
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-02"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-02"
|
||||||
- _id: mgne-tbl-bg-03
|
- _id: mgne-tbl-bg-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Noble House Exile"
|
text: "Noble House Exile"
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-03"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-03"
|
||||||
- _id: mgne-tbl-bg-04
|
- _id: mgne-tbl-bg-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Former Acolyte"
|
text: "Former Acolyte"
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-04"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-04"
|
||||||
- _id: mgne-tbl-bg-05
|
- _id: mgne-tbl-bg-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Wasteland Scavenger"
|
text: "Wasteland Scavenger"
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-05"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-05"
|
||||||
- _id: mgne-tbl-bg-06
|
- _id: mgne-tbl-bg-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Cult Escapee"
|
text: "Cult Escapee"
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-06"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-06"
|
||||||
- _id: mgne-tbl-bg-07
|
- _id: mgne-tbl-bg-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Glitch-Marked"
|
text: "Glitch-Marked"
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-07"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-07"
|
||||||
- _id: mgne-tbl-bg-08
|
- _id: mgne-tbl-bg-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Sacred Diagnostician"
|
text: "Sacred Diagnostician"
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-08"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-08"
|
||||||
- _id: mgne-tbl-bg-09
|
- _id: mgne-tbl-bg-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Hereditary Guardian"
|
text: "Hereditary Guardian"
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-09"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-09"
|
||||||
- _id: mgne-tbl-bg-10
|
- _id: mgne-tbl-bg-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Village Healer"
|
text: "Village Healer"
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-10"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-10"
|
||||||
- _id: mgne-tbl-bg-11
|
- _id: mgne-tbl-bg-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Tax Collector"
|
text: "Tax Collector"
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-11"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-11"
|
||||||
- _id: mgne-tbl-bg-12
|
- _id: mgne-tbl-bg-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Fortune Teller"
|
text: "Fortune Teller"
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-12"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-12"
|
||||||
- _id: mgne-tbl-bg-13
|
- _id: mgne-tbl-bg-13
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Artisan"
|
text: "Artisan"
|
||||||
range: [13, 13]
|
range: [13, 13]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-13"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-13"
|
||||||
- _id: mgne-tbl-bg-14
|
- _id: mgne-tbl-bg-14
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Shepherd"
|
text: "Shepherd"
|
||||||
range: [14, 14]
|
range: [14, 14]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-14"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-14"
|
||||||
- _id: mgne-tbl-bg-15
|
- _id: mgne-tbl-bg-15
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Executioner's Apprentice"
|
text: "Executioner's Apprentice"
|
||||||
range: [15, 15]
|
range: [15, 15]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-15"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-15"
|
||||||
- _id: mgne-tbl-bg-16
|
- _id: mgne-tbl-bg-16
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Market Thief"
|
text: "Market Thief"
|
||||||
range: [16, 16]
|
range: [16, 16]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-16"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-16"
|
||||||
- _id: mgne-tbl-bg-17
|
- _id: mgne-tbl-bg-17
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Former Slave"
|
text: "Former Slave"
|
||||||
range: [17, 17]
|
range: [17, 17]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-17"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-17"
|
||||||
- _id: mgne-tbl-bg-18
|
- _id: mgne-tbl-bg-18
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Monastery Scribe"
|
text: "Monastery Scribe"
|
||||||
range: [18, 18]
|
range: [18, 18]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-18"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-18"
|
||||||
- _id: mgne-tbl-bg-19
|
- _id: mgne-tbl-bg-19
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Village Outcast"
|
text: "Village Outcast"
|
||||||
range: [19, 19]
|
range: [19, 19]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-19"
|
_key: "!tables.results!mgne-tbl-backgrounds.mgne-tbl-bg-19"
|
||||||
- _id: mgne-tbl-bg-20
|
- _id: mgne-tbl-bg-20
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Hunter"
|
text: "Hunter"
|
||||||
range: [20, 20]
|
range: [20, 20]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,121 +7,121 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-mot-01
|
- _id: mgne-tbl-mot-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Search for a sister who ventured into a forbidden data-temple and never returned."
|
text: "Search for a sister who ventured into a forbidden data-temple and never returned."
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-01"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-01"
|
||||||
- _id: mgne-tbl-mot-02
|
- _id: mgne-tbl-mot-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Avenge a father executed for heresy by proving his discoveries were true."
|
text: "Avenge a father executed for heresy by proving his discoveries were true."
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-02"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-02"
|
||||||
- _id: mgne-tbl-mot-03
|
- _id: mgne-tbl-mot-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Find a cure for a village afflicted by a plague."
|
text: "Find a cure for a village afflicted by a plague."
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-03"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-03"
|
||||||
- _id: mgne-tbl-mot-04
|
- _id: mgne-tbl-mot-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Recover a family heirloom (ancient artifact)."
|
text: "Recover a family heirloom (ancient artifact)."
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-04"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-04"
|
||||||
- _id: mgne-tbl-mot-05
|
- _id: mgne-tbl-mot-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Discover why the local machine god has fallen silent, threatening your people's survival."
|
text: "Discover why the local machine god has fallen silent, threatening your people's survival."
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-05"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-05"
|
||||||
- _id: mgne-tbl-mot-06
|
- _id: mgne-tbl-mot-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Clear your name after being falsely accused of sabotaging sacred machinery."
|
text: "Clear your name after being falsely accused of sabotaging sacred machinery."
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-06"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-06"
|
||||||
- _id: mgne-tbl-mot-07
|
- _id: mgne-tbl-mot-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Find out what happened to your mentor who claimed to have discovered \"the truth\"."
|
text: "Find out what happened to your mentor who claimed to have discovered \"the truth\"."
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-07"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-07"
|
||||||
- _id: mgne-tbl-mot-08
|
- _id: mgne-tbl-mot-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Fulfill a prophecy/system message."
|
text: "Fulfill a prophecy/system message."
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-08"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-08"
|
||||||
- _id: mgne-tbl-mot-09
|
- _id: mgne-tbl-mot-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Pay off a debt to a powerful noble by recovering valuable artifacts."
|
text: "Pay off a debt to a powerful noble by recovering valuable artifacts."
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-09"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-09"
|
||||||
- _id: mgne-tbl-mot-10
|
- _id: mgne-tbl-mot-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Search for missing children who were \"chosen\"."
|
text: "Search for missing children who were \"chosen\"."
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-10"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-10"
|
||||||
- _id: mgne-tbl-mot-11
|
- _id: mgne-tbl-mot-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Understand why you are assaulted by visions."
|
text: "Understand why you are assaulted by visions."
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-11"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-11"
|
||||||
- _id: mgne-tbl-mot-12
|
- _id: mgne-tbl-mot-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Find a way to stop the spreading corruption that's consuming your homeland."
|
text: "Find a way to stop the spreading corruption that's consuming your homeland."
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-12"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-12"
|
||||||
- _id: mgne-tbl-mot-13
|
- _id: mgne-tbl-mot-13
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Prove yourself worthy to inherit your house after being passed over."
|
text: "Prove yourself worthy to inherit your house after being passed over."
|
||||||
range: [13, 13]
|
range: [13, 13]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-13"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-13"
|
||||||
- _id: mgne-tbl-mot-14
|
- _id: mgne-tbl-mot-14
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Discover why the ancient defensive systems suddenly activated around your home."
|
text: "Discover why the ancient defensive systems suddenly activated around your home."
|
||||||
range: [14, 14]
|
range: [14, 14]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-14"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-14"
|
||||||
- _id: mgne-tbl-mot-15
|
- _id: mgne-tbl-mot-15
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Find a way to save your sibling who is slowly being transformed by malfunctioning tech."
|
text: "Find a way to save your sibling who is slowly being transformed by malfunctioning tech."
|
||||||
range: [15, 15]
|
range: [15, 15]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-15"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-15"
|
||||||
- _id: mgne-tbl-mot-16
|
- _id: mgne-tbl-mot-16
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Recover lost knowledge to prevent the Voidspire Territories from suffering the same fate as your original home."
|
text: "Recover lost knowledge to prevent the Voidspire Territories from suffering the same fate as your original home."
|
||||||
range: [16, 16]
|
range: [16, 16]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-16"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-16"
|
||||||
- _id: mgne-tbl-mot-17
|
- _id: mgne-tbl-mot-17
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Find others who share your ability to see through the \"divine illusions\"."
|
text: "Find others who share your ability to see through the \"divine illusions\"."
|
||||||
range: [17, 17]
|
range: [17, 17]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-17"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-17"
|
||||||
- _id: mgne-tbl-mot-18
|
- _id: mgne-tbl-mot-18
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Track down the tech-cultists who kidnapped your noble house's heir."
|
text: "Track down the tech-cultists who kidnapped your noble house's heir."
|
||||||
range: [18, 18]
|
range: [18, 18]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-18"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-18"
|
||||||
- _id: mgne-tbl-mot-19
|
- _id: mgne-tbl-mot-19
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Discover why all children born in your region have started manifesting strange abilities."
|
text: "Discover why all children born in your region have started manifesting strange abilities."
|
||||||
range: [19, 19]
|
range: [19, 19]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-19"
|
_key: "!tables.results!mgne-tbl-motivations.mgne-tbl-mot-19"
|
||||||
- _id: mgne-tbl-mot-20
|
- _id: mgne-tbl-mot-20
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Understand the divine language of the machine gods."
|
text: "Understand the divine language of the machine gods."
|
||||||
range: [20, 20]
|
range: [20, 20]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,121 +7,121 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-ori-01
|
- _id: mgne-tbl-ori-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Luminous Vale of Eternus"
|
text: "The Luminous Vale of Eternus"
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-01"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-01"
|
||||||
- _id: mgne-tbl-ori-02
|
- _id: mgne-tbl-ori-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Singing Towers of Vox"
|
text: "The Singing Towers of Vox"
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-02"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-02"
|
||||||
- _id: mgne-tbl-ori-03
|
- _id: mgne-tbl-ori-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Chrome Basilica city-state"
|
text: "The Chrome Basilica city-state"
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-03"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-03"
|
||||||
- _id: mgne-tbl-ori-04
|
- _id: mgne-tbl-ori-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Darkened Realm of Null"
|
text: "The Darkened Realm of Null"
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-04"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-04"
|
||||||
- _id: mgne-tbl-ori-05
|
- _id: mgne-tbl-ori-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Storm Cradle"
|
text: "The Storm Cradle"
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-05"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-05"
|
||||||
- _id: mgne-tbl-ori-06
|
- _id: mgne-tbl-ori-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Processional States"
|
text: "The Processional States"
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-06"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-06"
|
||||||
- _id: mgne-tbl-ori-07
|
- _id: mgne-tbl-ori-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Floating Gardens of Vector"
|
text: "The Floating Gardens of Vector"
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-07"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-07"
|
||||||
- _id: mgne-tbl-ori-08
|
- _id: mgne-tbl-ori-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Maze-Cities of Codex"
|
text: "The Maze-Cities of Codex"
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-08"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-08"
|
||||||
- _id: mgne-tbl-ori-09
|
- _id: mgne-tbl-ori-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Iron Valley"
|
text: "The Iron Valley"
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-09"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-09"
|
||||||
- _id: mgne-tbl-ori-10
|
- _id: mgne-tbl-ori-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Memory Spires"
|
text: "The Memory Spires"
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-10"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-10"
|
||||||
- _id: mgne-tbl-ori-11
|
- _id: mgne-tbl-ori-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Whispering Depths"
|
text: "The Whispering Depths"
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-11"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-11"
|
||||||
- _id: mgne-tbl-ori-12
|
- _id: mgne-tbl-ori-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Flatlands"
|
text: "The Flatlands"
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-12"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-12"
|
||||||
- _id: mgne-tbl-ori-13
|
- _id: mgne-tbl-ori-13
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Glass Kingdom of Lux"
|
text: "The Glass Kingdom of Lux"
|
||||||
range: [13, 13]
|
range: [13, 13]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-13"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-13"
|
||||||
- _id: mgne-tbl-ori-14
|
- _id: mgne-tbl-ori-14
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Archive Territories"
|
text: "The Archive Territories"
|
||||||
range: [14, 14]
|
range: [14, 14]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-14"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-14"
|
||||||
- _id: mgne-tbl-ori-15
|
- _id: mgne-tbl-ori-15
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Pulse Wastes"
|
text: "The Pulse Wastes"
|
||||||
range: [15, 15]
|
range: [15, 15]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-15"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-15"
|
||||||
- _id: mgne-tbl-ori-16
|
- _id: mgne-tbl-ori-16
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Echo Peaks"
|
text: "The Echo Peaks"
|
||||||
range: [16, 16]
|
range: [16, 16]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-16"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-16"
|
||||||
- _id: mgne-tbl-ori-17
|
- _id: mgne-tbl-ori-17
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Array Thicket"
|
text: "The Array Thicket"
|
||||||
range: [17, 17]
|
range: [17, 17]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-17"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-17"
|
||||||
- _id: mgne-tbl-ori-18
|
- _id: mgne-tbl-ori-18
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Core Dominion"
|
text: "The Core Dominion"
|
||||||
range: [18, 18]
|
range: [18, 18]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-18"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-18"
|
||||||
- _id: mgne-tbl-ori-19
|
- _id: mgne-tbl-ori-19
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Shattered Sphere"
|
text: "The Shattered Sphere"
|
||||||
range: [19, 19]
|
range: [19, 19]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-19"
|
_key: "!tables.results!mgne-tbl-origins.mgne-tbl-ori-19"
|
||||||
- _id: mgne-tbl-ori-20
|
- _id: mgne-tbl-ori-20
|
||||||
type: 0
|
type: "text"
|
||||||
text: "The Voidspire Territories"
|
text: "The Voidspire Territories"
|
||||||
range: [20, 20]
|
range: [20, 20]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
@@ -7,121 +7,121 @@ replacement: true
|
|||||||
displayRoll: true
|
displayRoll: true
|
||||||
results:
|
results:
|
||||||
- _id: mgne-tbl-vic-01
|
- _id: mgne-tbl-vic-01
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Greedy"
|
text: "Greedy"
|
||||||
range: [1, 1]
|
range: [1, 1]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-01"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-01"
|
||||||
- _id: mgne-tbl-vic-02
|
- _id: mgne-tbl-vic-02
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Wrathful"
|
text: "Wrathful"
|
||||||
range: [2, 2]
|
range: [2, 2]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-02"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-02"
|
||||||
- _id: mgne-tbl-vic-03
|
- _id: mgne-tbl-vic-03
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Envious"
|
text: "Envious"
|
||||||
range: [3, 3]
|
range: [3, 3]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-03"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-03"
|
||||||
- _id: mgne-tbl-vic-04
|
- _id: mgne-tbl-vic-04
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Arrogant"
|
text: "Arrogant"
|
||||||
range: [4, 4]
|
range: [4, 4]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-04"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-04"
|
||||||
- _id: mgne-tbl-vic-05
|
- _id: mgne-tbl-vic-05
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Lazy"
|
text: "Lazy"
|
||||||
range: [5, 5]
|
range: [5, 5]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-05"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-05"
|
||||||
- _id: mgne-tbl-vic-06
|
- _id: mgne-tbl-vic-06
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Lustful"
|
text: "Lustful"
|
||||||
range: [6, 6]
|
range: [6, 6]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-06"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-06"
|
||||||
- _id: mgne-tbl-vic-07
|
- _id: mgne-tbl-vic-07
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Deceitful"
|
text: "Deceitful"
|
||||||
range: [7, 7]
|
range: [7, 7]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-07"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-07"
|
||||||
- _id: mgne-tbl-vic-08
|
- _id: mgne-tbl-vic-08
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Coward"
|
text: "Coward"
|
||||||
range: [8, 8]
|
range: [8, 8]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-08"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-08"
|
||||||
- _id: mgne-tbl-vic-09
|
- _id: mgne-tbl-vic-09
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Cruel"
|
text: "Cruel"
|
||||||
range: [9, 9]
|
range: [9, 9]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-09"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-09"
|
||||||
- _id: mgne-tbl-vic-10
|
- _id: mgne-tbl-vic-10
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Vain"
|
text: "Vain"
|
||||||
range: [10, 10]
|
range: [10, 10]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-10"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-10"
|
||||||
- _id: mgne-tbl-vic-11
|
- _id: mgne-tbl-vic-11
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Glutton"
|
text: "Glutton"
|
||||||
range: [11, 11]
|
range: [11, 11]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-11"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-11"
|
||||||
- _id: mgne-tbl-vic-12
|
- _id: mgne-tbl-vic-12
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Bitter"
|
text: "Bitter"
|
||||||
range: [12, 12]
|
range: [12, 12]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-12"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-12"
|
||||||
- _id: mgne-tbl-vic-13
|
- _id: mgne-tbl-vic-13
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Irascible"
|
text: "Irascible"
|
||||||
range: [13, 13]
|
range: [13, 13]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-13"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-13"
|
||||||
- _id: mgne-tbl-vic-14
|
- _id: mgne-tbl-vic-14
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Obsessed"
|
text: "Obsessed"
|
||||||
range: [14, 14]
|
range: [14, 14]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-14"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-14"
|
||||||
- _id: mgne-tbl-vic-15
|
- _id: mgne-tbl-vic-15
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Reckless"
|
text: "Reckless"
|
||||||
range: [15, 15]
|
range: [15, 15]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-15"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-15"
|
||||||
- _id: mgne-tbl-vic-16
|
- _id: mgne-tbl-vic-16
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Sadist"
|
text: "Sadist"
|
||||||
range: [16, 16]
|
range: [16, 16]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-16"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-16"
|
||||||
- _id: mgne-tbl-vic-17
|
- _id: mgne-tbl-vic-17
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Paranoid"
|
text: "Paranoid"
|
||||||
range: [17, 17]
|
range: [17, 17]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-17"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-17"
|
||||||
- _id: mgne-tbl-vic-18
|
- _id: mgne-tbl-vic-18
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Selfish"
|
text: "Selfish"
|
||||||
range: [18, 18]
|
range: [18, 18]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-18"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-18"
|
||||||
- _id: mgne-tbl-vic-19
|
- _id: mgne-tbl-vic-19
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Nihilist"
|
text: "Nihilist"
|
||||||
range: [19, 19]
|
range: [19, 19]
|
||||||
drawn: false
|
drawn: false
|
||||||
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-19"
|
_key: "!tables.results!mgne-tbl-vices.mgne-tbl-vic-19"
|
||||||
- _id: mgne-tbl-vic-20
|
- _id: mgne-tbl-vic-20
|
||||||
type: 0
|
type: "text"
|
||||||
text: "Violent"
|
text: "Violent"
|
||||||
range: [20, 20]
|
range: [20, 20]
|
||||||
drawn: false
|
drawn: false
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user