Sunday, May 11, 2014

Crowdsourcing Unreal Tournament

I spent an awful lot of time from my middle school years forward learning everything I could about the mechanics of making video games. The goal being, of course, to make my own. And not some silly small asteroids game or anything like that. No! I wanted to build Shooters and Platformers and RPGs. The epic kind! With lots of story and cut scenes and hours of gameplay in massive open worlds! (Ah, the joys of blissfully and unknowingly throwing oneself at impossible tasks.)

As you might imagine, I failed spectacularly at this effort. Luckily for me I never quite viewed it as a failure. It was just a matter of not yet knowing enough about subject X or software Y or technique Z. So my quixotic quest actually propelled me to learn a tremendous amount about programming and graphics development and all manner of related subjects, a fact which I am enormously grateful for today as it has directly led to my current employment. And even today I still have a tendency to chase after projects that are too big for me to reasonably handle in the free time I have available. But that's okay, because this is one of those cases where shooting for the moon really can land you among the stars, and it gives me a wonderful excuse to try all manner of fun, crazy things that would never come up in the course of my day-to-day job but still prove useful anyway.

Given this background, I couldn't help but feel the tiniest bit sad that Epic didn't announce their latest engine pricing or their new crowdsourced path for the next Unreal Tournament about 15 years earlier. Teenage me would have been all over that! I spent a decent amount of time hacking with the Quake 3 SDK and other similar code bases, mostly in an effort to learn more about how they worked and how "real" programmers did things. The idea that I could have access to the full source of a modern game engine for a few dollars a month would have been a dream come true! And beyond that, the fact that I could have not only watched but participated in, from day 1, the development of a AAA game would have probably killed me with giddiness. That was exactly what I wished I could have back in the day: A perfect little portal through which I could view the professionals at work creating something real, large, and "cool". I think I would have poured many weeks of my life into following the project and trying to contribute in any way I possible. (I shudder to think of 15 year-old me's code actually ending up anywhere public though. I was better than a lot of people gave me credit for at that point but I wasn't nearly as good as I thought I was.)

I'm still contemplating getting a subscription just to peruse through the code and maybe contribute a few fixes here and there, though my practical side reminds me that I know I won't have the time to participate like I want to. I'm still super excited to see how Unreal Tournament comes together (and I'm crossing my fingers that this grand experiment doesn't implode, if only because I want to see it happen more often.) I'm also somewhat selfishly excited because the nature of the project pretty much guarantees a WebGL port at some point. :D

If, however, you are that kid (or adult) still dreaming about getting into the game industry at some point though, take my advice: PARTICIPATE IN THIS PROJECT! Any way you possibly can! Art, level design, programming, sound, whatever. Do it! And for the record: No. Jumping on the forums and saying "These are my ideas to make the game awesome! Now go make them happen, other people!" is not participating. If you think that counts as "game design" you've got a truckload of disappointment headed your way.

I've already heard some cynics griping that Epic is getting free labor out of this (they are), but I'm telling you now that spending some of your time and talents making Epic's game will be worth it to you if this is the field you want to go into. Not only will we hopefully end up with a great game at the end of the day, but you'll get a front row seat to the realities of working on a large game (which shares a lot with the realities of any software project). Thinking mostly about programmers, this includes but is not limited to:
  • Picking up on all sorts of new techniques, patterns, and concepts that you didn't know before. This one is kind of a given, but might as well point it out anyway. I've yet to encounter a code base that didn't teach me something new.
  • Learning to work with other people's code/workflow/style/etc. Do you feel strongly about tabs vs. spaces or where your curly braces should go? That's nice. Nobody cares. Learning how to be productive in a large codebase that you're not familiar with/disagree with is a challenge that you will face over and over again throughout your career. This a a really great, low risk way to practice that.
  • Learning to coordinate with other devs, probably half way across the globe. I'm pretty sure that if you code in isolation for a month straight and then drop a 10,000 line pull request in Epic's lap you'll be laughed off of GitHub. Any large project requires small, atomic changes that play nicely with the hundreds of other small atomic changes that are going in that day. Some cooperation is necessary. Cowboys need not apply.
  • You'll get to see parts of the development process you didn't even know existed (I hope, anyway!) Continuous integration testing? What's that? There's a lot of infrastructure around any significantly large project that (in theory) prevents the whole thing from blowing up because Jimmy from the UK office forgot that JSON can't have trailing commas. Unfortunately while this sort of rigor is necessary for basically all commercial products it can be actively harmful to the productivity of small personal projects, so you rarely get a chance to see it in action before you land in a job that requires it. I'm really hoping that Epic pushes this part of things out in front of the community, because it would be an excellent primer for new developers.
  • You'll discover hard truths about software/game development. I mean, really, why didn't they leave the gun that fires monkeys in the game, huh? Isn't that just the coolest idea ever! Yes, it was, until the dev team realized that the requirements of integrating MonkeyProjectile with the rest of the code base was adding ridiculous amounts of bloat and fragility to all other projectile types. (Why, exactly, does my GrenadeProjectile code need to process OnEncounterBannana again?) Decisions get made about software all the time that has pretty much nothing to do with how awesome a feature is. It's easy to gripe about from the outside, but hard to argue with when you can watch all the considerations that go into it.
  • You might, just possibly, end up with something resume worthy. I wouldn't recommend calling out in future job applications that you changed the default friction constant from 3 to 3.1 (Yes, I know it totally changed the feeling of the controls. Good for you.) but if you actually contribute something significant then it's worth calling out.
I'm not saying that participating in the development of Unreal Tournament will net you a job at Epic or anywhere else. If you put some effort into it, though, you'll walk away more experienced for having done so. Don't be scared that you're "not good enough", and don't be discouraged if nothing you do actually makes it into the final product. Experiment! Watch! Learn! Ask questions! (And don't be afraid to ask stupid questions! That's a skill you need to learn fast.) Make some changes and submit them. You will be asked to make changes, large or small, to your code before your contribution will be accepted. That is not a sign of failure. It's part of the normal development process. Above all, take advantage of the fact that a team of professionals is willing to build something right in front of your eyes. If you have any interest in this field at all, you owe it to yourself to at least watch carefully.

That's what I'd tell 15-year-old-me if he was here, anyway.