Artificial Intelligence in
Game Design
Lecture 3:
Representing NPCs as
Finite State Machines
Finite State Machines
• Non-player character in one of several possible
states
– Must be some initial state
• That state controls actions taken by the NPC
• Transitions to other states caused by
internal/external stimuli
Current State
Stimuli
Another State
Stimuli
Another State
Actions in
current state
“Guardbot” Example
Chase
Patrol
Move back and
forth in front of door
Energy at 100%
Move towards player
Player visible Energy = Energy - 1
Player not
visible
At door
Energy
below 50%
Return
Move towards door
Energy = Energy - 1
Pac-Man Example
Finite State Machines
• Note: Each state can be reflex agent
Example: “fight” state
Fight
Player swings Raise shield
Player waits Swing sword
Player moves Move towards player
Run
Hit points < 5
Designing FSMs
• What different things does NPC do?
– Types of action taken
• Chase, wander, etc.
– Steps in some process
• Get food from fridge Cook food eat food
– Can include “terminal” state
• Object destroyed and deallocated
Return
Move towards door
Energy = Energy - 1
Energy == 0
Dead
Implementing FSMs
• Can treat each state like a C++/Java class
– Possibly derived from some base “State” class
• Typical methods in class:
– Enter()
Executed once when state entered
Example: entering “Fight” state causes NPC to select weapon
– Exit()
Executed before go to another state
Example: exiting “Guard door” state causes NPC to lock door
Implementing FSMs
• Typical methods in class:
– Update()
Executed by the game engine each frame
while NPC in this state
Example: reflex actions taken by NPC in “Fight” state
– int CheckTransitions()
• Executed by the game engine each frame
while NPC in this state
• Returns the number of the next state to enter
based on current stimuli (same as current state if
no change)
Implementing FSMs
class Chase extends State {
int stateNumber = 1; // Patrol = 0, Return = 2
public:
void Enter() {say(“intruder alert”);}
void Exit() {say(“intruder has escaped”);}
void Update() {
moveTowards(player.getLocation);
if (rand() < 0.3) say (“exterminate”);
energyLevel--;
}
int checkTransitions() {
if (energyLevel <= distance(location(door.getLocation)) ||
distance(location(door.getLocation)) > 10) return 2;
else return 1;
}
}
Emotional FSMs
• States represent emotions for character
• Actions express emotion
• Stimuli change emotional state
Player HP < 10
Confident
Angry
Small hit by player
Heavy hit
by me
Heavy hit
by player
Frightened
My HP < 10
Emotional FSMs
• Can combine with action states appropriate to emotion
– Looks more realistic if orc displays fear before running
Player HP < 10
Confident
Angry
Small hit by player
Heavy hit
by me
Heavy hit
by player
Frightened
My HP < 5
Running
My HP < 10
Emotional FSMs
• NPC must clearly express emotional state
– Facial expression (difficult in low resolution)
– Body language
• Posture, motion, etc.
– Sound (speakers must be on)
• Spoken phrases
• Sounds (growl, etc.)
– Abilities
• Strong emotion might make character less accurate!
Emotional FSMs
Confident
Angry
• Smiles
• Shouts insult
• Stands ground
• Growls
• Frowns
• Faster attack
• Less accurate
Fearful
• Backs away
• Grimaces
• Slower attack
Timeouts in FSMs
• Problem: Abrupt transitions in FSMs
Example:
– As player approaches, NPC jumps back and forth
between “Walk around” and “Run” states
Timeouts in FSMs
• Solution: State “timeouts”
– Continue high-emotion states for fixed amount of time
after stimulus gone
• Keep running for time even after at safe distance
• Supported by evidence from biology
Timeouts in FSMs
class Run extends State {
int timeout;
void Update() {
Flee(player.getLocation());
if (distance(location, player.getLocation()) < 5)
timeout = 10;
// run for 10 frames even after escape)
}
int CheckTransitions() {
if (timeout > 0) {
timeout--;
return 1; // stay in run state
}
else return 0; // go to walk around state
}
Weaknesses of FSMs
• Abrupt transitions between emotional states
– Confident Terrified not a realistic transition
– May need more intermediate states
Confident Worried Terrified
• Multiple next states may be indicated by stimuli
– Must make sure all are mutually exclusive
Within 1 unit
Attack
Chasing
Energy < 10
Return
© Copyright 2026 Paperzz