This blog is to document my journey in learning cross-platform game development. Specifically I want to create a cross-platform game engine for large-scale RPGs, similar to the Gamebryo Engine used in Morrowind, Oblivion, and Fallout 3. I find a great deal in that engine that I like, but there are still aspects of it that I feel could be greatly improved upon, and like all programmers confronted with a not-quite-right program I find myself thinking “I could do better than that.” Time to put my money where my mouth is!
This is, of course, a huge undertaking – far too large a project for one woman, but I’m still going to try. Why? For one, it will be fun! I started programming in the first place because I found it fun, and although I lost touch with that over the years, I have recently rediscovered it with a vengeance. For another thing, even if I fail I will still learn an enormous amount through the act of trying. Game engines are some of the most interesting pieces of software around, combining elements of databases, artificial intelligence, multi-dimensional mathematics, multimedia programming, and low-level hardware programming, not to mention the musical and visual arts needed to truly bring a game to life.
At this early stage I can’t say exactly what the details of the engine will be, because I’m am still reading and learning and practicing, and I don’t yet know even what all the possibilities are, but I can say something about what I want. As a long-time Linux user, I definitely want to make something that fully supports Linux. As a recognition of reality, it must support Windows. I would like it to support Macs and various consoles as well, but I don’t have access to those right now, so Linux and Windows will be the initial targets.
This suggests that graphics should be handled using OpenGL, though providing DirectX support on Windows is not unreasonable for the future. OpenGL first, to keep things from getting too complicated too quickly. (I am also looking at existing graphics engines, such as OGRE which may prove more practical in the end, but for now I want to get my hands dirty and learn what is going on underneath.)
Another way to keep the complexity down is to standardize the build system. To this end I am using CMake to manage my build process and GCC for my compiler. Both of these run on both Linux and Windows and by using them I can help to eliminate a source of potentially annoying and petty problems. On the Linux side I am using GCC 4.3.3 as provided by Slackware 13.0, and on Windows I have GCC 4.5.0 from the MinGW distribution.
The Simple DirectMedia Layer has already been a great benefit to me, since SDL provides a good mechanism to handle window creation and event handling in a simple, cross-platform manner. It also runs on Macs if I ever get a chance to expand to that platform.
That describes as much as I have so far in terms of the libraries and tools I am using, and in coming articles I will describe how to get them set up and running.
The madness is upon me! Come let me infect you!