Anyone who knows much of anything about me knows my obsession for game development. Really, as far back as I can remember, it’s all I’ve ever wanted to do. As a kid, even before my dad brought home our first computer, my mind was filled with game designs that I would dream about, draw out on my homework, or play out with my friends. I suppose it wasn’t until I opened up QBasic at about 12 years old, though, that things started to get serious.
There it was… NIBBLES.BAS. A game hidden in the depths of our computer. I double-clicked that sucker faster than you can say “I’m bored and the Internet doesn’t exist yet". A program called QBasic opened up and then Nibbles started playing. When I was done, I quit the game, expecting to go back to Windows, but what to my wondering eyes should appear, but the full source code to the game I just played! Up until that point, I didn’t have much of a concept of what it took to make a game. I knew they were “programmed", but after examining a few of my game’s EXE files in notepad, I figured I could never learn how to write that stuff. But here it was—a whole game, with the stuff that made it run being very very readable. My jaw dropped and a chill ran up my spine as I realized what this meant. It was all possible. I was staring at the tools I needed to make my dreams come true… My destiny had been laid out in front of me in plain sight that day.
I spent the next few years learning QBasic and making some awesome little games and programs. Once the Internet came around, I even learned some web design stuff to start a website where I could host my games for download and market them. One program I made (a painting tool for QBasic game developers) even sold a single copy! Was I proud? Sure I was. Before my first real job, I had made money selling software. Sure, I might have only made a whole fifteen dollars, but I was having a ton of fun programming these things, and I was learning a lot as I went along. Was I happy? Not exactly. I was having fun, but I was reaching some obvious limitations in QBasic. Even with a new and beefy 300MHz computer, the performance I was getting in QBasic just wasn’t enough to compete with the stuff I was seeing released by the big companies. I took some classes in C++ and read lots of game programming books, but once I started working and going to school, it was just too much for me.
I did, however, develop a taste for web development along the way, which is good because that was starting to become a rather lucrative field to go into. So I put my dreams on hold and focused on this web design stuff—hoping I would someday be able to start a website that would afford me the time and money I needed to focus on game development again.
Flash forward to 2008. After many jobs and a few failed businesses, I now work 40 hours a week doing web development from home. I have an awesome girlfriend. My life, as a whole, is pretty great! Most importantly, though, I now have the time to get back into fulfilling my game development dreams—and that’s exactly what I’ve been doing.
The hardest part I was finding about game development nowadays is doing 3D graphics. I don’t have such an extensive math background, and all the books on the subject didn’t get me very far. I could learn how to render a 3D teapot in realtime using directx or opengl, but as far as something practical goes? Nothing.
… until I found ogre. Ogre (Object-Oriented Graphics Rendering Engine) is an open source 3D rendering API that wraps all the complex directx/opengl code into an easy-to-use, cross-platform, object-oriented API. It even has a built in scene graph, and supports pretty much any cutting-edge rendering feature you can think of. This is stuff that’s essential if you realistically plan on developing a game, but stuff that would take one person working a few hours a day (like me) years to figure out and implement. By the time that preliminary stuff was done, I would already be years behind the competition… and that’s only if I didn’t lose all my motivation doing all that boring stuff. But couple Ogre together with open-source APIs for sound, physics, input, etc., and you’ve got yourself the building blocks of complete game engine just begging to be put together.
These APIs are like today’s QBasic for me. I look at them and (with my now matured and experienced eyes) I really do see the tools I need to make my dreams come true. The journey will be long and hard, but I now have everything I need to begin.
So how far am I? Well, I had already started writing some design documents for a couple game ideas. One was an online puzzle game, and the other an action/adventure game. I decided the puzzle game was the obvious choice for my first project, so that’s what I’m keeping in mind as I trudge through the construction of my game engine.
The engine itself is coming along slowly but surely. The “slowly” part is mostly because I’m really thinking through how everything should be organized and making sure I do everything “right". Of course, there is no “right” way to make a game engine, but there are certainly wrong ways and there are certainly proven techniques and approaches that others in the industry use. I want to make sure this engine is something that will be easily re-usable for future projects, and something that’s logical enough for other programmers to understand (in case I bring on extra help later).
Ogre is in there for the graphics system, and OIS is in there for input, but I’m still deciding on sound, physics, and networking APIs. That’s all been put on hold while I come up with the most logical and organized architecture I can model… and I think I’ll save that for my next post!
Recent Comments
No comment yet...