Behavior trees give developers a composable, readable way to describe complex NPC logic. Rather than hardcoding every possible situation, a designer builds a hierarchy of conditions and actions that the NPC evaluates from top to bottom. Players who encounter sophisticated enemies in games through we 999 are often experiencing behavior trees in action — structured systems that produce nuanced, contextually appropriate responses from a well-organized set of rules.
Unlike a flat list of rules, a behavior tree is hierarchical. Nodes at the top handle the most important decisions; subtrees below handle the specifics. This hierarchy makes it natural to express priorities: the NPC checks for danger first, and if none exists, proceeds to normal activity. The structure maps closely to how designers think about character logic, which is why behavior trees are widely used in modern game development.
Core Node Types
Sequence
Runs child nodes in order. Stops and fails if any child fails. All must succeed for the sequence to succeed.
Selector
Runs child nodes in order. Stops and succeeds when any child succeeds. Useful for trying alternatives.
Task / Leaf
The actual action or condition check. Moves to a location, fires a weapon, or checks whether health is above a value.
A Simple Patrol-and-Attack Tree
Selector
Sequence (Combat)
Condition: is_player_detected?
Condition: is_player_in_range?
Task: attack_player
Sequence (Chase)
Condition: is_player_detected?
Task: move_to_player
Sequence (Patrol)
Condition: has_patrol_points?
Task: follow_patrol_route
This tree first attempts the Combat branch. If the player is not detected, both conditions fail, so the selector tries Chase. If detection is true but range is not, it falls through to Chase. If neither combat nor chase applies, the NPC falls to its default Patrol behaviour. The selector naturally prioritises the most specific and urgent action.
- Sequences implement compound conditions: all steps must pass for the branch to succeed
- Selectors implement fallback logic: try the preferred action, fall through if it fails
- Subtrees can be reused across different NPC types, reducing authoring work
- Tasks return success or failure, letting parent nodes know whether to continue or try alternatives
Behavior trees organize actions into structured decision paths, but characters sometimes need to compare several possible responses before choosing one. Utility-based AI supports this process by scoring available actions according to factors such as danger, distance, and resources.