R.A.B.B.i.T. Enters iOS Submission!

On May 11th 2015,  Dave and I officially founded TriCat Games.  291 days later, we're pleased to say that R.A.B.B.i.T. -- ironically, our second mobile game -- has entered iOS submission!

To celebrate this, we've put together the following launch trailer. Enjoy!

THE ROAD TO SUBMISSION

Late last week Epic pushed out a fix for the iOS issue that was blocking us, but this was only for UE4.10 (which doesn't help us, as R.A.B.B.i.T. is built on 4.11). Luckily, on Tuesday a new build of 4.11 dropped and we set about updating the engine.

Everything went pretty smoothly and the fix appeared to work perfectly. We were hoping to get R.A.B.B.i.T.'s final build out on Wednesday, but we found a couple of issues we needed to fix first.

TEXTURE HELL

The biggest issue involved the texturing on Apple devices. The vast majority of our textures seemingly had significant issues (blotches, is the best way I can think to describe them). Normally this is how we expect the textures appear on non-distribution builds (i.e. builds that we quickly put together to test on devices), but here we were seeing them on our final builds (and a fully rebuilt final build can take ~3 hours to put together). We spent most of Wednesday playing around with the project's compression settings with very little luck (some textures got significantly better, but none of them were ever perfect). 

In the end we decided we probably needed to re-compile the entire project, just to make sure it wasn't a caching issue. So we left it doing a full rebuild on Wednesday night. Unfortunately this didn't help at all.

SOLVING THE TEXTURE ISSUES

On Thursday morning we suddenly realised that there were some additional texture compression settings on each individual texture (which, for some reason has never affected us before on Android, but here it was completely wrecking the game). So we did a test with a couple of the textures and -- after accidentally wasting three hours by re-building the entirely project -- got the game back onto an Apple device where we realised we had a valid fix. We set about fixing up all of the other textures.

But then, mid-morning, we found a bug. Scratch that, we'd found THE bug...

THE BUG FROM HELL

During testing, we'd come across a very odd bug where, when the rabbit launched from his starting platform during the tutorial, he would hit a level block and, instead of dying, would instantly win the level.

What made this bug so frustrating was that:

  1. We couldn't reproduce it on PC.
  2. We couldn't reproduce it in a development build (so we couldn't display debug information to find out what the problem was).
  3. It would only occur the first time you tried it (you had to completely shut the game down, load it back up and launch the rabbit in one of the tutorial levels. But then it would never occur again).
  4. It didn't occur 100% of the time (~85% of all cases tried).
  5. It wouldn't occur if you did anything to the rabbit (tried grappling anything, or affected his velocity in any way, shape or form).

So it literally appeared to be that if the rabbit landed on this one specific block on his first launch (the one he'll land on every time if you don't interfere), the game thought he'd hit the finish line and win the level.

To compound the matter, this was happening on the first tutorial level. The level where you learn how to interact with the rabbit. And this is probably the one and ONLY time that the player would launch the game and NOT know what to do with the rabbit. And if this bug occurred (which was pretty likely), they would SKIP the tutorial level that was supposed to teach them this exact thing and then might NEVER know what to do! It was basically negating the entire point of the tutorial!

FRUSTRATING BEYOND MEASURE

So we tried to work out why this was happening. But we were getting nowhere, fast.

We managed to confirm that, yes: The game thought the rabbit was hitting the finish line instead of the world block, but that didn't get us any closer to a solution.

We double-checked the code that spawns the finish line and it's collision. Then we triple-checked it. Then we did it twice more for a laugh. We even turned the collision on permanently to make sure that, yes - it's definitely in the correct place. With it was.

We tried spawning a fake level when the game launched (remember that this only occurs once) to force the issue to be circumvented. It didn't help at all.

We tried validating that the rabbit was actually within 10 metres of the finish line when a detection was made. We were sure this would fix the problem. It didn't!

So as far as the game was concerned, that first block (and only that first block) WAS the finish line the first time you hit it. We had NO idea what to do to fix it and it was coming up on 5pm. We'd already spent six hours on this. Then, suddenly, we came up with a work around.

THE DUMBEST OF SOLUTIONS

When the rabbit launches from his starting point, his velocity is set to 1000 (right), 0 (into the screen), 2500 (up). This makes him curve upwards, then hurtle back towards the ground as gravity kicks in. It looks a bit like this:

Do you happen to notice where the rabbit will land if you don't interfere? Just on the edge of that bottom world block, just missing out on hitting the ground instead? Well, we figured, what happens if he doesn't hit that block?

So we adjusted his launch velocity (a value we've NEVER changed since we implemented it!) slightly to 900, 0, 2500 which changed the path to this:

So now the rabbit hits the ground before the first block and... Yup! That completely removed the issue from the game.

Well.. not completely. Technically, it's still there. However there is no way to ever get the rabbit to hit that spot now, so it's basically impossible to reproduce.

It's the most hacky, dumbest fix I've ever witnessed in 16 years of game development, but it got the job done!

And with that out of the way, we packaged a new build, spent a while testing it and put the game into submission yesterday evening.

WHAT'S NEXT?

So now we need to wait to see if R.A.B.B.i.T. makes it through Apple's submission process without any issues. If it does, we'll be releasing it as soon as possible.

Unfortunately there's still no fix from Epic regarding the Android build, so it may be some time before we can release that version of the game. Obviously we're both pretty upset and frustrated with the situation, but there's not much we can do right now.

We're also going to spend the submission time to generate some hype for R.A.B.B.i.T. I won't go into details about that here, but we'll be talking to the press and trying some experiments with how to promote the game.

We're also finalising Defendy Rocket right now, putting the latest few bits and pieces into the game. We're hoping to put it into Apple submission in a week or two, however we have no plans to release it just yet. We want to see what happens to R.A.B.B.i.T. first.

Finally, we have our new game currently on the back-burner. We R.A.B.B.i.T. now in submission, we're going to concentrate on Defendy Rocket first, then decide what to do next. When we decide, we'll announce something.

Posted on February 26, 2016 .