On weird bugs…

…and what to do with them

It’s been over two years now since development of Runbow began in 2014’s Global Game Jam, and over six months since the game was released. During all that time we have found bugs aplenty. Runbow is a huge game, with tons lots of mechanics and modes, nine-player multiplayer both local and online, very refined gameplay and physics… and two coders. Bugs were to be expected! In this post I will explain a few of them as examples of their diversity, the many ways you can approach fixing them, and how funny they happen to be sometimes.


Endless Jumps: Fix it quickly

Did you forget to set a character as ‘grounded’ in some part of your Movement Controller script, and player characters can soar freely by repeatedly pressing the Jump button? Such a classic. This will always appear in a game with jumping, usually in the early stages, though it repeatedly comes back to haunt coders every few weeks. We were pretty far into development of Runbow, compiling release candidate builds for showcasing the game at GDC 2015, and Endless Jumps kept happening.

Wrong Taunts: Laugh At It

One of the funniest bugs I recall in Runbow was when we started adding guest characters. Thanks to the Mimicry powerup, all characters’ appearance is changed to one of the character’s for a few seconds. For example, if Shovel Knight gets the power-up, everyone looks like Shovel Knight. We had a funny bug where the appearance would change, but the taunt animations wouldn’t. That meant that a character would be performing another character’s taunt, and sometimes entire facial features or arm placements would be totally different. And any character doing my waifu Unity-Chan’s taunt was just hilarious. I almost wish we hadn’t fixed this one.


Unintended Invisibility: Look at it from a different angle

We shouldn’t forget that in the making of video games there are also very skilled workers in other areas that could help us in unexpected ways. In Runbow, when the Lightning powerup hits players, their sprites are briefly turned invisible. If the Mimicry powerup started or ended while a sprite was invisible, a character might stay invisible for the rest of the race. We tried to fix it over and over, but it kept happening. One day, we were showing this to the rest of the team and an artist just suggested that instead of making the sprites invisible when hit by Lightning, we could just move their sprites forward (Runbow is 2D, but it is built in a 3D environment) until the camera wouldn’t see it. That was brilliant and worked perfectly. Lateral thinking! Teamwork!

Colourmaster Earthquake: Just cut it

The Colourmaster mode in Runbow is so much fun and it makes a great use of the Wii U Gamepad’s touchscreen. What you might not know is that the Colourmaster was also meant to have a microphone-activated power. You blew in the microphone and the screen would shake savagely, making character control more difficult. It was both fun and easy to code. Sometimes the camera shake would show parts of the levels that hadn’t any art on them, but that would’ve been a relatively easy fix. However, we found another issue: in levels with camera waypoints to change the scroll direction, the Earthquake power made the camera ignore the waypoints. After unsuccessfully trying to fix it, and with a deadline looming over us, we just decided to cut off this feature.


Online Crashes: Work on it forever

When we started planning online for Runbow, we read here and there that coding the networking for an indie game, more so our first indie game, would take as long as coding the whole rest of the game. We knew it was a serious thing, but not that it was actually going to be a literal truth. It’s not just implementing networking, but the millions of exceptions that might happen, that make it so difficult. Many of these happened in the character select screen at the beginning of an online match, where there’s an exchange of information between the host and the new arrivals, like a conversation. There’s so many exceptions to account for here — too many players connecting at the exact same time, a player connecting while everyone else is leaving the scene, the host disconnecting without having finished a 'conversation’… and so many others. Months after release, there were such cases still happening, and they’ve became and remained our top priority until we launched Version 1.2. We’ve fixed almost all instances of them, but this remains one of the most stressful things in the whole project. I can’t emphasize enough how much it helps to properly plan and test networking, instead of adding it midway through as we did.

Endless Online: Stop it at all costs

Another network bug was the Endless Online. In an online match, whenever the console that was hosting the match disconnected during the final level, everyone else wouldn’t get the right messages and would just keep on playing. The game would jump to the next scene in the build order, and then the next one, and then the next… Eventually, it would get to other multiplayer modes (from Run to Arena, from Arena to King of the Hill), and then the single player ones (first Adventure, then the really tough Bowhemoth)… and then it would disconnect from the Internet, loop back to the main menu and innocently act as if nothing had ever happened. We managed to greatly reduce the chances of this happening, but not completely. So, instead, each console counts the number of levels played and if the bug happens and a new level is loaded, everyone is taken to the results screen. Here goes a secret: you can test this at home by having the host disconnect during the last level, and everyone else will briefly be taken to a new level before the game noticing and taking you to the score screen. This bug was fixed mere days before we submitted the release version of the game!


It’s Raining Hues (Hallelujah): If you can’t stop it, just avoid it

This one is my personal favourite and it also has to do with networking. Whenever you ended an online game and went back to the character select screen, random coloured Hues would start slowly falling, out of nowhere, all over the screen. Absolutely nothing we ever tried to do about it managed to fix it. It’s been almost a year since we’ve seen it and we still don’t have the slightest clue as to why it happened. We couldn’t stop it… so we decided to avoid it. The game never takes you to that screen while you are online. In private matches, the playlist just starts again, without going to that screen and allowing character selection again. In public matches, it actually briefly disconnects you from the lobby, then loads that screen, and then connects to a lobby again. I find it hilarious that this bug is still there, somewhere, for some reason, which we will probably never know.

Who Is That Special Guest?: And sometimes, they just slip past

On February we released the first sizeable patch for Runbow. Version 1.1’s main feature were some online fixes and it was to be released alongside two new costumes and one new guest character as DLCs. However the DLC content wasn’t ready at the time, so we decided to push that content back to Version 1.2 and release 1.1 without it. Instead, we would tease that content with a “coming soon” in the main menu and three locked gallery slots. We tested everything quickly, approved it, and released it. The new costumes and guest characters were technically in the game, but we had locked any way of accessing them so they couldn’t be a problem. Or could they? Some weeks later we found out that someone had found out that locked gallery items can be accessed by pressing the ’+’ button instead of 'A’. Half a line of code I had missed, and that none of us had noticed in months. Months! Since we started building the gallery! We never tested it! Sometimes this just happens, a really stupid bug slips past, nobody notices no matter how intense the testing, the game is released… and someone will find the bug, there’s no exception to this. Our guest character had been leaked and there was nothing we could do about it.

2018 08 24.jpg

Unai Cabezón worked as Narrative Director and Programmer in Double Cross, and as Technical Director in Runbow.

He loves running Dungeons & Dragons games, consuming media in strict chronological order, and discussing the Star Wars Expanded Universe.