Month: August 2025

It’s alive!! (Enemy Intelligence, 2/2)

Hello, everyone! The last two weeks were almost entirely devoted to enemy intelligence. It was a massive task. And I’m gonna tell you EVERYTHING.

I woke up at the first day and started gathering information about moving characters on predetermined paths. Within a day or two, I fully accepted the sad fact that there is no Godot plugin for this task in a 2D platformer. All built-in path features were very limited as well.

Needless to say, it took a lot of time and effort to build my own system to move an enemy robot around. I rebuilt its movement two or three times, tripled the size of its behavior tree, and built my first “tool” to help manage waypoints. Yes, I had to create my own waypoints. (I have to add that this system will work with future NPCs like a charm)

In a week and a half, the enemy robot was walking and jumping around using the most efficient ways. To my huge joy. So, let me tell you about the system I made:

  • Enemy patrols any territory you tell him to guard.
  • He will shoot the player if he sees or “feels” him. (You need to touch or stand close for the “feel” part)
  • The enemy will chase the player. He will also rush toward the player if he is hit by an arrow from far away.
  • And if he sees a flying arrow, he will rush to the place where it landed to investigate.
  • If the player is nowhere to be seen for a long time (“must be the wind” case), the enemy will resume patrolling as if nothing ever happened.
  • It’s nothing serious, but he stops shooting when the player “dies.” A rare detail in modern games. For some mysterious reason.

I don’t think such complex behavior is necessary in a porn game. However, I wanted to spend a couple of weeks making the enemies look “real” and somewhat smart. After all, players will be fucking them, right? [No more abandoned projects]

3
2

EI (Enemy Intelligence)!

Hello, everyone! I spent these last two weeks working on visual trinkets (sorry, but I really needed this) and creating basic intelligence for the enemy. It was cool, but very time-consuming. I learned a lot, though, so it was worth it!

First things first! I wouldn’t be myself if I didn’t feel the urge to make things prettier. I added a trail for a flying arrow. Yeah.

Now, when the main character stands still, there’s a “breath” happening. There are random micro-movements of the camera, up and down. I may be tripping, but this tiny detail adds a “vital spark” to the game’s overall perception!

I also added something I call “dust”. Tiny particles are emitted when the character runs, jumps, or an arrow hits the ground. They look like particles of the ground. They collide and have different colors depending on the color of the ground. Overall, they look quite good. Milky is super happy.

Then Milky spent a few days learning about save systems because he wanted to save the player’s game settings so they wouldn’t reset every time. Long story short, everything works like a charm now!

Finally, it was time for me to address the main goal – the Enemy Intelligence. For this purpose, I created a simple fight location. Then I reworked the basic enemy a little bit. Now, it can detect the main character and shoot energy orbs at him.

Next, I searched for a very specific plugin. A good enemy (and NPC, too) needs complex behavior. Plugins like LimboAi are useful for establishing a neat and tidy scheme for such behavior. However, after studying it for a few days, I decided to switch to the simpler Beehave plugin. It took quite (!) some time, but I managed to create my very first behavior tree, and it felt great!

While working with the LimboAi demo project, I examined their code and snatched something from it. Now, the entire “window” of my game works faster and more predictably. Thanks, LimboAi!

So, what’s next? I think the next two tasks are to learn how to create a real fight location with height differences. Oh, and I should probably give Godot pathbuilding a try! There’s so much to do… [No more abandoned projects]

2
1