GMTKJam 2020 Post Mortem

The Jam overview

GMTKJam2020 was a 48-hour gamejam with the theme Out of Control. It was put on by the GameMakersToolKit YouTube channel and the top 100 games would be played by Mark Brown (channel creator) and he would settle on a top 20 from there and feature it on his (massive) YouTube channel. He also played a random selection of games on streams throughout the week of ratings.

It is simply one of the largest online only gamejams I am aware of and it happens annually.

Speclucky overview

Speclucky is my entry to GMTKJam2020 Speclucky is a game where we have Spelunky-like level generation as a core but with the twist that the seed is unique per level and that seed is generated from tweets including #Speclucky in them. The game itself is pretty simple, get to the exit at the bottom of each level. If you get hit or land on spikes, you restart the level. Jump and shoot your way to the end.
There were two enemy types implemented, both straight from Spelunky - Bats and Frogs. Very basic one hit enemies. Spikes also made it in. The real originality was entirely in the level generation coming from tweets and the special requests tweets could make for the algorithm.

All that out of the way, let's talk about what happened during the Jam.

What Went Right

Participation

I have wanted to participate in this jam each time it has come up but life never agreed with me. Having two kids and stuff going on throws a wrench into plans that require you to essentially disappear for 48 hrs. This time between quarantine killing most plans and my lovely wife offering to take all the adult responsibilities we would normally have over a weekend, I actually got to take part!

The Idea

A game with levels generated from a seed sent in by players and letting them see their tweet in game. Perfect Jam game fodder. Users could see each other's tweets and play levels where they got to determine a large part of what was going on. Really happy with the idea & scope.

The Game (mostly) Works

For a 48 hr time period I'm really happy with where the generation and player control ended up. Definitely issues, which will be discussed in the what went wrong section, but MOST of the stuff just worked without a whole lot of issues.

Spelunky Gen!

Spelunky is my favorite game of all time. It is brilliant in design and I have been wanting to implement the level generation algorithm Spelunky generally uses for some time or something similar at least. This gave me that opportunity and it turned out alright. Not perfect but pretty awesome for 48 hr and definitely something I could build on and develop further into something that is more my own.

Twitter API

Twitter API is crazy easy to use for something this simple. Quite literally spent less than an hour spinning up the twitter part of the implementation. Also no one even tried to tweet anything remotely off color so twitter's sensitive content warning never even got tested. Definitely would implement some word filtering if I had time and could do this idea over. Never came up as an issue but could have.

Teammates came in clutch

I went into this expecting to be totally solo. But a few friends came up really huge for me on the last two days just crushing it with music/sfx and promo art. Really blown away by what they did in an even more time crunch than I had.

Level skip

Level Skip was implemented so people could skip over the levels they already played easily, but it turned out to just be a great option so people didn't just get overly frustrated and just quit. Something I will remember for jams in the future.

What Went Wrong

Time

Even with all the things that went right for me to participate time wise, I still had significant portions of the jam where I was watching my kids. Not complaining about watching my own children here, just lead to less productivity game dev wise.

Reading Comprehension

Read the rules! I didn't fully comprehend the lack of ability to update builds so my naive implementation of just using butler to update builds of the game wouldn't work and in the last 30 min I had to whip together a non-ideal solution to pull the tweets in and update them at boot.
Because of this I ended up having an indeterminate lag time between a tweet going out and it being live in the game. I used GitHub raw files to store the JSON from the tweets and it really just was not the right answer. I should have stored the file on my site or something but because I only had a short period of time I couldn't get that running.

Collision Code

Platformer code is hard! Clipping through walls and floors could happen and really screwed some people up. There was a very common clip on the first level and it was really easy to get stuck because of it. I would bet more than one person got stuck there and just bailed on the game.

Late Team formation

In What Went Right I mentioned how blown away by teammates I was. I should have formed a team earlier and leaned more on teammates. I think most of the top games were non-solo devs who really could focus on tasks more. If I didn't take breaks for art & trying to get SFX on my own I think I could probably have done a little more.
The big problem with this is I never fully have control of my time and things come up often so I didn't want to have to bail partway through the jam and leave teammates in the lurch. I have been there when that has happened before and had to do that to my team for Global Game Jam 2020 this January (for a very good reason but still sucks).

Low Interest

You had to download Speclucky and it was not playable in a browser. I really think this hurt me in the long run. It is very very easy and much safer to just play a bunch of web games for jams than it is to go and download a bunch. People are (rightly) uncomfortable downloading random programs and running them on their machines vs just playing a game in a browser. Hopefully Monogame's wasm project is ready soon!
Additionally I just didn't win the Mark Brown stream lottery (thousands of games submitted each stream) so the game just didn't get a ton of visibility. I would expect had the game either been web based (so people hitting the random tab would stop and play) or gotten on the stream, the game would have had many more than 22 rating and like 8 tweets.

Generation Quirks

There were a few issues with generation. Because of the structure I used, bats could spawn with nothing above them. This is a simple fix but just didn't get to it. Additionally there were too many instances where the generation was just a big tall pit to the exit.
Finally there were simply not enough variety of rooms. Particularly rooms with a hole in the floor. It lead to some 'samey-ness' for lack of a better term.
Additionally the 'special requests' feature was a bit of a reach and just didn't get as much time as it would have needed for cooler stuff. I would like to have put in things like weapon changes, more enemies, multiple types for each enemy, etc but I was just a bit over ambitious with that idea.

Conclusion

Speclucky is a jam entry I'm really happy with despite not getting that top 100 or jam winner billing. It did most of what I set out to do and is another very playable game from a jam. I should be happier with the scores (#150 in Originality and #878 Overall out of 5477 games entered) but I have to say I expected to do more and get more play than 22 ratings.
For the next large public jam like this I think having a game playable in browser is an absolute must and submitting an .exe is putting yourself at a large disadvantage. Additionally I will probably try to get in more small time streams for the next jam as those were very fun and I'm really happy to have gotten to see people play the game for the first time live!

Andrew Napierkowski

Professional Software Engineer | Hobbyist Game Developer