Summing up the features I’ve worked on is very humbling.
My development logs show I’ve been working on this since September of last year. It’s been a bit longer than that, really, and for all that time I rather expected to have completed something a little more… playable.
As it is, there are many half-integrated libraries and many more features on my to-do list. This isn’t discouraging, as I’m already able to create little applications that show off what I’ve done and look nice. They look cool, so I’m happy.
By far the largest section of the engine so far is the graphics. I’m using OpenGL within an SDL window. Texture loading is currently done via sdl_image, but I intend to swap that out for libPNG at some point in the future. I’ve also created a simple sprite class, which has some basic features like blend modes, render ordering, rotation and scaling…
Audio support is beginning to come together. I can currently load OGG files (sticking with open formats), and play them by accessing OpenAL/Alut functions directly. Eventually I hope to abstract and simplify this so that all of the backend libraries become invisible, accessed only by engine-functions.
Box2D will handle the physics of this game, and I’ve already put together a demo where you can stack some boxes on top of one another. Depending on the needs of my game, I may make a simple GUI-based physics editor. Right now I’m still accessing the library directly to do everything.
Perhaps the most complete feature so far is the font generation and rendering. Not wanting to integrate yet-another-library, I opted to use bitmap fonts with metadata about the glyphs stored in transparent pixels of the texture. I use a Gimp script written in Python to create the fonts. Then I can load them just like any other texture, extracting the metadata afterwards by grabbing the information from the texture buffer. It feels a workaround and the letters can easily become blurry, but there are bigger things to work on at the moment.
Finally, I’ve been using TinyXML to do all my file parsing. I know many developers don’t care for XML, but right now I’m happy with it. I don’t have to worry about file input/output, and that saves time. Time saved is good.
As you can see, it doesn’t appear that I have a lot done yet. This is true, but I am already able to build small demos with the engine. In that way, I like to think my progress is greater than the sum of its parts.
As for planned features, I’m reaching a point in development where the basics (graphics, audio… library integration) aren’t as important as abstract features like entity management, world handling, and signal/slots. This is exciting, but also challenging because the path forward isn’t as clear. I have to decide what the API looks like and how things are structured based on very little experience.
All the same, I feel very close to actually being able to start on the game! I wouldn’t be surprised if I made some giant leaps forward this month.