Campaign
campaign.ron — the manifest. id equals the campaign folder name.
| Field | Type | Required | Description |
|---|---|---|---|
| chronicle | Note[] | required | Backdated chronicle entries the world opens with. |
| death_day | uint64 | required | The day the campaign's founding death fell (the ducal assassination). |
| default_seed | uint64 | required | Root of every deterministic roll when no seed is supplied. |
| description | string | required | A one-line blurb for the realm (flavour, not resolved). |
| id | string | required | |
| name | string | required | The realm-scale region the towns sit in ("Thornwood Vale"). |
| player_start | PlayerStart | optional | Where an admitted player character comes ashore — the creator's data. Additive: a campaign without it can still be played through the seeded pregen fast lane. |
| roads | Road[] | required | Roads laid AFTER the towns are built, resolved by node name. |
| slots | Slot[] | required | Procedural town slots (worldgen) — what makes the realm the realm: an authored coast plus a generated vale. |
| source | Source | required | |
| start_day | uint64 | required | When the campaign opens (day, and the hour the world boots at). |
| start_hour | uint64 | required | The hour of |
| towns | string[] | required | Authored towns, by file id ( |
Nested shapes
Every shape Campaign closes over, so this page stands alone.
Note
A backdated chronicle note (record_at).
| Field | Type | Required | Description |
|---|---|---|---|
| day | uint64 | required | The day the note is backdated to. |
| hour | uint64 | required | The hour of that day (0-23). |
| text | string | required | The chronicle line's text. |
PlayerStart
Where the character creator's minted PC ENTERS the world: the settlement it comes ashore in, the venue/ward it is placed LocatedIn, a starting purse, and an optional ward membership. Resolved BY NODE NAME at admit time (the interpreter has already minted these), so it reads like the campaign's roads (also name-resolved). Validated by the one campaign validator (campaign/validate.rs): the settlement, venue, and ward must name real nodes the town declares.
| Field | Type | Required | Description |
|---|---|---|---|
| level | uint32 | default 1 | Starting character level for chairs that come ashore in this campaign. Absent/default 1. Capped at the creator's current maximum (Battle's picker uses the same door). A campaign that wants to skip the dull rungs sets 3. |
| purse | integer | optional | A starting purse in the coin good's minor units (silver), if any. |
| settlement | string | required | The settlement the PC enters (a town's display name — "Greyharbor"). |
| venue | string | required | The venue OR ward the PC is placed |
| ward | string | optional | A ward the PC joins on arrival ( |
Road
A road between two named nodes, carrying the ride's length in days. Resolved by node NAME after the towns exist.
| Field | Type | Required | Description |
|---|---|---|---|
| days | int64 | required | The ride's length in days. |
| from | string | required | The node the road runs FROM, by name (a settlement). |
| route | string | required | The route's display name ("the Coast Road"). |
| to | string | required | The node the road runs TO, by name (a settlement). |
Slot
A procedural town slot: worldgen builds it, and a road binds it to a settlement that already stands (authored, or rolled by an earlier slot).
SlotKind
The kind of procedural fill a slot requests.
Worldgen
A full worldgen town, landlocked farm-and-forge by default.
Mountain
The far mine-and-mithral peaks: a mountain town whose data mine instantiates the rare-regional mithral deposit — the first world where mithral flows. Booted only at three towns (RPGPT_TOWNS=3).
SlotRoad
Where a slot's road runs FROM — the settlement at the road's other end.
Two forms, because a realm's towns are not all named at the same time. An AUTHORED town has its name in the campaign's own files, so a slot can just say it. A ROLLED town's name is drawn from the realm seed at compose time and does not exist while the manifest is being read — so a road that runs from one must reference the SLOT that rolls it, by index.
That second form is what lets a wide realm CHAIN (the river town off the vale, the high pass off the river, the forest past the pass) rather than starring every road off the authored coast — which piled every route posting and traded store onto one hub and grew its menu enumeration superlinearly in town count.
Town
An authored settlement, by name: Town("Greyharbor").
Carries string.
Slot
A town of the COMPOSED realm, by index: this campaign's root town is Slot(0) and slot n is Slot(n + 1). It must already stand — a slot cannot road from a town placed after it.
Carries uint.
Source
Every file's top-level value carries source.
Srd51
SRD 5.1 — retained nonconflicting catalogue material.
Srd52
SRD 5.2.1 — the 2024-revision System Reference Document, the same CC-BY-4.0 grant as 5.1 and the current rules chassis. Its files carry the .srd52.ron suffix so provenance reads off the path; see data/README.md for which document rules a given value.
Original
Original content authored for this game (not from the SRD).
Phb2024
Material transcribed from the 2024 Player's Handbook. This source is not redistributable by this project and belongs in a phb2024 mod.
Dmg2024
Material transcribed from the 2024 Dungeon Master's Guide. This source is not redistributable by this project and belongs in a dmg2024 mod.
Mm2024
Material transcribed from the 2024 Monster Manual. This source is not redistributable by this project and belongs in an mm2024 mod.
Tce
Material transcribed from Tasha's Cauldron of Everything. This source is not redistributable by this project and belongs in a tce mod.
Xge
Material transcribed from Xanathar's Guide to Everything. This source is not redistributable by this project and belongs in an xge mod.