Enemy design
prototyping different types of NPCs with specific behaviors, strengths, and weaknesses

What is enemy design?

Enemy design is about prototyping different types of hostile NPCs with specific behaviors, strengths, and weaknesses.
Enemy design is often a complex collaboration between AI designers, programmers, character artists, animators, sound designers, etc. Which is far outside the scope of this level design book. Nonetheless, level designers must be able to conceptualize and theorize about enemy design, even if they're not the developers tasked with implementing the enemies.
For some enemy design examples, see Doom metrics and Quake metrics.
Enemy rosters can be surprisingly complicated and varied; monster sprites from Doom 2 (1994) by id Software

How to design an enemy

1. Define core stats

For most 3D action games, each enemy design needs to answer these questions, at least:
  • Health: how strong is this enemy, how long can it usually survive?
  • Speed: how fast does this enemy move? Slower or faster than the player?
  • Damage: how dangerous are the enemy's attacks?
  • Range / Behavior: does the enemy attack at close range or mid range / long range?
For an initial design, specific numbers are less important because these numbers will likely change drastically. It is enough to estimate "10% / 50% / 100%" or "low / medium / high", and tune the specific numbers later when you actually begin prototyping and playtesting.

HEALTH

How many resources must the player spend to disable this enemy?
Variations on health: armor / shields, stun / stagger
(TODO: Halo survivability)

RANGE / BEHAVIOR

For the 3D action game Skylanders: Spyro's Adventure, Activision-Blizzard designer Mike Stout talks about how the design team conceptualized 4 main archetypes ("Near, Far, Swarmer, Heavy") as well as their behaviors. He argues melee enemies by themselves are usually pretty boring, and ranged enemies are important for level design:
"Far Enemies are super simple, they're just dudes that shoot at you. But they're very interesting because environment matters [here]. When you have Near Enemies, since they can't attack you from far away, your environment doesn't matter at all: you got them up on a ledge, behind cover -- it's all the same as fighting on a flat plane. So adding Far Enemies to a setup, and mixing them with other types, means all of a sudden your level design is going to start to matter."
Variations on range:
  • Projectile design (speed, movement pattern)
  • Size (a small distant thing is harder to notice and attack vs. a big distant thing)

2. Blockout test arena

  • One big simple boxy room is often all you need, don't spend too long on this
  • For ranged enemies, also build raised ledge / gap / cover variations
  • Simple basic all-purpose pattern: iceworld 3 lane

3. Playtest enemy prototypes

  • Place some enemies and fight them
  • The enemies can be colored blocks and capsules that slide around
    • you can also use placeholder art and animation, pre-made assets
  • If possible, get console commands / debug menus for spawning even more enemies in-game at runtime

4. Tune enemies

  • fight enemies at least 3 times, then ask yourself: (playtest questions)

Enemy roster

Imagine we're making an action game. Here are some basic roles to fill on our enemy roster, the collection of enemy types and the combat roles they fulfill.
ROLE
BEHAVIOR
Grunt
Close range melee attack player straightforward, easy to pull
Squad
Attack from mid-range / long range, ideally take turns as a group
Leader
High survivability, buffs nearby allies somehow
Tank
High survivability, but slower and larger (easy to hit or avoid)
Swarm
Small fast attacker with low health but high close-range damage
Sniper
Slow weak long range attacker, very vulnerable without others
different Combine soldier designs from Half-Life 2 (2004) and Half-Life: Alyx (2020) by Valve Software

Balancing a roster

It can be useful to organize the enemy roster with a spreadsheet / matrix:
ROLE
SPEED
HEALTH
RANGE
DPS
Grunt
Medium
Weak
Close
Medium
Squad
Medium
Average
Mid
Low
Leader
Medium
Average
Mid
Medium
Tank
Slow
Strong
Close
High
Swarm
Fast
Weak
Close
Low
Sniper
Slow
Weak
Long
High
This can help balance the roster or point to gaps, but don't let the spreadsheet trap you into just one way of thinking. For example, in the matrix above:
  • Only 1 Fast enemy? Maybe Leader should be Fast too, to feel more different vs Squad?
  • There is no High-DPS Mid-Range enemy. Should there be? Would that be fun or useful?
  • Is this matrix design too simple? Do we need a Size column, a Behavior column? etc.
To analyze the enemy roster in an existing game: play many levels, and then make your own spreadsheet with your own columns.
  • What kind of terrain / placement works best for each enemy type?
  • Which enemy types work well together? Why?
  • Which enemy combinations are present in which levels?
the Grunt, Elite, Jackal, and Hunter are distinctive Covenant faction enemies from Halo 1 (2001) by Bungie

Enemy design advice

Some general industry consensus / advice on designing enemy types:
  • Diversity. Each type should feel different to fight, avoid similar enemies.
  • Hierarchy. Some types are weaker, some are stronger. Make this ranking clear.
  • Longevity. Types should not become obsolete. A weak early-game enemy should still be interesting later on, or a mid boss should transition to become a regular type, etc.
  • Emergence. Different combinations of enemy types should create different situations. The same tactics, used against each type in isolation, should be less effective.
  • Intelligence. Give the illusion of intelligence and different emotional states (afraid, angry, etc.)
    • "Smart" enemies should have high survivability / health, or else they'll die before they can show off how smart they are.
  • Consistency. Feel predictable, with clear patterns for the player to recognize and exploit.