Sunday, January 31, 2010

Reflections from Global Game Jam 2010

I posted a characteristically long blog entry via my account at globalgamejam.org, which I will repost here:


I've survived the Global Game Jam, and my team created something resembling a game. To say that I'm happy with it or proud of it would be untrue, unfortunately. It's hard not to look back at all the things that could have been but weren't, or imagine what could have been added if only we had slightly more time.

In the end, we created an espresso stand themed mini-game, essentially. Was it innovative? Not really. Was it fun? Not in its 48-hour state, but there was potential at least. Was it the game I dreamed of making during the months preceding the Jam? No. Why? What went wrong? I will try to address these questions in a way that won't spiral into hopeless negativity.

My first blog entry listed the lessons I learned from my last Game Jam. I want to revisit them to see how well I did, and then see what new lessons I learned from this one:

* Find a team you mesh well with.

My teammates were cool people, but it was clear that we had very different goals and very different sets of experience. Dwelling on this will only sound like blaming, but suffice it to say I didn't do a good job here.

* Use source control.

We had an SVN server up and running pretty quickly, and this saved us. I don't even want to think about the challenges we would have faced otherwise.

* Scale scale scale

Our overall game idea was indeed very straightforward, but we aimed for far too many embellishments than we should have for a 48-hour game. Probably half of the time was spent creating/working with content in some form, rather than coding actual essential gameplay logic. Because of this, we ultimately had to cut key features of the game.

* Throw solid coding practices to the wayside

I feel we reached a really good balance here. Our code was structured in a fairly logical way but with some corners cut for the sake of time (for example, avoiding unnecessary future-proofness by hardcoding logic which assumes two players).

The lessons I learned from this Jam were mostly rehashes/reinforcements of the previous lessons:

