OpenXcom is old. It might not look it, after all, it’s only been around for like… 4-5 years? I didn’t remember to write down the exact date (protip: write down the date of all your projects in case they become smash hits). But boy, has technology progressed in those few years. When I started, there was no SDL2. No C++11. No GitHub. Managed pointers were a mere illusion (or I probably just didn’t know about them). A lot has changed in game development, to the point our codebase can look positively arcane to newcomers. I don’t blame you. Every decision at its time made perfect sense, but after a while you start questioning what 5-years-ago you was doing.

So a lot of people ask, how did it all begin? How did we get this far? How does a project like this just happen?

Well it all started back in 2009. I was still a university freshmen, and while coursework keeps you busy for a lot of time, it also keeps you stuck with nothing to do for a lot of time. I needed something to do. Something I could do in Comp Sci lab computers which had nothing but development tools. I needed a programming project. So I picked X-COM.

Now I know what you’re thinking. Picking X-COM as a “hobby programming project” seems like a crazy foolish thing to do, specially for a guy who’s only previous finished project was a Tetris clone. But I didn’t have in my head crazy dreams of fame and success, I just wanted something to do. I was a big fan of the series, I had dabbled in that kind of stuff before with Project Xenocide and X-COM 86, and at the time most remakes were either dead or dying.

So I dug around the UFOpaedia, read some SDL tutorials, and got to work. Given the impressive amount of info available on the game internals, I decided that’s what my focus would be. A vanilla approach. Making an OpenXcom that others could build on. Given the popularity of OpenXX projects, the constantly coming and going remakes, and the community’s chant of “it’s just not like the original!”, I was surprised nobody tried that before.

But unlike most of these sort of projects, I had no access to the original source and no interest in reverse-engineering it. So I had to start from scratch. Now a lot of people probably imagine for something as ambitious as X-COM, I would have to spend a whole lot of time building all these massive systems and engine I was totally gonna need. No. If that’s how you start projects, no matter how big or how small, you’re just making a whole lot of work for yourself that you’ll probably never need and just burn out faster.

So I started simple, step by step. Just writing code, plain simple flat code that works and solves your problems. As it grows and you can see the big picture, you start organizing it into functions and classes . Build it as you need it. Keep it nice and tight. OpenXcom spent a lot of time being little more than a main() for testing stuff that I needed (later evolving into TestState). Getting stuff on the screen, loading resources, making helper objects and UI controls, that sort of stuff. This is one of the earliest screenshots of the project (note the incorrect text rendering):

Progress was slow as time passed on, but I carried on. Later in 2010 I set up a Sourceforge (it was what all the cool kids are doing!) so I could easily work on it from multiple locations. However I still kept the project completely to myself, not discussing it anywhere. I didn’t wanna start up hype too early in case I eventually hit a deadend and couldn’t finish it. However soon after, Michal, expert X-COM detective, discovered my little adventure. He tracked down my nickname on the XCOMUFO Forums and contacted me regarding making the project public. At the time he was helping out another recent remake, UFO: The Two Sides. I wasn’t ready for the spotlight just yet, but later in May 2010, he and NineX helped me set up this website and OpenXcom was online.

In this period, other remakes came and went. Xenonauts showed promise. X-Com Reloaded was similar to ours but later died. Eventually Project Xenocide and UFO: TTS did as well. And then there were rumors of an XCOM FPS. Tension was high. Probably one of the earliest hurdles was implementing the famous X-COM Geoscape. The globe was a thing of wonder but nobody really knew its secrets, and early prototypes were unsuccessful. However, with the help of the community and months of development, everything eventually fit into place. It’s probably one of the oldest+complex parts of OpenXcom. Near the end of 2010, the first version was out.

However something was missing. The other half of the equation. The Battlescape. There couldn’t be an X-COM without it, however it was nowhere to be seen in the early stages of development. I shied away from it since real-time simulation stuff wasn’t forté and I didn’t really know how to begin. But a miracle happened, and Daiky joined the scene with his Battlescape prototype, turning the one-man project into a duo. We split things between us (me focusing on the Geo and him focusing on the Battle) and with our expertise combined, development carried on.

By 2012 we were half-way in, with the game having most core systems done with the help of various contributors, in particular Volutar that had cracked open the original EXE and shed some light on the mysteries that remained. However at this point university was ramping up and I was feeling pretty burned out, and Daiky later had to leave the project in 2013 due to real-life commitments. Things could’ve turned grim.

Enter Warboy. Making his debut with a modded version of OpenXcom, he ended up contributing many missing vanilla features and becoming part of the team. What he lacked in skill he more than made up in sheer commitment, founding the whole “modding” scene for OpenXcom, and played a major part in pushing it to the finish line, which was finally reached in 2014. In all this time the OpenXcom team has kept growing, learning, changing, but OpenXcom still stands.

TL;DR: For those that don’t care for words, here’s a shiny development video instead:

