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 44 more in the interactive database →
124 catalogued game(s) use this mechanic, spanning 1982–2000.
▶ Explore Linear Levels interactively: see every game + the Godot system