Every now and then it's nice to talk about game development; how to get into it, and what it's like to actually be a professional game developer after years of being a part of game development communities on the Internet. This post was inspired by a blog entry by the ever-fantastic Steve Gaynor. The entry is titled "Informative" and he discusses his approach to getting into level and game design from the perspective of someone who had no idea how to get into game development. It's a fantastic read and is a completely different approach to the way I got into game development.
One way to get into the industry is have the general knowledge of what game development consists of and keep this in mind as one progresses with his/her education. Maybe someone looked up a game school like Digipen or a trade school like Full Sail. I know a number of people that have gone this route and gotten good jobs in the game industry (one of whom is a close friend and colleague at Stardock). There are also a number of people who got into the industry in a sort of traditional training/educational manner. These are the people that maybe knew an widely-accepted path of learning a given artistic or programmatic trade through classes in high school and then continued the advancement of these schools through college. Both of these are very viable methods of learning the necessary skills to get a job in a very unique and competitive industry.
But that's not how it worked for me. And I have some of my personal history and some very unfortunate evidence of my past projects to share along the way.
I grew up with video games. Sure, I also had a fondness for basketball and, eventually, cross-country, but video games were always a consistent force throughout my life. I got a copy of Super Mario Bros. 3 from my grandparents for Christmas when I was around five or six. The problem that I remember back then is that I got this game and I didn't even have an NES. I wasn't sure what their angle was. I thought it was either a mean trick or my grandparents had no idea that a game cartridge wasn't a self-contained video game-playing entity. But I clutched that copy of SMB 3 in my hands for a week or two. At some point I accidentally dropped my copy of Super Mario Bros. 3 in a toilet. After that unfortunate event -- still not having an NES of my own to play -- I had an urgent need to visit my friend's house. He had an NES, see, and I had to ensure my holy grail hadn't been corrupted. Thankfully, it wasn't, and shortly thereafter I had an NES of my very own to play it with. It wasn't until I was eleven or twelve that I really ever started wondering how video games were made. But, that did happen, and it was, as is tradition for the small town of Kalkaska, Michigan, during an incredible blizzard that I started screwing around on a computer. Before I go further, I want to ensure we have the same picture of a winter as I do; these are recent pictures but you can't really tell the difference between back-then and now in this context:
So, there I was on a day where I clearly wasn't going to be visiting any of my friends, playing, most likely, a game of Warcraft 2 on the family computer that was used almost exclusively for word processing software. My immediate family wasn't a very technical bunch while I was growing up. Even this computer, the first one our family ever owned, was given to us by my grandfather (who worked as a computer analyst). At some point preceding this blizzard-filled afternoon, my cousin, who grew up in a very tech-heavy family, introduced me to QBasic and some basic Snake game that he downloaded off the Internet that was made with QBasic. So, on this day, I opened up QBasic like my cousin showed me and read through the in-program information and documents -- they weren't well-written, numerous, or particularly useful -- and began cranking away at a text game which integrated some text-based animations and my homemade Chiptune compositions. At some point I tried adding actual graphics to these games but, well, I was an eleven-year-old trying to figure out how to do basic computer graphics isolated of any knowledgeable help. I think I made a circle with one eye near the circle's origin and the other a few units to its right. It wasn't pretty.
A couple years later (and months after I stopped using QBasic for anything) and I was a fourteen-year-old with a far newer computer and an actual internet connection (a 28K dial-up modem). And it was at this point that I actually started wanting to learn how to make computer games using the same kinds of tools and information that the real "game people" used. I hopped on the Internet and, eventually, learned about C/C++ and how these languages had something to do with video games. I was working as a bag-boy at a local grocery store around this point and, with my first or second paycheck, gave my Mom the money to order a C++ programming book from Amazon.com (I reassured her that the site was safe and that she could use her credit card).
As soon as I got this book, I started reading and learning about the intricacies of the language. It was hard. I worked at deciphering what was an absolutely cryptic and confusing set of skills and information every single day after I got home from bagging groceries, cleaning bathrooms, and chasing after carts. Sometimes I had to read the book without immediate access to a computer to test new C++ functionality out or to try transcribing a sample program from the book into a free C++ compiler that I downloaded off the Internet. And I did this sort of thing nearly almost every day for a summer. And then school started back up, the book chapter on pointers was proving asininely complex, I joined a Cross Country team instead of a Basketball team (the running folks were way nicer and more relaxed), and forgot about my C++ learning for a while.
I didn't stop programming during that lapse in my C++ learning, though, which surprises me to this day. I ended up borrowing my mother's TI-86 graphic calculator for the math classes I was taking through my sophomore year of High School. And, one day during a class on Michigan History, I was playing around with my calculator and realized that it had a program editor installed. I went home that day and looked up information on the TI-86 and the kind of games that people were making for it. And through a series of nights working on a TI-86 BASIC program editor and tweaking the results in the middle of some of my high school classes I came up with a TI-86 game of my very own that the Internet has preserved for almost eight years: ARENA. The game won me a book from a site dedicated to TI-86 programming.
It wasn't until my last Cross Country meet that I had a mid-race revelation that ended up being kind of important; it was the one that reminded me that I stopped learning how to program and that I should pick my book back up again and start, once again, from the beginning. The one thing I did differently when I picked that book back up ended up becoming one of the most important lessons I like to relate to people who want to get into the game industry: join a community of people who share your interests. I joined GameDev.net, a community-focused site that was focused on its namesake: the development of video games. It was through this site, and others like it that have since ceased their operations, that I learned the most from and made a huge number of contacts and friends. I joined the site's IRC channel and talked to a bunch of other development veterans, which was helpful, but also to a group of people that were in the same situation I was in: learning on their own time and trying to make sense of all of the complexities of game programming. At some point, I got a group of people together (ignore the "Royal Rainbow" near my name; that's a result of antagonizing my fellow moderator last year about the lack of color to our tags) to make a game, had a bunch of people argue about what the "team" wanted to work on, and then all storm out of an AOL Instant Messenger group chat room. But I did meet some people that I worked closely with for a few months. One of the "games" that was born out the work done by myself and a fellow GameDev.net developer also, unfortunately, survived through the last eight years: ARENA: Evolution, the "sequel" to my TI-86 game.
And so my self-teaching went on. At some point I picked what I still consider to be the most game programming important book I ever bought (despite now realizing how many horrible practices it taught me): Tricks of the Windows Game Programming Gurus. I probably read this book cover-to-cover about three times trying to properly understand COM, DirectX (specifically, DirectDraw), and some basic tenets of game programming. And I worked with DirectDraw on some failed demos and little games for a few years; some screenshots of these awful projects can be found below. I didn't really grow to appreciate the concepts of color, scene composition, aesthetic design, and other such invaluable traits of a good game designer until at some point in my college career. It shows, yes, I'm well aware. I eventually moved into 3D game development with OpenGL with the help of Nehe's tutorials. These tutorials teach poor programming and development practices but were, at the time, a remarkably simple way of learning basic 3D programming. I ended up writing a basic series of game programming tutorials for NeHe but I had those taken down as I felt they gave some incorrect information and poor practices.
I contacted the author (André LaMothe) of Trick of the Windows Game Programming Gurus a couple years later, when I was around seventeen or eighteen, and eventually this action led to a book publishing deal for me. It was a very strange concept to get my head around but I finished that book and, surprisingly, didn't get beat up every day of High School for it; in fact, I actually made a bunch of new friends as a result of conversations about my book. I consider it be an absolute piece of trash both technically and stylistically (text and code) but, hey, a little selling-out never hurt anyone.
When I went to college at the University of Michigan I was certain that I wanted to be a game developer. I was eager to learn some proper programming information from the professors who spent their life developing applications -- maybe even games! -- using the kind of information that I've hacked together throughout the four-five years of learning I did on my own. It was tremendously exciting.
And then my first year ended and I didn't really enjoy programming anymore. Something about being taught the same programming principles that I forced into my brain on my own time became a dull, uninteresting endeavor when they were related to me by a college professor. I didn't see the relevance to video games in the examples that were discussed in various lectures and lab sessions. And when the video game angle was removed from the sort of technology and programming that I was so passionate about growing up I realized that I didn't care very much. I also had real concerns about how well I'd function in an office environment being that I was, throughout the entirety of my life, a very active, energetic, and oft-rambunctious person. I ended up dropping out out of the College of Engineering and switched to the school of Literature, Science, and the Arts. I received some strange looks during this process. People have to apply to transfer from LS&A to the College of Engineering but doing the opposite required only a signature from a College of Engineering advisor. So I did that. I switched my intended major from Computer Science to English.
I went through my second, third, and fourth years of college, at this point, with the intention of becoming a High School English teacher. I thought that I just wasn't cut out to be a programmer and, as such, didn't really have any marketable talents that would get me into the game industry. I really enjoyed a year of level design using DOOM 3's Radiant level editor and a bit of mod work within the Half-Life 2 Source Engine, but I considered those things hobby work. I also played with Torque Game Engine a little bit. Throughout this time I took a variety of classes about linguistics, literature, Roman/Greek history, and a number of creative writing courses which were all tremendously fun for me; I met a ton of cool people, learned new things, and realized how much I love writing. So throughout this period where I just enjoyed being a pretty unfocused college student who dabbled in a bunch of aspects of gaming and game modding I realized how much I enjoyed simply writing about games. So I did that. Often.
But, despite being a very connected person who still enjoyed talking to hobbyist game developers via IRC daily, I never once thought that I could have tried to get into the game industry like how Steve did.
Near Christmas my senior year of college I read about something that Microsoft was releasing to the hobbyist game development community that would allow independent game developers to make games for the PC and the Xbox 360 using the same code. So I downloaded the very first release of XNA Game Studio -- a beta that would end up being v1.0 of the development environment. I didn't know C# at the time so I was, in essence, trying to remember everything I knew about C/C++ (which was a bit rusty at that point) while also trying to apply those principles to C#. I ended up trying to replicate some of the graphics techniques I messed with when I was still in high school such as non-photorealistic rendering techniques and my favorite graphical feature of all time: particle engines (though, now, I find myself to enjoy programming new game mechanics and thinking about game design more than graphics).
I showed these images to one of the friends at Stardock that I had maintained contact with throughout my college career and, eventually, got an internship. It was a pretty simple endeavor, primarily because I interviewed and received an internship position withStardock back in 2004 near the end of my freshman year of college. I didn't have a car and as the time neared for me to actually start the job I also didn't have the money to purchase a car so, much to my disappointment, I couldn't take the job. But, three years later, I accepted a position as a game development intern at Stardock Entertainment working on a number of features for the recently-announced Elemental: War of Magic. My internship ended up transitioning into a full-time game developer position as I took my final class at the University of Michigan alongside working at Stardock from September 2007 until my graduation with an English degree in December 2007. And this is me at my desk playing with the iSight on my Macbook right as I was packing up to leave work this evening:
When I started this entry my goal was to discuss, concisely, how I got into game development and to give recommendations to anyone else who may be living in the middle of rural nowhere with a 28K dial-up modem. As I started writing, though, I realized how the beginning of my "game development career" began from apre-teen kid screwing around on QBasic on a 486 Packard Bell that was given to my family by my grandfather (who passed away last month). As simple an activity as that was, it was enough to get me to realize the kind of thing I wanted to do "when I grew up."
It's widely-believed that persistence and hard work are the two most necessary traits for any game developer. I absolutely agree with that. I'd like to add, though, the importance of communicating with other developers whether someone is just getting started or has been in the industry for years upon years. Much like when I was fourteen and using our family's new computer to talk to people about programming, I still find that sharing my development and gaming experiences with other like-minded people, even if I've never met them before, never fails to get me excited about the fact that I make video games. My work consists of making games that, in my opinion, are amongst a small group of definitively-PC games being made in the industry right now. And, when I get the time, I sit on my couch working on a MacBook to try and develop an iPhone game that will make good use of the platform's strengths while still being the kind of game that I love to make.
So, thanks Grandpa. You were the cause of me being, like, a super nerd.