Specific movement abilities acquired during play retrospectively unlock previously inaccessible map areas.
A high ledge is unreachable until a flight power-up is found: a normal jump falls short, so the hero grabs the winged power-up, sprouts wings, and double-jumps onto the cliff.
Same flag-check-on-traversal logic as flag gating, but expressed through movement capability: the wall is real until you own the ability that removes it.
The gate trigger. When the player enters, check whether they hold the required ability; if not, block or bounce them.
func _on_body_entered(body):
if not GameState.has_ability("morph_ball"):
body.push_back() # can't pass yetThe physical barrier (a breakable wall, a too-high ledge). Disable its collider the moment the gating ability is acquired — old areas open retroactively.
func _on_ability_gained(name):
if name == "bombs":
$Block/CollisionShape2D.disabled = trueThe ability set lives in GameState as flags. Traversal code reads it; nothing about the gate is hardcoded to a location.
var abilities := {}
func has_ability(a): return abilities.get(a, false)In short: Flag check on Area2D entry; locked areas return to traversable state when flag is set
19 catalogued game(s) use this mechanic, spanning 1986–2000.
▶ Explore Ability Gated Traversal interactively — see every game + the Godot system