A player briefing, and the historical range
The generator was already writing the timeline, the cast and the texture and filing all of it behind the GM screen. New PLAYERS page: a read-aloud opening, what it is like there, what is known so far, who is there and what they want — but never what they lie about. Page ownership is now declared by the page rather than guessed from its index, which would have hidden any second player page. Historical range: 38 weapons (from 6) and 14 armours (from 2), each with its period stated, from arming swords and longbows through matchlocks and Brown Bess to the Lee-Enfield and a trench club. Five new skills to hang them on, including Firearm (Muzzle-loader), because a muzzle-loader is not a rifle. 275 icons; every weapon maps to a real skill and every item has art. Catalogue is 206 items across four eras. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@@ -3973,3 +3973,50 @@ Verified in play on PLAIN HARBOUR: extraction failed at 47%, the card read *"You
|
||||
out, but not cleanly. The window has narrowed... The way home: −10% on every
|
||||
Transposition roll"*, the clock went to 1, and all four crossings took −10%. Nobody
|
||||
lost a hit point.
|
||||
|
||||
## A briefing, and a millennium of ironmongery
|
||||
|
||||
**The players now get a briefing, not a memo.** The generator was already writing the
|
||||
timeline, the cast and two lines of texture that are the best prose in the whole
|
||||
document — and filing every word of it behind the GM screen. A new PLAYERS page:
|
||||
|
||||
- a read-aloud opening built from the classification, the place and the window;
|
||||
- **what it is like there** — the texture, with the note that none of it is in the
|
||||
file, because the file was written by somebody who was not there;
|
||||
- **what is known so far** — the timeline as a table;
|
||||
- **who is there** — the cast by name, role, and what they want from you, but never
|
||||
what they lie about, which stays on the GM page where it belongs;
|
||||
- and a short "before you go" that tells a new player the three things this game
|
||||
expects of them: sign for your kit, bring somebody who can make an arrangement,
|
||||
keep your anchor on you.
|
||||
|
||||
Ownership is now **declared by the page** rather than guessed from its index — the
|
||||
old `i === 0 ? 2 : 0` would have silently hidden any second player page. Two player
|
||||
pages, four GM pages, 300 seeds checked clean.
|
||||
|
||||
Two bugs in my own prose, caught by reading the output: `classification.texture` is a
|
||||
LIST and was being printed comma-joined into a sentence, and the "since then..."
|
||||
line was reaching for the last timeline entry, which is *the team crosses* — so every
|
||||
briefing ended "since then it has not stopped, and the team crosses."
|
||||
|
||||
**The historical range.** The department has been running since before it had a name
|
||||
and has never thrown anything away.
|
||||
|
||||
- **38 historical weapons** (from 6): arming sword, longsword, falchion, war hammer,
|
||||
mace, military flail, poleaxe, halberd, billhook, pike, quarterstaff, dirk, longbow,
|
||||
arbalest, sling, javelin, rapier, main gauche, matchlock, wheellock, blunderbuss,
|
||||
boarding pike, cavalry sabre, smallsword, cutlass, Brown Bess, Baker rifle, socket
|
||||
bayonet, Martini-Henry, Webley, Lee-Enfield, trench club — each with its period
|
||||
stated, because a GM handing out a matchlock should know it is a matchlock.
|
||||
- **14 historical armours** (from 2): gambeson, maille shirt, coat of plates, cuirass,
|
||||
full harness, buff coat, sallet and bevor, lobster-tail helmet, jack of plate,
|
||||
cuirassier armour, Brodie helmet, flak jacket. Weight is the point — full harness is
|
||||
9 AP and 25 kg, and the free-carry rule does the rest.
|
||||
- **Five new skills** to hang it on: Melee Weapon (Polearm), Melee Weapon (Flail),
|
||||
Missile Weapon (Sling), Missile Weapon (Thrown), and **Firearm (Muzzle-loader)** —
|
||||
because a muzzle-loader is not a rifle and loading it is the skill.
|
||||
- **275 icons**, all generated; every weapon maps to a real skill and every item has
|
||||
art, both checked.
|
||||
|
||||
Catalogue is now **206 items**: 118 gear, 62 weapons, 25 armour, 14 vehicles — 145
|
||||
modern, 77 antique, 34 future, 19 anomalous.
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(344 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(344 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(344 80% 64%)" stroke-width="4"/>
|
||||
<path d="M14 58h100v12H14z M52 40h12v46H52z" fill="hsl(344 55% 82%)" stroke="none"/>
|
||||
<path d="M20 46c18 8 18 28 0 36M108 46c-18 8-18 28 0 36" fill="none" stroke="hsl(344 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 565 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(20 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(20 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(20 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(20 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(20 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(330 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(330 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(330 80% 64%)" stroke-width="4"/>
|
||||
<path d="M10 66h96l14-6v8l-14 6v6H62l-10 14H24l10-14H10z" fill="hsl(330 55% 82%)" stroke="none"/>
|
||||
<path d="M40 70h26v6H40z M66 56l8-8 6 6-8 8z" fill="hsl(330 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 503 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(56 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(56 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(56 80% 64%)" stroke-width="4"/>
|
||||
<path d="M78 12l12 12-44 44-12-12z M40 60l12 12-8 12-16-4z M34 84l10 10-16 16-10-10z" fill="hsl(56 55% 82%)" stroke="none"/>
|
||||
<path d="M74 22l6 6-38 38-6-6z" fill="hsl(56 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 512 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(50 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(50 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(50 80% 64%)" stroke-width="4"/>
|
||||
<path d="M52 14h14v106H52z M66 20c22 0 34 14 34 26s-12 24-34 24z" fill="hsl(50 55% 82%)" stroke="none"/>
|
||||
<path d="M72 30c12 2 18 10 18 16s-6 14-18 16z" fill="hsl(50 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(324 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(324 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(324 80% 64%)" stroke-width="4"/>
|
||||
<path d="M12 46h58v10H12z M12 60h58v10H12z M70 44l30 16-30 16z" fill="hsl(324 55% 82%)" stroke="none"/>
|
||||
<path d="M100 52h16v16h-16z M20 48h14v4H20z" fill="hsl(324 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 508 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(352 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(352 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(352 80% 64%)" stroke-width="4"/>
|
||||
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(352 55% 82%)" stroke="none"/>
|
||||
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(352 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 493 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(235 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(235 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(235 80% 64%)" stroke-width="4"/>
|
||||
<path d="M22 34h84v34c0 26-20 46-42 52-22-6-42-26-42-52z" fill="hsl(235 55% 82%)" stroke="none"/>
|
||||
<path d="M44 56h14M70 56h14" fill="none" stroke="hsl(235 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(44 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(44 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(44 80% 64%)" stroke-width="4"/>
|
||||
<path d="M10 66h96l14-6v8l-14 6v6H62l-10 14H24l10-14H10z" fill="hsl(44 55% 82%)" stroke="none"/>
|
||||
<path d="M40 70h26v6H40z M66 56l8-8 6 6-8 8z" fill="hsl(44 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 498 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(239 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(239 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(239 80% 64%)" stroke-width="4"/>
|
||||
<path d="M42 22h44l12 16v62H30V38z" fill="hsl(239 55% 82%)" stroke="none"/>
|
||||
<path d="M64 22v78 M30 54h68" fill="none" stroke="hsl(239 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 529 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(175 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(175 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(175 80% 64%)" stroke-width="4"/>
|
||||
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(175 55% 82%)" stroke="none"/>
|
||||
<path d="M64 20v84 M38 46h20M74 46h20" fill="none" stroke="hsl(175 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 574 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(221 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(221 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(221 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 12l40 14v40c0 28-18 44-40 50-22-6-40-22-40-50V26z" fill="hsl(221 55% 82%)" stroke="none"/>
|
||||
<path d="M64 26l26 10v30c0 18-12 28-26 32-14-4-26-14-26-32V36z" fill="hsl(221 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 527 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(157 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(157 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(157 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 12l40 14v40c0 28-18 44-40 50-22-6-40-22-40-50V26z" fill="hsl(157 55% 82%)" stroke="none"/>
|
||||
<path d="M64 26l26 10v30c0 18-12 28-26 32-14-4-26-14-26-32V36z" fill="hsl(157 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 527 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(72 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(72 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(72 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(72 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(72 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(8 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(8 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(8 80% 64%)" stroke-width="4"/>
|
||||
<path d="M78 12l12 12-44 44-12-12z M40 60l12 12-8 12-16-4z M34 84l10 10-16 16-10-10z" fill="hsl(8 55% 82%)" stroke="none"/>
|
||||
<path d="M74 22l6 6-38 38-6-6z" fill="hsl(8 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(44 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(44 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(44 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(44 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(44 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(348 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(348 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(348 80% 64%)" stroke-width="4"/>
|
||||
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(348 55% 82%)" stroke="none"/>
|
||||
<path d="M52 96l32-58" fill="none" stroke="hsl(348 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 566 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(181 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(181 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(181 80% 64%)" stroke-width="4"/>
|
||||
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(181 55% 82%)" stroke="none"/>
|
||||
<path d="M64 20v84 M38 46h20M74 46h20" fill="none" stroke="hsl(181 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 574 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(189 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(189 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(189 80% 64%)" stroke-width="4"/>
|
||||
<path d="M42 22h44l12 16v62H30V38z" fill="hsl(189 55% 82%)" stroke="none"/>
|
||||
<path d="M64 22v78 M30 54h68" fill="none" stroke="hsl(189 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 529 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(358 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(358 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(358 80% 64%)" stroke-width="4"/>
|
||||
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(358 55% 82%)" stroke="none"/>
|
||||
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(358 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 493 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(169 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(169 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(169 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 12l40 14v40c0 28-18 44-40 50-22-6-40-22-40-50V26z" fill="hsl(169 55% 82%)" stroke="none"/>
|
||||
<path d="M64 26l26 10v30c0 18-12 28-26 32-14-4-26-14-26-32V36z" fill="hsl(169 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 527 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(229 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(229 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(229 80% 64%)" stroke-width="4"/>
|
||||
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(229 55% 82%)" stroke="none"/>
|
||||
<path d="M64 20v84 M38 46h20M74 46h20" fill="none" stroke="hsl(229 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 574 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(26 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(26 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(26 80% 64%)" stroke-width="4"/>
|
||||
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(26 55% 82%)" stroke="none"/>
|
||||
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(26 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 488 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(54 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(54 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(54 80% 64%)" stroke-width="4"/>
|
||||
<path d="M12 60h84l20-8v12l-14 6v8H60l-8 14H32l8-14H12z" fill="hsl(54 55% 82%)" stroke="none"/>
|
||||
<path d="M46 66h30v6H46z M84 52h10v8H84z" fill="hsl(54 40% 52%)" stroke="none"/>
|
||||
<path d="M116 58h6v10h-6z" fill="hsl(54 80% 64%)" stroke="none"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 558 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(247 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(247 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(247 80% 64%)" stroke-width="4"/>
|
||||
<path d="M22 34h84v34c0 26-20 46-42 52-22-6-42-26-42-52z" fill="hsl(247 55% 82%)" stroke="none"/>
|
||||
<path d="M44 56h14M70 56h14" fill="none" stroke="hsl(247 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(338 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(338 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(338 80% 64%)" stroke-width="4"/>
|
||||
<path d="M40 16c30 14 30 82 0 96M36 12v104" fill="none" stroke="hsl(338 55% 82%)" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M40 16l52 48-52 48" fill="hsl(338 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 536 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(12 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(12 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(12 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(12 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(12 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(54 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(54 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(54 80% 64%)" stroke-width="4"/>
|
||||
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(54 55% 82%)" stroke="none"/>
|
||||
<path d="M52 96l32-58" fill="none" stroke="hsl(54 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 561 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(183 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(183 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(183 80% 64%)" stroke-width="4"/>
|
||||
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(183 55% 82%)" stroke="none"/>
|
||||
<path d="M40 40h12v12H40zM60 40h12v12H60zM80 40h10v12H80zM50 56h12v12H50zM70 56h12v12H70zM40 72h12v12H40zM60 72h12v12H60zM80 72h10v12H80z" fill="hsl(183 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 610 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(64 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(64 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(64 80% 64%)" stroke-width="4"/>
|
||||
<path d="M78 12l12 12-44 44-12-12z M40 60l12 12-8 12-16-4z M34 84l10 10-16 16-10-10z" fill="hsl(64 55% 82%)" stroke="none"/>
|
||||
<path d="M74 22l6 6-38 38-6-6z" fill="hsl(64 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 512 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(326 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(326 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(326 80% 64%)" stroke-width="4"/>
|
||||
<path d="M12 60h84l20-8v12l-14 6v8H60l-8 14H32l8-14H12z" fill="hsl(326 55% 82%)" stroke="none"/>
|
||||
<path d="M46 66h30v6H46z M84 52h10v8H84z" fill="hsl(326 40% 52%)" stroke="none"/>
|
||||
<path d="M116 58h6v10h-6z" fill="hsl(326 80% 64%)" stroke="none"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 564 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(334 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(334 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(334 80% 64%)" stroke-width="4"/>
|
||||
<path d="M10 66h96l14-6v8l-14 6v6H62l-10 14H24l10-14H10z" fill="hsl(334 55% 82%)" stroke="none"/>
|
||||
<path d="M40 70h26v6H40z M66 56l8-8 6 6-8 8z" fill="hsl(334 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 503 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(58 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(58 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(58 80% 64%)" stroke-width="4"/>
|
||||
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(58 55% 82%)" stroke="none"/>
|
||||
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(58 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 488 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(6 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(6 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(6 80% 64%)" stroke-width="4"/>
|
||||
<path d="M52 14h14v106H52z M66 20c22 0 34 14 34 26s-12 24-34 24z" fill="hsl(6 55% 82%)" stroke="none"/>
|
||||
<path d="M72 30c12 2 18 10 18 16s-6 14-18 16z" fill="hsl(6 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(2 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(2 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(2 80% 64%)" stroke-width="4"/>
|
||||
<path d="M52 12h24v92H52z M44 104h40v14H44z" fill="hsl(2 55% 82%)" stroke="none"/>
|
||||
<path d="M58 24h12v70H58z M52 12l-8-6h40l-8 6z" fill="hsl(2 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 482 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(344 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(344 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(344 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(344 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(344 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(68 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(68 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(68 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(68 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(68 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(163 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(163 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(163 80% 64%)" stroke-width="4"/>
|
||||
<path d="M22 34h84v34c0 26-20 46-42 52-22-6-42-26-42-52z" fill="hsl(163 55% 82%)" stroke="none"/>
|
||||
<path d="M44 56h14M70 56h14" fill="none" stroke="hsl(163 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(46 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(46 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(46 80% 64%)" stroke-width="4"/>
|
||||
<path d="M32 20c40 0 24 44 64 44M32 64c40 0 24 44 64 44" fill="none" stroke="hsl(46 55% 82%)" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 477 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(336 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(336 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(336 80% 64%)" stroke-width="4"/>
|
||||
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(336 55% 82%)" stroke="none"/>
|
||||
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(336 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 507 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(46 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(46 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(46 80% 64%)" stroke-width="4"/>
|
||||
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(46 55% 82%)" stroke="none"/>
|
||||
<path d="M52 96l32-58" fill="none" stroke="hsl(46 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 561 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(354 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(354 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(354 80% 64%)" stroke-width="4"/>
|
||||
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(354 55% 82%)" stroke="none"/>
|
||||
<path d="M52 96l32-58" fill="none" stroke="hsl(354 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 566 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(50 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(50 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(50 80% 64%)" stroke-width="4"/>
|
||||
<path d="M20 60h48l8-8h18v12l-10 6v10H56l-8 14H26l8-14H20z" fill="hsl(50 55% 82%)" stroke="none"/>
|
||||
<path d="M44 56a10 10 0 1 1 0 20 10 10 0 0 1 0-20z M28 70h14v8H28z" fill="hsl(50 40% 52%)" stroke="none"/>
|
||||
<path d="M110 58h10v10h-10z" fill="hsl(50 80% 64%)" stroke="none"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 589 B |
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
|
||||
<rect width="128" height="128" rx="20" fill="hsl(36 38% 30%)"/>
|
||||
<path d="M0 0h30L0 30z" fill="hsl(36 44% 22%)"/>
|
||||
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(36 80% 64%)" stroke-width="4"/>
|
||||
<path d="M18 64h44l40-16v10L70 74v8H56l-10 16H22l10-16H18z" fill="hsl(36 55% 82%)" stroke="none"/>
|
||||
<path d="M56 54l10-8 6 8-8 8z M26 72h16v8H26z" fill="hsl(36 40% 52%)" stroke="none"/>
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 501 B |
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.973855 176c6b000 Recovering log #3
|
||||
2026/08/10-22:32:12.973885 176c6b000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.974038 176c6b000 Level-0 table #5: 1902 bytes OK
|
||||
2026/08/10-22:32:12.974280 176c6b000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.974308 176c6b000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.486571 174d33000 Recovering log #3
|
||||
2026/08/10-23:01:08.486599 174d33000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.486723 174d33000 Level-0 table #5: 3269 bytes OK
|
||||
2026/08/10-23:01:08.486979 174d33000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.487023 174d33000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.503621 173c33000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.231905 1712a7000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.981648 175c53000 Recovering log #3
|
||||
2026/08/10-22:32:12.981671 175c53000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.981789 175c53000 Level-0 table #5: 4129 bytes OK
|
||||
2026/08/10-22:32:12.982001 175c53000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.982027 175c53000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.493618 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.493643 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.493808 174527000 Level-0 table #5: 4129 bytes OK
|
||||
2026/08/10-23:01:08.494041 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.494071 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.529273 173427000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.256291 17028f000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.974890 175c53000 Recovering log #3
|
||||
2026/08/10-22:32:12.974992 175c53000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.975288 175c53000 Level-0 table #5: 27954 bytes OK
|
||||
2026/08/10-22:32:12.975563 175c53000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.975595 175c53000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.487664 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.487759 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.488053 174527000 Level-0 table #5: 27954 bytes OK
|
||||
2026/08/10-23:01:08.488346 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.488387 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.505520 173427000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.233897 17028f000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.967115 176c6b000 Recovering log #3
|
||||
2026/08/10-22:32:12.967360 176c6b000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.967874 176c6b000 Level-0 table #5: 60660 bytes OK
|
||||
2026/08/10-22:32:12.968240 176c6b000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.968279 176c6b000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.479221 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.479486 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.480007 174527000 Level-0 table #5: 64974 bytes OK
|
||||
2026/08/10-23:01:08.480345 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.480411 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.516977 173427000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.243997 1712a7000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.971869 176c6b000 Recovering log #3
|
||||
2026/08/10-22:32:12.971889 176c6b000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.971986 176c6b000 Level-0 table #5: 3295 bytes OK
|
||||
2026/08/10-22:32:12.972215 176c6b000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.972245 176c6b000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.484216 174d33000 Recovering log #3
|
||||
2026/08/10-23:01:08.484239 174d33000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.484351 174d33000 Level-0 table #5: 3295 bytes OK
|
||||
2026/08/10-23:01:08.484635 174d33000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.484666 174d33000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.523352 17443f000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.249869 171ab3000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.964849 176c6b000 Recovering log #3
|
||||
2026/08/10-22:32:12.965070 176c6b000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.965545 176c6b000 Level-0 table #5: 54921 bytes OK
|
||||
2026/08/10-22:32:12.965828 176c6b000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.965870 176c6b000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.476733 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.476990 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.477569 174527000 Level-0 table #5: 57435 bytes OK
|
||||
2026/08/10-23:01:08.477881 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.477921 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.512409 173c33000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.239525 171ab3000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.977501 175c53000 Recovering log #3
|
||||
2026/08/10-22:32:12.977559 175c53000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.977822 175c53000 Level-0 table #5: 24724 bytes OK
|
||||
2026/08/10-22:32:12.978082 175c53000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.978112 175c53000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.489989 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.490045 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.490287 174527000 Level-0 table #5: 24724 bytes OK
|
||||
2026/08/10-23:01:08.490582 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.490609 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.527542 173427000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.254751 17028f000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.969519 176c6b000 Recovering log #3
|
||||
2026/08/10-22:32:12.969561 176c6b000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.969704 176c6b000 Level-0 table #5: 6679 bytes OK
|
||||
2026/08/10-22:32:12.969923 176c6b000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.969956 176c6b000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.481697 175d4b000 Recovering log #3
|
||||
2026/08/10-23:01:08.481745 175d4b000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.481926 175d4b000 Level-0 table #5: 7486 bytes OK
|
||||
2026/08/10-23:01:08.482244 175d4b000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.482280 175d4b000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.496771 172c1b000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.226054 1712a7000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.978843 176c6b000 Recovering log #3
|
||||
2026/08/10-22:32:12.978881 176c6b000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.979146 176c6b000 Level-0 table #5: 16892 bytes OK
|
||||
2026/08/10-22:32:12.979428 176c6b000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.979473 176c6b000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.491211 175d4b000 Recovering log #3
|
||||
2026/08/10-23:01:08.491246 175d4b000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.491445 175d4b000 Level-0 table #5: 16892 bytes OK
|
||||
2026/08/10-23:01:08.491649 175d4b000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.491673 175d4b000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.521709 173427000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.248248 1712a7000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.980418 177477000 Recovering log #3
|
||||
2026/08/10-22:32:12.980441 177477000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.980589 177477000 Level-0 table #5: 3739 bytes OK
|
||||
2026/08/10-22:32:12.980853 177477000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.980897 177477000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.492361 174d33000 Recovering log #3
|
||||
2026/08/10-23:01:08.492389 174d33000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.492537 174d33000 Level-0 table #5: 3739 bytes OK
|
||||
2026/08/10-23:01:08.492829 174d33000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.492874 174d33000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.519333 17443f000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.246465 17028f000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.970762 175c53000 Recovering log #3
|
||||
2026/08/10-22:32:12.970797 175c53000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.970957 175c53000 Level-0 table #5: 5105 bytes OK
|
||||
2026/08/10-22:32:12.971239 175c53000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.971280 175c53000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.482999 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.483024 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.483159 174527000 Level-0 table #5: 5105 bytes OK
|
||||
2026/08/10-23:01:08.483436 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.483488 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.499747 17443f000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.228585 17028f000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.976337 17645f000 Recovering log #3
|
||||
2026/08/10-22:32:12.976362 17645f000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.976676 17645f000 Level-0 table #5: 5012 bytes OK
|
||||
2026/08/10-22:32:12.976911 17645f000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.976944 17645f000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.489065 174d33000 Recovering log #3
|
||||
2026/08/10-23:01:08.489088 174d33000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.489205 174d33000 Level-0 table #5: 5012 bytes OK
|
||||
2026/08/10-23:01:08.489400 174d33000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.489423 174d33000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.507484 17443f000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.235861 171ab3000 Delete type=3 #1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
2026/08/10-22:32:12.972748 175c53000 Recovering log #3
|
||||
2026/08/10-22:32:12.972787 175c53000 Level-0 table #5: started
|
||||
2026/08/10-22:32:12.972935 175c53000 Level-0 table #5: 7240 bytes OK
|
||||
2026/08/10-22:32:12.973189 175c53000 Delete type=0 #3
|
||||
2026/08/10-22:32:12.973238 175c53000 Delete type=3 #2
|
||||
2026/08/10-23:01:08.485281 174527000 Recovering log #3
|
||||
2026/08/10-23:01:08.485346 174527000 Level-0 table #5: started
|
||||
2026/08/10-23:01:08.485576 174527000 Level-0 table #5: 14767 bytes OK
|
||||
2026/08/10-23:01:08.485871 174527000 Delete type=0 #3
|
||||
2026/08/10-23:01:08.485924 174527000 Delete type=3 #2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026/08/10-22:32:04.502054 173427000 Delete type=3 #1
|
||||
2026/08/10-23:01:00.230385 171ab3000 Delete type=3 #1
|
||||
|
||||
@@ -2709,7 +2709,9 @@ export async function generateMissionCase({ seed = null, notify = true, ...opts
|
||||
// These were the wrong way round — the brief was set to NONE and the four
|
||||
// secret pages to INHERIT, so a GM opening the entry to the table to share the
|
||||
// brief would have published the truth, the opposition and the whole plot.
|
||||
ownership: { default: i === 0 ? 2 : 0 }
|
||||
// Ownership is declared by the page, not guessed from its index. Adding a
|
||||
// second player page silently hid it when this read `i === 0`.
|
||||
ownership: { default: pg.players ? 2 : 0 }
|
||||
}))
|
||||
});
|
||||
|
||||
|
||||
@@ -27,6 +27,10 @@ export const SKILL_CATALOGUE = [
|
||||
// The boarding axe and the entrenching tool both declare spec "axe" and the
|
||||
// catalogue had no such skill, so neither could ever be rated above zero.
|
||||
["melee_weapon", "axe", "melee", 5, "Melee Weapon (Axe)"],
|
||||
// The historical range needs somewhere to hang a halberd and a flail. Everything
|
||||
// else fits an existing specialisation: a mace is a club, a dirk is a knife.
|
||||
["melee_weapon", "polearm", "melee", 5, "Melee Weapon (Polearm)"],
|
||||
["melee_weapon", "flail", "melee", 5, "Melee Weapon (Flail)"],
|
||||
["variable_sword", "", "melee", 5, "Variable Sword"],
|
||||
// ranged
|
||||
["firearm", "pistol", "ranged", 5, "Firearm (Pistol)"],
|
||||
@@ -35,6 +39,10 @@ export const SKILL_CATALOGUE = [
|
||||
["energy_weapon", "rifle", "ranged", 5, "Energy Weapon (Rifle)"],
|
||||
["flashlight_laser", "", "ranged", 5, "Flashlight Laser"],
|
||||
["missile_weapon", "bow", "ranged", 5, "Missile Weapon (Bow)"],
|
||||
["missile_weapon", "sling", "ranged", 5, "Missile Weapon (Sling)"],
|
||||
["missile_weapon", "thrown", "ranged", 15, "Missile Weapon (Thrown)"],
|
||||
// A muzzle-loader is not a rifle. Loading is the skill and it is a different one.
|
||||
["firearm", "muzzleloader", "ranged", 5, "Firearm (Muzzle-loader)"],
|
||||
["heavy_weapon", "", "ranged", 5, "Heavy Weapon"],
|
||||
// communication
|
||||
["bargain", "", "comm", 5, "Bargain"],
|
||||
@@ -120,7 +128,55 @@ export const WEAPONS = [
|
||||
/* ---------- FUTURE. Recovered from somewhere ahead. ---------- */
|
||||
{ key: "gauss_pistol",name: "Gauss sidearm", cls: "energy", fam: "energy_weapon", spec: "pistol", dmg: "1d8+4", wound: "piercing", mod: false, ranges: [15,45,120], fire: "single", cap: 24, mass: 0.9, era: "future", trad: "tradition_transposed", energy: 4, desc: "No propellant and no report — a tap, and a hole. Ammunition is not manufacturable here." },
|
||||
{ key: "gauss_rifle", name: "Gauss lance-rifle", cls: "energy", fam: "energy_weapon", spec: "rifle", dmg: "1d12+4", wound: "piercing", mod: false, ranges: [40,120,300], fire: "single", cap: 12, mass: 3.8, era: "future", trad: "tradition_transposed", energy: 8, desc: "Punches an entry wound and an exit wound and very little between them." },
|
||||
{ key: "monoblade", name: "Monofilament blade",cls: "melee", fam: "melee_weapon", spec: "knife", dmg: "1d10+2", wound: "edged", mod: false, mono: true, ranges: [0,0,0], fire: "", cap: 0, mass: 0.4, era: "future", trad: "tradition_transposed", desc: "Cuts armour as though it were not there. Handle with the sheath on." }
|
||||
{ key: "monoblade", name: "Monofilament blade",cls: "melee", fam: "melee_weapon", spec: "knife", dmg: "1d10+2", wound: "edged", mod: false, mono: true, ranges: [0,0,0], fire: "", cap: 0, mass: 0.4, era: "future", trad: "tradition_transposed", desc: "Cuts armour as though it were not there. Handle with the sheath on." },
|
||||
|
||||
/* ==================================================================
|
||||
THE HISTORICAL RANGE
|
||||
|
||||
The department has been running since before it had a name, and it
|
||||
has never thrown anything away. Everything below is either still in
|
||||
a store somewhere in the building, or came back through a crossing
|
||||
with somebody. The period note is not decoration — a GM handing out
|
||||
a matchlock should know it is a matchlock.
|
||||
================================================================== */
|
||||
|
||||
/* --- medieval --- */
|
||||
{ key: "arming_sword", name: "Arming sword", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d8+1", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.2, era: "antique", trad: "tradition_local", desc: "Medieval. A yard of cross-hilted steel. The plain, correct answer to most of the fifteenth century." },
|
||||
{ key: "longsword", name: "Longsword", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d10+1", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.6, era: "antique", trad: "tradition_local", desc: "Medieval. Hand and a half. Wants room and rewards someone who has been taught." },
|
||||
{ key: "falchion", name: "Falchion", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d8+2", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.5, era: "antique", trad: "tradition_local", desc: "Medieval. Heavy at the tip and unsubtle. A cleaver that got above itself." },
|
||||
{ key: "war_hammer", name: "War hammer", cls: "melee", fam: "melee_weapon", spec: "club", dmg: "1d8+2", wound: "blunt", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.7, era: "antique", trad: "tradition_local", desc: "Medieval. For plate, which it does not cut so much as dent inwards." },
|
||||
{ key: "mace", name: "Mace", cls: "melee", fam: "melee_weapon", spec: "club", dmg: "1d8+1", wound: "blunt", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.4, era: "antique", trad: "tradition_local", desc: "Medieval. Flanged. Requires no skill worth the name and never breaks." },
|
||||
{ key: "flail", name: "Military flail", cls: "melee", fam: "melee_weapon", spec: "flail", dmg: "1d10", wound: "blunt", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 2.0, era: "antique", trad: "tradition_local", desc: "Medieval. Goes round a shield and is nearly as dangerous behind you as in front." },
|
||||
{ key: "poleaxe", name: "Poleaxe", cls: "melee", fam: "melee_weapon", spec: "polearm", dmg: "1d10+2", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 3.0, era: "antique", trad: "tradition_local", desc: "Medieval. Axe, hammer and spike on six feet of ash. The best answer to armour anyone found before gunpowder." },
|
||||
{ key: "halberd", name: "Halberd", cls: "melee", fam: "melee_weapon", spec: "polearm", dmg: "1d10+2", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 3.2, era: "antique", trad: "tradition_local", desc: "Medieval. Cut, thrust or pull a rider off a horse. Useless indoors and the department keeps eleven." },
|
||||
{ key: "billhook", name: "Billhook", cls: "melee", fam: "melee_weapon", spec: "polearm", dmg: "1d8+2", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 2.6, era: "antique", trad: "tradition_local", desc: "Medieval. A hedging tool with ambitions. Every parish had a rack of them." },
|
||||
{ key: "pike", name: "Pike", cls: "melee", fam: "melee_weapon", spec: "spear", dmg: "1d10+1", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 4.5, era: "antique", trad: "tradition_local", desc: "Medieval to Civil War. Sixteen feet. Magnificent in a field, absurd in a corridor." },
|
||||
{ key: "quarterstaff", name: "Quarterstaff", cls: "melee", fam: "melee_weapon", spec: "club", dmg: "1d8", wound: "blunt", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.8, era: "antique", trad: "tradition_local", desc: "Medieval. Six foot of ash. Legal to carry, which is most of the point." },
|
||||
{ key: "dirk", name: "Dirk", cls: "melee", fam: "melee_weapon", spec: "knife", dmg: "1d4+2", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 0.4, era: "antique", trad: "tradition_local", desc: "Medieval onward. Long in the blade for a knife and worn where a knife is not expected." },
|
||||
{ key: "longbow", name: "Longbow", cls: "bow", fam: "missile_weapon", spec: "bow", dmg: "1d10+1", wound: "piercing", mod: false, ranges: [30,90,180], fire: "fast", cap: 1, mass: 1.0, era: "antique", trad: "tradition_local", desc: "Medieval. Yew, and a draw weight that deforms the man who uses it. Faster than any firearm here." },
|
||||
{ key: "arbalest", name: "Arbalest", cls: "bow", fam: "missile_weapon", spec: "bow", dmg: "1d12", wound: "piercing", mod: false, ranges: [25,60,130], fire: "slow", cap: 1, mass: 5.0, era: "antique", trad: "tradition_local", desc: "Medieval. Steel prod, windlass span. One shot, and it goes through what it hits." },
|
||||
{ key: "sling", name: "Sling", cls: "bow", fam: "missile_weapon", spec: "sling", dmg: "1d8", wound: "blunt", mod: false, ranges: [20,50,110], fire: "fast", cap: 1, mass: 0.1, era: "antique", trad: "tradition_local", desc: "Ancient, and never actually obsolete. Ammunition is whatever is on the ground." },
|
||||
{ key: "javelin", name: "Javelin", cls: "thrown", fam: "missile_weapon", spec: "thrown", dmg: "1d8+1", wound: "piercing", mod: true, ranges: [10,20,40], fire: "fast", cap: 1, mass: 0.9, era: "antique", trad: "tradition_local", desc: "Ancient. Thrown, and then it is on the ground and somebody else has it." },
|
||||
|
||||
/* --- early modern --- */
|
||||
{ key: "rapier", name: "Rapier", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d8+1", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.1, era: "antique", trad: "tradition_local", desc: "Early modern. A yard and a half of point. For duels and for men who expect to be attacked in a street." },
|
||||
{ key: "main_gauche", name: "Main gauche", cls: "melee", fam: "melee_weapon", spec: "knife", dmg: "1d4+1", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 0.5, era: "antique", trad: "tradition_local", desc: "Early modern. The left-hand dagger. Its real job is catching the other man's blade." },
|
||||
{ key: "matchlock", name: "Matchlock musket", cls: "firearm", fam: "firearm", spec: "muzzleloader", dmg: "1d10+2", wound: "piercing", mod: false, ranges: [15,40,90], fire: "slow", cap: 1, mass: 4.8, era: "antique", trad: "tradition_local", desc: "Early modern. A burning cord and a prayer. Announces itself for a hundred yards before it fires." },
|
||||
{ key: "wheellock", name: "Wheellock pistol", cls: "firearm", fam: "firearm", spec: "muzzleloader", dmg: "1d8+1", wound: "piercing", mod: false, ranges: [8,18,35], fire: "slow", cap: 1, mass: 1.6, era: "antique", trad: "tradition_local", desc: "Early modern. Clockwork ignition, ruinously expensive, and it works in the rain." },
|
||||
{ key: "blunderbuss", name: "Blunderbuss", cls: "firearm", fam: "firearm", spec: "muzzleloader", dmg: "2d6+2", wound: "piercing", mod: false, ranges: [5,12,25], fire: "slow", cap: 1, mass: 4.0, era: "antique", trad: "tradition_local", desc: "Early modern. Load it with whatever is to hand. Terrible past twenty feet and decisive within it." },
|
||||
{ key: "boarding_pike", name: "Boarding pike", cls: "melee", fam: "melee_weapon", spec: "spear", dmg: "1d8+2", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 2.4, era: "antique", trad: "tradition_local", desc: "Early modern. Short enough for a deck. The department has them because the department used to have ships." },
|
||||
|
||||
/* --- Napoleonic and Victorian --- */
|
||||
{ key: "sabre", name: "Cavalry sabre", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d8+2", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.3, era: "antique", trad: "tradition_local", desc: "Napoleonic. Curved, and meant to be used going past somebody at speed." },
|
||||
{ key: "smallsword", name: "Smallsword", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d6+1", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 0.6, era: "antique", trad: "tradition_local", desc: "Georgian. Worn with a coat, not with armour. Kills quietly and leaves very little to see." },
|
||||
{ key: "cutlass", name: "Cutlass", cls: "melee", fam: "melee_weapon", spec: "sword", dmg: "1d8+1", wound: "edged", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.1, era: "antique", trad: "tradition_local", desc: "Georgian. Short, heavy, and it does not care what it hits on the backswing." },
|
||||
{ key: "brown_bess", name: "Brown Bess", cls: "firearm", fam: "firearm", spec: "muzzleloader", dmg: "1d10+3", wound: "piercing", mod: false, ranges: [20,50,100], fire: "slow", cap: 1, mass: 4.4, era: "antique", trad: "tradition_local", desc: "Napoleonic. Smoothbore, inaccurate, and it will take an arm off at fifty yards." },
|
||||
{ key: "baker_rifle", name: "Baker rifle", cls: "firearm", fam: "firearm", spec: "muzzleloader", dmg: "1d10+2", wound: "piercing", mod: false, ranges: [40,110,250], fire: "slow", cap: 1, mass: 4.2, era: "antique", trad: "tradition_local", desc: "Napoleonic. Rifled, and slow to load precisely because it is. The first weapon here that rewards patience." },
|
||||
{ key: "bayonet", name: "Socket bayonet", cls: "melee", fam: "melee_weapon", spec: "knife", dmg: "1d6+1", wound: "piercing", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 0.5, era: "antique", trad: "tradition_local", desc: "Napoleonic onward. On the end of a musket it is a spear; off it, an awkward knife." },
|
||||
{ key: "martini", name: "Martini-Henry", cls: "firearm", fam: "firearm", spec: "rifle", dmg: "2d6+2", wound: "piercing", mod: false, ranges: [50,150,350], fire: "slow", cap: 1, mass: 4.0, era: "antique", trad: "tradition_local", desc: "Victorian. Single shot, falling block, and a recoil that has bruised generations." },
|
||||
{ key: "webley", name: "Webley revolver", cls: "firearm", fam: "firearm", spec: "pistol", dmg: "1d10", wound: "piercing", mod: false, ranges: [10,25,50], fire: "fast", cap: 6, mass: 1.1, era: "antique", trad: "tradition_local", desc: "Victorian to the Great War. Breaks open, ejects all six at once, and is still in a drawer upstairs." },
|
||||
{ key: "lee_enfield", name: "Lee-Enfield", cls: "firearm", fam: "firearm", spec: "rifle", dmg: "2d6+2", wound: "piercing", mod: false, ranges: [60,200,500], fire: "fast", cap: 10, mass: 4.0, era: "antique", trad: "tradition_local", desc: "Great War. Ten rounds and a bolt a trained man works without looking. The best rifle in this list." },
|
||||
{ key: "trench_club", name: "Trench club", cls: "melee", fam: "melee_weapon", spec: "club", dmg: "1d8+1", wound: "blunt", mod: true, ranges: [0,0,0], fire: "", cap: 0, mass: 1.2, era: "antique", trad: "tradition_local", desc: "Great War. Made in the line out of a table leg and some nails. Quiet, which was the point." }
|
||||
];
|
||||
|
||||
/* ---------- armour (v0.5 §4.8) ---------- */
|
||||
@@ -138,7 +194,22 @@ export const ARMOURS = [
|
||||
|
||||
{ key: "oilcloth_coat", name: "Oilcloth coat", points: 1, mass: 3.0, era: "antique", trad: "tradition_local", desc: "Keeps the weather out and very little else." },
|
||||
{ key: "brigandine", name: "Brigandine", points: 4, mass: 9.0, era: "antique", trad: "tradition_local", desc: "Plates riveted between cloth. Heavy, quiet, and older than the agency." },
|
||||
{ key: "hardsuit", name: "Sealed hardsuit", points: 9, mass: 12.0, era: "future", trad: "tradition_transposed", desc: "Sealed, powered and not from here. Also a breathing set — see Gear." }
|
||||
{ key: "hardsuit", name: "Sealed hardsuit", points: 9, mass: 12.0, era: "future", trad: "tradition_transposed", desc: "Sealed, powered and not from here. Also a breathing set — see Gear." },
|
||||
|
||||
/* --- the historical range. Weight is the point: everything here protects
|
||||
well and costs you the ability to run in it. --- */
|
||||
{ key: "gambeson", name: "Gambeson", points: 2, mass: 4.5, era: "antique", trad: "tradition_local", desc: "Medieval. Quilted linen, thirty layers. Worn alone by the poor and under everything by everyone else." },
|
||||
{ key: "maille_shirt", name: "Maille shirt", points: 4, mass: 7.5, era: "antique", trad: "tradition_local", desc: "Medieval. Stops a cut completely and a spike not at all. Wear it over the gambeson or regret it." },
|
||||
{ key: "coat_of_plates", name: "Coat of plates", points: 6, mass: 11, era: "antique", trad: "tradition_local", desc: "Medieval. Iron plates riveted inside a fabric coat. The compromise that held for a century." },
|
||||
{ key: "cuirass", name: "Cuirass", points: 6, mass: 9, era: "antique", trad: "tradition_local", desc: "Early modern. Breast and back. Proof against a pistol at any sensible distance, and stated so by the armourer." },
|
||||
{ key: "harness", name: "Full harness", points: 9, mass: 25, era: "antique", trad: "tradition_local", desc: "Medieval. Head to foot, articulated, and far more wearable than people think — until the third hour." },
|
||||
{ key: "buff_coat", name: "Buff coat", points: 3, mass: 5, era: "antique", trad: "tradition_local", desc: "Civil War. Thick ox hide to the knee. Turns a sword, ignores a ball, and never dries out." },
|
||||
{ key: "sallet", name: "Sallet and bevor", points: 5, mass: 3.2, era: "antique", trad: "tradition_local", desc: "Medieval. Covers the head and the throat and takes most of your hearing with it." },
|
||||
{ key: "lobster_pot", name: "Lobster-tail helmet", points: 4, mass: 2.6, era: "antique", trad: "tradition_local", desc: "Civil War. Three bars across the face. You can see out; that is all that can be said for it." },
|
||||
{ key: "jack_of_plate", name: "Jack of plate", points: 4, mass: 6, era: "antique", trad: "tradition_local", desc: "Tudor. Small iron plates stitched between canvas. Looks like a coat until somebody hits it." },
|
||||
{ key: "cuirassier", name: "Cuirassier armour", points: 8, mass: 18, era: "antique", trad: "tradition_local", desc: "Early modern. Three-quarter plate for a man on a horse. On foot it is a punishment." },
|
||||
{ key: "brodie", name: "Brodie helmet", points: 3, mass: 1.3, era: "antique", trad: "tradition_local", desc: "Great War. A steel plate on a strap. Designed against shrapnel from above and honest about it." },
|
||||
{ key: "flak_jacket", name: "Flak jacket", points: 4, mass: 8.5, era: "antique", trad: "tradition_local", desc: "Second War. Manganese plates in a waistcoat. Heavy, hot, and it has saved a great many people." }
|
||||
];
|
||||
|
||||
/* ---------- gear ---------- */
|
||||
|
||||
@@ -147,7 +147,36 @@ export const ICON_MAP = {
|
||||
|
||||
/* ---- borrowed authority ---- */
|
||||
authority:["folder","device",0], authority_flagged:["folder","device",26],
|
||||
authority_burned:["folder","device",-26]
|
||||
authority_burned:["folder","device",-26],
|
||||
/* ---- the historical range: medieval ---- */
|
||||
arming_sword:["sword","melee",-4,"antique"], longsword:["sword","melee",-12,"antique"],
|
||||
falchion:["sword","melee",20,"antique"], war_hammer:["club","melee",-30,"antique"],
|
||||
mace:["club","melee",30,"antique"], flail:["club","melee",-36,"antique"],
|
||||
poleaxe:["axe","melee",-18,"antique"], halberd:["spear","melee",-26,"antique"],
|
||||
billhook:["axe","melee",26,"antique"], pike:["spear","melee",34,"antique"],
|
||||
quarterstaff:["bar","melee",-22,"antique"], dirk:["blade","melee",-16,"antique"],
|
||||
longbow:["bow","weapon",-30,"antique"], arbalest:["crossbow","weapon",-24,"antique"],
|
||||
sling:["rope","weapon",38,"antique"], javelin:["spear","weapon",18,"antique"],
|
||||
|
||||
/* ---- early modern ---- */
|
||||
rapier:["sword","melee",-40,"antique"], main_gauche:["blade","melee",40,"antique"],
|
||||
matchlock:["musket","weapon",-34,"antique"], wheellock:["flintlock","weapon",28,"antique"],
|
||||
blunderbuss:["shotgun","weapon",-44,"antique"], boarding_pike:["spear","melee",-32,"antique"],
|
||||
|
||||
/* ---- Napoleonic, Victorian, and the Great War ---- */
|
||||
sabre:["sword","melee",44,"antique"], smallsword:["sword","melee",-48,"antique"],
|
||||
cutlass:["sword","melee",48,"antique"], brown_bess:["musket","weapon",36,"antique"],
|
||||
baker_rifle:["musket","weapon",-38,"antique"], bayonet:["blade","melee",32,"antique"],
|
||||
martini:["rifle","weapon",-42,"antique"], webley:["revolver","weapon",42,"antique"],
|
||||
lee_enfield:["rifle","weapon",46,"antique"], trench_club:["club","melee",22,"antique"],
|
||||
|
||||
/* ---- historical armour ---- */
|
||||
gambeson:["jacket","armour",-16,"antique"], maille_shirt:["mail","armour",-22,"antique"],
|
||||
coat_of_plates:["vest","armour",-30,"antique"], cuirass:["plate","armour",16,"antique"],
|
||||
harness:["plate","armour",-36,"antique"], buff_coat:["jacket","armour",34,"antique"],
|
||||
sallet:["mask","armour",-42,"antique"], lobster_pot:["mask","armour",42,"antique"],
|
||||
jack_of_plate:["vest","armour",24,"antique"], cuirassier:["plate","armour",-48,"antique"],
|
||||
brodie:["mask","armour",30,"antique"], flak_jacket:["vest","armour",-24,"antique"]
|
||||
};
|
||||
|
||||
/** Skill category -> icon key. */
|
||||
|
||||
@@ -244,8 +244,64 @@ export function generateMission({ seed = null, rnd = null, ...opts } = {}) {
|
||||
|
||||
const esc = s => String(s ?? "").replace(/&/g, "&").replace(/</g, "<");
|
||||
const ul = xs => `<ul>${xs.map(x => `<li>${esc(x)}</li>`).join("")}</ul>`;
|
||||
/** A table, escaped. Cells may carry markup only when the caller has escaped it. */
|
||||
const table = (head, rows) =>
|
||||
`<table><thead><tr>${head.map(h => `<th>${h}</th>`).join("")}</tr></thead><tbody>`
|
||||
+ rows.map(r => `<tr>${r.map(c => `<td>${c}</td>`).join("")}</tr>`).join("")
|
||||
+ `</tbody></table>`;
|
||||
|
||||
/** The player-facing brief. Everything here is true as far as the agency knows. */
|
||||
/**
|
||||
* The players' page. Everything on it is something an agent would be told, or would
|
||||
* see on arrival — the cast's names and what they want, but never what they lie
|
||||
* about; the texture of the place, but never why it is like that.
|
||||
*
|
||||
* The generator was already writing all of this and filing every word of it behind
|
||||
* the GM screen: the timeline, the people, and the two lines of texture that are the
|
||||
* best writing in the whole document. A player brief that opens on a classification
|
||||
* note is a memo. This is a briefing.
|
||||
*/
|
||||
export function introPage(m) {
|
||||
const first = m.timeline[0];
|
||||
// The LAST timeline entry is the team's own arrival — "today: the team crosses" —
|
||||
// which makes nonsense of "since then, ...". Use the last thing that happened
|
||||
// before they did.
|
||||
const prior = m.timeline.filter(t => !/team crosses/i.test(t.what));
|
||||
const recent = prior[prior.length - 1] ?? first;
|
||||
return `
|
||||
<h2>Read this out</h2>
|
||||
<p><em>${esc(m.classification.note)}</em></p>
|
||||
<p>It is <strong>${esc(m.place)}</strong>. You have <strong>${esc(m.duration)}</strong>,
|
||||
and the department has been clear that this is the window and not an estimate.
|
||||
${esc(first.when.charAt(0).toUpperCase() + first.when.slice(1))}, ${esc(first.what.toLowerCase())}
|
||||
Since then it has not stopped. Most recently, ${esc(recent.what.toLowerCase())}</p>
|
||||
<p>You are going because ${esc(m.anomaly.containment.toLowerCase().replace(/\.$/, ""))},
|
||||
and because somebody has to be able to say afterwards that a department attended.</p>
|
||||
|
||||
<h2>What it is like there</h2>
|
||||
${ul(m.texture)}
|
||||
<p>None of that is in the file. It is what you will notice in the first ten minutes,
|
||||
and the file was written by somebody who was not there.</p>
|
||||
|
||||
<h2>What is known so far</h2>
|
||||
${table(["When", "What"], m.timeline.map(t => [esc(t.when), esc(t.what)]))}
|
||||
|
||||
<h2>Who is there</h2>
|
||||
${table(["Name", "Who they are", "What they want from you"],
|
||||
m.cast.map(c => [`<strong>${esc(c.name)}</strong>`, esc(c.role), esc(c.wants)]))}
|
||||
<p>They are not adversaries. Two of them will be helpful and at least one of them is
|
||||
not telling you everything, which is ordinary and is not the same as lying.</p>
|
||||
|
||||
<h2>Before you go</h2>
|
||||
<ul>
|
||||
<li>Draw your kit. What you do not sign for, you do not have.</li>
|
||||
<li>Somebody had better be able to make an arrangement, because most cases close that
|
||||
way and this one is no exception.</li>
|
||||
<li>Your anchor stays on you. It is the way back and it is the reason you are still
|
||||
you when you get there.</li>
|
||||
</ul>`;
|
||||
}
|
||||
|
||||
export function briefPage(m) {
|
||||
// The brief used to open on a classification note and never say where the site
|
||||
// was, how long the team had, what was likely to be in the way, or how they were
|
||||
@@ -368,7 +424,8 @@ ${m.timeline.map(t => `<tr><td><strong>${esc(t.when)}</strong></td><td>${esc(t.w
|
||||
/** The whole case as journal pages, ready to be written into a compendium. */
|
||||
export function missionPages(m) {
|
||||
return [
|
||||
{ name: `${m.codename} · Brief`, content: briefPage(m) },
|
||||
{ name: `${m.codename} · Briefing`, content: introPage(m), players: true },
|
||||
{ name: `${m.codename} · Orders`, content: briefPage(m), players: true },
|
||||
{ name: `${m.codename} · The truth`, content: truthPage(m) },
|
||||
{ name: `${m.codename} · Opposition`, content: castPage(m) },
|
||||
{ name: `${m.codename} · Phases`, content: phasesPage(m) },
|
||||
|
||||