On finnicky AI decisions: In an escort level we've been showing off, the player has to accompany a pilot character in a vehicle. We originally had the pilot sit in the same vehicle as the player, and would automatically switch seats: If you were on the gun turret, he would take the driver's seat, and vice versa.
We ran into a problem there: If you decided to leave the vehicle, what should he do? Should he get out of the vehicle as well, and follow you on foot? Should he keep driving? We tried having him mimic what the player was doing, but players do the weirdest things.
Some players decided to swim across the bay, and then the pilot would follow and be attacked by a shark and die, and then the level would end because he's a story character, and the mission requires him not to die. He's hard to kill, but he can be killed -- you just have to work at it.
There, we were telling players, "Do whatever you want," but the moment they got out of the vehicle and into combat, enemies started shooting at the player, and very often the player would get a failure message without knowing why. That was the result of situations like an enemy throwing a grenade at the player, the player dodging it, and the pilot attempting to follow the player and step directly onto the grenade. Bam, he's dead.
We eventually decided to add another vehicle for the pilot to control on his own. From a design and programming standpoint perspective, we could make that vehicle a bit more invincible. It's not impossible to kill, but it's harder.
It also allowed the player the alternative options we originally wanted, without the confusion: If the player wants on-rails action, he can just jump onto the pilot's vehicle turret and have fun.
That experimentation actually took about two months of design iteration, but it was very valuable. By making that simple decision of plopping the pilot into his own vehicle, we allowed the player more choice. The player can be in his own vehicle, on foot, or in an on-rails experience. To make sure the player knows that, if you leave your vehicle and stay outside, he eventually calls you over the radio and invites you to jump into his car.
On the importance of design iteration: The implementation we achieved in Warhead for these sections is not perfect, but I believe it's very important to try and explore that kind of "implied freedom," as we call it. The player can do whatever he wants, but the art of game design is to subtly suggest to the player what he should do.
The curse of AI design is achieving, "Do as I want, not as I say." AI has to try and anticipate what the player really wants: Does he want to get on the gun? Does he want to drive? Did he just get in by mistake, and then exit the vehicle? Should I wait? Should I keep driving? That's a nightmare for AI programmers and level designers.
Our original implementation wasn't smart enough to recognize when the player wanted to catch up to the pilot, so we ended up in a situation where the player was running after him, and as soon as you got close, he would drive a bit more. You ran after him again, and he drove a bit more, and so on.
We eventually needed to create a rule for the pilot that allowed him to find a safe spot where no enemies were shooting, wait for the player, wait long enough that even if the player is clumsy he has long enough to get into the other vehicle, and then keep on driving.
It's important to explore these possible things a player would want to do, and try to design them to their logical conclusion, even if it's causing developers a lot of pain and effort to do so. To just stop and say, "That it, just lock the player in the vehicle!" is the easy way out, and you should avoid that if you can.