JS13kGames 2018 Postmortem
As you’ll find out, the phrase “postmortem” is quite apt for this write-up.
I finally managed to participate this year.
Out of my excitement for the competition, I spent some days running up to the competition building a Gulp workflow based off Ayman Farhat’s boilerplate for the competition.
I quite liked the theme “offline” and I spent around three days brainstorming and looking for inspiration.
Eventually, I settled on an idea: an exploratory game with the objective is to look for WiFi networks in the wild and complete download and upload goals. I spent the rest of the week making some notes about my game’s features, gameplay etc. This being my first time creating a game or even working with HTML5 Canvas, I had no idea how feasible my plans would be in terms of time. Moreover, as a first time code golf game jam entrant, I couldn’t estimate how much code I would be able to fit into the thirteen kilobyte1 limit. In retrospect, I should have started coding earlier and figured out the finer details along the way.
By day ten, I had barely written any code (big mistake). I had, however, made a list of some WiFi networks for the game and had a nice set of notes detailing my game’s features. Unfortunately, I had school going on throughout the competition which resulted in me getting a lot less time to work on my entry. Notable commitments at that time were my Yearbook work, mid-year exam (which began on September 11) preparation and SAT (which I’ll be giving on October 6) preparation.
My strategy was to first complete the logical aspects of my game and then get into the graphics. That might have worked well had I started coding a bit earlier than I did. It being my first time building a game, I decided to use Kontra. That did make my work a bit easier while making me slightly guilty about “cheating”. I made up for the guilt by inspecting Kontra’s source code. I’ll probably do without it next year.
By day twelve, I had written a prototype of my
AccessPoint class. By day eighteen, I was (or at least felt I was) done with the logical component of my game. I began working on the game’s graphics on day twenty-two. This part was more challenging and consequently more rewarding. I even posted a message in the JS13k slack about the very small success of getting a simple colour changing battery indicator to work (I had never used
ctx.fillRect in the past 😛). By day twenty-three, I had implemented most indicators and dialog boxes. With one week left to the deadline, last minute panic set in.
In the final week, I made way too many compromises to meet the deadline. The first thing I ditched was my plan of drawing the road in perspective. I found getting the mathematics of drawing the road at arbitrary angles of rotation to be quite a challenge. I didn’t have time for it. I ditched powerups (battery boost, extra money etc), shading the network indicator according to signal strength and jittery, more realistic network speeds. I also didn’t have time for trial-like networks wherein they’re free for
x seconds but paid after that. Perhaps the most glaring flaw in my submission is the drawing of trees at angles. I was trying to get this right a couple of hours before the deadline but in vain. I should have probably spent those last few hours fixing issues more fundamental to gameplay such as clipping the player within a definite radius of the centre to avoid confusion caused by an empty network list. I also wish I had spent more time coming up with more networks of each type. And yikes, in all the rush I forgot to implement a “Game Over: you won/lost” screen 😱
I was working on the game till five minutes before the deadline and submitted just two minutes short of the deadline. I didn’t even get to test the game or have someone play it in front of me. This was another one of my biggest mistakes. I didn’t even know if my game is beatable! Next time I’ll try to get my game to a stage where it is “playable” a bit early on so that my entry can benefit more from others’ feedback.
TFW you install
advzipthinking that you’ll shave-off some last bytes and feel good about yourself but you end up not even completing your game.
—Me on the JS13k Slack
While school, studies and my lack of time management resulted in my entry not living up to my standards, this post would be incomplete without acknowledging how much I got out of the whole experience. I gained not only technical knowledge but also confidence. I ventured out to do something I’d never done in the past and while everything didn’t go as I had planned, I managed to submit a playable game in time. I got satisfaction out of even the smallest of successes, especially those in graphics. It was definitely fun.
I’d like to shout out to the lovely people on the JS13k Slack, especially @herebefrogs, @xem, @end3r, @the_coder, @madmarcel, @udxs and @kamyl (I’m very sorry if I’ve missed someone out). You assisted, motivated and encouraged me. At first, your knowledge intimated me but later it inspired me. To be honest, I wouldn’t have got this far without you guys.
You can find my submitted entry on the competition’s website and the source code(which unfortunately isn’t as neat as I’d like it to be at the moment) on Github.
I might continue working on this game a while later. I’ll update this post with a link to the post-competition version if I manage to make one.
- Final zip size: 7334 bytes
- Final source code size (compressed): 20351 bytes
- Final source code size (uncompressed): 44 kilobytes
git log --before '13 Sep' --reverse --date=format:'%d %b' --pretty=format:'%cd %s'
Technically, the limit is thirteen kibibytes. 1 kilobyte = 1000 bytes while 1 kibibyte = 1024 bytes. ↩︎