Evil Stick Blog

Game related

DX9 Engine Design, part 1

by Evil Stick Man on May.20, 2009, under Game related, Technology

Note: A lot of this is based on http://ati.amd.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf, which was a presentation given at GDC several years ago (I don’t know the exact year). It is based on DirectX 9, and while most of the info is probably still valid, it wouldn’t surprise me if there are several items that were no longer valid as of the advent of DirectX 10 and later. Most of what I say will be a basic thought exercise stemming from the presentation, coupled with my experiences working with a DX9 engine at my last position.

At the core of every 3D game is its graphics engine. The graphics engine determines what the player sees, which then determines how they react. It’s something that’s very easy to do wrong, and the specifics are often under heated debate both in a company and on the web. Below are some guidelines to use when designing a high-performance 3D engine, or when optimizing an existing engine. There won’t be any code here, as I currently don’t have an engine utilizing these principles (it’s currently under development), but more some tips I discovered on the job.

Know thine enemy

First, before we embark on any engine enhancement journey, we need to make sure we can actually pinpoint where our engine slowdown is originating from. There’s no point in streamlining your vertex information if what you perceive as slowdown is actually taking place in your AI or physics code. There are a number of ways to gauge overall engine performance, and determine at least the major causes of slowdown:

  • Keep ample statistics - the success of your optimization effort, as well as turnaround time on improvements, will hinge on your ability to accurately judge the results of your improvements quickly. One of the best ways to do this is to develop a set of metrics in your engine. Proper encapsulation coupled with judicious use of time keeping will go a long way towards identifying problem areas. Encase your code in #ifdef __DEBUG” blocks and you can’t go wrong. At my last position, we often relied on these statistics to detect major problems both in the engine and in the engine management structure - for instance, if we weren’t releasing an image and were leaking memory to the video card, we could tell pretty quickly by watching a list of loaded images, coupled with instance counts.
  • Find some effective third-party tools - when I was tracking down engine speed blocks, both PIX for windows (included with the D3D SDK) and NVIDIA’s PerfHUD proved invaluable. PIX was great for tracking actual geometry issues - if something was coming out garbled, I could quickly use PIX to view the offending D3D call and the vertex/index buffers causing the trouble. PerfHUD, on the other hand, did a great job of providing metrics on the graphics pipeline itself. At a glance it’d give you load on your shader processors (vertex, pixel, and geometry), number of DIPs, memory usage, triangles in a scene, and so on. The instruction manual for this tool is in excess of 40 pages, and it is packed full of useful ways to utilize this tool.
  • Profiling helps, but it depends on your profiler - I was able to obtain some info using Visual Studio’s profiler, but at a certain level of engine complexity it fails to be useful. Most of the discoveries I was able to make were largely due to our own engine metrics, as well as use of the aforementioned tools.

Basically, you’ve got two bottlenecks in your engine: the CPU, and the GPU. Maxing one will impair the performance of the other. 95% of games are CPU limited, so start there in your quest for optimization. You can tell pretty quickly if you’re CPU limited by watching the graphs in PerfHUD - if you’re pinging only 25% GPU usage and only sending out 100k triangles and you’re still running slow, odds are you’re CPU bound and no amount of engine optimization will help you. In fact, contrary to popular wisdom, in these cases you want to do more work on the graphics card, not less, to take some load off your CPU.

Watch your creations and deletions

If you’re creating and deleting graphics objects during your game’s main loop, I highly recommend reorganizing your code structure. Creation and deletion are time-consuming operations, and can drastically impact performance. Your game should have, at least, a load and an unload phase that doesn’t impact play at all. There are exceptions to this (specifically when dealing with large, open worlds), but if your levels are small there should be no reason for you to constantly create and delete objects in your game loop. Store objects to be destroyed in a queue, and kill them when you have some extra time in your rendering (metrics in your engine help here).

Use all of your time

Set your D3DPRESENT settings to “IMMEDIATE,” and take control of engine rendering yourself. Letting DirectX do vsync for you is nice, but when you use this your present calls will block until their 1/60th of a second is complete (at least in my testing that would happen). In a highly dynamic environment, such as a game engine, this will mean that you’re going to start dropping frames once your non-rendering code takes more than its alloted time to run, and that for a brief segment of time you’ll be effectively running at 1/2 your refresh rate.

Basically all you need here is a method to call “present” at a regular time. You can either set a timer event to simply fire off a present call every 1/60th of a second (if you’re going for 60FPS), or at the least you can control the slowdown on a more granular level. By making some intelligent use of engine compartmentalization, you can also spread out your engine’s labor so that you minimize cyclic slowdown. Keep a queue of tasks that don’t necessarily need to be performed immediately, and then wait for some free time in your engine. Keep an overall frame time, and if you get to a draw call after having taken less time than expected, use that extra time to kill some objects, or load some objects, or do some poly sorting. How you end up specifically using this will depend on your engine architecture, but this’ll give you one more dial to play with when optimizing for performance.

