Hey there! DDRKirby(ISQ) here with my post-mortem writeup for my chiptune rhythm game, Ripple Runner! Please check it out if you haven’t already done so!
This is already my 7th time entering Ludum Dare…I’m really getting to be an old veteran now! Last time around I teamed up with my artist friend xellaya and made a puzzle platformer called Match Girl for LD28. You can read the post-mortem for Match Girl here, if you want to see how that turned out.
This time I ended up working by myself and entered the 48hr division. I came up with an 8-bit styled (more like 9-bit, really) musical runner game, with a lot of similarities to Bit.Trip Runner. (Imagine what Canabalt would be like if it were a rhythm game) I’m really happy with the result, and it seems like other people are too! Here’s what the game looks like in action:
Without further ado, let’s dive right into what went well and what didn’t go so well.
What went well:
Workflow and Experience
I feel like I’ve been saying this ever since Hyper Furball, but the process of taking a game from start to finish has gotten really streamlined now, and now that I’ve got all of the basics down pat, I get to spend most of my work time on implementing the cool awesome things that are specific to the individual game, as opposed to writing lots of boilerplate code and worrying about menus, collision detection, how to recycle entities, particle emitters, screen flashes, etc. Ever since Hyper Furball, I’ve sort of had the same basic formula for the intro, title screen/menu, and jukebox as well, and I think that’s been working fantastically. Not only is it really easy to reuse the code from before and just adjust the menu slightly (as well as put in the appropriate background elements), but it also ties my works together aesthetically. Having the intro there (complete with shrot musical ditty) really gives it a sense of polish, and I’m really beginning to enjoy how I have it for each game I make.
The one downside for this is that since I’ve been copying code from my previous LD projects, all of it has a bunch of random hacks and terrible coding that I did in the 11th hour when all you care about is tweaking one thing or fixing one issue. So far this has been harmless, but if I continue to do it without cleaning any of it up, I’m bound to run into issues sooner or later. One example: I have a variable for a “blackImage” that I used for fading the screen in/out to black from Match Girl and Hyper Furball, but I decided that I wanted screenfades to white for Ripple Runner, so now my “blackImage” variable points to…a white image. Which, of course, is totally fine, because that image is only used in the title screen and it was much easier to just keep the variable name but switch the content rather than having to actually rename the variable and catch all of the places where it was used, etc etc. Anyways, sometime in the future it would be ideal if I could avoid copying over all the hacks from existing projects…
Concept and Brainstorming
This is my favorite idea that I’ve ever had for an LD game, and I was actually REALLY excited when it all started coming together and I could see that it was going to work out. Because of various factors (which I’ll talk more about later), I actually spent quite a lot of time brainstorming different ideas for the theme this time (“Beneath the Surface”) and coming up with a bunch of different ideas, including a FEZ-like game that focused on water reflections, an extreme fishing game, a rhythm-based digging game, and a sort of 2D platformer version of Minesweeper (think Mr. Driller meets Minesweeper). In the end I think I was inspired to create a rhythm game by stumbling upon Rhythm Doctor in the few days leading up to LD, as I was brainstorming what kinds of games I would want to make this time around. Seeing that someone else had successfully made a music game using flashpunk was actually really encouraging–I now knew that it was possible! If I hadn’t seen that, I probably would have shied away from the concept, as music games are notoriously hard to really get right (I know–I’ve worked on one in the past as well).
Because I had so much time to brainstorm, I actually had almost the entire gameplay visualized in my head (and on my scratch paper) before I even started working. I had it all thought out, including questions such as “do I want to make the tempo stay constant or speed up throughout a song?”, “how exactly do I want to handle syncing the gameplay to the audio?” (easy–I simply mapped the player’s x position to the current sound position and placed everything else accordingly), “what art style do i want?”, and “how exactly do I want the musical cues to be integrated?” I knew that the idea was fairly interesting, and relatively simple to implement assuming my few basic assumptions about the flashpunk audio engine would work out (they did). Here’s what an early development screenshot looked like:
As you can see, it’s actually not too far off from the final product! I even already knew I was going to do the watery displacement effect for the reflected half of the screen, so that was already in there at this point. I hadn’t yet thought of the spike concept, but even with just jumping and swapping it was already becoming apparent to me that the game was gonna be a success. It’s also good to note that this was probably my simplest LD idea yet in terms of execution complexity, which definitely helped out. (I finally hit my goal of not trying to bite off more than I should chew!)
I think the in-game tutorial was one of the best gameplay design decisions as well, and definitely beats all of my other games in terms of easing new players into the game mechanics.
At some point during my concepting, I decided that I was going to try out using a 4-color palette for the game. I knew I wanted something that would look good, yet also be relatively easy for me to do, since I’m pretty far from proficient in my art and pixeling skills. This turned out to be a great decision, as all of the graphics in the game were really simple for me to draw, yet the end result looked really great! Kudos to Plant Cat: First Blossom by flashygoodness and friends for getting me inspired to try this art style out. I also decided to go with a greenish hue, as a throwback to the good old days of the original Game Boy. This also made it easy for me do the hue-shifting effect that happens at certain checkpoints.
Dirt simple! All I had to do was draw a solid shape with some variations at the top edge and make sure that it wrapped around nicely, repeat it for another shade, and then draw some super simple pixel clouds. The parallax scrolling effect is very simple to do in Flashpunk as well, by just making each image into an automatically-wrapping Backdrop that scrolls at a different rate.
Then I just had to add a layer for the water, which only shows in the bottom half:
If you’re paying close attention during the game or at the title screen, you’ll notice that the white lines and dots on the surface of the water actually move, sort of imitating the bubbles and lighting that the surface of water makes in real life. I actually used two separate layers of white lines for this and made them scroll at different rates, so that it looks dynamic, as opposed to seeming like just a single image that’s scrolling.
I implemented the wavy water reflection effect by modifying the “Glitch” filter in punk.fx to be based on a sin function instead of shifting lines at random. It’s a simple displacement effect that just shifts each horizontal line of pixels by a different amount, but it works really well!
Finally, I used a hue shift effect for the different sections of music, also provided by punk.fx. Here’s another example of the final result:
I’m really pleased with how the running animation turned out for my little guy too, despite being not confident at all that I could get that right. I had no idea what I wanted to make my character look like at first, and I actually still don’t know quite what it is (some kind of squid-like aquatic being??), but it ended up working out perfectly.
I should note that even though I said I’m using a 4-color pallete, the final visual result of the game isn’t really constrained to that, because of the reflection effects and transparency and all that. Hence, the visual style of the game is very much “9-bit”, just like my music is–in other words, it’s derived from old 8-bit games, but doesn’t emulate them perfectly, and instead allows for some extra capabilities.
Music and Audio
Well, I don’t really know what I can say about this at this point, as making soundtracks like this is standard fare for me nowadays. This game in particular was REALLY fun for me to compose for, since I got to have fun involving the player in the song as well. I really enjoyed it, and it was helpful to write it as I was coding the game, keeping in mind the spaces where I wanted to have tutorials and checkpoints and whatnot. People are really digging the music already, it seems
Be sure to check out the soundtrack at my bandcamp site, too! http://ddrkirbyisq.bandcamp.com/album/ripple-runner-original-soundtrack
What didn’t go so well:
RL Stuff Eating into LD Time
This certainly isn’t the first time that I’ve had real life issues distract me or come into conflict with Ludum Dare, so it’s not like this was any surprise to me, but sheesh…just once I’d like to just do a Ludum Dare without getting sick or being mentally exhausted or having my timeslot screwed over in some way. This time around I left my Friday dance event early so that I could have a bit more time to focus on LD (I was too distracted to really think about anything else anyways), but as luck would have it I needed to go perform for something on Saturday at around noon, so that ate up the first half of my Saturday. I brought myself a pen and paper so that I could spend my downtime brainstorming ideas and concepts for the game, which actually ended up working out pretty nicely, but in the end I didn’t get to sit down at my computer and start working until 4:30PM on Saturday, which is over 20 hours into the 48 hour timeframe. Soooo yeah, I kind of got screwed over in terms of time. On the plus side, having all my ideas planned out as well as being all anxious from having lost out on a half-day of work made me blaze through the initial dev work and I had the basic game up and running very quickly (after a few hours of work), so it wasn’t the end of the world…but I’m pretty sure I would have been able to program more content and make more songs if it wasn’t for me having lost out on all of those potential work hours.
Here is a good time to note that I actually didn’t implement the spike mechanic until preeettty late into development (At t-minus 5 hours or something like that). After making the first two stages, I was thinking to myself that it would really be nice if I had a third mechanic, as only having jumping and swapping was fun but also not quite that interesting from a gameplay perspective. Three is kind of the magic number for having different things to concentrate on, as I know from playing Puzzlejuice, so I was looking for something different to do. In the end I came up with two different ideas–one was the spike/flip upside-down mechanic that I ended up implementing, and the other was that I was going to have the Jump button do an attack or kick of some sort if you pressed it in midair, so that you’d have to press jump twice in quick succession to get past certain obstacles (breakable walls or something). I wanted to implement both, but in the end didn’t have time, so I just went with only the spikes. I knew that that was the better of the two mechanics anyways, because holding a button down is a different feeling than the button presses for jump and ripple, both mentally and from a tactile sense too. The jump-kick idea would let me introduce more eighth-note rhythms into my songs, but I already kind of had that idea going with the jump-ripple combo, so it didn’t -really- introduce anything new.
Not Enough Content
Like I mentioned above, a direct corollary of having less time was only being able to make 3 songs for the game, even though I had definitely wanted to make more. Programming in the actual stages was actually quite time-consuming, as I had to make sure all of the platforms and obstacles were mapped to the appropriate times in the music, as well as placing special events such as checkpoints, hue shifts, changes in scrolling speed, and tutorials.
A Weird FlashDevelop Issue
Thankfully this wasn’t actually -too- bad, but every once in a while (typically when I went to import a source file from Match Girl or something and was trying to rip out all of the Match Girl-specific parts), FD would have problems with the compile process–it would either fail to detect changes, or just tell you that the compile succeeded and then try to run the resulting binary, when in actuality the compile was supposed to fail (because of a missing import or something). Again, this happened only once or twice, and I had some workarounds, but it was a bit of an annoyance when it did happen. Other than that, my development was actually really smooth this time around, with no real surprises anywhere. I remember having issues trying to get the ripple particle effects working properly, but I ended up figuring that out without too much pain.
Overall, Ripple Runner was a huge success, personally, and I’m really looking forward to what you all think of it as well. Again, please play and rate if you haven’t done so already!
I’m also definitely looking into working on a post-compo version of Ripple Runner, cleaning up a few things like adding the ability to pause the game, etc. Mostly, though, I just want to add more songs, because 3 just isn’t enough! I also want to give songs that have a wider difficulty range…the 3rd song isn’t nearly hard enough to give players a *real* challenge. Stay tuned for news on the post-compo version–I’m hoping to work on it over the next couple weeks!