Gamejam: Post Mortem
11/18/14
So, between 6 p.m. Friday, November 7th and noon Sunday, November 9th, I and two other people made a game called Shapes in Wonderland
The Other People
Of the people I was working with, I knew Carlos personally. He's a good friend I have had through the majority of college. The other person, Andy, I did not know much at all, excpet I played an HTML5 game he had been working on previously. He joined because he, too, explicitly wanted to make an HTML5 game.
The whole weekend, Andy was doing a lot of cool things. Cool things that I had trouble integrating back into the main game, because Andy didn't know how to use git. Which, you know, not his fault. It really was unfortunate. Our original game was going to have circles instead of squares, but I had trouble implementing it, and when Andy got it working, he got it working in really old code that didn't really look anything like our current baseline.
He ended up implementing the slow shrinkage and growth of the squares in the final game.
Carlos, in comparison, was a lot easier to work with. In fact, I had worked with him on a project before for a class. We discussed organizational strategies and worked on making parallel development more git merge friendly. We also both took this as more of an opportunity to get familiar with the crafty.js library. Lots of experimental code figuring out how stuff worked. Also, lots of complaining about the crappy documentation.
During development and in retrospect, it kinda feels we didn't try to include Andy in our process enough, which really wasn't fair, and probably hurt the end game, because again, Andy was doing really cool things.
Picking Crafty, Fighting with It
The game got off to a rough start. We had no idea what we were doing, and were hunting down libraries. We ended up picking crafty because I had heard good things from multiple sources about it. I wasted the whole first day fighting with crafty instead of trying to learn it.
We wanted to render shapes. I thought that'd be easy. It was not. We found a hack someone had posted online for rendering circles. It had its problems, because it didn't take advantage of Crafty's built-in entity movement functionality. My attempts to fix this only revealed my own ignorance about how Crafty functioned.
Eventually, I conceded that I was taking too much time fighting Crafty over what shape I wanted rendered and retreated back to simple, built-in square renderings. Things got much better.
Goals and Laziness
Saturday went much better than Friday, and I became much more comfortable with Crafty by the middle of the afternoon. The code was slowly approaching "can be called a game" status. All I really wanted out of game jam was to be considerable more comfortable with a game engine in HTML5. I achieved that. I got a little lax and lazy. I ended up helping someone working on C homework for five hours of the day.
Maybe it was a good break, but probably it hurt the project overall. After that, I went and got some coffee and food with Carlos, and we planned to make sure we had "counts as a game" status before I went to sleep.
Counts as a Game
Saturday night, the repository went from having rectangles bouncing off each other to a movable blue rectangle that could eat smaller rectangles to get bigger and could be eaten by bigger rectangles. There was a basic, ugly main menu and a win condition and a lose condition with two levels.
At the end of this, it was 5 a.m. Sunday morning. I went to sleep. I slept for four hours.
Further Polish
Carlos continued working those four hours. He made the menus much prettier and made a total of eight levels, with endless levels after that that increased the number of bigger squares each level. He added music and sound effects. He polished the game good.
Andy came back around 10 a.m. Sunday. He saw what we had, downloaded a zip-file copy of it off the github repo. He made it so eating was gradual and had an actual shrinking and growing effect. It was super cool. I helped Andy move his changes into an actual repository, and push those changes.
With that, time was up and our game was "done".
The Good
I really enjoyed this game jam, and I got exactly what I wanted out of it. The game we made ended up being pretty neat, and it's really easy to point anybody at it whenever I feel like, which is a decent improvement over the last game jam. I'll definitely stick with HTML5 for game development for a while. It'll also just be good experience to apply elsewhere (cough this blog cough).
I'm really glad I picked crafty.js as the game engine to use. The HTML5 game dev book really recommends it (review coming soon), and it was something I failed to learn when trying in isolation over a year ago (I was trying to make a game for a Game Dev Halloween competition). I feel comfortable enough to work on a game with it on my own now.
The Bad Lessons Learned
Things aren't simple. They are never simple. If you haven't done it before in the environment you're in now, you don't know how long it will take. What I'm trying to say, Stephan, is that I hate circles.
Squares for life.
Though, seriously, I believe that I should come up with a good "things to build in parallel" routine:
- Define current vision of game
- List all things that need to be done to achieve vision
- Specify next actions for all those things
- Separate next actions that don't depend on one another
- Delegate unrelated tasks among team
- Order tasks by easiest (least time) to hardest (most time)
- Estimate the time it takes to do tasks
- Once task time is surpassed
- Revert to most stable recent build
- Move on to next task
- Revise vision for final game
- Restart at step two
If I had followed something like the above, I would not have wasted so much time on circles, and I would have made a lot more progress towards everything else. Also, tasks would have been delegated amongst the team in a more modular manner. Maybe.
Something to try next time.
Also, hard and fast rules for versioning and merging among the whole team, with a focus on getting team members unfamiliar with such concepts up to speed early on, would have been a huge boon as well.
Something to try next time.
Conclusion
I had a lot of fun, I got what I wanted out of the game jam, I could have gotten more out of it, versioning is important, crafty is cool, Carlos and Andy are smart, cool people, and HTML5 is a good environment to work on games. I can always do better. I'll do this all again January. But better.
Peace out.