Enter Cubey

Six months ago I started thinking about my next game and I wanted to try something a little different. Still using Unity and 3D graphics but not using Unity’s physics engine. It had been a mixed blessing. Many of the early comments about Impossible Rainbow Road (IRR) complained about excessive bounciness especially at invisible cracks in the road. I spent lots of time working around the engine’s behavior.[1]

Somehow I came up with an idea for a die rolling around a grid. A puzzle game with the objective of reaching the finish line (the tile marked with a checkered flag), not with a shortest path but with a path that maximized the sum of your pips. (About the same as the longest path.)

It was a somewhat interesting puzzle. I wrote an exhaustive solver to find the maximum-score path for any grid. The video above shows my quick manual solution with a score of 128. The solver found a path with a score of 170.

After playing it for a while I didn’t think it would make a good phone game. A difficult puzzle isn’t the kind of thing people want to play over and over. But it got me started down the road of a cube rolling around a grid. (All the rolling behavior was done with the DOTween tween-animation engine, not with physics.)

After several more months I ended up with Cubey McCubeface.

It’s still sort of a puzzle game but that’s not the primary challenge. It’s more of a twitchy arcade-type game. I was influenced by the old 80’s arcade game Q*Bert. Visit all the tiles to make them all the same color, while being hindered by various randomly-appearing enemies.

I’d be interested in hearing people’s comments about the levels. I worry that Level 4 is too hard, with a two-step color sequence (yellow – violet) but losing a step (back to yellow) when you revisit a tile. Q*bert was popular with this kind of sequence but I found it somewhat frustrating.

Level 5 was my new thing, with tiles that vanish instead of changing color. (You can see it at the end of the promo video.) I like it, but in the first release nobody ever saw it because they gave up in the harder levels. In the second release I removed the restriction of playing the levels in strict order.

  1. More grousing about physics… I spent a couple of months trying to make a two-person game — starting with simultaneous players in IRR — with little success. I found it impossible to keep the two balls in sync between devices such that collisions looked realistic. A collision would look correct on one device but the balls wouldn’t be close to touching on the other device. My take-away message was that a physics engine doesn’t coexist easily with multi-player.

    The final straw early in the year was the Unity 5.5 release which updated the physics engine (from PhysX 3.3.1 to 3.3.3). IRR’s physics started behaving unpredictably, especially when the ball made a glancing collision off a wall. It made the game essentially unplayable. I spent some more time on work-arounds but finally gave up and reverted to a previous Unity version.

Endless high scores

I released version 4.0 of Impossible Rainbow Road to the Apple and Google stores about three weeks ago.  One of the new features was a named leaderboard for the endless tracks.  Last week I checked the leaderboard and found that someone had achieved a score of 318,065 points on the first endless track.  Wow.  I estimate that the person must’ve played the track for well over an hour. The person’s nickname was aroa and their location looks like somewhere in Spain. (That’s as close as I can tell.)  That high score is likely to stand for a long time.

I’m equally impressed by the high scores on the other two (more difficult) endless tracks.  AhHong118 (somewhere in Malaysia) achieved 224,047 on Endless-2.

WaqasAnsari (Pakistan) achieved 111,320 on Endless-3, the track formerly known as Insane.

Congratulations to all the leaders!


Tips for specific tracks

My last post gave some general tips for playing Impossible Rainbow Road.  Here are some tips for specific tracks.

Endless 1 and 2. The general tips cover most of what you need. Follow the road as best you can at the beginning. After you’ve picked up enough speed you’ll find it easier to let the ball leave the road and sail to a landing further down.  To me it feels like skipping a stone.

If you find that it’s too much like skipping a stone — the path is too horizontal and landing on the road is too tricky — you might like a bouncier path. Try pushing down as the ball approaches each landing in an attempt to increase the rebound.

Each endless track gives you one hop at the start. You might be able to use the hop to rise up and get back on track. You’ll get a new hop at each 1000 points.

Endless 3 — what I used to call the Insane track– is actually a bit easier in some ways.  The road curves more tightly under you. You might need pushing a lot more than hopping, to keep yourself falling downward without losing sight of the track.


