As alluded to yesterday, I’ve been feeling somewhat off of my game recently. The good news is that, while I thought there were two major bugs in the collision detection system, they may have had a common cause since fixing one appears to have fixed the other. I won’t quite commit to saying the collision detection is done, and I definitely won’t say it’s perfect, but it may be at a quality suitable for a finished game. I’ve seen worse in released games, for what that’s worth.
The bad news is that I haven’t gotten much more than that done this week. I spent a day tidying up and making minor improvements to my first simple enemy type, and since then I’ve been nibbling around the edges of creating a second far more sophisticated enemy type. This enemy needs to have some basic understanding of its environment to do some minor navigation, and that kind of generalized perception, as easily as it comes to us humans, is a real bitch to program. I’ve got a simple line of sight function which re-uses a bunch of collision code which I can now use to detect whether the enemy sees the player or not, but the hard part is trying to get this enemy to get close to the player so it can attack without getting stuck on terrain or falling into a section of map it shouldn’t be on.
Honestly, I don’t think many 2d platformers have enemies with this kind of behavior, which is something I’ve been thinking about. Is this kind of behavior rare because it’s difficult to implement, or because it’s unnecessary, or because it’s unfun? I feel like adding some basic navigation will make these enemies feel a lot more alive and interesting, but at the same time it’s sometimes important for enemy behavior to be simple and predictable in games so the player doesn’t feel like the carpet’s being pulled out from under them. Realistically, there’s probably no way to ensure that this will work aside from just implementing it, but that means that if it ends up being shitty I’m out a lot of work hours.
Oh well. We’ll see, I’m pretty sure it will work in some form; as with most such things, it depends on the execution of the idea more than the idea itself.