The graphics card is a pipeline

One thing to keep in mind is that a graphics card, at its core, is largely just a big parallel-processing beast. It wants to do one thing, and do it repeatedly. Think of your graphics card as a water pipe - it takes the water it gets in a fixed path, and does it very well. However, if you want to change that path you need to completely drain the pipe before you reconfigure things, which reduces the amount of water you can push through. With that analogy in mind, here are some sorting criterion from your object that transcend the standard “Sort objects front to back, and back to front for transparency” logic.

Avoid excessive shader changes

After you’ve sorted your polys from front-back, try sorting your object by shader. The vital distinction here is to avoid excessive switches between the programmable pipeline and the fixed function pipeline. A previous engine I worked on had cars that were made up of multiple objects split pretty evenly among shaded and unshaded. By organizing the game to draw all the shaded parts first and then draw all the fixed function stuff, we were able to get about 5 extra frames per second.

Avoid excessive state changes

State changes (such as texture state changes) are processed by the CPU, and not the graphics card. After you’ve sorted your objects by z-val (which you might try doing in the shader when you’re CPU-bound) and vertex shader, try sorting by texture stage state.

Avoid excessive texture changes

Sort your objects by the texture they use, if possible.

Divest your rendering code from your game

At its core, the graphics card just wants to sit there and draw polys. It doesn’t care about your awesome physics, or your lifelike AI, it just wants to make pretty pictures. So try to divest your actual geometry data from your game logic as much as humanly possible. The ideal engine in my mind has the rendering code running on a separate thread, just spinnig in a loop, flinging polys at the graphics card. Consider storing all of your geometry objects in a geometry manager, which handles all of your sorting and communication with the card. Return a pointer to your parent object if you need it, and you’re good to go. More on this in later posts

There’ll be more to come here, but I figure that’s enough for now. Watch for part 2 in the near future.

Leave a Comment :, , more...

Experiment inside the experiment and other news

by Evil Stick Man on Feb.23, 2007, under Game related, Music, Randomness, Ravings

So I tried yesterday to lay low so that I wasn’t shot or damaged for rehearsal. I failed miserably - rehearsal was total shit. Complete and total shit. I can only assume that taking a day off to let the chops recover doesn’t do a damn thing, like I had hoped that it would. I don’t have the time this morning, so I’ll be playing this evening (which is what I’ve done the past few days anyway). I also lost about 8 days worth of data because a program caused my PC to freeze - luckily i have the “online archives”.

But that whole thing is kind of secondary right now. I’ve had what I hope will be a fortuitous event take place which, provided that everything goes well, could start the next chapter of my life off rather nicely. Mindi and I have been talking about moving lately (me more than her, I think), and as a preparatory measure I updated my resume on a gaming job website (gamasutra.com, for those interested). I didn’t apply to any jobs, I simply updated my resume. The very next day I got an email from a game company recruiter who asked me if I was interested in anything in California. I gave him a call the next day, and actually did a phone interview on the spot. He sent me a programming challenge to complete and, provided that I do that well, I’ll hopefully be called in for another interview.

For those who aren’t trying to break into the game industry (or haven’t already broken in, my position as such is debatable), this kind of thing is pretty unheard of. All you ever hear about is how people will put out resume after resume after resume, and not hear a response. Some people apply to positions for a solid year before they even get an interview. I apparently got one just by updating my resume. So to use the words of some younger generation, I’m pretty stoked about all of this. I can go into this thing with a bit of swagger and confidence because, after all, they contacted me. I’ve just got to rock the world on this programming challenge and, hopefully, that will hold their interest enough that they call me out there for an in-person interview.

Which brings me to the only downside of the whole thing. The job’s in Camarillo, CA, which is about 51 miles north and west of Los Angeles. Seeing as how CA is the center of the games industry, this was to be expected (if a company was going to contact me outta the blue, it’d most likely be from CA), but it is still a major life change. The questions in my mind right now are if I get the position, will Mindi and I be able to handle the change in environments? How about the distance from family and friends? The cost of living is also higher in CA, which might mean this would be another in the series of temporary places (unless the real estate market really tanks, as I’m hoping it will). I’m sure that all of these are surmountable obstacles, and it’s probably premature to take them into consideration. Plus, I’m most concerned about how it will affect Mindi. She loves me and has said she would go wherever, but I’d still feel like a large bit of asshole if I didn’t give her at least a little bit of a say.

But I’m getting ahead of myself. Tonight, I complete the programming challenge and then continue work on my project. I swear that all I’ve been seeing lately when I close my eyes is code, between 8 hours a day at work and 4-5 hours a day at home/class. At least it’s decent training for crunch time in the industry…

Leave a Comment more...

My Path to the Game Industry

by Evil Stick Man on Jul.01, 2006, under Game related, Ravings

As an aspiring game developer, I spend a lot of time browsing forums dedicated to people trying to break into the game industry. One of the most commonly asked questions on these forums is “How do I break into the game industry?!” This is usually accompanied by platitudes like “I’ve always loved games” and corollaries like “What do I need to learn to do X?” As I read post after post along these lines (and even posted a couple myself), I made a conscious decision that once I broke into the game industry, I would post a chronicle of my experiences for any who may wish to read it. I am not trying to mislead anyone, and I am most definitely not presenting any sure-fire way to break in. Hell, it’s still arguable if I am even in the industry at this point – at the very least, my company has “gaming” in their name. My basic point is this – somewhere I read that if you ask 100 developers how they got into game development, you’ll get 100 different answers. This is true of almost every walk in life, with the lesson being that nothing is certain but death and taxes. However, I can argue that while my way in may not be the best possible way to get there, it worked for me, and it is a path that could very logically create a strong probability of getting into the industry. In other words, it worked for me, but that doesn’t necessarily mean it’ll work for you.

A Little About Me

Hi! I’m Matt Billock, your guide for as long as you choose to spend following my rambling, incoherent mesh of a tale. I am 25 at the time of this writing (June 2006), and I live in the northern suburbs of Chicago, IL, and have lived in that area for pretty much the entirety of my life thus far (barring a stint out-of-state to attend college in a parent-free environment). I’m a programmer by training, but I like to dabble in other things (such as writing, an activity fostered by a joint interest in philosophy and expressing my opinions with vehemence and emphatic expression) – many of which I’ll cover as I continue my tale. I’m currently married to my wonderful wife Mindi, and have no children. We’ve instead opted to train ourselves with two cats – Ninja, because he’s black, and Thai Food, because it’s something all cats have in common.

I am currently a software engineer with WMS Gaming, Inc. WMS is a company that creates gambling machines (predominantly reel-based and video-based slot machines), and is the former parent company of Midway Games. I work on common functionality shared by all the machines, developing code in C++ against a proprietary OS. I suppose that I should have put this part at the top of this article, as there is no doubt a portion of you have just dismissed what I do as Not Game Programming™. I leave that judgment to your discretion, but I will remind those of you that take this standpoint that in many ways the game industry is a nebulous beast that can often defy definition, and that you should not discriminate against a person’s ideas/thoughts/advice/whatever based solely on opinions that you alone may hold – it’s often a recipe for disaster. Suffice to say that I’ve at the least come close enough to game programming that the itch that’s been in my brain since I first picked up that Atari 2600 joystick has been scratched for the moment. But enough with all of this pointless information, let’s get on to the subject of today’s ramble:

A Little More About Me

I grew up in the far northern suburbs of Chicago, IL, in a predominantly middle-class area (though that classification is changing). I was never much of a diligent student through school simply because I never really found the material to be challenging enough to warrant more than a cursory glance. As a result, I got straight As until about fourth grade. As this was about 1988 there were two great events to take place that year – the purchase of a Nintendo Entertainment System for my sister’s birthday, and I received my first “B”. I have no doubt that these events are related. In any case, with the procurement of the NES my life was forever changed. Whereas before I would spend my time playing around with action figures or fooling about outside, I could now move things about on the television by pushing buttons! I was instantly hooked. I would forego homework, the outdoors, and even social interaction so that I could move a succession of pixilated characters through a variety of environments with myriad goals. As I look back now, I realize that this kind of lifestyle could most likely be described as obsessive, but for a lad of 8 I could hardly be faulted, and to be completely honest, it wasn’t exactly the first time I had been addicted to games. My parents had an old Atari 2600 that I gave a lot of use from ages 4-6, until circumstances removed that box of joy from my fragile young life.

In either case, from that point forward video games were a major part of my life. It would be another year before I’d discover another activity as effective at holding my attention (playing the trumpet), and about 8 years before I’d have my first girlfriend to take my mind off things, and even then neither of those other two were able to completely drive out games from prominence in my after-obligation activities. So I went on with my blissfully innocent life, putting forth just enough effort at those activities required of me by state and country to not fail, but not enough effort to truly succeed. I stuck with the trumpet through high school, participating in pretty much every musical group offered to me and, due to the wonders of weighted grades in an honors program, graduated with a 3.67 GPA in 1998. Not exemplary, but not too shabby either.

