@Bimbam said:
I've not tampered with the FPS genre, but suspect 'realistic' behavior could only be achieved through manually defined waypoints that take the benefit of cover into account.
True. It should also take into account how enemies can work together as a team. It would be cool if enemy AI used move and fire movement tactics(AKA leepfroging) to pressure the player into behaving more aggressively.
Others may have more to say on the matter, but I suspect that 'good' FPS games are less about AI behavior being crazy complex and more about intelligent level design that enables emergent behavior from simple rules. Take the demon movement in Doom as a case study.
Funnily enough, the first FPS( and first game I made) had enemies that didn't even move from where they're placed and the game is still challenging. The level design would force confrontation between the player and the enemies. It didn't matter if the player ran away, because the enemies were literally preventing player progress. Even though the player had freedom to move around, I took influence from rail shooters. The game was more of a proof of concept more than a game proper. You can check it out right here if you want( it's completely free):
https://audiobellum.itch.io/project-genesis
I think unless you're going fully open-world, many FPS games stick to small structured rooms and scripted event-driven engagements. More I think about more I want to play with something .
It would be cool if you tried it out. The hardest part about making an FPS in Godot is the enemy AI and that's it. The YouTube tutorials on how to do everything else are generally great. Admittedly, I had to come up with a few ideas/solutions on my own. However, I'm sure that wouldn't be a problem for you. When it comes to Youtube tutorials, I recommend checking out Garbaj first, their videos are the best:
Still, they're tricks that you won't learn from their videos. For example, I had to come up with my own solution on how to merge old school weapon switching with picking up weapons. I plan to share how I did when I'm finish making my next game but, I think more experienced programmers might know how to do it too.