Come Home: post-mortem
This past Friday I officially submitted my January One Game a Month entry, Come Home! The experience was wonderful, and this is the first project in a very long time that I’ve stuck with from a beginning point to an ending point I plotted out in advance. The last project I think where I did this was an Aqua Teen Hunger Force rock-paper-scissors like fighting game for an Introduction to Programming course in my senior year of high school (seriously). Seeing this project through has given me an immense boost of self-confidence and encouragement to continue on and do this on a regular basis. Most importantly, this has officially answered the question that has been burning in the back of my mind for several years now.
Q: Are games really what you want to do with your life?
A: Yes. Yes yes yes yes, fuck yes they are.
In the post-release afterglow (and mild depression as I try to figure out what to do next), I figured it would be good to do a brief post-mortem at the end of every project to summarize what my goals were for the game, how well I think I did in accomplishing those goals, and what I learned.
The inspiration to make this game came days after I purchased Super Hexagon and became obsessed with the soundtrack by chipzel. After listening through her entire discography, one track in particular entitled "Come Home" caught my attention the most. The song implied that something epic was happening, wrapped around a sense of panic and urgency. Upon hearing it, I immediately had the mental image of something like out of a scene in Cloverfield or a monster movie where someone is caught between monsters attacking and the military trying desperately to contain them. All the while, that person just wants to do one thing; survive, get home, and be with their loved ones.
After several days of listening to the song over and over, it occurred to me that this could potentially make for an awesome autorunner. The song was dense with atmosphere and mood, it would just be a matter of using that as a foundation to construct game mechanics to make that atmosphere and mood more concrete and tangible.
There was one core theme that I really wanted to have resonate with the player; helplessness. Complete and utter helplessness as you’re scrambling around trying to avoid everything that could kill you. That meant that the player would have next to no form of empowerment; no weapons, no power-ups, not even a jump ability. All the player would be able to do is run, run, run, dodge, repeat.
This helplessness breeds intense difficulty, which has the potential to alienate a good number of players. With that in mind, I set out to hopefully alleviate that a bit with two caveats:
- Predictable, yet challenging mechanics coupled with instant death and instant reloading, not dissimilar to Super Meat Boy and Hotline Miami.
- The game would be split into stages with each stage introducing or twisting upon an existing mechanic. Beating a stage would give the player a checkpoint to start from upon death.
My hope was that these would pave the way for a game that was difficult yet fair, and ultimately provide for extremely rewarding moments of victory when clearing a stage.
What Went Right
Marriage of gameplay and mood
For what was essentially a first pass in trying to translate what I saw in my head when listening to the song, this came out very well and reactions from those playtesting were very positive.
As the game came together piece by piece, it hit its stride when I added in people running around on the sidewalk. It gives that sense of urgency and panic I wanted to have, and meshed together better than I expected it to.
First real attempt at abstract pixel art went well
I unfortunately fall into the stereotype of the developer with next to no artistic experience, hence no real artistic ability. Going in, I decided to do some very abstract pixel art for the player and hazards, and grab some Creative Commons art for the backgrounds. I got super lucky and found some great stuff on OpenGameArt.
While the low detail of the player/hazards and the high detail of buildings tend to clash a bit when it comes to maintaining a consistent visual style for the game, I think this ultimately turned out okay and suited the needs of the game in its first iteration.
Gained experience with Flixel
This is officially my first finished project in Flash. I hadn’t touched any AS3 prior to November of last year with a brief stint on a now abandoned prototype in FlashPunk. My technical goal with this project was to give Flixel a shot and see if it was a good fit for me, and I can report that it most certainly is. The library in its native form granted me the ability to solve all but one problem I needed to solve during the course of this project, and the solution to that one problem only required a few lines in the Flixel library to be changed.
I highly recommend Flixel to anyone considering developing in Flash, the productivity to line-of-code ratio is wonderful.
What Went Wrong
Story (at least an attempt to have one)
I originally conceived a story to complement the game. The idea was that between each stage, a thought bubble would appear above the player and show brief three to four second cutscenes with their significant other. The cutscenes would show the player and their significant other slowly growing apart up until the last thought bubble which would show that the only reason you were out that night was because you two had an argument. Now with all this stuff happening you realize what really matters and you just want to get home to them and you really do love them after all and oh hey in the beginning you can choose your gender and choose whether you’re gay or straight and this’ll be the best thing ever and everyone will love it and cry at how touching it is and blah blah blah.
It was a nice idea when I conceived it originally, but upon trying to execute it I couldn’t think of a way to a) do this idea justice with my limited artistic abilities, b) do it in such a way where it didn’t feel shoehorned, or cheesy/dumb given the limitations imposed by the stage structure without breaking the flow of the game, or c) guarantee that I’d do a good enough job to ensure that the “choose your gender/orientation” part would be anything other than tokenistic and hollow.
Putting together the story was the very last thing I attempted to do, probably because deep down I knew it wasn’t going to work. I’m very grateful that I have a partner who is not afraid to speak up and be honest when something is not working. When I asked for her opinion, she confirmed my worst fears.
It was a wonderful idea to get excited about, but this was definitely not its time. This really taught me the mantra of “keep your development scope low.”
As much as I’ve learned about Flixel and AS3, I have a lot to learn. I don’t even want to know how many AS3 naming conventions I violated during the development of the game.
As mentioned above, Flixel provided a solution to most of the problems I had to solve. However, there were some problems where I wasn’t aware that Flixel could easily solve them until it was too late and I had essentially reinvented the wheel with some awful horrible twisty turny homecooked AS3 abomination. These instances have been duly noted, and I will keep them in mind for future projects.
I also learned about the amazing power of Greensock’s Tween and Timeline libraries. These essentially boil down tweens to single line calls, and Timeline offers a very elegant way to handle multiple tweens.
TOO BAD I DIDN’T DISCOVER TIMELINE UNTIL AFTER THE GAME WAS RELEASED.
Lesson learned. The introduction in the game is a mess of Booleans and Number variables using FlxG.Elapsed to trigger certain tweens. I will most likely take it upon myself in the future as a project in and of itself to refactor the hell out of this code.
Out of all the things that went wrong, I consider this to be the worst.
Early playtesters felt that the difficulty ramp from stage one to stage two was verrrrrry steep. It went from a few zombies randomly spawning and running across the screen to zombies spawning, a swarm growing on the left side of the screen, and a humvee spawning on the right side of the screen shooting at the swarm, causing you to dodge bullets and zombies while steering clear of the swarm on the left side of the screen.
There were also certain instances where no matter what, you were screwed by zombie spawns. As a player you were too slow, and the zombies were too fast. I attempted to alleviate this by increasing player speed and by making zombie spawns more consistent, something like every two or so seconds. This way, you could get into the rhythm of the spawns and have more of a chance to maneuver your way around them.
However, this could only accomplish so much in terms of lowering the difficulty ramp. The fact still remained that you went from dealing with one mechanic in stage one to three mechanics in stage two. In order to effectively balance the game and keep the mechanics that exist, there would need to be about five or six stages in total as opposed to three. This would allow all the different mechanics to be paced out more evenly, and make the difficulty ramp more gradual.
I intend to revisit this again at some point in the future, and this will most likely take the highest priority.
I’m not good at conclusions so here are some random parting thoughts:
This entire experience has been thrilling, exhausting, exciting, and challenging all at once.
There is nothing better than spending a huge chunk of time constructing this experience for other people, and watching them play and react to it or having people tell you about their experience with it. It’s seriously the most magical thing ever.
Can’t wait to do it eleven more times this year. Not to mention forever.