Skip navigation

Making Games

One of the trickiest parts of breaking into the games industry is that a lot of the jobs want applicants to have prior game development experience. I know that this is not always a hard and fast requirement–a lot of them will accept candidates with experience in non-gaming fields. The problem was that, at this point in my career, I didn’t have any professional experience, gaming or non-gaming. I decided that it would be a good idea to get myself some experience developing games.

I had read and fairly thoroughly researched the options available for a solo game developer and ultimately decided to attempt to make a game with Unity. Also, I had used Unity in a game development class when I was at university so I was fairly familiar with the interface and workflow. I tinkered around for a while and completed several online tutorials, but since I had no real direction, I never completed a project or even ended up with anything resembling a proper game.

Moreover, I may have been a bit too ambitious. I think one of my early projects was meant to be a 3D re-creation of The Curse of Azure Bonds. I spent most of my time modeling a full-scale copy of the town of Tilverton using primitive meshes before I eventually got discouraged and quit working on the project. Maybe, I thought, I should start a bit more simply. Once I dialed back the scope, I was actually able to complete a couple of simple windows console-based games.

Game of Life

The first of these was an implementation of Conway’s Game of Life. While it’s not really what I would consider a game (since there’s no way to really win or lose), it was a fairly easy project to ease myself into game development. The Github repository for this project can be found here.

https://www.youtube.com/watch?v=65b5VtBxicc

As you can see, there is not a whole lot to this one. The main thing that I learned on this project was how to use a second thread for input handling. Under normal circumstances, I don’t think that would be necessary, but in this case it made sense because we are clearing and re-drawing to the console on loop iteration. This could lead to user input messing with drawing the board correctly.

Tic-Tac-Toe

Next, I coded up a console version of Tic-Tac-Toe. My initial implementation was for a standard 3×3 tic-tac-toe board and would just brute-force check for a win (or full board) after each move. I extended the program to accept user input for width, height, and win length. This caused the win checking to be a bit more complex, but I’m fairly pleased with the results. The checking is still entirely un-optimized and there are definitely some bugs in this code. For instance, there is no bounds checking for the width, height, and win length inputs (negative numbers are accepted with potentially disastrous results) and it is possible to input a win length that is longer than the width or height of the board. Also, in my refactoring, I forgot to re-implement the check for if the board is completely full and there is no winner.

Further Applications

Moving into February 2017, I still didn’t have a job–not in software engineering, anyway. I tried driving for Uber for a little while, but I ended up just breaking even most days. I eventually took a job bar-tending at a local brewery so that I could contribute, at least a little bit, to our family expenses. Luckily, we were renting a granny flat from some friends and our rent was ridiculously cheap.

It was at this point that I decided it was time to broaden my job search to include companies outside of the games industry. However, I made it a point to apply only to positions that I felt would help me build skills that would be applicable to game development (primarily, C++ roles) or look good on my resume.

This wave, I sent out applications to General Atomics, Microsoft, Northrop Grumman, NuVasive, ViaSat, Insomniac, Epic Games, and Cryptic Studios. Interestingly, Insomniac and Cryptic (game developers) were the only two that I heard back from this time. Both sent me programming assessments, Insomniac also included a text document with some programming and design-related questions.

The Insomniac programming assessment tasked me with implementing a memory manager in straight C. I banged my head against if for a couple weeks before finally conceding defeat. I emailed the recruiter to let her know that I was withdrawing my application and wished her the best of luck in filling the role. I then proceeded to search online for resources related to custom memory managers in C and C++. I’ll admit that, after reading multiple articles and chapters on the subject, I still found it to be a bit too arcane for my current understanding. Also, I think I even found an article by John Carmack in which he said something to the effect that writing your own memory manager is “not a good idea”. I’m probably taking that out of context, but it was good enough for me.

The test from Cryptic had two parts. The first was to perform mathematical operations on an input string based on operators contained in the string. I was able to come up with a brute-force solution for this portion and decided to go with that and devote my remaining time to the second problem.