The only really notable thing about this period is that when I was a freshman in high school, my family got their first computer. Computers instantly became a passion of mine – when I got bored with the video games I’d been playing, I’d instantly hop on the computer to play around with that for a while. I taught myself programming in QBASIC, developing a small text adventure game that was the culmination of all the fiddling I had done with the programming language on my TI-83 calculator. It wasn’t very impressive, but I was damn proud of it – I spent days reading the help files on the BASIC language and experimenting in order to accomplish something that I’m sure I could outshine in 45 minutes today (or less). It was pretty much at that point that I decided that I wanted to make video games for a living – I had greatly enjoyed the time I spent creating my adventure game, and it occurred to my somewhat immature mind that I should try to combine my love for computers with my love for video games.

The College Years

I had, of course, applied to multiple colleges during my senior year in high school, and I was accepted into the three to which I applied – the Illinois Institute of Technology, Kettering University (formerly GMI Engineering and Management Institute), and Iowa State University. I opted for Kettering University for one primary reason: they offered a program that was designed with cooperative education in mind. In other words, I would be going to school for 5 years – two and a half spent in classes, and the remaining two and a half spent with a coop employer. My goal was to simply ensure that I could secure a job once I graduated, and ideally net a job in the games industry.

In order to maximize this, I chose to double major in Computer Engineering and Computer Science. I figured that a guy who could do both hardware and software would be desirable to a game company, and in so figuring I ignored the ample warnings about the amount of work I was taking on. And it did end up being a lot of work, but in the end it was short-lived.

Rise, Sons of Iowa State

Fast-forward about a year. I’ve since established myself at Kettering and established myself in several organizations when I was forced to come to a realization – unless my parents suddenly made a lot of money, I couldn’t really afford to continue at Kettering. So I looked back at my list of colleges, and moved on to my second choice – Iowa State University. This carried two things that appealed to me – a history in computing (ISU is home to the Atanasoff-Berry computer, and all you ENIAC supporters be damned), and a healthy 6 hour distance between the school and home. I ended up transferring in at the completion of my freshman year at Kettering.

Funny thing about transferring colleges is that they never really tell you that it’ll be just like starting over. I had a grand total of 4 classes out of 12 (Kettering students carry a heavy course load) that actually ended up counting towards a degree, and the added bonus of having 30 extra credits in classes that the university didn’t even offer. Thinking about this, and realizing that if I stayed on my degree path I’d be in school as long as most of my professors (but without the alphabet soup), I dropped the Computer Engineering side of my dual major, and stuck with Comp Sci.

Iowa State was a place where I was able to really grow as a student and as a person, and I took every advantage that I could. I participated in every music ensemble that they’d let me play in (leading to lots of free passes to collegiate sporting events, several free trips, and the love of my life), I practiced tae kwon do for two years (leading to a green belt and a concussion), and I delivered pizza for a year and a half (leading to a decided lack of concern for the cleanliness of my car).

With all that going on there were times when my grades may have suffered a bit, but I didn’t care – I was living life. After all, not all education takes place in the classroom. But, of course, the classroom is still a vital portion of the collegiate education, and is most definitely of paramount importance to anyone who’s managed to make it this far into my tale of self-indulgence. The comp sci program at Iowa State is heavily theory-based. You don’t spend a lot of time learning languages or programming – instead, you learn all of the math behind computers. Things like finite state machines, queuing theory, design of programming languages, algorithms and algorithmic analysis, data structures, and so on. The number of classes that I had where actual programming was the point of the course was 3 – an introductory class in C++, a class in C#, and a class in OpenGL. On top of this, I spent a lot of time sampling other subjects while trying to fulfill general education requirements. To be honest, I even found some of these subjects more enjoyable than computer science, to the point where I seriously considered switching majors.

And this was really the first time that I made an adult decision, and took the long view of things. I realized that if I was to pay back the mortgage I was accruing in student loans, I’d need to make some cash at graduation. Furthermore, while my other desires may be vital to several elements of game design, one of the easiest ways in to the industry is still on the technical side (be it coding or bug hunting). So I settled – I abandoned History after one class, and picked up a minor in Philosophy. Philosophy is actually a very pertinent subject for a computer programmer, and it’s not because of the source material. The main purpose of a philosophical education is to do the following:

  • Establish a baseline of philosophical knowledge
  • Teach a person how to argue logically and defend opinions formed from the baseline
  • Teach a person how to coherently phrase their arguments

While the common knowledge may not be crucial to programming, the logic training firmly reinforces the tenets of computer science, and the phrasing and defense of opinions taught through significant amounts of writing combat the single worst enemy of the coder – poor communication.  I had a professor who used to joke that a philosopher couldn’t sneeze in less than 2000 words, and it’s that mindset which has served me in the business world to this day (for those of you playing along with the home game, that last word is number 2,147). So overall, a study of philosophy provides a very healthy benefit to any student of computer science, even if it does nothing more than help you understand a bit about how logic gates originated and work.

