I love learning how things work

Note: This article was originally hosted on Medium.

One of my biggest passions in life is learning and understanding how things work.

This was apparent at a young age. As a kid, I loved taking things apart. I wasn't so fond of putting them back together, but I guess being messy is just part of being a child. I’d also sit and watch my dad write computer programs, awestruck at his seemingly magical command over the machine. I remember thinking many times “this looks ridiculously complex, I’ll never be able to do that”. I could never quite understand how his code worked, but it was enough for my child self to try to understand.

In 2002, a shiny box arrived in our household, with Windows XP installed on it. Up until that point, we’d only had a Windows 3.1 machine. This was to be the family computer for years to come. I wasn't allowed game consoles as a kid, but an exception was made for PC games. A few that stand out were LEGO Racers (1999), and demos for Tony Hawk’s Pro Skater 3 (2001), Jedi Knight II: Jedi Outcast (2002), and DemonStar (1997).

Back then, I’d play these games with a sense of wonder. They were quite unlike anything I’d seen before, and I was desperate to know how they worked. I knew I wouldn't be able to see their source code, but I figured I could look at their resource files; naïvely assuming that models, textures, etc. would be easy to open. Pro Skater 3's textures were all .bmp images, easily open-able even by MS Paint, but everything else was indecipherable. The other games had all bundled their resources into archive files. I was way out of my depth.

In 2006, my household got its first laptop computer, and its first internet connection — previously I’d been visiting friends’ houses and using the free internet at the town library. Shortly after this, I plunged head-first into the magical land of GBA emulation, and reignited my interest in modding. I recall many months spent playing around with AdvanceMap, a map editor for the GBA-era Pokémon games. At one point, for reasons I cannot now recall, I searched online to see if anyone had documented the map format from the classic game Chip’s Challenge. It turned out someone had, and I spent a while reading through the map file in a hex editor, comparing against their documentation, gleeful that such a thing was possible.

From that day forth, I spent hours and hours perched in front of a hex editor, looking up existing documentation, guessing at things, tweaking values to see how games would react. Slowly but surely, I taught myself how to reverse-engineer file formats. It’s primarily pattern-recognition and the ability to notice things, and not something that can really be taught academically, so I had to make do with guesswork and the tools at my disposal. Over the following years, I also got started with programming, and quickly became proficient in C# — again, self-taught. This would help immensely as I learned to manipulate binary data with code, rather than by hand.

In June 2011, I rediscovered LEGO Racers, and set about using my new-found knowledge to finally satisfy my childhood dream of looking inside it. Naturally, I checked to see if others had made progress, and promptly found the modding forum Rock Raiders United. They showed me how to extract the game’s resource archive file, and from there I got my teeth stuck in very quickly. The files were some of the weirdest I’d ever seen, but eventually I made progress and was able to release mod tools to the community. I was incredibly glad to have finally cracked them.

In September 2011, I started studying my Computer Games Programming degree at Staffordshire University. The course is laid out as 2 years study, 1 year industrial placement, 1 final year study. The industrial placement is essentially “get a job in a field relevant to your degree”. This will become relevant shortly.

In March 2012, I started investigating the files for the PC version of EDGE. The first thing I noticed was a file that contained nothing but a binary representation of a cosine wave. Curious, I tweeted at the developers, Two Tribes, asking about its purpose. What followed was several months of back-and-forth conversation with them, where I’d be deciphering their formats and discussing my progress with their programmers. I heard they were even placing unofficial bets around the office on how long it’d take me to crack things after releases.

In February 2013, I needed to find a job for my placement year. Since we’d already got quite friendly via Twitter, Two Tribes seemed the obvious first-choice, and luckily they had an intern position open. So, I dusted off my CV, and sent off my application. Two weeks, a programmer test, and a Skype interview later, I had a job. Obviously my programming skills and performance during the interview played a huge part in their decision, but I’d like to think that getting to know each other first helped my chances a bit.

I feel like this is supposed to have some sort of conclusion, so I guess the moral of the story is twofold:
Firstly, stick with your passions, even when things seem out of reach. You never know where life is going to take you.
Secondly, networking is useful. Really useful, especially in the tech and gaming industries. If you’re not on Twitter, get on there. I've been given some fantastic opportunities that I simply would not have otherwise.