Global Game Jam 2014 Redux


Global Game Jam 2014 was this weekend. I jammed with everybody at the IGDA-TC location. This year's GGJ had people participating at 485 locations in 73 countries. I think there were close to 80 people at our location, and several of them stayed on-site for the entire 48 hours. I think one person stayed there and stayed awake for the entire 48 hours. No, it was definitely not me. There are twelve of our games on the website, but I know many other games and prototypes were worked on by the attendees. I ended up making the game Eye Cycle.

Jam Memoir

This year's theme was the sentence, "We don't see things as they are, we see them as we are." I was pretty stumped in terms of game ideas from that theme, although I will say it left me pretty deep in thought about the nature of games themselves. Surely, the way we perceive other peoples' games often says more about ourselves than those games. And definitely the games we make say something personal about ourselves. The best games are maybe the most personally meaningful... even if that meaning isn't explicit to the player.

After the theme was announced, GGJ kicked off like it always does with a group brainstorm where people share their game ideas. This has always been one of my favorite parts of GGJ, because I love to see everybody's creativity and riff off the ideas that are shared. I think between a combination of a giant crowd, and a very tough theme, our brainstorm was a little subdued this year. It was still a highlight of the weekend, though.

I came to the brainstorm still detached and thinking about the existential meaning of the theme, but with a couple of concrete ideas. One of my thoughts was that the entire video announcement of the theme was all in fair play in terms of inspiration for our games. The letters in the theme sentence were animated in the announcement video, with the outline of each letter traced out like a maze, snakes, or light bikes. By the end of the brainstorm, taking inspiration from several of the people who presented, I had three or so game ideas. A big "a ha!" moment for me was when a participant named Andrew brought up the idea of a game taking place on the surface of an eye. He ultimately joined up with folks to make a game in a totally different direction, but as you will see his idea really inspired me.

I spent some time after the brainstorm still feeling unsure about any of my three ideas, and very curious what everybody else was doing. Last year I ditched all my ideas to join up with two other folks, and that was a lot of fun. So I milled around for awhile talking to different people, bouncing my ideas off them and asking what they were going to do.

There were other games I was pretty interested in. One team was doing a rogue-like game. I'm a big fan of that genre, and I really like the folks on that team. I almost tossed out the idea of programming my own game just to make myself available to help them with pixel art all weekend. There was another team doing 4-player local multi-player games, and again the team was comprised of some of my favorite folks.

There was an actual common thread to why I didn't end up working on either of those games: they were both comprised of teams of Unity developers. I'm interested in Unity, but don't have any meaningful Unity experience. I've always been shy to tackle an entirely new platform during a Game Jam since time is so limited. I usually try to play to my strengths and focus on learning a few smaller new things instead of one really big new thing.

It was through the process of talking to other people about their games, and sharing my loose ideas, that I finally got some focus around one particular idea that I was excited about. My idea was for a Nibbles/Snake/Light Bike style game, but the visuals of the game would be rendered as a reflection on the surface of an eyeball. Conceptually, I thought of there being this virtual environment with a game running on a screen and person standing in front of it "playing" it, but you as the observer (and actual human player) would be watching and playing the game off the reflection in the eye of that virtual player. This idea lent itself to some really crazy visuals, and then all sorts of weird interactions between the virtual eyeball and the reflection of the game. What if the eye blinked? What if the player colors matched the pupil and iris colors? What if the eye moved or the pupil dilated?

I sat down on my computer sometime after 10pm on Friday night. It seems crazy but I started from scratch and wrote a custom game engine in JavaScript. For very simple games that have specialized procedural graphics, this ends up being not so crazy. I also spared myself the work of writing my own bubble warp pixel shader by using glfx.js. By about 1am Friday, I had a really solid working visual proof of concept. I will say, for a game in a different genre, even something requiring 2d sprite based graphics, it would have been way too much work to roll my own engine. But for this game concept it worked out fine.

I got about 5 hours of sleep at home early Saturday morning, and then I was back to the jam site around 1pm on Saturday. Within a few more hours I had a playable game. This freed me up to spend time doing things like chatting with others about their projects, play testing their games, having them play test my game, and picking peoples' brains about what changes to make to my own game.

