# Campaign

> Kinbarrow modding reference — content tree `45d0fe274f851548`, version `0.2.0+main.c05ef2b`.

`campaign.ron` — the manifest. `id` equals the campaign folder name.

**Note on syntax:** these files are RON, not JSON. The shapes below are exact,
but punctuation follows RON — read a real `data/*.ron` file alongside.

## Fields

| 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 `start_day` the world boots at (0-23). |
| `towns` | `string[]` | required | Authored towns, by file id (`towns/<id>.ron`). Sorted at load, so the interpret order never depends on filesystem iteration order. |

## Nested shapes

### 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 |
| --- | --- | --- | --- |
| `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 `LocatedIn` — "The Brined Gull". |
| `ward` | `string` | optional | A ward the PC joins on arrival (`MemberOf`), by name, if any. |

### 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).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `days` | `int64` | required | The road's length in days. |
| `kind` | `SlotKind` | required | What procedural fill this slot requests. |
| `road_from` | `SlotRoad` | required | The settlement this slot's road runs from. |
| `route` | `string` | required | The road's display name. |

### SlotKind

The kind of procedural fill a slot requests.

#### SlotKind::Worldgen

A full worldgen town, landlocked farm-and-forge by default.

#### SlotKind::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.

#### SlotRoad::Town

An authored settlement, by name: `Town("Greyharbor")`.

Carries `string`.

#### SlotRoad::Slot

An EARLIER slot's rolled town, by index: `Slot(0)`. Must point strictly backwards — a slot cannot road from a town not yet placed.

Carries `uint`.

### Source

Every file's top-level value carries `source`.

#### Source::Srd51

SRD 5.1 — the System Reference Document, the shipped baseline.

#### Source::Original

Original content authored for this game (not from the SRD).

#### Source::Personal

A player's own transcription or third-party content in a mod tree — provenance stays honest without borrowing the base tree's markers. Never used by shipped files.

