Also here: the Arthur & Robin knowledge portal · the landing page
Knowledge portals on the two great English legend-cycles — the Matter of Britain (King Arthur) and what this project calls the Matter of the Greenwood (Robin Hood) — and roguelikes built directly out of them.
The organising claim: there is no single Robin Hood and no single King Arthur. There are a dozen of each, assembled by successive periods that needed different ones, and they contradict each other. That is not a footnote to file in a codex. It is a game mechanic.
So the portal is organised by worldview rather than by chronology or character, and every worldview card carries a game_hooks field translating it into a playable ruleset. The games read that data. Lore lives in exactly one place, and each game is a reading of it.
A lens that changes the win condition but not the shape of play is a skin. —
docs/RUN_ENGINES.md
Twelve days in Barnsdale as the earliest surviving ballads actually have him: a yeoman, not an earl; devout to the Virgin Mary; based in Barnsdale as often as Sherwood; and extremely dangerous.
The engine inverts the genre's default resource model:
- Nothing of yours depletes. There is no health bar. Every act leaves evidence; evidence accretes; the county gets better informed until it closes on you.
- You are caught, not killed. Outlaws in the ballads are taken, not slain.
- Killing always works, and it is the most expensive thing you can do. Violence never fails a roll. It leaves a body, and bodies — unlike witnesses, tokens and rumours — never fade.
- Two failure states. The hue and cry can close on the road; or, if you survive it, whatever still stands against you convicts you at the season's assize. Late evidence has had no time to fade, so it counts for most there.
- Surviving is not winning. The band must raise 275 silver by the season's end, so pure restraint survives and comes up short.
Robin's Marian devotion is a real mechanic — he hears three masses daily and will not dine before he has — and the greenwood is a release valve that buys your neck at the price of your season.
The run log is written in ballad register and rendered at the end as the fitt, as it will be sung — or, if they take you, as the indictment.
The second engine, and deliberately nothing like the first: no party, no combat, no health bar, no loot. The adversary is the record.
You are assembling an account of whether a war-leader named Arthur existed. You spend limited access — travel, patronage, permission to read — and you cannot consult every surviving witness. Gildas writes closest to the events, names Ambrosius Aurelianus, and never mentions Arthur. The Historia Brittonum gives twelve battles three centuries later. The Annales Cambriae say Arthur and Medraut fell at Camlann, not that they fought each other. Geoffrey invents a king.
The mechanic that makes it a game rather than a quiz is derivation. Later witnesses copy earlier ones, and a source agreeing with its own exemplar is not a second voice. Bede's silence is Gildas's silence repeated; Wace agreeing with Geoffrey is Geoffrey twice. Collating to find out costs access you could have spent reading something new. In the harness, a reader who counts every agreeing witness as independent is discredited 98.9% of the time.
Then you publish, and are scored not on whether Arthur existed but on whether your claims match what the surviving record warrants. "Not proven" is a correct answer when nothing warrants a verdict, and asserting what the record will not bear is the only way to be discredited.
What varies between runs is which witnesses survived to be read at all — 14 distinct answer keys across 400 runs. A claim that is warranted in one run genuinely is not in another. That is how the real problem works.
321 cards: 12 worldviews, 85 figures, 84 documents, 39 scholars, 23 topics and a 78-event timeline running from Gildas's silence to Ridley Scott. Every card records source_method, review_status and confidence, and carries a scholarly_disagreement field wherever the point is contested — which is most of the time in both cycles.
All cards are DRAFT: assembled from cited scholarship and from a personal research library, and not checked line by line against primary sources.
| Cycle | Lens | Period | What the ruleset changes |
|---|---|---|---|
| Arthur | Arthur of the Welsh | c. 600–1100 | Named specialists whose names are their abilities; nested impossible tasks; disappearance, not death |
| Arthur | Geoffrey's Pseudohistory | c. 1136–1200 | Contradictory witnesses, limited access, derivation-spotting, and a record that judges what you publish — playable now |
| Arthur | Chrétien's Courtly Romance | c. 1170–1191 | Two enforced acts: a false victory at the midpoint, then an interior flaw as antagonist |
| Arthur | The Grail Made Christian | c. 1200–1240 | A hermit reprices your past after each floor; most builds are meant to fail |
| Arthur | Malory's Fellowship | c. 1469–1485 | Loyalty bonds that must break; every bond you build makes the ending worse |
| Arthur | Revival & Afterlife | 1816–present | Pick the narrating century; it rewrites the moral scoring of identical acts |
| Robin | The Ballad Outlaw | c. 1377–1500 | The hue and cry. Killing is cheap and legally ruinous — playable now |
| Robin | Robin of the May Games | c. 1420–1590 | You are not Robin; you are a parish staging him to fund a church roof |
| Robin | Robert, Earl of Huntington | 1569–1601 | Accumulate legal title, not loot; combat damages your case; the last room is a court |
| Robin | Ritson's Radical | 1795–1883 | A countryside-poverty meter is the score; loot held personally is worth nothing |
| Robin | The Technicolor Robin | 1922–1973 | An élan meter that any lethal blow on a named character resets to zero |
| Robin | Prince of Thieves & the Heritage Hero | 1991–present | Each finished run is commemorated, and its gift-shop version becomes future canon |
"Rob from the rich, give to the poor" is not medieval. The Gest of Robyn Hode's Robin lends money to an impoverished knight, extorts it back from a lying monk, and instructs his men to spare husbandmen, yeomen, knights and squires while beating bishops. The first surviving statement of the slogan is John Major's, in 1521 — and Major is also where the Richard-I framing comes from, not Scott. Joseph Ritson's 1795 edition gave the claim a scholarly apparatus, a Jacobin politics and a biography, and made it the organising principle. This corrected an earlier draft of this project that credited Ritson with inventing it outright.
The pagan Robin was invented in 1984. Herne the Hunter appears in The Merry Wives of Windsor as a local Windsor ghost and has no connection to Robin Hood before Richard Carpenter's Robin of Sherwood. Within a decade the mystical, earth-religion Robin was widely assumed to be the oldest stratum of the legend. It is the newest.
This repository is the first place where both halves of a long-running practice ship together.
Phase one — knowledge portals. For several years the work was research infrastructure: SQLite-backed, provenance-tracked, statically generated databases and portals on esoteric, medieval and early-modern subjects. A partial list, all live:
| Portal | Subject |
|---|---|
| AtalantaClaudiens | Maier's Atalanta Fugiens (1617) — the architectural template the rest follow |
| AgrippaDOP | Every chapter of Agrippa's De occulta philosophia across its 1510 draft and 1533 print |
| The Alchemical Index · Alchemy Timeline Map | Alchemical corpora, persons and chronology |
| MedievalMagicDB · MorignyPortal | Medieval magic; John of Morigny's Liber florum |
| CrowleyDB · TheosophicalAlchemyDB | Modern occult corpora |
| Esoteric Studies Database · DBCatalog | The aggregate, and a catalogue of the catalogues |
| PKD Source Database · Exegesis Summaries · Zebrapedia | Philip K. Dick |
| Dee Summaries · ZorziHarmoniaMundi | John Dee; Francesco Giorgi |
| The Vocabulary of Magic | Magic vocabulary across the Magic: the Gathering corpus |
Plus WitcherPortal, IslamicateOccultPortal, ChristianCabalaDB, WitchcraftStudiesDB, neoplatonism-portal, PicoDB and others. The common architecture is deliberately boring and has not changed: JSON seed → SQLite → Python static-site generator → vanilla HTML. No frameworks, no build tools, no runtime dependencies, and provenance fields on every single claim.
Phase two — games. Then the portals started feeding game projects, which needed the same content but a different shape:
| Game | Built on |
|---|---|
| SnakeAB | Narrative snake autobattler — the first proof of the draft → simulate → narrate loop |
| DungeonAB | MTG-style pack draft into a narrated procedural delve |
| EmblemRoguelike · Emblems in 3D | Maier's emblems as a roguelike and as printable objects |
| MORIGNY (Liber Florum) | Its portal's sibling — a game and a database on the same manuscript |
| TurkaGame | Ibn Turka (1369–1432): a portal, a visual novel, a roguelike and a career sim in one repo |
Phase three — this repo. The portal is the content layer, declared as such, with the game hooks written into the research cards themselves. It is also where the house engine got questioned.
Every game above ran the same loop: commit → watch → read. All player decisions at t=0 in a draft, all narrative at t=end in a generated chronicle, pure simulation in between. It works, but it has a specific cost — DungeonAB's own audit measured the draft solving itself, because a closed decision set at t=0 is an optimisation problem, and once solved the game is over even though the runs keep happening.
docs/RUN_ENGINES.md works out eight alternative run engines, each a different answer to five questions: what varies between runs, where decisions live, what depletes, what ends the run, and where narrative comes from. Two of those defaults turned out to be unexamined conventions — what depletes need not be health, and what ends the run need not be death. Neither is medieval. Outlaws are caught; Grail knights are disqualified.
ROBINCRAWL is engine B, the Pursuit Ledger. It has no health bar and no combat system in the usual sense.
robincrawl/ the playable game — vanilla ES modules, no build step
src/pursuit.js the evidence/pursuit model (DOM-free, so it can be measured)
src/encounters.js 20 encounters drawn from the ballads and outlaw-tale genre
src/run.js the run loop
src/ui.js rendering
art/ public-domain plates + credits.json
portal/ the generated Arthur & Robin portal (321 cards)
docs/ RUN_ENGINES.md and the design/decision records for both games
index.html landing page
Sources of truth live outside this repo, in the working projects (ROBINCRAWL/, ARTHURROBINPORTAL/, ARTHURCRAWL/); this repository is the publish target, assembled by ROBINCRAWL/tools/publish.py, which refuses to publish a build whose tuning harness is failing.
The design claim — killing is cheap and legally catastrophic — is not asserted, it is measured. tools/simulate.mjs plays eight scripted strategies across thousands of seeded runs and gates the build on eight assertions.
strategy kept short taken assize avg purse avg kills
butcher 0.0% 0.0% 100.0% 0.0% 317 6.12
courteous 31.3% 50.4% 14.2% 4.1% 230 0.98
pragmatic 44.9% 55.0% 0.0% 0.0% 255 1.07
lateBlood 5.1% 2.5% 48.8% 43.6% 326 3.76
earlyBlood 2.2% 1.7% 94.9% 1.2% 267 3.76
courteousValve 29.5% 69.0% 0.0% 1.5% 206 0.91
cautiousButcher 2.3% 3.6% 52.7% 41.3% 263 4.80
Violence has never failed a roll in 70,000+ picks; the all-violence line is taken 100% of the time. The result the design turns on is pragmatic against courteous: 0.09 extra killings is worth 13.6 points of win rate. One well-chosen killing pays. Indiscriminate killing is fatal.
The harness caught three real problems that reading the design would not have:
- The game solved itself. With survival as the only win condition, a naive bot won 100% of runs — the same failure the draft-based games have. Fixed by giving the season a purse target.
- Timing was everything. Because evidence accrues per remaining day, blood laid down late was nearly free: identical kill counts gave 44.5% vs 13.6% success purely on when. The optimal line was "stay quiet, then massacre everyone in the last week." Fixed with officer events and the assize.
- Two assertions were wrong, not two features. The greenwood cannot save a butcher — it works by decay, and bodies never fade — so asserting that it should was testing something the design forbids.
Full record in docs/ROBINCRAWL-DECISIONS.md.
Every plate is public-domain medieval or Renaissance art, harvested with full provenance:
- The Metropolitan Museum of Art Open Access (CC0) — Rubens's A Forest at Dawn with a Deer Hunt for the greenwood, Patinir's landscape for the road.
- Wikimedia Commons (public domain; licence verified per file) — Bruegel's The Magpie on the Gallows when they take you, Dirk Bouts's Justice of Emperor Otto III at the assize, Bruegel's Peasant Wedding when you keep the season, the Crécy archers of the Froissart manuscript for the killing.
Harvesters are tools/harvest_art.py and tools/harvest_commons.py in the ROBINCRAWL project; provenance for every image is in robincrawl/art/credits.json and credited under each plate in-game.
# the game (any static server; this one sends no-store, which matters — see below)
python tools/serve.py 7541
# the tuning gate
node tools/simulate.mjs 3000One trap worth recording: browsers cache ES modules by origin, ignoring Cache-Control: no-store and surviving both a server restart and a new tab. An edit to src/*.js that appears not to take effect is usually cached, not broken — verify in node first, which has no such cache.
- ROBINCRAWL slice 1 is playable and gated. The band (Little John, Much, Will Scarlet) is named in prose and not yet modelled; devotion has no hunger rule behind it; run seeds are not yet shareable.
- ARTHURCRAWL is designed and scaffolded, with no game code. Its first slice is engine D, the Dossier, over Gildas's silence.
- Every portal card is DRAFT. Dates and manuscript shelfmarks are the claims most likely to be subtly wrong.
Code: MIT. Research text: CC BY 4.0. Artwork: public domain, individually credited in robincrawl/art/credits.json.