Onceworlds
Engine · Onboarding

Onboarding: the first minute

The goal and first move without reading, previews, cause and effect, strategy that reads, shot --story.

Nobody reads rules before playing a browser game. A player who doesn't know what to do within about ten seconds of play starting leaves, and one who loses without knowing why doesn't play again. The first round (or the first minute of a world or a run) is the tutorial: teach by having them do it, with the game showing them what matters at the moment it matters.

The rules of a good first minute

Design it before building it

DESIGN.md (onceworlds new writes one) has "The first minute": a storyboard, second by second, of a player who has never seen the game, from the title to their first result, and a pre-build check (the design topic) to answer before writing the rules. If an answer is "no", change the design first: no amount of UI fixes a game whose choices can't be read.

Look at it the way a new player would

npx @onceworlds/cli shot --story (the MCP tool screenshot with story: true) plays the first minute and lays it out on one sheet: the title, the lobby, the countdown, the round's goal, play at +1, +5 and +12 seconds, and the first result. Look at the sheet as someone who has never seen the game, frame by frame:

  1. Title: from the picture alone, what is the game and what will I do in it?
  2. Lobby, if it has one: does it look like this game (its world, type and colours), not a kit? Who am I playing with?
  3. Countdown and goal: at most one 3-2-1, then the goal in a few words?
  4. First beats: is the one thing to do shown (highlighted, pointed at, previewed) so a first-timer does it without reading?
  5. Play: can I see what the others are doing, and what my last move did?
  6. First result: who won, and could I say why (what caused it)?
  7. Every frame: one art direction, no stock panels, no "1/3" in a corner, no name pills with BOT tags (the ui-design topic).

Fix what fails, then shoot it again. check notes a game whose first round is the same as every other (onboarding), and warns about a second countdown (own-countdown).

A guided first beat, in code

// Round 1 only: the one thing to do, pointed at, until the player has done it once.
const Coach = defineResource('Coach', { done: t.bool(false) });

ui.view('coach', ({ flow, world }) => {
  if (world.resource(Coach).done) return null;
  return UI.label('TAP THE TABLE', { size: 34, outline: true });     // 2 to 5 words, big, where the thumb goes
}, { anchor: 'bottom', offset: [0, 120], when: ({ flow }) => flow?.phase === 'playing' && flow.round === 1 });

// In the system that handles the move: world.resource(Coach).done = true; and draw the ghost of where it lands until then.