Acquiring an item or ability permanently increases a player capability that persists through death and save/load.
A Super Mario mushroom: grab it to grow big and stay big; a hit shrinks you back but you keep going — the power persists until it's lost.
A permanent powerup is persistent state that survives death and save/load — categorically different from a consumable. It's a flag or stat in GameState, never reset.
Hold permanent abilities and capacity boosts as flags/values that the respawn and load paths never touch.
var permanent := { "double_jump": true, "max_hp": 8 }
# respawn() restores hp but leaves this untouchedWrap permanent progress in a GameState resource so it saves as one object — the powerups travel with the save file.
class_name SaveState extends Resource
@export var permanent := {}
# ResourceSaver.save(state, "user://save.tres")Emit powerup_gained so abilities and gated doors react immediately — and stay reacted-to after a reload.
signal powerup_gained(id)
func grant(id):
permanent[id] = true; powerup_gained.emit(id)In short: Persistent boolean or stat modifier in GameState; does not reset on death; separate from consumable items
36 catalogued game(s) use this mechanic, spanning 1986–1996.
▶ Explore Permanent Powerup interactively — see every game + the Godot system