In any case, I started at Iowa State in August of 1999, and graduated in December of 2003. I earned a Bachelor of Science in Computer Science, with a minor in Philosophy, and a final GPA of 3.01 – much like high school it wasn’t exemplary, but it definitely wasn’t too shabby. One day I actually got bored and plotted my semester GPAs on a chart. It looked a little like a “U” – high when I first started, as I was excited about the future opportunities, low in the middle as I hit the drudgery of the “All I wanna do is play GTA” period, and rising at the end as I began to mature enough to realize that I actually should care about what I’m learning.

Several points stood out in my undergraduate education. First, my experience with all of the music ensembles helped to provide a break from computers every once in a while. I started to find this necessary as, if it wasn’t for the social interaction spurred by people making music together, I’d probably go days and weeks without leaving a monitor for such paltry concerns as bathing and sleeping. Second, I found one of my passions when I took a step towards a game-programming career by taking a course in geometric modeling. The course was a graduate-level course that accepted motivated undergrads, and was definitely the high point of my educational career at that time – I’ll come back to it a bit later. Third, and most importantly, I would not even have discovered the modeling class if it hadn’t been for my minor involvement with Iowa State’s fledgling Game Developer’s Club. The hours I spent with the members of that group helped me to get a better idea of what was necessary to get into the industry, and also showed me how severely my skills were lacking, giving me a benchmark to work towards (for reference, out of the 6 or so regular members of that group, I know of at least 4, myself excluded, that currently work in the game industry). I firmly believe that I wouldn’t have gotten anywhere towards where I am now if I hadn’t been a member of that group.

Moving On Up

I truly enjoyed my undergraduate experience but, unfortunately, all good things must come to an end. This brings us to about October of 2003. I realized that I was going to be graduating in a little over two months, and I still didn’t really have much of an idea of where I was headed. So I started looking at options. I took the LSAT just for the hell of it, to see how I’d do (I think I got a 152 or something, I don’t quite remember), and applied to a couple of graduate schools as I didn’t yet have a job lined up.  

Well, that last statement was slightly incorrect – I only really applied to one graduate school – DePaul University. See, the story goes like this: I happened to locate a job for which I could actually get an interview in Gurnee, IL (approximately 2 miles from my parent’s house). The job was only for a 20-hours-per-week internship for $8 an hour, but to be honest it was the only lead I had. This made my dilemma rather pointed – I either needed to gamble on being able to get a “real job” within 6 months of graduation and work as an intern, or I needed to find a way to stave off my student loan payments while establishing myself, all while convincing my significant other to leave behind the small town life and join me in the big city. I opted for number two when I discovered DePaul University’s Master of Science program in Computer Graphics and Animation.

A seed had been planted in my brain by my sole scholastic experience in computer graphics. That undergraduate course had been the first computer course that I had taken that I had gotten an A in and actually enjoyed doing it! As such, with that seed still firmly in mind, I chose to spend two more years pursuing my dream of game programming by going to DePaul (a choice which was very much a bone of contention between Mindi and I for the first several months in Chicagoland). So I accepted the internship at US Microdyne, and registered for classes at DePaul University. Two months of finishing my bachelor’s degree and hunting for apartments later, we were established in our own tiny place in Park Ridge, IL.

The Joys of Small Companies

This first stint of my Chicago life actually turned out to be pretty easy on me schedule-wise. I worked as a CRM intern for a small MCSE consulting firm in Gurnee part-time, and had plenty of time to adjust to the courseload at DePaul (which features a non research-based masters degree for their computer graphics program), as well as figuring out the commute. I spent two nights a week in class, and the rest of the time I was either working or doing homework Everything was grand for 3 months, until I started to realize that I needed something more. Mindi and I weren’t necessarily in dire straits, but money was indeed a concern, and we both hated it. So I decided that I’d start looking for gainful employment as a computer scientist, having since consolidated my class schedule to where I could both work an eight-hour day and still make it downtown in time for class.