The second half of the Cryptic assessment was to implement a method to link 2×2 square tiles in a manner similar to dominoes. The tiles could be rotated, but could only link to other tiles if they matched exactly on the attaching sides. I was, sadly, unprepared and inexperienced enough that I, once again, could not finish the assessment.

Based on my application/interview experiences up to this point, I was starting to think that maybe I wasn’t cut out for a game dev career.

Early Applications

I graduated in December 2016, but I’d started applying to jobs a couple of months earlier. For my first round, I applied to Riot, Bonfire, Epic Games, Activision, Blizzard, and Nintendo. I don’t think I heard back from a single one of those, apart from the auto-reply email from the candidate screening software.

In January 2017, I completed applications for Bungie, Daybreak, Disney, Naughty Dog, Zynga, Bioware, and Rockstar. At this point, I was tailoring my resume to each job posting–which was fairly difficult since I didn’t have any real experience–and composing unique cover letters to accompany each application. I guess it must have worked, because I got a couple bites this time. Bungie sent me a programming assessment and Daybreak contacted me to set up an interview.

The Bungie assessment was a bit taxing for my current skill set. If I remember correctly, they wanted me to implement a Boggle solver in C#. I had very limited experience with C# at this point but gave it my best shot. I reasoned that at least I could learn something in the process. I came up with a solution, but the execution was painfully SLOW. There was a soft time limit for submission and I had blown past it, so I submitted my code and hoped for the best. A couple of days later, I received an email thanking me for my time and informing me that they were proceeding with other candidates. Frankly, though, this was not totally unexpected.

I’ve always made it a point to not cheat on programming assessments. Specifically, when I’m given an assessment to complete, I do not search for an online solution before or during the test. I do, however, check my solution after I’ve submitted it. For the Bungie test, a Google search for “Boggle solver implementation C#” yielded a much more performant solution and introduced me to a data structure I’d never heard of: the trie/prefix tree.

The Daybreak interview was pretty exciting for me since I was a pretty big EverQuest fan, not as big as Ultima Online, but I was over the moon at the prospect of working on such a venerable project. I’m sure the only way I was able to land this interview because of a recommendation I received from an Daybreak engineer whose wife I had spoken with a few times at the local library during the children’s story time we were both attending with our babies.

I had my first interview (which I now know was just the technical pre-screen) with Jenn Chan. She asked me some basic C/C++ questions and I was so nervous (and inexperienced) that I’m pretty sure that I bombed hard. So, immediately following the interview, I emailed Jen to thank her for her time and apologize for my nerves.

It must have worked, because I got an email back from the recruiter at Daybreak to set up my next interview with Jenn, Lauren McLemore (Lead Senior Producer), Adam Schmidt (Senior Software Engineer), and Justin Michael (Senior Programmer on the EQ2 team). Before the interview, I made certain to review all of the questions I had been asked in the first interview–particularly the ones that I knew I had answered incorrectly or had just guessed the answer. I wanted to be prepared, just in case they wanted to revisit any of these topics. Moreover, I saw it as a learning opportunity. I mean, if they are asking these questions in an interview, they must be important for a game developer to know. One question that stands out in my mind is, “In C++ can you call a destructor explicitly and why would you want/need to?” (The answer is yes, by the way. The most common reason you’d probably do this is to perform cleanup on an object that has been constructed in pre-allocated memory with placement new).

The interview was virtual with webcams–my first experience with interview format. It was pretty cool to get to meet and talk to the developers of a game that I’d actually played and loved. But, I was still ridiculously nervous. All of the interviewers did a great job of setting me at ease, but I still choked when they asked me how to detect a collision between two axis-aligned squares in a 2D plane. A few days after the interview, I received a rejection email. This prompted my purchase of a used copy of Real-Time Collision Detection by Christer Ericson to brush up on the topic.

Background

For as long as I can remember, I’ve wanted to work in the games industry. In particular, I wanted to be a game programmer.

