Items are permanently destroyed or depleted on use; scarcity creates tension and opportunity cost.
Items are destroyed on use: as HP drains the hero drinks a potion to refill it, permanently spending that potion until the pouch is empty.
Consumability is one rule layered on inventory: using an item depletes a counter and, at zero, removes it. Scarcity is the whole design value.
Give ItemData a uses field (or a boolean for single-use). The item carries its own depletion state.
class_name ItemData extends Resource
@export var id: String
@export var uses := 1 # torch = many, key = 1On use, decrement and drop the item when spent. No recovery path is the point — the choice to spend is irreversible.
func use(item):
item.uses -= 1
if item.uses <= 0:
items.erase(item) # gone for goodEmit item_used so effects fire and the HUD updates the remaining count, keeping scarcity visible.
signal item_used(item)
# torch dims, stimpak heals, key opens doorIn short: ItemData.uses counter or boolean; remove from inventory on use; no recovery
32 catalogued game(s) use this mechanic, spanning 1980–1999.
▶ Explore Consumable Items interactively — see every game + the Godot system