Corndogit

Rhythm Gauntlet: Solo Dev Game Jam write-up

04 Oct 2024

One amateur game developer. Three days. 72 hours of crunch time to think up, implement, test and publish a game. Sounds like a fun way to spend a bank holiday weekend, right?

rhythm gauntlet logo

Background

From August 23rd to 26th 2024, the Solo Dev Game Jam #4 took place on Itch.io. This was an event designed for independent game developers to produce a game based on a particular theme. I entered this event, using the opportunity to challenge myself and strengthen my skills in Godot, since I hadn’t used it much other than for university. While previously I had spent two months developing a 2D puzzle game for my master’s final project, this time I only had three days to build something new.

The theme of the jam was Two Button Controls - just as it sounds, the player could only control the game through two buttons. Some creative thinkers interpreted this as two interactive button within the game, or a game featuring two buttons as characters, but I played it safe and planned to make a game that could be controlled by just two keys on a keyboard.

Planning

My idea was a side-scrolling, rhythm-fighter game with automatic sideways movement, one button for attacking and another for blocking. You would have to fight and defend yourself to the beat of some background music, where only your attacks that land on the beat deal damage to enemies, and only perfectly timed blocks will prevent you from taking damage. All enemy attacks would be synced up to the beat and cycle through an attack animation with each beat.

With this idea roughly thought out, I broke down the required work into 3 “iterations” assuming that each one would take a day of dev time:

Iteration 1

A basic flat level, global BPM manager, a playable character that can do basic attacks and a dumb enemy with no AI. Placeholder textures.

iteration 1

Iteration 2

Player can block attacks, enemy can do a basic attack on every 4th beat, and the player’s attack damage scales with how close to the beat it was. Some enemy sprites done by myself, but other textures and music sourced from free asset packs.

iteration 2

Iteration 3

Fill out the level so that it takes around 3 minutes to play through. Add new enemies with different types of attacks. Texture the rest of the placeholder assets.

iteration 3

After a tough initial 24 hours, I managed to progress through all the planned iterations with almost an entire day to spare! Therefore, I planned one final iteration to polish up the game and make it more interesting.

Bonus: Iteration 4

Make a 2nd level with higher difficulty and faster music, tweak HP and damage values on enemies to balance easy and hard sections out, and add some way to practice attacking and blocking on time.

iteration 4

I used this extra time as a chance to add a nice looking title screen when the game opens, including an instance of the playable character that the player can use to practise their timing before starting the game!

title screen

Results and retrospective

Overall, my entry was rated #73 out of 203 entries, which I think is respectable for my first ever game jam. The resulting game was far from perfect, and I did lose some points due to an annoying bug caused by misconfigured export settings controlling the window scaling. However, I had given it my best shot at it and was pretty satisfied with the result.

I think Godot is a great engine for putting together small games like this very quickly. Even with just a small amount of prior knowledge, it was fairly simple to implement and test new ideas, and the surrounding documentation helped me out of a few tight spots. I was surprised with how effective my improvised planning was in breaking down each required task. It made me feel it’s a testament to becoming better at software engineering and how much I’ve improved since starting programming two years ago.

My biggest gripe with the final game is that the timing system is far from perfect. I used a bit of a hacky method where the playback position of the music WAV file is used to determine the beat accuracy. There’s a bias towards hitting earlier which I wasn’t able to fix in time, and issue was made worse by input latency in the web browser version of the game. Since I only tested the Windows build during development, I didn’t notice the problem until it was too late.

The game is playable in a web browser, as well as on Windows, Mac and Linux. After the submission deadline expired, I published all source code to my Github, which you can find here.

If you made it this far, thanks for reading! Feel free to try out the game and leave a comment to let me know what you think of it.