Medium Dash 1. Try to stay grounded on the downhill before the gap, to build up enough speed to get across the gap.

Medium Dash 2. You’ll need to compenstate for the blizzard cross-wind, especially when you’re sailing. After the first lap you might have enough speed to thread the loops or even skip them.


Medium Dash 3. The first track with a puddle, placed in the most annoying place at the bottom of the downhill where you’re trying to build speed. The good news is that you can hop over the puddle if you time it right.




Hard Dash 1. Get grounded quickly after the first gap, to build up enough speed to cross the second gap.

Hard Dash 2. Rolling hills! It’s all about the rhythm of hitting the downhills. Oh, and another annoying puddle.

Hard Dash 3.  A fork in the road!  I honestly don’t know which path is faster.  Also see the tip for Hard Dash 1.

Epic Dash 1. No guard rails! Two annoying puddles! The first one seems especially hard to skip over. The good news is, you should be able to thread the loop without the guard rails to get in your way.

Epic Dash 2. A big gap on a hilly curve. Pushing and steering at the same time.

Epic Dash 3. More rolling hills, pushing and steering. In a blizzard. Not a time for a weak sensitivity.


Epic Dash 4. You’ll need the last downhill speed boost to reach the final portal.

General tips for playing Impossible Rainbow Road

Impossible Rainbow Road is now two games in one. The Endless level comes from the original version of the game where the road goes on forever. The objective is to go as far as you can without falling off.

  • At the start of an Endless run, all you can do is steer carefully and follow the road. This shouldn’t be too hard with the slower speed at the start. After you’ve picked up speed, about a minute into the run, it’s not so easy to follow the track and it’s not the best tactic anyway. It’s more fun to skip down the track like a stone skipping across water.
  • When landing on the track, you can try pushing down to increase the upward rebound. This can give you a more bouncy, less horizontal path.
  • If you fall off the road you might be able to hop back on if you catch yourself quickly enough.




The Dash levels come from the second version of the game (formerly called “Impossible Rainbow Road 2” and “Loopy Dash” before that). The objective is to go as far as you can in one minute. You’ll repeat the same track for several laps, going faster on each lap. If you finish 3 laps you’ll get 3000 points. If you cover 3 and a half laps you’ll get 3500.

Because everyone’s playing the same track for the same amount of time, the world’s best scores will tend to be bunched together. Here are some tips to squeeze out the last few points for a world-beating gold medal.

  • Be sure to roll through the magic space warp at the end of each lap.
  • Try to avoid colliding with the guard rails. Each collision costs a tiny bit of speed.
  • Try not to float above the track for too long, where air resistance will slow you down a bit. When you find yourself sailing, touch and hold the screen to push the ball gently down to the track.
  • But don’t push too long. After you’ve touched down more push will create drag. The best strategy is to stay lightly on the track and in the middle. (Unless flying lets you take a major short-cut!)
  • Hit the downhills just right to maximize your speed. (If you’ve ever played the game “Tiny Wings” you’ll have a feel for the rhythm of hitting the downhills.)
  • You might find more than one way to cover the distance, especially after you’ve built up speed.
  • I find the game easier to play with a higher sensitivity.

My next post will offer hints for specific tracks.

Live-action menu

Yesterday’s post talked about Loopy Dash having a dead-static menu and needing some extra action to catch the attention of first-time players. My other current game, Impossible Rainbow Road, had the same issue. The initial screen (main menu) looked like this.

In my latest update 3.8, I wanted to see how much action I could incorporate. Thanks to Unity’s cool RenderTexture feature I was able to embed the actual running game — live action! — in the menu.  Unity rocks.

It’s important to note that the game is actually running.1 The action isn’t pre-recorded as you might think from this small sample. I had to use a straight track or else the ball kept falling off!  My initial idea was to make the menu show an instant replay of the user’s last run, but that turned into more work than it was worth at the time.

1. A camera follows the ball (same as in the game) but with its target
   texture set to a RenderTexture object that can then be displayed
   as a RawImage in the UI.

A little movin-n-shakin

I’ve been pretty good about updating my two apps 1 with improvements and bug fixes, but not so good about updating this blog.  It occurred to me that the release notes for the updates would provide good material and motivation for blog posts.  Starting that now.

