Docs Decisions

Contents

ADR-0006: Three independent axes: template, theme, style

  • Status: Proposed
  • Date: 2026-09-30

Context

Reelwright has Theme (what exists) → Style (how it looks) → Pattern → Instance. Games need a third axis Reelwright doesn't have: what the game plays like. unspent-ortho mixes the axes. Its landscape files hold palette lerps next to gameplay numbers, so a look change touches gameplay code (research/unspent-ortho-study.md §6.4; the look was replaced on day 3 and its old names outlived it).

Decision

  • Template: "plays like". A versioned bundle of packs, simulation mode, camera, controls, default rules, archetype library, world generator, UI screens, tuning knobs with ranges, the questions the Director must answer, and acceptance metrics for bots. A game pins exactly one template (tpl.action_survival@1). Templates never inherit from each other; shared parts become packs. Packs are bundles of documents that use kits.
  • Theme: "is about". Fiction, tone and a never list, factions, a catalog of families (creatures, props, places), and naming grammars.
  • Style: "looks and sounds like". Palette slots, material families, lighting and post looks, UI tokens and fonts, model-recipe look parameters, and audio palette. Only presentation reads it.
  • A game is template@version + overrides by id + generated content + theme + style. A game document with the same id as a template document replaces it whole. Finer changes are id-addressed pointer edits (ADR-0005).
  • Mechanics never reference style. Presentation reads mechanics through cue names and visual slots. So restyling is a one-document change, and so is retheming names and visuals.
  • Render profiles are swappable and techniques are never named in content. A style chooses a render profile, such as lit_ortho or flat_2d; content schemas say what a thing is made of and what state it's in, never which shader draws it.

Alternatives considered

  • Template inheritance. Diamond merges and unclear override order. Packs compose instead.
  • Templates as starter projects that games copy. Every game becomes a fork that can't take template upgrades.

Consequences

  • Swapping a style re-looks a game without touching its rules; the verification ladder can prove the state hashes didn't change.
  • Templates carry acceptance metrics, which makes "is this a good platformer?" partly measurable per template.

From docs/adr/0006-template-theme-style.md in the Gamewright repository.