And with that, I started sending out resumes. I hit every company in the northern Chicago area, and pickings were slim. I got a couple interviews here and there – I was strung along for eight weeks by Walgreen Corporate (whom had hired Mindi back in February), and ended up securing a position at Allstate Insurance as a .NET developer, based solely upon the last computer science class I took at Iowa State (the class in C#). Armed with a salaried position and making enough money to at least be able to claim a respectable income, I went at things with renewed vigor.

Level Grinding and The Step Forward

I stayed with Allstate for nearly two years – from August of 2004 to May of 2006. While there I was able to demonstrate enough ability that management began to notice, and obtain enough expertise to actually serve temporarily as an architect (a position for which I was being groomed). However, the contentment that brought on this success was short lived for a single reason – I had a constant reminder of my overall goal every night that I went to class. I’d look forward to class days, as that meant I’d get to spend several hours learning about vectors, or animation systems, or Renderman-compliant renderers. The level-headed side of me knew I should just continue to wait it out at Allstate until I finished my degree (which I was rocking the house in, maintaining a GPA that is currently at 3.967 cumulative – the best I have ever done in any schoolwork, ever), but the impatient side of me kept nagging. Like a petulant child whining to its mother in a candy store, I wanted that jawbreaker in the display case. I wanted to work in the game industry, and I wanted to work there now.

So I started applying to game companies in the area. There wasn’t much available in the way of positions, but I figured I’d send out my feelers anyway. I started by joining the Chicago chapter of IGDA, and attending a couple of meetings. However, since I am a very quiet guy (until you get to know me), these didn’t bear too much fruit. As this was about January of ’06, it was coming time for selection of IGDA scholarship recipients to the GDC. Running across this deadline on the web motivated me – I believe the deadline was on a Friday, and I came across it on a Tuesday. That very night, I went home, sent in an application for the scholarship, and sent my resume off to three game companies in the Chicagoland area. Leaping that hurdle and actually doing something to move towards the game industry had two results: I got an interview with High Voltage Software (of Leisure Suit Larry fame), and I was awarded one of the GDC scholarships.

The interview with High Voltage was probably the most grueling interview I’d been through to date. I arrived at their building at around 9:45 AM, and I ended up leaving at 6 PM. I talked to at least 6 different people as I was examined, and spent a lot of time answering questions like “So what is it that interests you about game programming?” I finished out the day feeling that out of the 5 real interviews (the sixth was an HR presentation), I had won 3, lost 1 (the guy actually stopped me and said “Do you always talk like that?!”), and drew on the last (probably due to exhaustion). My policy is to never be confident after interviews, so I simply assumed that things would end up poorly and put the plans for working at High Voltage out of my mind (barring standards like thank-you letters and follow-ups).

Lo and behold, a week later I was told that while the feedback had been positive, they didn’t have anything for me at the time, but they might have something after E3 and I should keep them updated. At first I was crushed, as I didn’t get the position, but as I thought about it I realized that they probably needed to wait on some contracts to come through, as there’s no point in hiring a developer when there is no project available. So while still slightly optimistic, I generally wrote them off in the “not likely” column and went on with planning for the GDC.

San Jose, my First Time in California

The GDC was a blast. Easily the most fun I have ever had in a week discussing tech stuff. I roomed with three other scholarship winners just up the road from the convention center, and spent so much time talking and learning that I could barely sleep from the excitement and energy. I attended every single session (save a roundtable that I skipped so that I could catch the Nintendo keynote) and still found some time to chat with my mentor on the expo floor.

And it was the time on the expo floor that actually proved to be the best idea. As I was wandering aimlessly through the employment area of the expo, being rebuffed left and right by companies unwilling to hire a graduate student, I ran into a familiar face. At Allstate, the person who hired and trained me left the company in May of 2005, and just so happened to become a senior technical recruiter for WMS Gaming. I had heard of them before, and knew they made slot machines or something, but after talking to Chris (the recruiter) for a little while, I was excited about the opportunities that were available in the gaming side of the game industry. He introduced me to some of the tech leads in game development, and gave me his card, encouraging me to drop him a line.

I placed his card in with the others I had gathered during the day and made a mental note to keep that one in mind. I continued on through the rest of the conference. As luck would have it, I ended up entirely forgetting about it until my return on Saturday after the conference.

Networking Revival and the Realization of Dreams

When I got back after the conference, I did what every good little attendee looking for work should do – I started sending out follow-up letters to everyone that had given me a business card. After sending about 17 of these, I came across Chris’ card, and recalled my time at the WMS Gaming booth. So I dropped him a thank you, told him that I was looking for a coding position, and sent along a copy of my resume. About 3 days later, Chris called me and set up an interview. Two weeks after that, I accepted a position as a software engineer at WMS Gaming, starting on May 1. This, my friends, was the culmination of a dream that began at the age of 14. It was my first step through Tom Sloper’s game-industry eggshell. I had made it into the gaming industry, and I couldn’t be happier.

I’m now two months into my employment at WMS Gaming, and I am enjoying nearly every minute of it. Something about being able to write code that has visible results in a game just sings inside of me, filling me with a sense of accomplishment. I work on the frameworks team, which is equivalent to an engine team in a standard game company. My team writes all of the common functionality for the company’s slot machines, and writes the code to interface with the operating system layer of the machines themselves. It’s a blast, and I’m glad I made the step so far.

Along the way, I’ve been able to recognize several things that are vital to not only my success, but that would prove beneficial to most people seeking similar employment. Take these tips as you will – be that as genuine advice from an industry professional, or simple good ideas from another starry-eyed wannabe:

  • Learn to teach yourself – Invariably, those people that attempt to learn about the industry outside of the classroom in addition to their standard education will be the most successful at breaking in to the game industry. Plan to make a game, or three, and to spend a large amount of time reading tutorials.
  • Don’t just plan, do – The most critical step in any activity is that which takes one from planning to action. It’s all well and good to have hundreds of staggering game and demo ideas floating about in your head, but until you get them on paper at the least, and implemented at best, you will never impress the right people with your prowess.
  • Develop a set of established resources – Build a library of coding books. Search for and read through instructions on the net as much as possible. Participate in developer’s forums and newsgroups. The more time you spend searching for the material, the more knowledge you’ll end up with. Some of my haunts are below:
  • Learn about more than just the programming – The industry is more than a set of 1337 h4×0r d00ds coding into the wee hours of the morning. Learn about the process of art and model creation. Keep an eye on the business of making games (gamasutra and http://www.games-industry.biz can be good sources). Learn about the realities of managing software projects, as well as what happens when that management fails.
  • Network – People go with what they know, and if you aren’t networking they don’t know you. While 100 different game industry professionals will have their 100 different breaking in stories, I guarantee that a significant percentage of those stories will be something similar to “I knew a guy who put in a good word for me”. Attend your local IGDA chapter meetings, participate in forums and newsgroups, go to the GDC, and generally do whatever you can to get your name out there among the professionals in your area.
  • Specialize – A swiss-army coder doesn’t quite work at the entry level. Game companies are looking for individuals that can do a specific task, and do it well. Research the various kinds of programming that go into a game, and study them relentlessly. Pick one thing, and be good at it.
  • Generalize – The above doesn’t mean to ignore everything else. It helps to have a working knowledge of at least two or three additional areas, as no piece of code exists in a vacuum, and you never know what you’ll be called upon to fix when the testing phase comes around.
  • Have other interests – Recognize that there’s a life outside of the computer, and live it. Especially if you want to break into something like design. You’d be surprised what kinds of things will have a bearing on your progression as a professional.
  • Don’t be a slave – There’s a difference between working hard and working dumb. Of course we can’t choose our manager’s personality, but don’t be afraid to say “No” if you feel unreasonable demands are being placed upon you. Visit places like http://www.gamewatch.org, or the quality of life forum at the IGDA, to gain perspective.
  • Be a team player – Of course, the above doesn’t mean that you can slack off and leave your coworkers to their own devices when the going gets tough. It’s all about striking a balance. Sometimes, it is necessary to work a little bit longer than you should (for which you should either a) be justly compensated or b) have an environment that recognizes these situations as the failures of management that they are).
  • Finally, be optimistic – An article I read somewhere on a job interview said to avoid the cynic like the plague. Keep a positive outlook, even in the face of adversity, and continually reassure yourself that while it’s not easy to get in and stay in it has been done before, and if you work at it hard enough you can make it happen again.

