Skip to Content

Blocks

Blocks (also called nodes) are the building pieces of a story. Each block does one thing — show some text, ask a question, or quietly update the story’s state — and then leads to the next block via one or more choices.

You add blocks using the buttons on the left toolbar of the editor. There are five block types:

BlockToolbar tooltipShown to players?
TextCreate new nodeYes
User InputUser input nodeYes
Set Variable ValueSet variable value nodeNo (instant)
Change Variable ValueChange variable value nodeNo (instant)
Variable RouterVariable router nodeNo (instant)

Blocks marked No (instant) don’t show a screen to the player. As soon as the player reaches one, it runs immediately and the story moves straight on to the next block.

Text

The basic narrative block. Use it for any scene, description, or piece of dialogue.

Fields

  • text — the text shown to the player. Supports {{variable_name}} placeholders — see Displaying variables in text.
  • image (optional) — an image shown alongside the text.

The player reads the text/image, then picks one of the block’s choices to continue. See Choices & Branching.

User Input

Asks the player a question and lets them type a free-text answer, which is saved into one of your story’s variables.

Fields

  • text — the question/prompt shown to the player. Supports {{variable_name}} placeholders, just like a Text block.
  • hint — placeholder text shown inside the empty input field (e.g. “Enter your name…”). Also supports {{variable_name}} placeholders.
  • image (optional) — an image shown alongside the prompt.
  • save_to — which variable the player’s answer is saved into.

Once the player submits their answer, it’s stored in the chosen variable and the story continues to the block’s next choice.

Use User Input early in a story to let players name their character, then reference that variable later — for example, route the story differently based on what they typed with a Variable Router.

Set Variable Value

Sets one of your story’s variables to a fixed value. This block is instant — it doesn’t show anything to the player.

Fields

  • variable_name — which variable to update.
  • value — the value to set it to. Works for any variable type (string, int, float, or bool) — the value you type is converted to match the variable’s type.

Use this to initialize a variable, record that the player reached a certain point (“visited_secret_room = true”), or reset something back to a known state.

Change Variable Value

Adds (or subtracts) a number from a numeric variable. Also instant — the player doesn’t see this block.

Fields

  • variable_name — which variable to change. Must be an int or float variable.
  • delta — the amount to add. Use a negative number to subtract (e.g. -1).

Use this for things like score counters, health, or reputation — for example, add +1 to a trust variable whenever the player makes a kind choice.

Variable Router

Branches the story automatically based on the current value of a variable, with no input from the player. Also instant.

Fields

  • routing_variable_name — the variable to check.

Unlike other blocks, a Variable Router’s choices aren’t buttons the player clicks — instead, each choice’s label is a condition. The router checks its choices in order and jumps to the first one whose condition matches the variable’s current value. See Variable Router conditions for the exact syntax.

If none of a Variable Router’s conditions match, the story won’t advance. Make sure at least one choice is a “catch-all” that always matches — for example, !999999 on a number that will never equal 999999.

What’s next

  • Choices & Branching — how blocks connect to each other, and how Variable Router conditions work.
  • Variables — creating and typing the variables these blocks read and write.