Last week we released a new Neat Games title: Traces of Love, with a romantic theme aimed for Valentine’s day. This was a remake of BLAMMO: Trace of Love that we published in 2013, with new levels, new gameplay mechanics, and of course, a different game engine. You can download Traces of Love from the App Store, or if you have an Android device, from the Play Store. A version with limited features is also available on the Windows Store, if you prefer to try that one.
With Traces of Love, we decided to depart from Cocos2d-x and use Unity instead as the engine for our games. Dropped performance and larger package sizes are obvious outcomes of this decision, but as Unity opens up interesting opportunities for artistic touches that are not feasible to do with a small team with a low level framework such as Cocos2d-x, it appears to be a logical choice for this type of games.
This difference is very obvious when comparing Traces of Love with its predecessor BLAMMO: Trace of Love. First, Unity gave us access to a very powerful visual canvas, which helped us make more levels with higher complexity and better looks. Second, it made it much easier for artists and level designers to do their own thing without having to bother with the code. Finally, it was much easier to target multiple platforms, and also to integrate third-party libraries. An important time saving difference between using Cocos2d-x and Unity is that in Unity, it is very easy to design and test different behaviors for each individual object, thanks to its component-based nature. This opens up ways for developers to be able to go crazy with each object without having to deal with creating a new class for each differently-behaviored object and so on.
However, performance drop and overheating were the two most discouraging issues in our experience. I am personally curious to see how other high-level engines such as Unreal perform compared to Unity when it comes to a game with similar features.
The overheating problem is more sensible on Android, especially when fullscreen shader effects are used in the scene. And by this, I mean those built-in “optimized” ones that come with Unity’s Standard Assets package. This can be really dangerous for the game because it may lead to numerous negative feedbacks from users who complain about the heating issue. Traces of Love heavily relies on the fisheye distortion filter for creating a romantic look, therefore it makes the Android device heat up really fast.
Unity Asset Store is a huge time saver when it comes to indie game development. We used out of the box asset bundles for Facebook SDK, Parse SDK and Facebook Audience Network ads. A major part of Traces of Love are the walls. Walls and lines were drawn using the free Line2DRenderer asset by Anthony Beyer. Line2DRenderer provides different thickness settings for each end of a line segment, allowing lines to have a more artistic look by being uneven. It also provides different color settings for each point of the line. Although we had to put many additional logics on top of it, we found Line2DRenderer a perfect choice for the base library for making our walls. Line segment intersection code was ported from the Cocos2d-x version of our codebase, which is available on Github.
For advertisements, first we integrated Google Ads, but at some point we realized the Google Ads plugin interferes with the Facebook SDK plugin, causing it to crash on initialization on Android. So we got rid of Google Ads and used Facebook Audience Network instead. It is too soon to judge, but I think the revenues from Google Ads would have been higher. Also to be able to use Audience Network, the app needs to get approved. This was not a big deal as we just sent some screenshots and they approved the request in a few days. Also since implementing Facebook interstitial ads is very similar to Google interstitial ads, we did not suffer any time migrating from Admob to Audience Network.
Finally, Parse was used for the backend of the game. Scores are sent to the Parse server, and a cloud code (written in JS) returns the ranking of the current user for each level. This was very simple and elegant, as Parse handles all of the dirty stuff. We just gave a write-only access to the users and all reading can only be done on the server using cloud code. Sadly, Parse will be discontinued next year, and we will need to install our own Parse server for this purpose.