Skip to content

Recipes

A recipe answers exactly one question and is completable by editing at most two files. Every one has the same five headings — Goal, Files you will edit, Steps, Verify, See also — so you can skim straight to the part you need, and npm run docs:lint refuses a recipe that does not.

If you are looking for the rules a new recipe has to follow, that is the recipe template. Everything below is a recipe you can run.

Getting started

The path from nothing to a game you are editing.

Game logic

Inside the guest: systems, input, the HUD, and the component that ships them.

First-person

Recipes that build on templates/fps.

  • Add a weapon — a second fire mode with its own ammunition, rate and sound.
  • Add an enemy — a heavier variant sharing the existing chase-and-attack behaviour.
  • Change the level — your own splat environment, your own collider, your own spawns.

Third-person

Recipes that build on templates/third-person.

  • Add an interactable — a lever the hero walks up to and presses E at, declared with a tag, with a HUD prompt when it is in reach.
  • Add NPC dialogue — a third person with a script of their own, in a JSON file and a prefab, without touching the dialogue system.
  • Tune the follow camera — boom length, shoulder height, pitch range, an over-the-shoulder offset, and who owns the collision.
  • Add a locomotion state — a crouch on Ctrl that halves walk speed, reported to the animator the way idle, walk and run are.

World and physics

Characters and animation

The rules, in one line each

  • Two files maximum. A third file means two recipes, or a design problem.
  • Never packages/. A recipe that needs an engine change is a missing feature; file it instead of documenting it.
  • Assets by id. Recipes add manifest entries; they never hardcode a URL.
  • No allocation in systems. Recipe code is copied verbatim, by humans and by language models. Preallocate.
  • Runnable code only. Snippets are checked by npm run docs:lint.

See also