The mistake I made as a game engine developer

I have made several mistakes as a game engine developer. However, there is a significant mistake I did in 2017 which I want to share with you.

At the start of 2017, I decided to put the game engine (Beta v0.0.4) to the test by developing a soccer video game. I wanted to test the limits of the engine, and a soccer game allowed me to do so. For instance, a soccer video game makes use of 3D animations, collision detection, rendering efficiency, etc.

At first, developing the game was fun. I learned about Artificial Intelligence, Graph Theory, how to develop a messaging system among the players, Dijkstra's algorithm, etc.

Here are some videos that show the evolution of the game:

First I learned how to control the armature of a 3D model as it is animated. In this case, managing the kick animation as it is about to kick the ball. If you are interested how I did this, read this article.

 
I'm currently developing a soccer game using my game engine. This is part I of the development. The video shows a player dribbling and chasing after a soccer ball.
 

Then I learned how to enable communication among the players. That is, I implemented an AI messaging system:

 
This video shows the second part of development. It shows the players able to pass the ball among themselves.
 

I then improved the AI to analyze defending strategies:

 
Video showcasing part 3 of the soccer video game I'm developing using my engine. The video show cases the blue and red teams in attacking and defending mode.
 

Improved the AI to take into account all 22 players on the field:

 
As you can see in the video, I implemented most of the 11 players per team. I'm only missing the goalies. Goal posts were added to the game and performance issues were improved.
 

I also cleaned up the AI architecture:

 
This is the fifth update to the game. This month I focused on cleaning up the AI architecture of the game. I also implemented a player indicator to help point out the dribbling and defending player.
 

Finally implemented a pathfinder algorithm:

 
Implemented a pathfinder algorithm that provides a player a path towards the goal. (Notice how the white jersey player drives the ball towards the goal).
 

Implementing a video soccer game was fun but also time-consuming. In particular, creating the dozens of animations required for smooth gameplay. For example, you need to create a kick, passing, running, defending, halting animations, etc.

Developing the AI for the game took a lot of time. The AI is by far the most complicated aspect of a soccer game, and I spent a lot of time implementing it.

However, six months after I started working on the game, I stopped. I stopped development once I realized that I had lost focus. My goal has always been to develop a 3D game engine. I thought that developing a soccer game will help the engine. However, it didn't. Instead, I lost six months of development.

I learned a valuable lesson:

Do not test the engine with games that require complicated Artificial Intelligence. Instead, develop simple games that strategically test the engine's efficiency and response.

If you want to test the limits of your engine through complicated games, go ahead. But if you are an indie-developer like me, keep in mind that you have limited resources and that you have to be strategic about your time.

Ever since then, I've been focused on the engine again.

In version Beta-v0.0.5, I ported the engine to use the Metal API. (Since I already had the soccer game, it seemed convenient to use it for testing.)

 
This video shows the game engine using the Metal API for its rendering operations. The game engine no longer uses OpenGL.
 

I improved the rendering efficiency of the engine by implementing Frustum culling with a BVH tree algorithm (Beta-v0.0.6).

 
Improved the rendering efficiency of the game engine by implemented Frustum Culling + BVH tree algorithm.
 

In version Beta-v0.0.7, I implemented a particle system, which can generate smoke, explosions and other particle types.

 
Added particle system to the engine. The engine can generate smoke, explosions and other particle types.
 

In version Beta v0.0.8, I fixed memory leakages and improved the rendering-ordering algorithm.

 
In version v0.0.8 of the game engine I fixed some memory leakage issues and improved the rendering-ordering algorithm.
 

In the upcoming version, which I hope to share with you in a couple of weeks, I significantly improved the collision detection system of the engine.

As indie developers, we have limited resources and its crucial that you are strategic about them. I lost six months of development for not analyzing the impact a complicated AI game will have on the engine. I hope you don't make the same mistake as I did.

Thanks for reading.

Harold Serrano

Computer Graphics Enthusiast. Currently developing a 3D Game Engine.