Documentation

Building a game

Theme packs

Updated 2026-11-03

Theme packs

A theme pack defines a universe without changing engine code.

Files

File Purpose
theme.yaml Brand, nouns, gameplay groups, attributes, sex model, modules, labels, seeders
pack.yaml Pack metadata and contract version
labels/{en,it}.json Runtime label overrides
Content seeders Catalog, trials, environments, packs, campaigns

themes/neutral is the neutral starter. themes/animalia-demo is a demo pack. themes/_template is the starting point for a new game.

Create a theme

php artisan theme:new my-game
php artisan theme:validate --path=themes/my-game/theme.yaml
php artisan theme:preflight --path=themes/my-game/theme.yaml

theme:new is additive: it does not overwrite an existing pack. game:create scaffolds and validates a game pack and prints a provisioning checklist without touching the server or database.

Validate and seed

php artisan theme:validate
php artisan theme:preflight
php artisan theme:seed

theme:seed validates the theme, resolves the seeders declared in theme.yaml (groups first, then catalog, environments, trials, packs, campaigns) and runs them idempotently.

Publish labels

php artisan theme:labels:publish

This merges theme labels into the runtime lang/*.json files.

Rules

  • Keep scientific or educational facts separate from competitive modifiers.
  • Use neutral vocabulary in engine code: collectible, instance, group.
  • Do not hardcode theme vocabulary, groups or content in the engine.
  • Version content and rules.
  • Every collectible, trial, environment, pack and campaign must be reproducible from the pack.

Admin scaffold

The admin Theme scaffold page runs the same scaffolder and shows the generated pack plus a key-derived provisioning checklist.

Next steps