With single player campaigns of first-person shooters expected to last 10h, it's important for the enemy soldiers to exhibit diverse behaviors. You don't want your players getting bored! When there are many enemies on screen, and multiple waves descend on the player's position, this can particularly be a problem. How do you add more variety and diversity to the AI's combat behaviors?
As Jay Wilbur once said, "Level Design is where the rubber hits the road." No matter how great your programming or how well designed your NPC behaviors, a level designer can make your work look like the most terrible or amazing AI ever built!
An AI's decisions are only as good as the information it gets, so for things like tactical and strategic reasoning influence maps are a critical component. They help not only at the individual level for picking positions, but also deciding where to attack or build bases. In fact, it's safe to say the more you use influence maps at all levels of your game AI the better it will be overall!
Increasingly, emergence is not enough to build compelling gameplay experiences. You need some kind of monitoring of the player's behavior, allowing you to controlling the game's flow towards states that you know to be fun. That's where AI Directors come in, providing a layer of adaptive logic that improves upon near-random experiences.
While many games use procedural generation of geometry to reduce the workload of artists, more developers are experimenting with procedural levels for gameplay reasons. This is something that classic games on older platforms did regularly, however as Soren Johnson (Lead AI & Gameplay on CIVILIZATION 4) said recently: “I'm afraid it's becoming a bit of a lost art.”
Fixing bugs remains one of the most time consuming tasks for game developers, and no matter how careful you are with architectural choices or automated testing, problems will creep in at the worst possible time! In terms of AI, decision making processes are often quite complex, and as such, debugging AI often requires significant help from debug visualization.
AI programmers have been applying variations of utility systems for decades, and in many cases the problems are so simple it's not worth thinking twice about! However, it's extremely useful to spot utility-based decisions patterns in your code so you can use common techniques when trying to extend your AI — or simply prevent problems later on in the project.
Finite state machines (FSM) are used very often in games, more so than any other approach. But is the graph representation more useful than the control technique itself? How can we leverage that without the usual disadvantages?
Building an AI that doesn't oscillate or ignore important events can be quite a challenge in practice. However, looking the AI from a different perspective can often offer some new design insights on such problems, for example by considering points in-between behaviors. Watch this design masterclass about decision boundaries and find out why it was called "mind-opening" by multiple attendees!
Building behaviors for a game or simulation is an incremental process involving both the building blocks at the C++ level, and the way they are combined to create the AI. A key part of this process is reviewing and improving the code and the behaviors — and figuring out what the next iteration should be.