Friday, March 20th, 2015
Balls Away is a fast paced action game for iOS that pits you against a horde of evil balls bent on the destruction of a small rabbit colony. Leveraging the Vision 3 game engine, Balls Away features a rich 3D world with randomly generated levels and intense gameplay.
For more information about this game, visit its project page. For more information about the game engine that powers Balls Away, check out the Vision 3 project page.
I wrote Balls Away over a two week period in September 2014. The goals were simply to use the Vision 3 game engine and to experiment with the swipe input mechanism.
The basic concept is keep away: balls roll across the world affected by the slopes of the terrain and collisions with other balls, and the player must prevent them from falling into the small black hole in the center of the map.
Now that the game has been released for a few months I decided to write up some of the highlights of its development. Let's dive in.
The Vision 3 engine runs on Windows, Mac, iOS, and Android. I chose to develop the game primarily in Windows for the sake of rapid iteration, and release the game on iOS. I still needed to test and tune the gameplay on a device, but running the game on a PC for the majority of the project was a big win.
My previous work on Vision alleviated the usual strain of cross platform development, as the engine smoothly supported all the various resolutions and hardware capabities of the iPhone 4 and newer.
The levels themselves are procedurally generated, with a select set of favorites frozen into place and saved out to disk. This ensures a static set of worlds in the rotation for players to practice, but also allows the game to quickly generate additional levels when necessary.
The Balls Away world editor (shown below) is based on the Vision world editor. This tool allows developers to audition and modify worlds right from within the engine. The editor also supports terrain sculpting and painting, which I used to tweak levels and make them more fun and interesting.
I initially experimented with a number of different gameplay mechanisms before settling on the final one. The following are some of the features that were ultimately discarded for the final release:
Player swipes that simply deflect balls and send them careening in the opposite direction. This made the game too difficult as it was hard to predict the path that a ball would take after being struck.
Support for balls of different sizes. This was a 'too many ideas' problem that took the game in a more complicated direction.
Holes that are in constant motion. This also made the game too difficult, particularly given the uneven terrain that the holes would flow over.
Ramps that could launch balls off a hill. I liked this feature because it helped to show off the lighting system with shadows that properly flowed over objects. It also made the game feel more dynamic. In user testing however, I learned that this feature also made the game a lot more confusing.
Once I settled on the gameplay, it remained largely the same for the remainder of development. For comparison, the video on the left is an early gameplay test and the video on the right is the final trailer.
Early gameplay footage:
Final gameplay trailer:
The visual look of Balls Away changed several times throughout development. The earliest iterations included a textured terrain and balls, bump and specular mapping, volumetric fog, depth of field and motion blur. Over time the style shifted from detailed and realistic to exaggerated cartoony (complete with large silhouettes and outlines on objects).
Eventually I settled on a subtle cartoony feel combined with soft specular highlights and rim lighting. This allowed the terrain and game objects to fit visually together and avoid distracting the player.
Development of Balls Away was fairly straightforward, with no major hurdles or problems. Probably the biggest issue was simply managing the overall size of the content.
My development targeted the 5.5" iPhone 6 Plus, so all of the resources needed to be high resolution (for 2015). At the same time I wanted to make sure that the game was smaller than 50 MB to make it quick and cheap to download. This required extensive compression of audio, textures, and terrain files.
The terrain is actually stored as a simple heightmap of 8 bit values. Terrain texture coordinates and XZ world coordinates are inferred simply by the order of the values. At load time, the engine smoothes out the terrain to avoid abrupt and blocky slopes.
In the end the final release size of the game was just 20.4 MB.
It was a fun couple of weeks of development and it produced a game that's actually quite a bit of fun. After finishing up the content and code I spent
some additional time to create a promo website, a game trailer, and the app store copy. There are still a lot of things that could be tweaked or cleaned up in the game,
but as they say, great is the enemy of done.
If you're interested in checking out Balls Away on your iPhone, head over here to download it from the app store. Be forewarned, the game is hard!