World consists of discrete stages played in a fixed sequence; stages are self-contained with no backtracking between them.
Stages run in a fixed order; clearing one stamps a check and unlocks the next along the level-select path, while locked levels stay dim.
Discrete stages in fixed order with no shared world state. Each level is a scene; finishing one loads the next. Nothing persists between them but a counter.
Each stage is its own packed scene. Levels are independent and self-contained — no backtracking, no cross-level state.
@export var levels: Array[PackedScene]
var index := 0On stage clear, swap to the next scene. change_scene_to_packed tears down the old level entirely — that teardown IS the no-persistence rule.
func next_level():
index += 1
get_tree().change_scene_to_packed(levels[index])A level index is the only thing that carries forward. Keep it in an autoload so it survives the scene swap.
# GameState.gd
var level_index := 0In short: level_index int; load_level(index + 1) on stage completion; no persistent world state between levels
…and 42 more in the interactive database →
122 catalogued game(s) use this mechanic, spanning 1984–2000.
▶ Explore Linear Levels interactively — see every game + the Godot system