* Find a team that you mesh well with, part 2: I had been excitedly anticipating this event for months in advance, and all my friends knew because I talked about it constantly. Naturally I arrived early, brought tons of supplies/food/drinks with me, set up my laptop with source control, etc. ahead of time. I should have immediately seeked out other developers who shared the same passion. And remember, you are inevitably going to have to compromise on a design idea. So find people who have design goals as close as possible to yours (e.g. don't group with someone who is passionate about Myth-esque puzzle games if you really want to make a retro shooter)

Speaking of design, I might get flak for saying this, but for a 48-hour game, a designer with little or no programming experience is dead space unless they're also an artist. Everyone is a designer. Everyone has ideas. Yes, there are good designers and there are horrible designers. But even a great designer who does nothing but design is not worth it on a 48-hour game. More likely than not, a dedicated designer will only increase the scope of the game by dreaming up infeasible features, causing friction with the developers who actually have to [dare I say] do the work.

If you're lucky, you'll find a programmer who is already good-enough at art. The artistic bar is not exactly high for a 48 hour game, so "good-enough" is all you need. A dedicated, exceptional artist is a great asset as well though, because it's often the aesthetics that really boost the appeal of games of this scope.

I didn't mention sound designers, because again, the scope of the game is so small that sound is often an afterthought, but they can be a great addition if you can afford the opportunity cost.

* Scale scale scale, part 2: Your design should be iterative even for a 48 hour game, but a crucial point is that this design should start extremely simple. Find a core mechanic, keep the mechanic DEAD SIMPLE, and if you have time, iterate on it. Here's a counter-example of what I mean:

For our espresso game, "Cheap Shots", the original plan was to have players create different drinks by pressing buttons in a particular sequence on an Xbox controller. So, one drink might be A, B, B, X and another might be X, Y, A, B (the buttons were supposedly associated with different ingredients). Before we had even completed implementing this basic mechanic, we began dreaming up new ways to add ingredients; for example, holding the trigger and releasing it at a particular time might be associated with steaming milk, or turning the thumbstick on the controller might be associated with stirring the drink. This was a mistake from the start. I ended up spending precious amounts of coding time trying to implement these special case scenarios (keep in mind they all required additional UI assets as well), while core gameplay mechanics were being neglected (score board, game timer, essential UI elements, etc.)

Further, we spent what felt like half of our time dealing with mountains of sound assets that were completely non-essential to the gameplay. These were the types of niceties that could be added after the fact, when the core gameplay was done.

So, in short, it's not just the game that needs to be simple; the core mechanic needs to start dead-simple and optionally build from there after you have a complete gameplay experience.

Here are some additional lessons I learned, though some are minor:

* Make sure that your working environment is comfortable.

DigiPen was great. There was an active work environment with plenty of space. But when you're working for 48 hours almost nonstop, even the minor things can become major annoyances. I was foolish enough to position myself in the middle of a long table, separated enough from my team that any time they called me over, I needed to practically climb over my table or else squeeze by several people to get to them. After the 25th time having to do this, I was ready to relocate.

Also, make sure you have the best setup you can get; a large monitor, comfortable mouse, etc.

As soon as you sense an annoyance, fix it, or it'll be a thorn in your side for the next 48 hours.

* Time is precious; don't waste it.

Yes, I know, this is obvious. My point isn't about goofing off excessively or being lazy. If you're inclined to do that at a game jam, you're probably not passionate enough for it to begin with. I'm talking about other time wasters. For example, you don't need to notify your team about every single change that doesn't affect them, show them every cool thing you added, or ask them questions that you can easily find the answer to yourself (i.e. "Where is X defined in the code?"; there's a search function for that). Remember, assuming you picked a good team, their time is every bit as valuable as yours. Every time you interrupt them in the middle of coding, you break their concentration. You force a "context switch", and it takes them time to regain their focus. Don't have needless conversations in which you explain at length how you intend to implement something; just do it. And similarly, don't explain at length how someone elsemight possibly implement something, unless they are requesting your help or are working on a shared component. They could be using that time to actually implement rather than discussing it.

In the off chance that anyone actually read through this in its entirety, I hope it provides some value.

Sunday, January 17, 2010

Indie game developer YouTube/Vimeo channels

I think that blog posts would be a horrible place to store reference material if not for the indexing power of search engines.  So with that, I am going to compile a list of independent game development teams who post videos of their progress on YouTube or Vimeo.

(Last updated: 1/23/2010)

Adventures In Game Development / Elysian Shadows

Fireravens Unlimited

JForce Games

phantasqProductions

Amateur Game Development

I find these really interesting.  The team members vary in age from early teen to around college-aged and slightly beyond (which admittedly makes me feel old), and I love seeing the process they go through, the lessons learned, etc.  You’ll see a lot of common themes: over-confidence and optimism initially, drama amongst team members, loss of motivation, major design changes / scaleback, and other issues typical of any software development team.

Monday, January 11, 2010

The State of Middle Brain Software

Admittedly, it’s been a long time since our last update.  I will try to be brief regarding our status:

The Bad

  • As you can tell, our first project, an XNA Game Studio game, made a slight amount of progress and then, like so many others, died.  We have no plans to resurrect it, and even if we did, it would likely be on a different platform.
  • Our second project, the iPhone game, also failed to get far off the ground.  I blame myself for taking on a project that was too challenging for someone just beginning with iPhone development.

The Good

  • I continued to train myself in iPhone development over the past year, and Dave and I actually released a cartoon-photo-editing app called PhotoToons

It’s a fun app that I’m excited to continue updating with new stamps and features.  Most of the stamps were created by your favorite artist and mine, Dave Johnson.  You can look forward to continued releases in the coming months.

  • We also released an iPhone app for Dave’s podcast (The Dave and Steve Show), called Dave and Steve’s Droppings.  It was remarkable how much faster the development process went compared to PhotoToons thanks to the learning hurdles I had since overcome.

63d0711453425042.jpg Dave and Steves Droppings (entertainment)


The Present and Future

Oddly enough, my previous post discussed the necessity of me learning OpenGL ES in order to create a game with reasonable performance.  Well, over a year later, I’ve become far more competent with the technology, and have surrounded myself with resources (both text-based and meat-based) that have become invaluable in the past couple months.  More importantly, I’m making a conscious effort to ween myself of the “it’s too difficult, don’t bother” mindset. 

Given this, I’ve been hard at work on a 2D game and engine.  I want to start with something feasible and simple as a learning project.  One potential application Dave and I have discussed is a mini-game incorporated into the Dave and Steve’s Droppings app.

Stay tuned to see what becomes of our efforts!  If nothing else, you can laugh if the next post arrives a year from now.

Wednesday, October 8, 2008

OpenGL ES

After seeing the multitude of AppStore games which undoubtedly use OpenGL ES instead of my hacky method of what amounts to UI controls as sprites, I've decided to bite the bullet and switch to using OpenGL ES for the game.

This of course means that I will spend weeks more doing research, learning how utterly crappy the APIs are (not to mention the utter lack of thorough documentation) compared to XNA Game Studio and wishing I didn't have to put up with this just to target a popular platform. Changes to the game will be virtually non-existent if not backwards for a while. I am crossing my fingers that I'll be able to work on an XNA Game Studio project simultaneously in order to keep my spirits up.

That's right, folks. C#/Visual Studio/XNA Game Studio is so much more pleasant to work with that I'd rather work on two projects at the same time than suffer with just one for the iPhone.

Sunday, September 28, 2008

Latest gameplay video, at the cost of boring dev details

If you want to skip boring details about my struggles, skip to the video at the bottom of this post.


I've at least found a good temporary solution for the landscape issues, and I've been progressing with learning Objective-C / Cocoa / UIKit / etc. but not to the point at which I can concretely delineate between each of these terms. I'm also struggling a bit but getting the hang of several things.

I finally installed a third-party mouse configuration software so that I can get more than a kindergarten level of control over my mouse sensitivity.

I'm getting the hang of the MacOS app launching model, the dock bar and how it represents running versus non-running programs, the "Finder" file browser and its quirks.

XCode is like Visual Studio lite, or perhaps "Visual Studio Gimped". I've chatted endlessly on IRC with people who gladly praise XCode over Visual Studio, but I wonder if they've used VS2005 or greater. It's just no comparison; there are redundant windows/panels everywhere, the debugger runs in a separate tiny window, though you can resize it, covering your other windows. The expression watcher is nowhere near as powerful as Visual Studio's, and Intellisense (or its equivalent) is weaker in its implementation, requiring more keystrokes for simple tasks.

Speaking of the tiny debugger window (obviously resizable), this is a common observation with MacOS. It seems the norm to be expected to manually drag windows around and place them as you need them; stretching them to just the right extents, etc. In Windows my usual mode of operation is to only do that when I'm copying files from one explorer window to another. When I'm running apps, I generally switch to the app, then maximize the window if it isn't already maximized. Windows seems to work well with users who are used to this behavior. MacOS doesn't seem to be expecting it; hence, I'll find that apps have lots of little "helper" windows that are expected to be resized to comfortable dimensions for the particular user at that particular time. This is not how I want my apps to work. Visual Studio supports this, but also a very extensive docking scheme so I can have all my windows docked where I want them instead of floating about in the ether, always getting in the way of content behind them, or else getting hidden themselves when I click somewhere else.

Again I find it ironic that so much of what makes the iPhone dominant over Windows Mobile is the same that makes Visual Studio dominant over XCode and the general Mac development situation. Of course, I am trying very hard not to bias my arguments with my existing familiarity with Visual Studio. There's still much more to learn.

Other factors which add major hurdles include simple things like the feel of the keyboard. It's no longer Ctrl-C, it's Command-C, etc., not to mention completely different dev environment hotkeys. And on my particular keyboard, the Esc and F-keys are tiny.

I finally bit the bullet and sacrificed dual-monitors on my PC in order to have a dedicated monitor with a DVI input from my Mac. I also switched placement of my keyboards/mice so that my Mac is in my primary workspace on my desk, and my PC is riding shotgun. This will encourage me to give my Mac some more love.

If you've read this far, your reward is a video of the app in its current state, run through the iPhone simulator. Long story short, I need to go through a long, painful process to enable deployment to my iPhone ever since switching Macs.

Saturday, September 27, 2008

F#$king Landscape mode

I have spent the vast majority of my coding time on this project trying to get the damn iPhone to properly handle content created for a Landscape-only orientation.  I never realized how much easier life would be if I was a good boy and just kept everything in Portrait mode.

I heard rumors that the 2.2 SDK (currently 2.1) will include a fix for the landscape-mode hackery that exists now, and hopefully this will prevent me from needing to create a transform and do some sort of wild, seemingly arbitrary calculation to find the center point of my view (used in the aforementioned transform).

This really is insane.  I don't know how people say they've been able to get apps going in like 10 days.  Actually I do know why: they weren't creating apps in landscape mode.

Sunday, September 7, 2008

Vacation...

I know you've all been wondering why I haven't updated in a while. There are two reasons: 1) I haven't had a Mac available for iPhone development since August 28th or so, and 2) I'm on vacation right now in Disney World, returning September 10th.

I'm having an awesome time but it'll be really nice to be home and back to my geeky endeavors.