There are three fundamental questions at the heart of designing enemies for an action game. The first is:
1. How will this enemy force the player to react?
Any enemy can be tuned to be deadly. In fact, overly lethal enemies are often a symptom of a poorly balanced game; nobody enjoys being flattened by an unstoppable steamroller. And any enemy can be crippled until it is merely a target in a shooting gallery. When a designer has run out of ideas for making an enemy fun, the fallback position is usually “bullet sponge”. The key to designing an enjoyable opponent for the player is finding a way to split the difference — forcing the player to react to an enemy without resorting to killing them.
To achieve this, it is important for the enemies to take the initiative and make the first move. Players will tend to repeat the same tactics over and over if they continue to work. By preempting their default strategy the enemy will challenge them to improvise, to think more strategically, or to experiment with new tactics.
- Disarm the player, or prevent them from using their primary attack
- Invade the player’s space, requiring them to start a fight before they are ready
- Use a special non-lethal attack that stuns or knocks the player around, preventing them from fighting back until they can counter it
Another good way to force the player to react beyond taking and dealing damage, especially in shooters, is to force them to move. By making the player aware of their environment — the connectivity of the space and their physical relationship to their surroundings — a well-designed enemy can greatly increase the strategic depth of combat.
- Attack from a range that is outside or inside the player’s optimal range
- Deny the player use of an area (as with a long-fused grenade) forcing them to move to a different area
- Take cover behind an object, requiring the player to switch positions and flank them
- Charge to melee range, so the player must retreat or change weapons
Another way the player can be made to react is by changing something significant about the fight so they have to re-prioritize their targets or switch tactics. This change doesn’t have to be immediately dangerous, it just needs to tilt the battlefield in a new direction.
- Begin a devastating attack with a long wind-up that can be interrupted
- Perform an attack that ends in a temporary vulnerability that the player will want to exploit
- Allow the player’s current target to quickly withdraw or become invulnerable, removing themselves from the fight temporarily
Another tool for causing a reaction that is often overlooked is dialog or dramatic behaviors that don’t serve a combat function, but can still influence the player and cause a reaction.
- Taunt or mock the player to incite anger
- Announce an upcoming action (like reloading) to draw the player’s attention
- Threaten or attack one of the player’s allies, giving them a chance to be a hero
Far from being a secondary concern to be considered after an enemy can already fight well, these non-lethal interactions with the player should be designed first and receive the most attention. Once the player is engaging an enemy with their mind — and not just their fingers and their weapons — they will be having fun. At that point it is easy to make them more or less lethal as the balance requires.
You touched a little bit on this in the post about allowing the player to perform actions that they assume they should be able to do… The best part about fighting enemies is not memorizing their attack cycles and such but when you see an opportunity to do something truly badarse to them and it works. Example: Bad guy wearing grenade bandoleer + I wonder if I could shoot those instead of just aiming for the head like always = *Boom* + *Grins*. I suppose its too hard to code stuff like this for generic enemies. Seems like only Boss fights try and get you to find an alternative.
How much do you think this is driven by poor game design versus limited resources? I think this is a great list, and could easily see a game designer coming back to refer to it for ideas. But for a lot of the items, I think “Well, that’s probably going to require way more work from the AI programmer, animation, etc.” Especially so if you are implementing many different ideas from the list. The real challenge is finding ways to make interesting enemies that are relatively inexpensive in development resources, for teams that are more constrained. That said, I can think of a few games made by large studios that definitely have the resources, but still have totally uncreative and repetitive enemies.
In the long run, good design _saves_ time and resources. Two or three well-designed behaviors that force the player to react and work well together are enough to make a character fun. Rather than experimenting with dozens of “quick and dirty” behaviors that are indistinct and don’t always work, a good paper design will cut directly to what is important. Sure, those two or three behaviors are going to be more expensive to create, but there can be fewer of them and production work goes a lot faster when there is a clear vision.
The scheduling problems stem from designers that ask for complicated, custom behaviors without a clear idea of their objective, and then try to iterate to something that works. Designers should reserve the shotgun approach for paper designs which are easily changeable, and only proceed forward when they have a solid plan.
You’ve got to be careful with this though; enemies that put players on the back foot pace the experience, unless players find ways to mitigate their effects. More specifically, they raise the tempo of the game to the minimum of that required to deal with them, the moment they start interacting.
Games like serious sam or doom 3 deal with this by placing triggers that players will naturally use in the course of the game. Allowing players a breather where no enemy is on screen. The causal relationship between the trigger and the enemies is however quite obvious: Hit the switch-> hoards of enemies come at full speed.
There are alternatives, like Deadspace’s freeze power, but that is also pretty all or nothing (and a restricted resource). Another alternative might be to judge how slowly a player moves between designated checkpoints, and have ways to choke off the speed of enemies to compensate.
One way to do it is simply by disposition, a set of AI variables tied to smoothly scaling audio cues, that themselves are set by the current game pacing. If the player is cagey, monsters are similarly stealthy, quiet and calm, but also slow, only scaling up when battle is joined.
In this way AI is simultaniously active and reactive, it acts, but at a speed dependent on the player’s own actions, either via “game experience” models or world simulation.
You’re intent for this would be another thing of course; do you want to always pace a little faster than the player? Mostly fit with them with random noise either way? Multiply it by factors giving patterns of rise and fall associated with the plot? Or to differentiate different environments? etc
This is a great post, Jaime, thanks.
When working on each individual AI design, this seems like a very smart question to build around, but have you ever found that it becomes detrimental when a variety of AIs are introduced to a combat arena with this question applied?
If we take a few of your examples…
Enemy A performs this — “Disarm the player, or prevent them from using their primary attack”
Enemy B performs this — “Use a special non-lethal attack that stuns or knocks the player around, preventing them from fighting back until they can counter it”
The combination of these attacks could create a pretty severe, extended moment of anxiety for the player, and in most games you probably wouldn’t want to stack or stagger those… Assuming that is the case, you would almost have to enforce mutual exclusivity between Enemy A and B being in the same combat arena at the same time. Have you ever had to deal with that?
In my experience, two things mitigate this problem. First, none of these abilities is unavoidable. There is the _threat_ that an enemy will disarm you, but in practice it is rare and preventable if the player is careful. Second, in a force with mixed units, not every enemy needs to be able to stymie the player. In Halo, the Grunt AI relies on the Elite to be the real threat and supports them in that roll. Very few Halo behaviors take the actions of other AI into account when determining if they should activate or not.