Game Jam Learnings

My experience participating in the GitHub Game Off 2020

jvalen profile avatar

jvalen

I recently participated in the GitHub's annual game jam: Game Off 2020. The participants have one month to create a game based on a theme that is revealed when the jam starts, in this case November 1st 2020: Moonshot.

The aim of this post is to share some learnings and thoughts about my experience through the journey of creating MoonHop, my submission for the event, a 3D action game made with Unity as a solo developer.

Moonhop character

Please, keep in mind that this is my personal opinion and even though I've been involved in software development for some time, this is my very first game jam, so I have so much to learn.

Choose your own adventure, lone wolf vs team player

There is no doubt that making a game is so much fun, however it does not mean it is an easy thing to accomplish and even more difficult if we have a fixed deadline of one month. You can go two ways, both with its ups and downs:

Working alone:

  • It requires a full set of skills such as creativity, planning, flexibility, technical and artistic dexterity. It is difficult to be an expert in every discipline, but having a minimum level in some of them might be good enough.
  • You can move faster since there are no meetings, no bureaucracy and you are in charge of everything, but you need to tackle every aspect of the game one by one.

Teaming up:

  • If you are lucky to be part of a multidisciplinary team, you can distribute some of the responsibilities among your colleagues being able to work in parallel.
  • Nevertheless, both planning and flexibility will still apply to everyone, furthermore new critical abilities come to play: communication and commitment.

To make a game it is always a challenge no matter the path you choose but that is part of the fun!

Development time

On your marks! get set!

November 1st, the clock started ticking but...unfortunately I was not sure yet that I would find the time to join the jam and I lost a week and a half until I committed to myself to go all the way (spoiler: precious time that I would have loved to have by the end of the month).

Tools and technical background

I took several Unity courses along the second semester of 2020 and I felt ready to apply the knowledge I had acquired, so I chose C# and Unity as my toolbox. For image manipulation and sprite creation I used GIMP and my own pixelartcss web app.

Unity environment setup - Unity editor

Planning

My initial idea was very simple and quite literal: to boost a character from Earth to the Moon, just by hitting a dynamic power bar. I was eager to start coding so I began developing the bar functionality right away, but I quickly realized that it would be better to start planning at least the main features of the game, instead of just jumping to the programming aspect directly.

I used Trello to organize my work. This tool allowed me to create tasks, organize them and visualize my progress following a simplified Kanban agile methodology, providing a lot of flexibility and adjustable milestones.

planning with trello - Example of my trello kanban board

Main functionalities

Over the course of the month I came up with different mechanics and functionalities, some of them remained in the production version and some others were discarded, such as the initial power bar which I found unnecessary.

I ended up creating a 3D space action game, with a simple control system, power up pick ups and a clear goal, to reach the Moon as soon as possible. Offering replayability by challenging the players to not only beat their previous time but also to reach the end with less hits taken and more points from the items picked.

MoonHop screenshot

Programming

I tried to keep the code organized from the very beginning, aiming to build a clean architecture with separation of concerns but not overthinking classes or file naming since I was certain that future refactors will come along. I focused on a solid foundation avoiding cycle dependencies while encouraging the well known component and observer patterns.

Level design

Since our character travels from the Earth to the Moon, I designed the levels based on the layers of Earth's Atmosphere. So I would have 5 regular levels + space (the final frontier).

There was a problem though, each layer's distance is massively different, so I had to pull off some tricks to make their duration similar, by increasing the speed of the character and adjusting the Moon approaching factor each level.

  • Earth's Atmospheric Layers
    • Troposphere: 0 <-> 10 Kms
    • Stratosphere: 10 <-> 30 Kms
    • Mesosphere: 30 <-> 50 Kms
    • Thermosphere: 50 <-> 400 Kms
    • Exosphere: 400 <-> 10000 Kms
    • Space: 10000 <-> 384000 Kms

Once I decided how to split the gameplay I needed to design each of the levels, giving each one of them a particular look and sense of progression. The way I solved this challenge was through a sequence of different debris waves.

I built up a wave spawner within Unity, that helped me to ease the creation of multiple types of waves composed of different objects, speed, rotational properties. It is definitely not perfect but it did the trick to give every level a different touch while increasing the difficulty.

waves sketch - Initial wave planning.

In addition, I really wanted to have a special level, a boss scene before finishing the game and even though I was running out of time, I finally did it. I made up a simple UI and reused some pieces of the space debris and projectiles.

boss sketch and final version - Discarded early stages boss sketch and final version.

User Interface

While creating the UI I faced different challenges:

  • Visualize movement boundaries: I needed to set some boundaries to avoid the player wandering around and at the same time to provide a feeling of free movement. I didn't want to create a tunnel or tube where the player could feel confined, so I decided to show a kind of mist that only appears when the character approaches the very end of a side.

  • Clear and uncluttered HUD: since the game could have many objects at the same time on the screen, I needed to show only the essential information on the HUD, to avoid confusing the player, so I went with just a health bar, remaining distance, current atmospheric layer, score and elapsed time.

UI sketch and final version - I implemented a feature to show the live speed of the character but I ended up dropping it since I believed it added too much noise.

Sounds and 3D models

Since I was working alone, the tight deadline and my limited artistic skills put me in a position where I needed to borrow some resources to reach my goal. Besides the pixel art, I used sound and 3D model free available resources from the Internet. It is great to see that many people keep creating high quality material open to everyone, I'm very grateful to all of them. You can find all the credit here.

December is here!