Thank you to those of you who have made it this far (9 pages in MS Word at this point), and best of luck to those of you trying to make your way into the industry. If you have any questions or comments, feel free to drop me a line at mattbillock –at- mattbillock !dot! com (beware the spam filter).

Leave a Comment more...

The quest for PS2

by Evil Stick Man on May.02, 2006, under Game related, Randomness

Mindi and I were in Ames last weekend for the annual VEISHEA celebration, and on Saturday afternoon we decided to hook up with a couplle buddies and take care of a nagging Guitar Hero urge that had not been satisfied in many a week. Our only problem - not a one of us had access to a PS2.

So we began calling. We started with relatively close friends. Our thought was if we could entice someone we knew into the use of their game console, we would not only achieve our goal, but we’d also maximize our following enjoyment by expanding the “talent” pool of mini-guitar goodness. However, the fates conspired against us as, after an hour of cell phone usage and face-to-face questioning, the best we could manage was access to a semi-functional console that would be just as likely to eat the precious game as it would be to operate properly. Had it been any other game we would have been less reticent, but the mere thought of scratching the “disc of power” cast a shadow over our hearts. At the very least, the situation had us thinking that a sure thing was better than potential destruction.

Thus we abandoned the harassment of our various social networks to attempt a new means of console-based fulfillment - the purchase of a new unit on the cheap. It just so happened that one of our buddies was in a pawn shop at the time. So after some brief questions and some remote investigation, we discover that a pawned PS2 can be hand for $75. We received this knowledge at first joyously (to be honest, the person on the call misunderstood at first, so we heard $35 instead of $75, which lead to many comments along the line of “$35? Sweet! Get it!”), but after much deliberation (and comparisons to orders of chicken nuggets from Wendy’s, thank you popular culture) we decided that the $75 price point was a bit steep for a machine whose retail price had just been lowered to $130 (Yes, I know it’s actually $129.99, but I can’t stand intentionally confusing numbers invented by some moron in a marketing department who figured out that the vast hordes of mindless sheep will think they’re getting a deal at a penny less than the target price).
So we hit the local electronics-oriented stores to see if anyone had a used unit at a reasonable price (which, by popular agreement, came out to be $50 or less). We checked Target, which sold their used systems for $110 - so Target was out (though we did pick up some communal pregnancy tests and joy-jel, in case the “urge” was felt, to carry through the cashier’s line staffed by my sister-in-law - purely for comedic effect. At least I thought it was funny). Gamestop was no better at $105. What I absolutely could not fathom at that point is how anyone looking at the price of the used system wouldn’t make the gigantic mental leap to understanding that the total savings on a used system were approximately equal to the price of gas to drive to the store. But I suppose I just don’t have the kind of frugal mindset where that $20 I would save would actually make me give a rat’s ass.

