Getting started with something

Jul 25, 2012

So, for the past month or so I’ve been playing around with this idea I have for a game. I need that game to be multi-OS (Windows, Mac, Linux) so that ruled out quite a few existing engines, be possible to work on in Linux (that ruled out Unity), be 3D (that ruled out MonoGame and probably a few 2d-only engines) and not written in Java (which ruled out jMonkey), and either open-source or with sufficient low-level access to the tools and the rendering pipeline (which just about ruled out everything that was left). So I decided to make my own engine by putting together an existing renderer with other open-source middleware.

My first choice for the renderer was Ogre. After all, it has been around for ages, has been used in a bunch of games, has a lot of existing plugins, and would probably be easy to get up-and-running with. However, in a couple of days I came to the conclusion that being around for so long actually works to Ogre’s disadvantage. There are a large number of wrappers around popular middleware for Ogre, but a lot of them have not been updated in ages. Some of them are more active, but lack documentation, are bug-ridden or lack features (in the sense that the wrapper only exposes a subset of all the features supported by said middleware). So, with a couple of exceptions like OgreAL and OIS, I would end up saving a lot of time if I myself wrote wrappers around the middleware I needed.

At this point, I took a step back and really considered the problem at hand. Since I wouldn’t be able to use most of the existing plugins for the middleware I needed, did I really need to go with Ogre as my renderer? The whole point of this exercise was to end up with an engine in which I could easily modify something low-level if I really needed to. And Ogre is HUGE. So, I decided to go with Horde3D instead.

I got the latest revision from their VCS and created a github repo for the same. And, at this point, I got stuck. Which is really what this post was supposed to be about. I’m stuck because I want the finished engine to be “perfect”, so that I could ideally use it for a couple of games without any major overhauls. But this has been keeping me back from actually getting started with it, because I really have no idea how to architect a perfect game engine.

So, what I’m going to do instead is just play around with the renderer to start with, then work on adding player input. Next will probably be a scene graph of some sort, although Horde3D appears to already have built-in resource management. And after that is probably physics. But I’m not going to worry about all that right now. First, I’m just going to render some cubes.