Alright, today I went ahead and posted the entire contents of my private developer log, so most of the posts in this blog will make little to no sense. That is to say, most of the blog posts before today were written for my own use as opposed to making it very clear how exactly the game engine was developed. The log entries will provide some kind of insight as to what I was thinking, but most of the posts make references to parts of the game engine that have never been explained elsewhere on this website.
The truth is, that I don’t even know where to begin on explaining the development of this project. The game engine is so complex that I don’t even really know how to explain it. Quite frankly, it boggles my mind that it even works.
In 2006 I started a game engine called the Legacy Game Engine. This was supposed to be a 3D game engine intended for development of a point and click adventure game similar in design to ”Gabriel Knight 3”. I always intended to develop a robust game engine that would be easily mod-able in the way that the ID Software game engines are mod-able. In doing so I ended up creating a game engine that was so badly designed that I didn’t even know what to do with it, but I did get a few ideas from my failures in developing the Legacy Game Engine.
When I started developing a game engine, I knew very little about game engine design. I had a few reference books on Direct3D, all with titles like ”Direct3D Game Programming”. None of them, however, really covered anything about game development. They were all about how to draw a triangle on the screen. That was all well and good, except I wanted to make a game, not just draw some graphics. Interestingly enough, the best help I had in actually developing a game engine was a book by Ian Parberry called ”Introduction to Computer Game Programming With DirectX 8.0”. This book was a tutorial on creating a game engine in 2D using DirectDraw, but more important than that, it was a guide to the architecture of a game engine, and most of it’s techniques were applicable to 3D. There are so many books on advanced graphic techniques, but before advanced graphic techniques even matter, I needed to develop a game engine that actually had objects in it. This book helped me with that process. I actually first read Parberry’s book back in 2001, and I developed a 2D side-scroller game engine called ScrollGIN.
In 2009 I realized how bad the Legacy Engine was in terms of unreadable code, and inefficiency, and I scrapped the entire project, and nearly started from scratch. I had learned a lot of important skills, and realized a lot of places where I went wrong, but almost four years of work was thrown down the drain. Granted, when I say four years of work, I mean four years of ”spare time” work. I’d been working and going to school the whole time, so I was putting in maybe an average of one or two hours a week (that is about 0 hours per week when I was in school, and more during summer vacation), so it wasn’t exactly four years worth of eight hour days of work. Still, I had thrown out all that work and started fresh.
The Emergence Engine has been a difficult project to work on. It is so massive in scope, that my biggest regret is that I did the whole thing by myself. I now understand why teams work on games. They are too big a project for one person to take on. There is way too much involved. Even if I could have had just two developers, one for the client side of the game engine, and one for the server side, it would have been a lot easier to develop this project. Not to mention the fact that all the art and other assets in the game engine were also developed by me. Let me give an example of how much work that is. I recently developed doors for the game engine. To even begin developing a door I had to create a mesh for the door. Then I had to skin the mesh. 3D modelling is one job by itself. Skinning could possibly be a second job. Then I had to create the entity definition file for the door. This is a programming job, but it is a simple programming job that could easily be done by someone more comfortable with the word “scripting” than programming. (An entity definition file is an XML file, so event the scripting isn’t that complex.) That, again, is another job right there. After that I had to write the AI for the door, but before I could do that I needed to modify the AI implementation in the game engine to meet the requirements necessary for one AI to activate another AI. That is another job. Meanwhile, the game engine still needs a lot of work with the implementation of audio, another job. And I want to implement some advanced graphic techniques such as a particle effect system, and dynamic shadows. Again, those are more jobs.
The point I’m trying to make, is that developing a 3D engine by one’s self is torture. A modern game is a group project. I wish I would have had computer scientist friends that were serious about game development, then maybe I could have worked with them, but I didn’t have any friends with the kind of talent that I needed. I mean most of the people I know don’t really understand the concept polymorphism, let alone what a pure virtual function is. Techniques which are used extensively in the Emergence Engine.
I mentioned in some of my posts that the Emergence Engine is trying to be too robust. I was really trying to develop something to put on a resume, but I was obsessed with adding all the features of a mod-able game engine. If I had just come up with a simple game design, and made it, it may have been a lot easier, but instead I wanted to develop a generic game engine that could be used for any type of game that I wanted. I mentioned that my original plans were to create a ”Gabriel Knight 3” type adventure game. The engine in it’s present state could be used for that, but it could also become a 3D side-scroller, or a ”Deus Ex” clone. It wouldn’t be good for an RTS game, or an open world game like ”Grand Theft Auto”, but other than that it could be almost anything.
Well I’ve done enough ranting. I really just wanted to explain why most of the posts in this blog are so confusing to read. This game engine is still in development. It works, but it still needs a lot of work.