Before I get into the more interesting aspects of developing a game, or specifically my game, I want to take a look at the technological underpinnings -- that is, which wheels I'm reinventing and which giants I'm willing to stand on the shoulders of.  I've noted before that I take great inspiration from Sea of Memes, partly because the developer, Micheal Goodfellow, also learns by doing, and is therefore willing to redo work that's been done before by others, partially so that he understands it better.  That tendency to learn by doing and my general contrarian nature cause me to reinvent a lot of my own wheels.  Unfortunately, I'm not always the only one saddled with my educational decisions -- a chunk of my company's webpages are driven by an Ajax library I wrote myself to learn how Ajax works, and we have only begun the task of replacing it with something better.

That said, I'm not willing to do all the work.  Low-level input handling is something I just don't really care to ever do, and I'd like to limit my graphics card wrangling to stuff that I decide I want to do rather than "everything."  So I'm perfectly willing to use some libraries and frameworks to support me, even if I'm building the engine myself.  Fortunately, I'm working in 2D, where building an engine is still somewhat socially acceptable (as if I really care about that :P ).  I decided a while ago that I wanted to use open system abstraction layers rather than tying myself to DirectX; so I was going to use OpenGL and the SDL.  I started looking at languages based on their support for the SDL; which happens to be "pretty much whatever you want has a binding to the SDL."

I'm nominally a PHP dev, but I'm not enough of an idiot to try to write the game in PHP.  The only other languages that I've had any great experience with are Java and C/C++, and I hadn't written much C++ in years.  As terrible as I was with Java, it was my "best" language, and according to the Programming Languages Shootout, the new Java is darn close in performance to C++.  Unfortunately, I also have played Minecraft, and for better or worse, soured me on games written in Java.  I thought about LISP, as I've always wanted to learn LISP, but considering that adding two numbers together makes me feel smart, it'd be too much of a leap for me to grasp.  Python is too slow.  I seriously considered Pike, as I really like that little language, but as I started to explore using the SDL with it, I discovered that the SDL had more-or-less recently gone through a major revision and its documentation had not caught up to the change.  So I thought, hey, maybe there's something better.  And lo, there was SFML.

SFML covers input, windowing, and audio; and it does it all on top of OpenGL and OpenAL.  It's object-oriented, which is attractive.  But it's a C++ library, so that'd have to be my language of choice.  I'd already been wanting to use YAML for data storage anyhow, and having an existing library for it would save me a lot of trouble; I'd have to write my own in Pike.  In the end, that's what tipped the balance: libraries.  In C++, I could get introspection libraries, compression libraries, and data language libraries; bindings for scripting languages, all kinds of features.  And I used to have a grasp of it, so it wouldn't take too much work to pick the language back up.

So I ran with C++, and I've picked up Code::Blocks with MinGW for my IDE.  I'd originally planned to use Eclipse, since I had the most experience with it, but I had a lot of trouble getting SFML to set up and compile right with Eclipse.  Besides, C::B is a pretty solid C++ IDE, which makes it a little easier to do what I need to do with than with a "Swiss army knife" IDE like Eclipse.

Sorry for the rambling, but it helps establish certain things which I'll build on in future posts.