Unity Port for A Clockwork Brain – DevLog #11

DevLog Header 11 Small

Multi-week Devlog 12/12/14 – 26/1/15

Hi folks.

Besides a much-needed holiday break, we have been working almost non-stop at A Clockwork Brain.

A Clockwork Brain on the Amazon Appstore

In early December we launched a paid version of A Clockwork Brain, with 12 mini-games, on the Amazon Appstore. This makes A Clockwork Brain available to all Kindle Fire devices of 2nd generation and up, including the Kindle Fire phone. Since then, it has already been featured twice, which is really great!

This was our first launch on an Android-based platform, and it has been a great way to test the process of building a release app for Android. We faced a number of issues before/during launch; here are some things that we’ve learned:

  • We left production testing for the last few days, and came across a serious bug related to NGUI and scaling for different DPIs that was only possible under a production build. We fixed it, but we could have found it sooner.Lesson:  Build a production build of the app at least 2 weeks before the official release. Test all production-level parameters: IDs/Services/Server-side/Game functionality. Then test again and again!
  • Despite testing extensively on our own Kindle HD/HDX devices, using Amazon’s remote testing lab, and passing through review, a serious visual bug has crept up that is only limited to Kindle Fire 7’’ 2nd gen. We have not yet found what causes it and we are considering disabling distribution of the app on this device.Lesson: Use remote device and simulator testing as much as possible; but nothing beats the real thing. Test on actual devices if you can!

A Clockwork Brain on Google Play

Development is progressing well for the Google Play version of the game. We have finished work on the new Store and have been testing Unibill as our cross-platform payment plugin. To test IAPs for Google Play, the app is required to have an alpha or beta version published APK live on the store.

We have also finished and fully tested the OBB/apk expansion file download requirement as set by Google.

Frameworks & Backend

Another area that we’ve been working on is ad network integration and handling. A common source of monetisation for F2P games is through ads. We are considering a combination of incentivised video ads (watch a video, earn some currency) and interstitials.

We have already integrated a series of ad networks, through their respective plugins, such as Unity Ads, Vungle, and Chartboost. Some of them were much easier to integrate than others. The biggest issue we found with some of them was that their test mode didn’t work properly. When in test mode, there should always be an ad available, even if it is a mock ad, so that you can, well… test. Unfortunately, not all of the services provided this and we had to work closely with their developer relation departments to solve the issues that arose. In addition to that, insufficient logging by the plugins made us lose 4 times the time we had originally planned for the integration of these networks. The most easy to integrate in Unity was, as expected, Unity Ads.

Regarding our backend service and its client, we finished the whole online branch and the synchronisation with the server (syncing transactions that occurred while the player was offline). We made various functional tests, building scenarios that test specific functions of the system, which helped us solve some important bugs. Additionally, we integrated our cloud synchronisation component, which means that we can now sync the user state between two devices of the same user. For now this only works with iCloud, but a Whispersync implementation for Amazon devices is also ready to be tested. Google sync is still to be implemented.

Finally, we designed and worked on the migration of iOS users from the current version of the game to the new (Unity) version that we will be releasing. The previous version, built with Objective-C, uses a totally different way to handle the user state, so we had to build a system that takes the information saved on a user’s device and migrates it to our new, service-side service. We are almost done, but it needs extensive testing, since it is a very important matter and there is no room for mistakes.

That’s all for now; thanks for reading!