So we turned to our final hope (barring, of course, the Tempermental Console of Potential Terror) - video rental stores. Two of us at the same time remembered that way back in the day, stores like Blockbuster Video (a chain which, by the way, does not maintain a presence at Iowa State University) would rent consoles to those of us who laked the sheer audacity in our parent-nagging ability, and were thus forced to go gameless. So we began our search. It would do well to note at this point that while Ames has a population of about 35000, it is by no means a large town, and as such there are a grand total of 4 video rental stores spread over about 3 miles of Lincoln Way (the “main drag”, so-to-speak). So we figure since three of them are clustered fairly closely together in the east, we would hit those three first. First shot - Hastings. After a search of half an hour for a rental employee, we leave playstationless. The next stop is more promising - Hollywood Video, a major chain. We walk in and cheerily ask the person behind the counter about their PS2 console rental capability, and are instantly met with dissapointment. At this point, some of us begin to question the sanity of searching for such a console in the first place. After all, isn’t the point of gathering with friends to revel in the interactions between disparate individuals that enjoy the company? While this may be true, we decided that at this point we wouldn’t stop until we had exhausted every available option. The PS2 became our holy grail, and we were diligently tracking along the DaVinci-fabricated path to entertainment-based enlightenment.

After reaffirming our mission, we hit the lesser-known and slightly seedy “That’s Entertainment” (which, coincidentally, appears to stock a large selection of transexual porn. Who knew that such things would find a significant customer base in central Iowa). No luck here either, but the teller is able to give us a bit of hope by directing us to Family Video, which she is certain carries a system for rental. As Family Video is the final store remaining, we decide to hit the liquor store before the trek. After all, what is a night of true enjoyment without the proper mood enhancers? Beer in hand, we embark on the cross-town trek to Family Video. We park our vehicle and approach the store somewhat cautiously. After all, we had been confronted with dissappointment after disappointment in our quest. Careful not to get our hopes up, we enter the store and head for the video game section. Lo and behold, a sign of hope - advertisements for their console rental rates! Heartened, we search the gaming area thoroughly, but are unable to find any trace of the aforementioned fulfillment!

Baffled, we approach the cashiers, wondering if we had come this far to be defeated by mere logistics. After all, wouldn’t the ultimate insult be if they had already rented out their final system? But fear not, for the cashier instructed us to simply turn around, where we found the rental systems in all their glory, smiling at us from durable black carry cases. We triumphantly grab the last remaining PS2 - our quest was complete! Elated, we didn’t even bat an eyelid at the $50 deposit required for system rental (and besides, here we were renting a game system, with no games, on an account that hadn’t been accessed since approximately 2004 - not necessarily the most desirable of rental realities). We triumphantly left the building, and began a night of revelry and miniature guitar-based joy that may never be eclipsed.

So the question may be raised: as we are all students of life, what did we learn from this experience? I think we learned the following:

- Used game systems do not offer the same value to the buyer as used games
- My sister-in-law is not as shocked by fornicational assistance products as one might hope
- While the object of your search may always be in the last place you search (because honestly, who keeps looking for something after they’ve found it?), it is often the case that the object of your search is also in the last place that it would have been possible for you to look

But the most important lesson is that if a friend suggests bringing a game for some tournament-style gaming, always ensure that you have the equipment necessary at hand.

Leave a Comment more...