Well, I've been meaning to do an update for a while, as many things have happened, I've just been pseudo-busy doing quasi-important sorta things and not managed to do this. But now, I force myself to walk the path I must tread. Yeah, it is that much of a labour guys, do you know how much work it is to come up with an creative techfile this many times :)
Anyway, I do have a column update coming along, and as soon as I get around the hectic lifestyle I've been leading, I'll get it out. But first things first, the major change that has come about is that I have left Crytek. It was a friendly parting, on good terms. It was initiated by me, because of the hectic schedule I am running. It was slowly killing me, and with picking up another unit next semester, I didn't think I could handle it effectively. As for now, I'm not really certain of the full direction I'm heading in though. Part of me yearns to be an academic/researcher, but I do love the practical challenges confronting games developers.
Still, what can be said but, things happen. Well, life roles forwards in its lumbering but incoherantly drunk stumbly fashion.
Speaking of which, I have 2 projects in the works. An Engine, named BitchSlap (after one of #flipcode's favourite words - It also means I get to use BS as a class prefix... With a reason for once), and a ray tracer called, HQR (in a rather uncreative acronym - I'll let you decide what it means). I've started off working more one the engine project, but now I'm working more on the ray tracer project. Although, I only really did architecture and renderer work on the engine. The architecture (which I will explain a bit later) is fairly flexible.
I've decided to up the ante a bit, and make this engine as well designed as possible. As to which, I've started the abstraction and classification process. Now, engine design is the area most people starting out with fall down. Engine design is not merely the way you code, but its the paradigms you use, the things you tie yourself down to etc. So, I'm going to dedicate this part of the techfile to discussing the engine design process, as I see it - A much neglected part of the whole production process - Most often left as traditional software engineering and never given a chance of its own.
I've come across the fact that engines actually exist mainly in 3 major abstracted areas. As a play on freudian psychology, I named these 3 parts; the Engine, the Super-Engine and the Imp. In short...
The Engine is the interfaces, the environment variables and the base structures (You may wish to call these the protocol, as they are generally the things passed from interface to interface as messages). This is a naturally abstractable part of the code, and is basically the definition which ties together the Imp (implementation) into a cohesive mass.
The Super-Engine could also be called the fat controller, as it does just that. The Super-engine does things like handling environment variables and the loading of modules, the setup of execution lists, exception handling, memory handling, security and base informations. The Super-Engine basically takes the Engine and runs it. It is like the OS to the programs/modules running in your engine.
The Imp is simply the implementation. The raw code which does specific tasks, usually some form of I/O (even rendering counts as I/O) or an algorithmic task/Response. The imp is based on what is defined in the Engine.
Treating these as seperate parts which work together as an engine helps provide a way of designing an architecture that is flexible yet robust and easy to work with. Understanding that you can lay the super engine, then the engine and finally the imp out easily is the key to setting your engine as a well laid out hierachy of perfectly meshing well controlled parts.
Conor "DirtyPunk" Stokes