on Aug 3, 2016
The problem of making smarter stealth mechanics is that it’s kind of like trying to straighten out a bit of poorly-placed wallpaper. You smooth out a bubble, and it pops up elsewhere. So you smooth that out, and now you have two bubbles. You never really get it right, but eventually you get it to the point where the flaws are small enough that you’re willing to put up with them because you’re sick of the task.
Laying aside the mechanics, the big problem for immersion is that foes don’t say the right things in response to stealthy activity. The problem becomes more pronounced when you have spoken dialog. It creates unintentional comedy when the AI barks don’t match up with our perception of reality. For example, in Skyrim you can hit a bandit with an arrow. He’ll run around looking for you furiously, then give up and go back to his patrol. Mechanically, that’s fine. The problem is that he says, “It must have been the wind” with an arrow sticking out of his shoulder.
There’s a lot to keep track of here. Let’s assume we’re trying to fix the Skyrim / Fallout 4 stealth mechanics. An AI is presented with some stimulus (something happens that ought to cause a change in behavior) and we need to work out how to handle this gracefully. Aside from the problem of having an AI navigate an arbitrary space and search for the player in an interesting way that provides challenge without obvious cheating, we need to have our AI say things that don’t make them sound like stupid Bethesda AI.
So the stimulus is presented. The AI can’t SEE the player, but something happens that indicates that the player might be active nearby. Now we have to consider:
- Is this stimulus clearly threatening, or merely suspicious? Threatening is stuff like gunfire or discovering the body of a dead ally. Suspicious things would include hearing traps go off, suppressed gunfire, lights or doors changing state, and random environmental noise.
- Has the AI clearly spotted the player previously? Obviously it doesn’t make any sense to conclude “It was just the wind.” when you were chasing the player around in the dark five minutes ago. Once an AI has identified a genuine opponent, they should be in some different type of state that prevents them from ever attributing unknown events to the wind.
- Has the AI suffered (known) casualties? An AI shouldn’t be smug and satisfied that the player “ran off” if the player has killed a half dozen alliesSure, you can excuse this by saying bandits are just apathetic about each other. But this AI isn’t just used by bandits. It’s also used by town guards, Brotherhood, Railroad, Vaults inhabitants, etc.. If there are no casualties, then resetting to default patrol state should come with dialog indicating relief. But if the AI has lost friends then the dialog should convey anger or frustration.
This isn’t a list of three different states, this is a matrix of states. The state of looking for a (possible) threat in response to a mysteriously open door (could have been the wind) should be different from the state of looking for whoever just fired a gun a second ago (was definitely NOT the wind) which should be different from the state of looking for the source of a suspicious noise when three of your bandit buddies have already turned up dead, which should be different from the state of hearing a definite intruder but concluding they have escaped without inflicting harm. Every bandit voice needs multiple barks for each of these states. They need barks for entering, the state, for being in that state, and for when that state ends and they return to their default behavior. You may also need an additional set of barks from moving from this state into open combat. For example: “There you are!”
But if we fixed that, then players would just notice how the AI hilariously doesn’t take notice when all of the valuables mysteriously vanish from the room they’re patrolling. And if we fix that by having the AI notice missing items, then players will laugh because this AI freaked out and drew his gun because the player picked up some garbage off the floor. So then you fix that by coming up with different item classes that the AI should and shouldn’t care about. But then we’ll laugh because the AI notices that someone swiped his baseball cap but he doesn’t notice that Bob has mysteriously vanished. So then you fix that by having the AI notice when allies vanish. But there are about a half-dozen ways to do that, and all of them lead to still more goofy behavior. (Ex: How come this bandit magically knew Bob was “missing” when he walked into the room? It’s possible Bob simply exited through the other door!)
This is not to say it’s not worthwhile to try. Only that it’s possible to spend a lot of time and resources on a problem and yet make no discernible (to the player) progress. If I was appointed King of Fallout Development, fixing the idiot AI would be low on my priority list, simply because that money could be spent elsewhere for stronger results. (Like a dunk tank for the writing staff to sit in when they bring me story suggestions.)