Additionally, I ended up having enough time to write an input manager class that will really come in handy for future projects. You can see it in my source if you go looking, but I plan to put it on GitHub. One of the big pains of writing your own game engine from scratch is writing the input handling code, so it'll be nice to have a go-to solution in JavaScript for the future if I decide to go with a custom engine again.

More importantly, I integrated the new-ish web browser HTML5 GamePad API. This library came in really handy by abstracting the low level cruft of that API and mapping the various gamepad button names into consistent labels. I was playing my game on PS3 controllers, allowing for analog stick control of the eyeball, which was awesome! In the end, I have code for easily supporting both keyboard and gamepad inputs generically in any future JavaScript games I make. This will really come in handy for making local multi-player games, because now I'll easily be able to support four simultaneous players on xbox/Playstation controllers. You just can't do that kind of local multi-player gameplay on a keyboard.

I kept working on little details of my game the rest of the weekend, and improving the input system. Another one of the jammers at our location named Dan Knoflicek was nice enough to help me out with sound and music. He did a fantastic job of capturing the creepy Hitchcock-esque vibe that I kept seeing in the giant eyeball. Check out my final submission for Global Game Jam 2014: Eye Cycle.

Lessons Learned / Thoughts on Technology

I was reminded that there is actually more time in a 48 hour game jam than I think. This means that really there is plenty of time the first night for exploring several games with multiple teams. Even if a team isn't lined up with me on the technology side, if I am interested in their game I shouldn't be afraid to hang out and contribute during the brainstorm and design cycle that happens after teams first start to form. And who knows, a way for me to contribute might still emerge even with technology differences.

Also, since I am actually interested in Unity, and I like both C# and JavaScript, jumping into Unity over a weekend probably wouldn't be terrible. My friend Marty had a smart plan for learning Unity this weekend by teaming up with people who were very established with that platform. I could do the same thing next year, or I could just jump into the Unity waters anytime this year ahead of the next game jam.

I do somewhat lament the dominance of Unity in our community. Of course, it is dominating in the game development world in general these days, so it is not at all surprising. I'd like there to be more interest in "HTML5" (really meaning JavaScript) game development locally. I've personally been able to accomplish my game making goals in JavaScript so far, and I've often been able to prototype things remarkably quickly. If there were more JS gaming folks locally, I'd have an easier time finding collaborators at game jams. And considering that I had a playable game by early on Saturday, if I was part of a team of JavaScript developers instead of working solo we could have really done a lot more!

I guess an alternate idea would be to train somebody up on JS game development during the game jam. It seems like there are a lot more people very new to game development who are interested in JavaScript, and a lot fewer people with a lot of JS gaming experience. So I guess that's another option, coming back to the idea that there's more spare time in 48 hours than I think there is.

As for why I work in JavaScript... well, there's a very convenient symmetry for me between being a JavaScript game developer and JavaScript web/mobile developer. I am both a game developer and a web/mobile developer, so working in JavaScript across the board creates efficiency for me. That said, JavaScript is actually a programming language and not an engine and tool set like Unity. JavaScript has APIs for all my major game making requirements like WebGL, Web Audio API, Touch Events API, Mouse capture API, Fullscreen API, Gamepad API, Websockets, etc etc... but since there is no de facto JS game engine, that still makes collaboration more difficult. I do like the free and open source nature of the JS ecosystem, though.

Big Wins of the Weekend

I'm really pleased with how the eye turned out, and it is inspiring all sorts of other gameplay ideas for me. I feel like there's some serious potential for other games on the same spherical eyeball surface. There are a lot of opportunities for interesting interplay between the eye as a part of the game level and the players. There are also options for asymmetric play where one person plays as the eyeball with different goals than the other players who play on the eye.

My input control class will come in really handy for any future scratch made JS games I do during game jams. The game pad integration I did is awesome, and that opens a ton of doors for 2-4 player local multi-player games. I've already got some great new ideas for multi-player games. I'm super excited about that!

More than anything though, hanging out with a ton of people making awesome games is always an amazing time. The people at IGDA-TC are all really smart, fun folks. I always learn something new and get very inspired. And the feedback is fantastic. When I have people play testing at Global Game Jam they give me really killer ideas for improvements.

Global Game Jam is awesome, and you should definitely participate next year!