The last days before submitting the game were frenetic. Two days to the end, I had the game core and main menu ready, but there was still a long list of tasks to do, for example:

  • To check that the build was working properly.
  • To layout the final score scene.
  • To improve some levels, introducing new obstacles.
  • To create the ending and intro cinematics.
  • Bug hunt.
  • Feedback from friends.

I somehow managed to overcome the situation and completed the critical issues, however I could not dedicate all the time I wanted for each of them, specially the testing and level design iterations.

Game submitted! Feedback time!

Shortly after the submission deadline, there is a voting period of three weeks where everyone who participated in the game jam can rate other games.

This year there were nearly 500 entries and I wanted to play, analyze and rate them all. In the end it was an impossible mission but managed to do it for 227 games.

Games rated - Game Off 2020 submission filters

My modus operandi was to start rating games filtered by their karma scoring, similar to the coolness category used in ludumdare game jams. I find this category quite fair because it is supposed to reward users that played and rated more games, so I prioritized them, then I jumped into the ones with less votes and finally the popular ones.

I had a blast playing through all those games, discovering what others had created during the same time I was immersed in my game. I tried to reach the end of all the games (I beat quite a few!), extracting mechanics, visuals and gameplay experience, aiming to provide some constructive feedback while enjoying the process.

I found a wide range of theme interpretations, genres, cool features, beautiful graphics and very creative submissions overall.

The most common genres I've found were probably: shoot'em ups, 2D platformers, golf and minimalist physics games. But there were turn based and real time RPG games, Metroidvanias, puzzle, RTS, roguelike, space travel simulator, text adventure, FPS, deck building games, 3D exploration and more.

I was quite surprised that I did not see a single Beat'em up...

Here you can find a list with my personal Game Off 2020 selection, games that I truly enjoyed playing through.

Results

I thoroughly enjoyed the whole jam experience. I couldn't be more happy with the results and the amazing feedback received. I discovered a healthy community of developers, eager to create and share their achievements.

I'm very grateful to every single one that provided feedback and rated my game. As it can be seen below, I received 79 ratings! being the third submission most rated and settled within the 40-50 range position in several categories.

MoonHop results - MoonHop ratings results

My treasure

All the observations, tips and encouragement provided, are one the most valuable output from the game jam.

Constructive feedback

I received very valuable feedback, raising issues and possible solutions:

The game has the right amount of challenge, though sometimes it's hard to perceive where the debris is depth-wise.

-- @remruts

I do think the space junk just kind of appearing in the background is jarring... You could do fancy animations and background blending

-- @Floatingtable Games

The initial screen with the message takes way too long to disappear, to the point that I thought the game wasn’t going to start

-- @João Gradim

Perhaps adding check points would have encouraged me to finish till the end. I died about 3 times before leaving giving up.

-- @lewdev

References to well known games

I was amazed because MoonHop evoked great games:

Felt like Star Fox on pacifism mode

-- @Rusty Bailey

I really enjoyed this. It was like Pilotwings...in space

-- @BackAt50Ft

It definitely gave me MDK vibes when the red meteors/heated debris (missiles?) try to hit you

-- @ ilBarbogio

The game reminded me of shiny hunting in ultra moon.

-- @Dep-kun-Codes

Niceties

I felt grateful seeing how many people enjoyed the game:

Simple premise, but executed extremely well and quite addictive to play!

-- @ruinthread-games

The sound,the aesthetic, the EVERYTHING was amazing. I really felt the high speed at which I was flying across the space.

-- @arrnavvv

Fun game with unique gameplay and excellent theme interpretation!

-- @Vasilis Chonianakis

Feels good to control, good to look, and the challenge is just at the right spot to keep you coming back until you do it! Loved it!

-- @Rafael Bordoni

Final thoughts

Participating in this event has been a great challenge and an outstanding experience, during both development and post-submission periods.

Lastly, I wanted to leave a list of learnings that I've come up with along the journey, as a checklist for future challenges.

  • Dust off your notepad asap: if there is a possibility to join the jam, start thinking, sketch ideas, characters and make notes. Even if you finally decide to not use all that work it may help you for future creations.
  • Planning before coding.
  • Ask for feedback, the sooner the better.
  • Test your game mechanics with other people.
  • Iterate frequently: start simple -> test it -> continue building. To build something complex does not mean it is going to fit in your game.
  • Art consistency: Mixing 3D and pixel art was a bit risky in my case, some people liked it, some others did not.
  • Hit boxes: don't be too realistic: someone suggested that it might be better to increase pick-up items colliders and shrink the obstacle ones a bit, it may improve the player experience while sacrificing unnecessary accuracy.
  • Level design, save enough time for it: do not leave level design for the very last moment, simpler mechanics but good levels might be better than complex and boring gameplay.
  • Difficulty, don't set the bar too high: it probably depends on the audience you are targeting for your game, but for this kind of jam the difficulty should be medium or adjustable, so a wider range of players will enjoy it.
  • Skippable intro: Probably the most common complaint I received. Just a simple tweak could help players continue playing your game.
  • Clean UI: Be sure to show only necessary data on the screen.
  • Pretty submission profile: I played very interesting games that didn't get a lot of attention, with just a few ratings when they deserved way more. A common issue I found in these cases was the game's presentation in itch.io. With a bit more love they would have gotten more traction. I definitely recommend spending sometime once the game is submitted tuning up the game profile, choosing an appealing name and cool cover image.

Thanks for reading!

A big shout out to my friends GenlyLeGuinn and Carmen for helping me reviewing the post.