Solo Developer on Recreating the Late-'90s Console Shooter Enemy AI for an FPS
Replicant D6 spoke about the retro FPS Agent 64: Spies Never Die, detailing what he wanted to preserve from the late-'90s shooter games, how he designed the enemies and how they work, and explaining why he prefers readability over intelligence in terms of combat.
Agent 64 deliberately recreates a specific era of console FPS design. What did you most want to preserve from those late-'90s shooters?
It's a combination of two things that truly made those games unique. The way the shooting feels is very distinct and hasn't been done in decades. And the mission structure and progression are singular in how they create strong replay value.
You describe the enemies as having "cutting-edge AI straight out of 1997." What behaviors or quirks from that era were essential to making Agent 64 feel authentic?
The slow reactions and animations of the enemies gave you plenty of time to move around and react. Apart from that, the AI of the time is barely less than what we still encounter today. Quality NPC behaviors are more dependent on designers' creativity than on any real hard technical limits.

Modern hardware lets you build much smarter enemies. How did you decide where to improve the AI and where to intentionally preserve old-school limitations?
If cornered, lone characters will sometimes panic and seek the help of friends who are in other rooms. I kept the animations very obvious so that they fit with classic exaggerated movements that this kind of AI requires.
Can you break down how an Agent 64 enemy works under the hood? What can guards perceive, and what different behavioral states can they enter?
Like most FPS enemies since Doom, the Agent 64 enemies have vision and hearing. They can either taunt, attack, or seek teammates upon detecting you. I had to somewhat limit their ability to perceive things or rally because otherwise they would all alert each other across the entire map.
Classic FPS enemies were often highly readable. How did you balance predictable, understandable behavior against making enemies feel intelligent and reactive?
Simple: I didn't try to make them intelligent. The real trick to fundamentally fun combat is not to make enemies actually intelligent, but to instead make them easily readable while still having a degree of unpredictability.
Animation was a huge part of enemy personality in games like GoldenEye, especially exaggerated hit reactions. How closely are animation and AI behavior connected in Agent 64?
Obviously, I couldn't create the same kind of overly flowery and detailed death animations as those Rareware games. So instead, I just focused on how it felt and made much snappier animations. Kinda like how modern action movies don't overdo it compared to older ones.
Higher difficulties add objectives and expand missions rather than simply increasing enemy health or damage. How does enemy behavior factor into making those harder versions feel different?
Enemies react and can sometimes change their own goals when you have certain objectives. Depending on the difficulty and objectives, they will prioritize different targets or sometimes even change allegiances.
As a solo developer, what tools or systems did you build to efficiently create patrols, encounters, and different AI configurations across the campaign?
That's my own secret sauce, the way I program state machines and handle it. The game is made using Unity, but most of the logic code is entirely custom; no third-party plugin was involved.
After recreating this style of enemy AI, what do you think modern FPS developers could learn from the way shooters handled enemies in the late '90s?
Always give the player some heads-up. Always give an opportunity to react before being dealt damage. Even if the opportunity is very short. It should always be possible, and feel possible, to finish a level without taking any damage.