Overview
After finishing up The Construct Quarter, I had to take a break from game dev to work on some other stuff. I was finally able to get back to working on games recently and I decided to start with doing a bunch of game jams. Game jams require you to make a game in a very short amount of time, so I thought they’d be perfect to help me work on picking an achievable game scope and getting mechanics prototyped quickly. These games are made for and submitted to WeeklyGameJam.
Torchlit Run
For WeeklyGameJam Week 168, the theme was “Pass the Torch.” I discussed a few different ideas with friends and ultimately decided to go with an infinite runner. I thought this would be the simplest possible genre I could do, the gameplay could be as simple as implementing a jump. That being said, there were lots of things I wanted to add that there ultimately wasn’t enough time for. Some examples are:
- More hazards, like enemies and intermittent lightning strikes
- A sliding mechanic and hazards you can slide under
- Better world generation, including platforms and an upper path
- Power-ups that affect your movement or the amount of light
- A fully animated player character
I might have been able to get a few of these in if not for being rusty with game dev and the Unity engine. However, this was also an issue of scope. Although I chose a simple and well-scoped core mechanic, I immediately planned out a bunch of stuff to stack on top of that mechanic that turned out to be mostly out of scope.
One of the aspects of the project I enjoyed working on was the procedural generation. I wanted a set of simple rules with tweak-able properties that could be adjusted with progress in the game to make the track more difficult. The main properties that affected the world were minimum path length and allowed height difference between paths. A path in this context is a series of contiguous tiles at the same height. As difficulty increased, the minimum path length went down and the allowed height difference between paths went up.
Once I had the world generating, I wanted to make it a little more dangerous by adding hazards. I originally had lots of ideas for hazards but I only had time to implement pits and spikes. I wanted to be able to make the hazards more difficult over time, so I needed to make different versions of them by varying spawning properties.
The two properties I used were width and minimum edge distance. Width is straightforward, it’s how many spikes in a row will spawn or how many tiles will be missing for a pit. Minimum edge distance controls how close to an edge a hazard is allowed to spawn. An edge in this context means the start or end of a path where there’s a change in height. The idea here is that hazards closer to edges are more difficult to avoid.
With multiple versions of each of the hazards, I assigned each version a cost and spent from a budget to place hazards in the level. To increase the difficulty over time, I only needed to increase the hazard budget. This is what the final hazard table looked like:
Type | Cost | Min Edge Distance | Width | Description |
Spike | 1 | 3 | 1 | Single spike, at least 3 tiles from edge |
Spike | 2 | 2 | 1 | Single spike, at least 2 tiles from edge |
Pit | 2 | 3 | 2 | Two-Wide pit, at least 3 tiles from edge |
Spike | 3 | 3 | 2 | Double spike, at least 3 tiles from edge |
Spike | 3 | 2 | 1 | Single spike, at least 2 tiles from edge |
Pit | 3 | 2 | 2 | Two-Wide pit, at least 2 tiles from edge |
Spike | 4 | 2 | 2 | Double spike, at least 2 tiles from edge |
Spike | 4 | 1 | 1 | Single spike, at least 1 tile from edge |
Pit | 4 | 3 | 3 | Three-Wide pit, at least 3 tiles from edge |
Spike | 4 | 1 | 2 | Double spike, at least 1 tile from edge |
Spike | 5 | 3 | 3 | Triple spike, at least 3 tiles from edge |
Pit | 5 | 2 | 3 | Three-Wide pit, at least 2 tiles from the edge |
There were definitely some things that could have been improved; I could have gotten to more things on my wish list or better tuned the difficulty so it’s less boring in the beginning. Regardless, I was pretty happy with how the project turned out, especially for my first project in a while.
Treasure Rush
For WeeklyGameJam Week 169, the theme was “Treasure Hunt.” I chose a mining game for this jam because I thought it would be a good candidate for another attempt at procedural generation. This time I’d be spawning blocks downward rather than to the right.
I was able to get this running pretty quickly, but it initially felt pretty boring to just mine rock after rock. I wanted to add something to the world generation that would make you change your path through the mine.
I thought caverns would be the best way to accomplish this. I wanted the most rewarding strategy to be mining from cavern to cavern, grabbing the best gems along the way.
To spawn a cavern, I started by picking a random tile and clearing out a 3×3 tile grid around it. Each of the cavern’s cardinal neighbors that have not yet been checked have a random chance to be added to the cavern. This cycle continues with the chance getting lower each time until all potential tiles are checked or the chance drops below 1%.
I decided not to implement any hazards other than fall damage because I didn’t have any great ideas and I wanted to make sure I had time to polish the core game. There are two changes I made to polish the game that I want to call out.
First, I actually went and found a font rather than using Unity’s default Arial. I was pretty impressed how easily I could import and switch to a new font in Unity. All in all it probably only took me 30 mins or so to find a royalty free font on dafont.com and switch over to it. I think it looks so much better but that might just be a matter of personal preference.
Second, I spent a decent chunk of time polishing the end sequence of the game. I wanted the player to be able to appreciate how far down in the mine they had gotten and how much treasure they collected. Therefore, the game ends with a camera pan up the mine shaft you created then a sequence where your treasure is spewed into a massive pile.
I think this project really benefited from focusing on a smaller scope to leave space for polish. In my opinion, it’s a much better game than my previous jam attempt and it actually took me less total time to make. There’s plenty of room to expand on the base here and flesh this out into a full game if I want to in the future.
Looking Forward
I’m going to continue doing game jams for at least a few more weeks to continue honing my unity, scoping, and prototyping skills. Hopefully my projects will be a bit more robust and polished each week. I’m also going to look into teaming up with other devs, which would allow me to make better projects than I could possibly make solo. Another thing I’m going to look into is streaming my development. If/when I do, I’ll be streaming at https://www.twitch.tv/quietbenchzen