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.
Then I learned how to enable communication among the players. That is, I implemented an AI messaging system:
I then improved the AI to analyze defending strategies:
Improved the AI to take into account all 22 players on the field:
I also cleaned up the AI architecture:
Finally implemented a pathfinder algorithm:
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.)
I improved the rendering efficiency of the engine by implementing Frustum culling with a BVH tree algorithm (Beta-v0.0.6).
In version Beta-v0.0.7, I implemented a particle system, which 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 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.