diff --git a/.agents/skills/tttk-authoring/SKILL.md b/.agents/skills/tttk-authoring/SKILL.md index 8fdbbc5..65f6442 100644 --- a/.agents/skills/tttk-authoring/SKILL.md +++ b/.agents/skills/tttk-authoring/SKILL.md @@ -84,7 +84,8 @@ marker, and fence attribute keys may contain hyphens (e.g. `data-foo=bar`): template layers or card backs. - To print a rules document, use `:md-print[./rules.md]` (or the `yaml role=tag` form). It paginates into A4 landscape sheets holding two A5 pages, each with - `columns` columns (default 2). See `reference.md` for the attributes. + `columns` columns (default 2). See `reference.md` for the attributes and + `rules.md` for how to write the rules text itself. - Keep CSV files clean — header row plus data. Put deck config and templates in the YAML block's `data-config`, not in CSV front matter (see `csv.md`). - `{{prop}}` in a CSV `body` interpolates another column (or front-matter key) @@ -138,6 +139,9 @@ directory. The full code catalog lives in `reference.md`. - `csv.md` — CSV authoring: columns, `{{prop}}` interpolation, quoting, and the discouraged front-matter form. - `layout.md` — column layout markers. +- `rules.md` — conventions for writing rules documents: the five-part + structure, the theme/players/time header, icon-first mentions, veteran-first + prose with details boxed in alerts, and a timestamp. - `markdown.md` — GitHub alerts and mermaid diagrams. - `examples/adventure.md` and `examples/encounters.csv` — a complete minimal document and its data file. diff --git a/.agents/skills/tttk-authoring/rules.md b/.agents/skills/tttk-authoring/rules.md new file mode 100644 index 0000000..2f72a7c --- /dev/null +++ b/.agents/skills/tttk-authoring/rules.md @@ -0,0 +1,82 @@ +# Writing rules documents + +A rules document is the markdown printed with `:md-print[./rules.md]` (see +`reference.md` for the element). It is read *at the table*, so it is written to +be scanned, not studied. These conventions keep it dense and fast to use. + +## Document structure + +Every rules document follows the same five-part skeleton, in order: + +1. **Briefing** — what the game is and what the players are doing. +2. **Components** — the pieces in play (cards, tokens, sheets, dice). +3. **Setup** — how to get from the box to the first turn. +4. **Game flow** — the loop of play, turn by turn. +5. **Game end** — how the game finishes and who wins. + +Use these as `##` headings so a reader can jump straight to the part they need. + +## Theme, players, and time + +Open the briefing with one sentence that explains the theme — the fiction the +players step into — then state the player count range and the time estimate: + +```markdown +## Briefing + +You are rival merchants trading spice across a desert that wants you dead. + +**2–4 players · 30–45 minutes** +``` + +## Icon-first mentions + +When a paragraph mentions a concept for the first time, and that concept has an +icon under `assets/`, prefix the concept with the icon. The icon becomes a +visual anchor the reader can find without reading the whole sentence. + +```markdown +Spend a :[coin]coin to bribe the :[guard]guard. +``` + +Write the icon immediately before the word, with no space: `:[coin]coin`, not +`:[coin] coin`. Only the **first** mention in a paragraph gets the icon; later +mentions stay plain so the prose does not turn into a wall of icons. See +`reference.md` for the `:[name]` inline directive. + +## Veteran-first prose + +Write the default text for a veteran player who only needs to refresh their +memory: the rule, the number, the trigger. Assume they already know the game. + +Everything that is *not* needed to play — edge cases, worked examples, the +reasoning behind a rule, theme and flavour — is look-up material for new players +and corner cases. Box it in a GitHub alert so it stays out of the way of the +main line: + +```markdown +A :[shield]shield reduces incoming damage by 2. + +> [!NOTE] +> Shields do not stack. A character carrying two shields still reduces damage +> by 2, and a shield offers no protection against fire. +``` + +Pick the alert type to signal intent: `[!NOTE]` for clarifications and edge +cases, `[!TIP]` for advice, `[!IMPORTANT]` for rules that are easy to miss, +`[!WARNING]` / `[!CAUTION]` for consequences. See `markdown.md` for the alert +syntax. + +The test: if a veteran can play correctly from the plain text alone, the split +is right. If a rule only exists inside an alert, it belongs in the main text. + +## Rule timestamp + +End every document with a timestamp, so a printed copy can be checked against +the current rules: + +```markdown +--- + +*2026-10-24* +```