I’d say “third time’s the charm,” but… this whole thing’s been kind of charmed from the beginning. A core group of the people with whom I made Asterisk and Department of Demise in the 48th and 50th incarnations of the Ludum Dare Game Jam took on several new team members for LD52. After three days we ended up with an addictive little bullet hell where you’re a cybernetic bunny in a dystopian future, chasing down the few remaining vegetables—which have evolved defense systems, not to mention the ability to run away from you. It’s called Hare Runner.
We’re very proud to say that we’ve again scored very well in the ratings. Out of 1637 entries we were in the top 20% in most categories, and 36th in audio. We’re working on one last round of debugging and improvements, but you can go play the current version on Itch.io right now.
And here’s a little trailer action for ya:
Just like the other two games by the Sleep Donut team, we used Unity and implemented our dialogue, sound effects, and music via Fmod. We had Github for version control and Discord for communications. There was some use of Trello by the programmers, and we had a Google Doc for sound effects and dialogue.
The most interesting thing about the audio implementation for Hare Runner might be that it’s a bullet hell with elements of a rhythm game. All your enemies fire their projectiles in time with the music. So you can learn their firing pattern visually, but you can also learn it aurally to have additional cues on when to make your move. To accomplish this, our programmers made a custom tick system to keep time within Unity. The game starts both the custom tick and the Fmod music event at the same time (or rather at the correct interval to reasonably well account for Unity’s time-keeping shortcomings). They run independently with no bearing on one another because otherwise many cans of worms are opened.
The music is built in two-bar phrases. As you progress through the game there are three intensity level loops, plus a boss fight, death music, and victory music. We created an integer variable called rhythmID within Unity which can be set to various values that signify the opening title music, or any of the other sections. But when in the main game loop, it also signifies whether to play the “plain vanilla” version of a two-bar musical phrase or a version that aligns with the projectile firing pattern of a particular enemy.
There’s a system to ensure that the rhythmID variable can only be set once per two bars, and the music event is quantizing its response to only change every two bars. So the game will know that some carrots are on screen, for example, and will know that we’re at intensity level one. It will set rhythmID appropriately. Fmod’s code sees this, and as it progresses through the low-intensity music loop, at the next two-bar division it will mute all the layers except the one with the carrot rhythm. So each rhythm layer is built to sound complete on its own, essentially containing the plain vanilla track plus instruments added to highlight that specific rhythm.
On the Unity side, our programmers scripted themselves a back-end tool that’s essentially 16 checkboxes representing two bars of 8th notes. For each vegetable in each intensity level, the composers just told them what boxes to check to play the rhythm they’d written into their music. So if they want to change any particular rhythm it’s a simple matter of some checkboxes in Unity to keep the projectiles firing in time.
We definitely didn’t get this working as well as we’d like by the end of the jam. We’re following up now with some debugging and playtesting as I do some final Fmod tweaks, fine tune the priority system, tinker with a few sound effects, and adjust the mix.
Just wanted to nerd out on game audio for a bit. Reach out if you want a co-conspirator for some nerding out. =)