Participating in my first game jam
This past weekend I participated my first game jam—a competition in which individuals or teams rush to design and create a new game within a time limit, in this case 48 hours. The jam in question was the annual GMTK game jam, one of the biggest in the world. I worked with four of my friends (three other programmers and an artist) from 2 PM Friday through 2 PM Sunday to create SCHLORP, finishing just seven minutes before the deadline. While the game is a bit simplistic and bare, it's actually pretty fun to play, and was a bunch of fun to make.
As in most game jams, teams are instructed to make the vast majority of the code and assets of their game during the allotted time. To encourage this, the theme of the jam isn't announced until the last minute, and all entries have to incorporate the theme in some way. This year's theme was "joined together."
As soon as the whole team was able to meet up we started brainstorming game ideas that tied into the theme. The resulting concept we came up with involved playing as a slime that can reach out with a grappling hook-like arm and grab enemies and terrain. Once you grabbed an enemy you'd be able to pull them back in and stick them to yourself, "joining together" and gaining the enemy's power.
Within a few hours of drawing up designs we settled on a sketchy, chalkboard style for the art direction, and we were ready to begin. All the programmers on the team had experience with web technologies and JavaScript, so we decided to make a game that can run in a web browser. Unlike the last game I made, this time we opted to use a game engine instead of building our own. We chose Phaser 3 as the engine and started programming Friday night.
The decision to use Phaser turned out to be a double-edged sword. The engine was great for handling things like spritesheets, animations, and input, but also led to some delays and issues. It took us all a while to understand the "Phaser way of doing things," a problem exacerbated by the engine's inconsistent APIs and confusing documentation. While getting started I personally struggled a lot with Phaser's preference for using composition design patterns over inheritance.
Difficulties setting up the basic scene and entities in Phaser delayed the team a bit Friday night, but by Saturday morning we all had a decent idea of what we were doing and could expand the game by building on the basic components we had already started. Meanwhile our team artist was busy drawing all the sprites for the player character, enemies, pickups, UI elements, and world tiles.
Between Saturday morning and Sunday afternoon we all worked practically non-stop except for a brief break to sleep. I personally implemented the flying enemy's AI, the health and damage system, and the powerup system.
According to our design plans, each enemy would provide the player with a unique powerup for a limited time after they were absorbed by the grappling hook attack. Each of these powerups had to apply a unique cosmetic change to the player character and have a potentially complex behavior associated with the attack button. For example, the flying enemy gives a wing powerup that allows the player to double-jump, and also shoots out four gusts of wind that damage enemies.
The cosmetic feature was the most difficult to implement, because each powerup needed a unique set of sprites for each of the player character's six different animations, and these needed to by synced up with the player's sprite and drawn either on top of or below it.
Due to the time constraints we were only able to complete two enemies and powerups, the flying "bat" and a walking cannon that allows the player to shoot a projectile. We had a third spiky porcupine enemy planned, and even had all the sprites completed but ran out of time to add it to the game.
Still, we managed to finish all the key features of the game and submit it in time for the game jam. You can play it online at itch.io or Newgrounds, and all the source code is available on GitHub as free software. We've already received some nice comments and suggestions from the itch.io community, and I had a bunch of fun making it (and learned some stuff too), so I'd consider that a win. I definitely plan to participate in more game jams in the future, so stay tuned as I'll probably post about them here too.