I started gaming in the mid-late 80s on my family’s Tandy 1000 SL. I was particularly fond of the early graphic adventure games from Sierra On-Line. King’s Quest IV was the first game that really consumed me. The world felt so alive and I spent countless hours exploring (and dying in) the land of Tamir.

Shortly after, I discovered the complex and engaging world of SSI and their Gold Box and Silver Box AD&D RPGs–Curse of the Azure Bonds was my absolute favorite, despite it’s unforgiving nature. These games were my only real gateway to the worlds created by TSR. I would have loved to play table-top AD&D, but resources and real-life party members were in short supply in my small hometown in Western Montana.

Once I got into high school, I became friends with a few other students who were just as into gaming as I was. Through these friends (and our physics teacher, Mr. Blake) I was introduced to classics such as Heroes of Might and Magic II, Warcraft II, and StarCraft. Mr. Blake would let us use his computer lab to play games during our lunch period, provided that we removed the games each day when we were finished. I installed my copy of StarCraft so many times that I still have the CD key memorized to this day.

A major turning point for me was when one of my friends showed me his copy of Ultima Online. I just couldn’t believe that it was possible to play online with thousands of other gamers from around the world. Needless to say, I was chomping to set out for adventure in this exciting new frontier. I saved my money from my job at the local supermarket and bought a new computer (a Compaq Presario) and a copy of Ultima Online: The Second Age. The problem was that we didn’t have internet at my house yet. I spent hours every day reading and re-reading the Ultima Online manual in preparation for when I would eventually be able to set foot in Britannia. I eventually convinced my parents that we needed internet service because it would “help with my school work”.

This is the point where I felt the real all-consuming grip of online gaming. I spent every spare hour (when I wasn’t at work or in school) adventuring and exploring on the Catskills Shard. I joined a guild and worked my way up to a mid-level officer rank–which I thought was a pretty big deal for a 17 year old kid in small town Montana.

Ultima Online is also what cemented in my mind that I had to be a games programmer. I knew that I had to be a part of creating these awesome worlds that I was so obsessed with. I found out that most games were (at the time) written in C/C++ so I picked up a copy of Teach Yourself Visual C++ in 24 Hours at Software Etc. and proposed learning a programming language as my senior project. It turns out that I didn’t know very much at all about programming, but it was definitely more than my project advisor or anyone at my school.

Late in my senior year of high school, a recruiter from Westwood College of Technology came and pitched us on the degrees offered by their school. At the time, they were offering an Associates of Applied Science in Computer Programming and Software Technology. I was sold–this was my opportunity to really learn how to program and get a job as a game programmer!

Unfortunately, I wasn’t as serious as I should have been about my education. I ended up barely scraping by and was, honestly, nowhere near prepared for a job developing games. I decided to join the Marine Corps to buy myself a bit of time and get the GI Bill to pay for more school once I was out.

Fresh out of the Marine Corps, I ended up getting a job working for a home theater company. I did pre-wire installation for a couple of years and ended up with a role as a home automation programmer. It wasn’t game development, but it was somewhat related, I reasoned.

After working as a home automation programmer for several years, I was becoming dissatisfied with my lack of progress towards my ultimate goal. I knew I had to get back to put my GI Bill to work and get back to school. At the urging of my then-girlfriend (now my wife) I enrolled in a half load at a local community college and started classes in the evenings, after my regular job. In an odd twist of fate, I was laid off near the end of my first semester. This was probably the best thing that could have happened to me, really. I filed for unemployment and enrolled in full-time course load for the next semester and was actually making more money than I was when I was working!

I was determined to make the most of my education this time and poured everything into my studies. Over the course of my college career, I ended up marrying my wife and, together, we welcomed our first child, a daughter! I also founded a game development company–which was really (at the time) just a way for my friends and I to gain access to E3 since they hadn’t opened it to the public at that time.

I graduated with a degree in Computer Science from California State University, San Marcos with a GPA of 3.49 and set about applying for jobs in the gaming industry.