I made a small update of Loopy Dash to 1.7.1, on the Google Play Store first.  My goal was to add a bit of curb appeal.  The stats suggest that many people download the games, give them a quick look and discard them if nothing catches their attention.

My games had a static initial menu as can be seen in the screenshot. Not bad but nothing moving or shaking.

I made the ball roll as if it was moving down the track, with an occasional random side-shake and sound as if it collided with the guard rail.

My other goal was to encourage people to leave a rating. My database shows 1,587 unique users in the two months that Dash has been out, but there’ve been only six ratings and one real review. I added a please-rate-me panel.

It pops up when you start your fifth session, and never again. It merely makes it a little easier to leave a rating.


1. Yeah, only two apps now. A few days ago I unpublished Chucklehead (making only
   a few pennies, kind of embarassing) and also the paid versions of Impossible
   Rainbow Road (making a dollar or two a month, not worth keeping up to date).

Third game!

Back in mid-July I had two games out there — Impossible Rainbow Road and Chucklehead — and they weren’t needing any more frills. I was pondering what to do next. I’d spent a year on Chucklehead. (Well, a calendar year shared with my day job… more like a half year of real time.) It was making no money. (Oh well. It looks silly now but at the time it was just something I had to finish. I learned a lot.)

I wanted to try one more game if I could do it quickly, say in three months. I started thinking about Rainbow Road and the reasons why it didn’t do better.  I decided to do another quick rolling-ball game but without the silly little one-point boxes. To me they’re not the fun part of the game (the long jumps are), but not many users were figuring that out.
I wanted to use only tilt control — much easier steering than tapping.
I wanted it to be easier to start playing, not so impossible for casual users.
I wanted it to be more competitive, a race against a clock like a 100-yard dash.
And with leaderboards.
I wanted more interesting tracks with hills, curves, gaps and loops.

Therefore the track had to be a fixed repeatable course, not randomly generated. With a relatively short length, around 100 meters. You’d loop back over the same course several times, as much as you can cover in one minute. The result was a game called Loopy Dash. *



I beat my self-imposed deadline by one day. (Yay me.) Loopy Dash was on the two app stores on October 24th.
Loopy Dash on the App Store




* When the name came to me I wasn’t really trying to follow the 2-&-1-syllable tradition set by Flappy Bird, Crossy Road and Cliffy Run… but the tradition helped to make the name stick.

World’s highest scores!

One of us was play-testing Impossible Rainbow Road last night, doing pretty well on the Easy difficulty level with a score of about 100 points. At the end we were rewarded with a congratulatory message:

Screen Shot 2016-05-19 at 11.31.33 AM

First, it surprised me that someone had achieved 23,046 points! Wow. I don’t know who did it but I feel like sending them a T-shirt or something. (The leaderboard doesn’t bother collecting the person’s name and doesn’t track the exact location. All I know is that the person was in the general vicinity of Denver. The person was using the new tilt control technique which makes staying on the track a lot easier but still, 23,000 must’ve taken a lot of tilting.)

Second, it occurred to me that some players might be a bit confused to hear that they’re in the top half when their score is a small fraction of the world’s highest. I looked at the leaderboard database which has been collecting scores for about a month now. For the Easy level the distribution looks like this:






It’s a highly skewed distribution. The highest scores (above about 200) were achieved by only one person each, giving that long tail to the right. Most of the scores are bunched up below 100 points as can be seen in the close-up on the right.  The 50th percentile (the median) is at about 75 points. That’s why a score of 100 can be in top half of the world’s players but still be far below the world’s highest score.

The leaderboard collects scores across all devices (iOS or Android), from the free or paid versions, from any location. That 23046 really is the world’s highest score. (For now.)

Here are the distributions for the other two difficulty levels.








Another icon idea

Thanks for the votes.  However, last night Jeff came up with another idea.  I call it a diagonal face-off.  Whaddyathink?


The icon that I need to submit to Google Play has to be 512×512 pixels.  I don’t think it ever gets displayed that big… they reduce it to whatever size they need.  The store listings seem to show about 130px which is the size I’m showing here.  On a device it’ll be as lot smaller of course.