Double Buffered

A Programmer’s View of Game Design, Development, and Culture

GDC09: From COUNTER-STRIKE to LEFT 4 DEAD: Creating Replayable Cooperative Experiences

Posted by Ben Zeigler on March 29, 2009

Here are my notes for the GDC Session “From COUNTER-STRIKE to LEFT 4 DEAD: Creating Replayable Cooperative Experiences” presented by Michael Booth from Valve. As a summary, half of the talk broad overview of the design of Left 4 Dead, and half of it was discussion of specific methods for achieving the randomized AI behavior. The first half was a rehash of various stuff I’ve read other places online, but the second half was all new to me:

Initial Design of Left 4 Dead

  • Why Left 4 Dead? The developers (at this point pre-Valve-purchase) identified a gap in the market for a cooperative shooter, and saw that it would be a good format for building a community around. They decided to fully commit to a game that requires 100% cooperation, and guide the design to fit that.
  • The entire survivor team was treated as a single player. This means that players should be happy if anyone makes it out alive, and the design needed to penalize players who abandoned their teammates. However, the team had to do this in a way that would feel natural, because artificial teamwork never seems to work with the somewhat cynical gaming crowd.
  • The zombie apocalypse setting was a logical solution to this problem, because “stay together or die” fits naturally with the fiction of the genre. Players already understood why they had to work as a team.
  • The team started with just zombie wanderers and hordes, and then they added in the special zombies to fix specific gameplay issues that arose from the original playtesting. The hunter was the mechanism for enforcing death to lone wolves. The smoker was designed to break up overly coordinated groups so they would still experience the fun of panic. The boomer was designed to make players think before firing.
  • The moments of incapacitation that special infected added were very useful in building cooperation. It forced players to work as a team, and gave them the opportunity to “be the hero”. It turned out players really ended up loving this mechanic, and it drove people to keep playing the game.
  • The Tank and Witch were designed to create points where the players would have to temporarily change their strategy completely, and were modal in the same way as a traditional boss.
  • The original goal of vocalizations was to help with situational awareness, but it was found that giving the characters personalities helped to create a sense of camaraderie. This encouraged players to work as friends, by working within the established social relationship of the existing characters.
  • One concept they discovered midway through was the importance of Dramatic Anticipation. Originally the Boomer was a bomb that exploded when shot, but this was found to be too penalizing to beginning players (they would shoot one and kill most of the team, which would then make the veterans ostracize them, killing the community). They changed it so the boomer would draw a zombie horde, which actually ended up feeling a lot cooler, because the dread/excitement that occurs when you wait for the horde to come. They then pushed that concept with other details, such as the car alarm and tank sound effects.

Structured Unpredictability

  • Overall the goal of gameplay was Structured Unpredictability. The basic idea is low probability + high drama = memorable. The goal was to create awesome possibilities that people would remember, but to keep it structured so players could learn some skills for dealing with specific situations when they did randomly arise.
  • A big part of this is the adaptive dramatic pacing. This originally came about from studying the pacing of CounterStrike. CS has a very “spiky” pace, where there are periods of quiet tension followed by extreme excitement. It was very unpredictable, but sometimes lead to dull games when both sides decided to be cautious. The goal of Left 4 Dead was to bring this pacing to Co-Op play, but without the possibility of boredom.
  • The algorithm for pacing first estimates the emotional intensity of the team. The solution they settled on increases intensity with damage received, and then decays over time if the players are not actively fighting. The algorithm uses the highest intensity of a single member of the team, as opposed to an average.
  • The 4 phases of dramatic pacing are Build Up, where it spawns things until someone hits high intensity. Then it sustains it for a bit, then fades it, then goes into “relax” mode for 35-40 seconds or until they reach farther in the map.
  • Basically, the system is always attempting to spawn things in Build Up, but if the players are in relax/fade it will refuse to spawn things, thus giving them a breather.
  • The specific method of spawning works by keeping track of an “active area” around the team. It then uses information in the pre-computed “navigation mesh” as well as the concept of “flow distance” which is how far along in the map the players are.
  • Normal infected spawn in areas that are currently not visible, and have NOT already been checked (so there is some gameplay advantage to searching. This was news to me). They normally spawn behind the players, to force them to keep going forward.
  • Special infected spawn in areas that are currently not visible, but CAN spawn in areas that have been checked. They often spawn ahead of the players.
  • Bosses spawn according to their own system. It splits a level into segments, and for each segment it will spawn a tank, a witch, or none. It never spawns the same thing twice in a row, but otherwise is just random and is not attached to the intensity system.
  • One important concept was that there are no preset spawns. Preset spawns force players to memorize spawns, which hurt cooperation by penalizing new players. Instead of preset spawns or complicated algorithms, it works via several layers of very simple algorithms.
  • Other new features that helped cooperation were changes to VoIP, an in-game instructor, voting to kick players, split screen play on the XBox360, achievements, and the new lobby system.
  • The robust survivor AI (derived from CS bot AI) was a huge win, because they could always balance for exactly 4 survivors, and the drop-in-drop-out play meant that setting up online games was much less irritating. Also, it was very useful for testing, because they could run a group of AIs at high speed to test out levels.
  • In conclusion, random internet players WILL cooperate if you provide the proper structure for them to do so.


  • Because their primary focus was on the cooperation aspect, gameplay features like ammo scarcity and multiple character classes ended up not as priorities. There is work that can be done here to add depth, but needs to be balanced against cooperation.
  • Michael said that all of the AI and balancing was a black box entirely controlled by software. He felt this was a problem now that they were part of Valve, and they were fixing it. (I’m not sure how bad this really is, as long as you have a responsive programming team)

The most important take aways for me were that Left 4 Dead implemented their entire dynamic AI system as a layered set of extremely simple, playtestable algorithms. Also, they put a lot of effort into designing to encourage cooperation and a healthy community (as opposed to prioritizing gameplay depth), which obviously succeeded given the size of the Left 4 Dead community. Also, the identification of the power of spiky pacing is something that I wish every game understood. This was a great talk, and I would recommend everyone check out future talks by Michael Booth.


3 Responses to “GDC09: From COUNTER-STRIKE to LEFT 4 DEAD: Creating Replayable Cooperative Experiences”

  1. […] 1:30PM: From COUNTER-STRIKE to LEFT 4 DEAD: Creating Replayable Cooperative Experiences: The Left 4 Dead director AI is one of the most exciting tech developments of the last year. Again, I love Valve (posted my notes) […]

  2. Great article and now I found your blog, which also looks cool. Thanks for this!

  3. […] Double Buffered coverage […]

Sorry, the comment form is closed at this time.

%d bloggers like this: