Alex Porter in Games

Developing under extreme constraints

The JS13KGames Competition

The Challenge

Build a fully playable game using only 13kb in zipped file size, in a month, and clearly based on an assigned theme - Lost.

All three of these rules seem to be in direct competition with one another.Established game engines help you save time but not size (in fact, I don't know of a single game engine that is below the size limit even before adding any game code). Rolling your own engine allows you to make interesting gameplay decisions and save size but you spend too much time reinventing the wheel. Along with all of this, as I consider myself a storyteller and an artist, the theme needed to be involved from the deepest levels of gameplay rather than just a thin veneer over the top. The game that would evolve from there, would become The Forest.

Getting Started and Sketching Out the Game

After coming with up with a large list of game mechanics and gameplay styles I knew I needed to cut all but one or two. The theme of 'Lost' reminded me of some prototypes I worked with years ago, where parts of the level/world you're not currently in change while you're not looking. I settled on creating a game that used a compass to tell you where to go, but would go haywire in certain areas. While you were in those areas the next "waypoint" would change and when you came out the other side and your compass reactivated it'd be pointing somewhere other than where you expected. The whole idea of the game was mean. It's purpose was originally to get you hopelessly lost and frustrated. Normally I'd be against that but this was an art-concept game, and I wanted the player to really feel lost in the world. The real work would be balancing that frustration with smooth-as-silk gameplay so that it didn't feel too tedious.

You can read the original design doc here (note: strong language presented in doc)

Nix the Complex Stuff

My original plan included randomized level generation and enemies that built their own weapons and abilities algorithmically rather than be anything that I created. I had planned on setting down rules for how the map "thought" and how it should change over time based on those thoughts. The enemy weapons would have certain attributes like type of bullet, firing pattern, speed, etc, and then it would put those together into something new so that when I played I would be surprised as well. I still love this idea but there was no way I was getting it together inside of a month and in 13k so out went those bits.

I decided that building one defined level was the way to start, because in order to do that I would have to build all of the systems the randomized version would have needed anyway but I'd have a finished game (which was more important). I'd worked on 3 prior attempts to build JS13KGames entries but had yet to finish a single one.

The last time I attempted an entry to this competition I was trying to write perfect, minimal code by hand and it was getting in the way of me getting my ideas working quickly. This time around I realized some amazing people had built tools for making sure to minify/uglify/zip the code in the most efficient ways possible. Using their JS13KGames Boilerplate allowed me to focus on building out my ideas right away. The only major change I introduced into the workflow was to use JavaScript classes because the built in inheritance was going to save me code, time, and let me use a fun project to try and get the hang of them with.

Stay Flexible and Open To Ideas

Once the game systems started to come together and I had some extremely hard coded bits of level, I built a crude map system that allowed for quick changes to gameplay, and included a kind of "quantum tile" definition. A map tile could be of one type, like a wall, but it's declaration could be super-imposed upon to know what state it would change to later in the game when certain waypoints had been reached. This way every piece of wall that becomes an open grassland after waypoint 2 is reached, have the time type of definition in the map declaration.

Map

One day while scrolling through Facebook I saw a poem a friend posted, about feeling lost and it hit me that it mirrored the structure of my game. It also made me remember I'd worked on a subtitle narration system for a game in the past. I decided that instead of making the user completely confused, I'd let them know they we're making progress by revealing a new line of the poem every time they found a new waypoint (as otherwise there's no indication whatsoever). This way the game ended with the last word of the poem, Lost. (The words are from Love, Rosie by Cecelia Ahern)

Making It Look Good, Feel Good, and Sound Good

Most of the time I was working on the game I was working with art that was simply different colored rectangles, which is great and all, but once Thomas Was Alone did it, there's no more turning prototype art into one of the best games I've ever played. That being said, it also shows that game art doesn't need to be intricate to look great. My first pass ended up looking like a mix of NES era Zelda and Final fantasy. Ultimately I hated it and decided to go with a much more stylized version. Mostly black and white with pops of color and a lot of film grain (ok, I REALLY like Thomas Was Alone), BUT I did get rid of the rectangles and went with something entirely new: CIRCLES! Most of the art needed to be programmatic where possible so I only used two very small images for repeating tiles and then the characters and hud are all generated programmatically. Below is a small progression of the art as I was building the game.

Progress

At this point the player could still shoot the enemies placed in the level, but my art style made me realize that the enemies felt like sentries of this lost forest. With that I decided to make them into defensive robots, having them follow you if you got too close, and then stop chasing once you got far enough away. I revealed that info to the player with a pulsating radar emanation and it felt incredibly smooth.

I got to the end and realized to really call this a full game it needed sound effects and music. I didn't have the slightest idea how to fit any of that in in under 13k so after some searching I found tools made exactly for that purpose. The tools essentially take text definitions of sounds/music, and compile it into a playable sound effect at runtime on the client side. I used Sound Box for the background music and a few sound effects, and jsfxr for the rest of the sound effects.

Welcome to The Forest

With all of these pieces together I ran a final build and breathed a huge sigh of relief when it sat at exactly 12.9Kb when zipped I took a few screenshots, uploaded the project to github and submitted it to the contest. Now you can play it on the JS13KGames site, download the source from Github, or even play it on Itch.io. But don't get too frustrated if you feel lost. After all, that was the whole point.


comments powered by Disqus