Teikitu Gaming System
I graduated from High School, went to University and in my second year started writing my very first game engine. My motivation was a desire to make a Master of Orion III ( I felt the end game of the MOO2 was weak). I wrote my first tile based, DirectDraw engine and it was bare bone wrapper around DX functionality. Most importantly it was a weak mix of functional and object programming. The code base was improved but remained a mix of coding conventions (lets call it practical programming). I got my first job (in the game industry) and I was exposed to extensive use singletons, templates and other common C++ programming practices. Revision 2.0 of my engine was underway and I created a complete C++ engine system using pure interfaces, supporting the COM infrastructure and completely modular. It should surprise nobody that my first company only made PC games. I moved onto my second job in the game industry and spent a lot of time at work on the PS2 and occasionally the Xbox. Version 3.0 of the engine was started and I want back to a hybrid of object and functional programming. I removed the support for COM, stripped as many virtual functions from the implementation as possible. Version 3.1 was replacing all the singletons with namespaces. I was back to primarily a functional programming interface with only a few objects. However, the problem was that compilation time was incredibly high - I blamed the number of templates being used in the system. I resolved myself to removing the templates to get the compilation time back under control. In looking over the changes necessary to make this happen, I decided that I might as well shift from C++ to C at the same time as I was no longer using any of the primary C++ features.
The code base is in the midst of a conversion from C++ to C. Version 3.x files will have been made for C++ and version 4.x files are in C. Read the history for the reason behinds the changes, but the primary drive was for three reasons. The use of C forces the programmer to separate data and functionality. This forces the data and the code to be designed independently which is a conceptual advantage in the current hardware space. The second reason was compilation times. It takes me under a minute to compile the common library with link time code generation, and full optimization. Depending on the version of the code, the C++ version took either 25 minutes or the compilation never terminated (still running after 24 hours).