Monday, March 27, 2017

The Making of Ultra Dash

Ultra Dash is a simple endless runner game for iOS that uses a one tap mechanic. Players collect coins while avoiding oncoming obstacles by tapping the screen to change lanes. The coins are used to unlock new characters and also act as a score to compare against friends. Ultra Dash is also playable as an iMessage game.

Avoid obstacles, collect coins. Simple!

The game is written in Swift 3 using SpriteKit. I absolutely love Swift. It's an elegant language that is simple to pick up yet packs some real power. I will miss it as I bunker down in Unity for my next project. But C# ain't too bad either :-)

My goal in making Ultra Dash was to make a simple arcade game and to do the art myself. I was warned by friends (and my daughter) that my art wasn't too hot and that I should hire an artist. But in the end, I figured that I'm making this game for myself and I really want to cover all aspects of development.

Play against friends in iMessage

Well, all aspects except for music. That was provided by Eric Skiff who has some amazing free music that he lets people use in their projects - check out his stuff here

The journey from concept to App Store has been a long one. My initial commit to Bitbucket was back in June 4, 2015. Why the long development time for such a simple game?

Well, it's been a part-time endeavour that was never a top priority. It got shelved regularly for months at a time due to other commitments - and at one point I decided to call it quits and abandon the project altogether.

However, it was over the 2016 Christmas break that I decided to revisit the game. The time I had spent away from the project allowed me to look at it with fresh eyes - and it wasn't that bad. So I decided to focus on the core game and finish it for release.

Original mockup for the Start Screen

The original framework was inspired by Crossy Road and the innovative banner system that creators Matt Hall and Andy Sum created. Crossy Road did a great job in presenting the player with different options every time the player died - constantly surprising them with new choices such as rating the game, watching a video to earn coins, winning a prize, winning a character or giving them stats on how long until they can earn more coins.

After taking my hiatus and reviewing the game I decided not to follow that model. I ripped out the banner system, removed the coin machine and made the act of buying new characters all done from the start screen. And each character offers a different background and level layout.

How the start screen ended up

I also made a conscious decision to remove as much English text as I could, instead using emoji to tell communicate to the player.

When you die you get sad emojis... kind of like cartoon swear words!

As well as the framework I also simplified the control scheme and the core game loop.

The initial prototype was all about ducking under and over oncoming obstacles in one of 3 lanes while moving left/right to avoid those obstacles that were too tall to jump over.

 I experimented with a number of control schemes including left/right and jump buttons, twin touch (where you tap both finger to jump), release touch controls like the awesome SHREDD where you hold both sides to go straight in the center and release one side to move to that side.

Here are some of the option buttons I used to try out each of the different combinations of controls and lanes:
I tried a lot of control scheme
And different level layouts

And in the end I went with 2 lanes 1 tap!

In the end I opted for a simple one touch control system and 2 lanes so you can play the game single handed. I also removed the ducking/jumping element and the extra tall obstacles.

For monetisation I settled on showing an interstitial ad after every 5 deaths and a banner ad on the bottom of the screen. I used HeyZap to mediate my ads and added a Remove Ads button to turn off the banner and the interstitials.

To buy a new character you have to spend in game coins that you collect. I originally had the ability to watch a video to earn coins but decided to keep the game as simple as possible. At one point I considered adding an option to watch a video to unlock a character, a technique used by Folmer Kelly in some of his games.

Beta testing with TestFlight has been a godsend. If you don't do external testing then you are missing out on a lot of great feedback. TestFlight and putting the game into the hands of folks has been invaluable. 

Wrapping Up
My goal in making this game was to satisfy an itch to program a game and make the art. It may not be the most beautiful game in the world but I have scratched that itch and can now happily move onto the world of 3D and Unity. I will miss Swift though... of course if the game does well I will still be coding in Swift to release updates. Oh, and I also have an Apple TV and MacOS version ready to go...

Lessons Learned
Okay, this isn't a new lesson for me, but it was just a reminder of something I've known for the last 20 plus years. Making games is hard work. Even the simplest, plainest games. They take effort. And there are so many things that make up a game beyond the core mechanic - especially in this day of mobile games and Steam. The little things that eat away at your time like achievements, ad networks, multiplayer coding, cloud storage - all this stuff takes time to research if you don't already know how to do it, time to implement and lots of time to test, fix bugs and retest.

So, to everyone out there that has shipped a game or is in the process of making a game - I have huge respect!

One of my hopes for Ultra Dash is that it has the chance to find an audience. I am a bit worried that the art may impact on that chance. Anecdotally any screen shot of Ultra Dash I tweeted would get around 0 favourites while a beautiful 3D Billy Carts screen shots could get up to 20 favourites. People like beautiful games. 

This isn't a surprising revelation, but it's easy for people to forget this simple fact. 

I'm also keen to see how the removal of English text impacts on the game. Will it be downloaded in countries other than Australia, USA and UK? I'm also keen to see how the banner ads earn compared to the video - I'll be looking at all of this data to help influence how I approach ads and UI for Billy Carts.

Well, that's my 2 cents on making Ultra Dash - it launches on April 12th so I hope you'll download it and check it out.

To wrap up here's a list of stuff I used to make the game.

Thanks for reading!
- Johnno

Development Environment
IDE: Xcode
Language: Swift 3 with SpriteKit

Art - Pixelmator and Affinity Designer to create the sprites and icon artwork
Sound -  Audacity
Icon Creator - Asset Catalog Creator

Music - Eric Skiff

Version Control - Source Tree and Bitbucket
Tasks - Trello to keep a list of To Do, Doing and Done tasks

Ray Wenderlich's site and books:

Platforms: iPhone, iPad, iPod Touch, Message
Coming Soon: MacOS and TVOS (if the game does okay).

Saturday, March 04, 2017


In a previous blog post titled Gotta know when to hold 'em, know when to fold 'em, know when to walk away I wrote about knowing when to stop working on a project.

It's okay to step back and focus on something else and not feel the pressure of having to see a project through to completion. There's no shame in shelving a project until the conditions are right.

Last year I shelved a 2D endless runner I was working on. It didn't quite have the appeal I was hoping for, and despite being 90% done I couldn't see a way that I could really improve it.

Well, thanks to some down time from Billy Carts during the holiday vacation, I had the chance to go back to the project and try out some ideas that had been percolating in the back of my mind.  I had recently relaunched Snappy Word so that it worked with iMessage. Being able to play inside the iMessage app added a lot to the simple word game. I thought about doing the same with the endless runner so decided to use the time to try it out.

Ultra Dash running in iMessage
Being able to challenge a friend with iMessage added that something that was missing. However, I decided to do some more reworking of the core game with the intent of making it a lot simpler.

I pared down the user interface by combining the character selection screen with the main menu. I  removed all English language text replacing everything with universal icons. I removed the earn coins functionality and the random prize boxes, as well as the share functionality. Because it's an iMessage app this is how I want people to share.

Main Screen/Player Select

I also stripped out some unnecessary collectables and objectives paring the game down into a straightforward score chaser.

I ended up keeping the original programmer-art graphics because, well, they've grown on me.  Billy Carts has amazing 3D art and because this is probably my last 2D game I might as well make it as personal as possible :-)

The game will be launching soon on iOS and now it's time for me to get back to Billy Carts - so expect some more 3D game goodness blog posts soon!