Spending accumulated resources or turns on a branching tree of options unlocks new units, buildings, or abilities.
Accumulated science unlocks a branching tree of nodes, one prerequisite at a time.
A tech tree is a dependency graph of cost-gated nodes. Completing one sets an unlock flag that other nodes (and unit-builders) check. It's flag gating with prerequisites and a price.
A ResearchNode resource: cost, the nodes it requires, and what it unlocks. The whole tree is authored as data.
class_name ResearchNode extends Resource
@export var cost: int
@export var requires: Array[String]
@export var unlocks: StringCompleted-research flags. A node is researchable only if every prerequisite flag is set and you can pay — then it sets its own flag.
var done := {}
func available(n):
return n.requires.all(func(r): return done.get(r, false))Emit research_complete so production menus reveal the newly unlocked units/buildings the instant the tech lands.
signal research_complete(unlocks)
func finish(n):
done[n.unlocks] = true; research_complete.emit(n.unlocks)In short: Tree of ResearchNode Resources; each node checks prerequisite nodes and resource cost; completion sets unlock flags
11 catalogued game(s) use this mechanic, spanning 1990–1999.
▶ Explore Research Tree interactively — see every game + the Godot system