Analytics data from “Swift”

Tracking data from games is common practice these days. It really helps developers glean insights into how their games are being played after being released into the wild. This is especially helpful if you’re a small studio (like me), and don’t have the resources for a dedicated testing department.

This article shares some of the data that Swift collected since its initial launch back in November of 2012 up until this writing (April 2015). Although the game is available on Google Play, Amazon, and iTunes, I’ll be focusing mostly on the Google Play paid app, since I have the most data on that version.

Customers vs pirates

Swift_CountriesList

As I previously mentioned in the postmortem I wrote awhile back, Swift got pirated a lot. So how do I know this? I compare the number of downloads from the app store to the number of unique users playing the game. There are considerably more users than downloads from the store, so that means they acquired the game somewhere else.

Google Play

On Google Play, I initially had a paid version of the app that launched in November of 2012. I later added a free version with ads in September of 2013. I tracked both versions through the same Google Analytics property (which I probably should have split up, whoops). Most of the unaccounted users were there prior to the release of the free version, so Swift gained magnitude among pirates almost exclusively from the first paid version.

Of the two Google Play apps, there were 20 paid purchases and 285 free downloads that were accounted for, bringing the total to 305 official users. There were 14,915 total users playing the game according to Google Analytics. So that means there were 14,610 people (roughly 98% of total players) who acquired the Google Play version of the game through other means than the storefront.

iTunes App Store

To put things in perspective, the iOS version of Swift that launched a year after the Android debut (and only had one paid version) had 19 recorded purchases, while the tracking code reported 127 users. So we have a total of 108 pirates here, or about 85% piracy. The smaller number probably has something to do with pirating on iOS being a more complicated process than on Android. Either way, it’s still a pretty high percentage.

User locations

Swift_UserMap

It’s always been interesting to me to see how one little game can travel the world from one person sharing it to another. It’s not too surprising that 84% of all Swift’s playtime sessions were in China, since that’s where playing pirated games is the norm, whether the people playing them know it or not. Russia, Ukraine, and Thailand came in after that, and United States came in fifth for most common country for Swift to be played in.

Player behavior

Let’s move onto the fun stuff, like how players performed in game. I tracked the highest levels and scores at the time players got game overs (or opted to restart the game) to see just how far everyone was going. For the record, the average time spent playing Swift is 6 minutes and 48 seconds. Which explains a lot of the completion levels outlined below.

Highest levels

The game has three modes: normal, easy, and hard. The differences between these modes boils down to different enemy types and spawn times, as well as differences in the consecutive kill times for the bonuses to spawn. For example, it’s harder to spawn a bonus in hard mode than in easy mode.

Swift_HighestLevels

Normal mode

In normal mode, the vast majority of players completed their sessions between levels 0 to 10. Playing up until level 20 or less was next after that. Surprisingly, over 50 players went past level 30, which is much higher than I anticipated. The game only has 31 different levels, it repeats the final level after that. So they essentially “beat” the game.

Easy mode

Overall, easy mode wasn’t very popular, but it was played more than hard mode. Most players on easy mode made it between levels 10 to 20.  A couple dedicated souls managed to get up to level 41 to 50 bracket.

Hard mode

Ah, the hard mode… the most enjoyable mode for me to play, since it was actually challenging for its own creator. Though the numbers show that it was definitely not a favorite. Nobody ever made it past level 20 of the 31 levels available. Except for me, but I didn’t track myself.

Highest scores

Now let’s take a look at final scores for each mode. It should be noted that I added individual mode score tracking to a later version of the game, so the numbers presented here are from a smaller sample.

Normal mode

Normal mode is selected by default, so it makes sense that most of the scores collected came from this one. People didn’t get far score-wise, only making it up to 100 points or less most of the time.

Swift_NormalModeScores

Easy mode

Here we see people performing a lot better, with the majority of scores in the 101-1000 score range. Even though fewer played this mode, they killed more enemies here.

Swift_EasyModeScores

Hard mode

People got a bit more serious in hard mode, with most final scores ranging between 101 to 10,000 points. There were a couple dedicated players who racked up some major points, but it wasn’t very common.

Swift_HardModeScores

Highest scores overall (from early tracking code)

Swift_HighScoresOld

I originally tracked scores differently in the first version of the game (the one that got pirated the most). They were tracked without regard to which mode they came from, so numbers were all over the place. Scores between 101 to 10,000 points were by far the most common. But there was one crazy person out there who somehow racked up at least 10,000,001 points in a single game… wow.

 

 

 

Performance

Getting frame rates high enough to make the game playable was a major hurdle during development, so I made sure to track average frame rates to see how the game was performing on the wide variety of Android devices around the world. To get the best sample, I had the tracking code check the frame rate in a later level (instead of the first one) when the maximum number of enemy types were being stored in memory.

Swift_FrameRates

About 47% of devices could play the game between 21 to 30 frames per second, which is the frame rate I was aiming for. Second place was 11 to 20 frames per second; that’s about 45% of devices playing below the ideal rate, but still good enough to enjoy the game. A tiny 2% of players were attempting to play the game on devices that just couldn’t handle it (less than 10 frames per second). On the flip side, 6% of players were using some beefy tablets that clocked in between 31 to 60 frames per second.

 

Settings

Aside from the main shooter style gameplay in the levels, there were a number of extra settings that I added to make a better experience. I tracked the use of these extras to see if they were worth the development time that I spent on them.

Swift_Languages

Languages

I spent a great deal of time doing translations for the few lines of text in the game. I had wondered if it was waste for such a simple game. Though I will admit that this isn’t an accurate reflection of whether or not languages were preferred, since the original version of the game was lacking the necessary code to switch the language automatically based on the device’s system language setting. Either way, English was the primary language the game was played in, which simplified Chinese coming in second place. And nobody played the game in German.

 

 

Screen orientation

Swift_Orientations

Another feature of the game that I spent a lot of time perfecting was adding in the ability to play the game in portrait mode (tracked as “default” or “upside down”). I tracked screen orientation during gameplay to see which was more popular. Interestingly enough, both landscape and portrait modes were used evenly, with “rotated left” being the preferred way to hold the phone 37% of the time, and “default” portrait mode coming in at 33%.

 

 

Audio on/off

Swift_Audio

I’m kind of a video game music audiophile, so naturally I was meticulous about my game’s music and sound effects. Being a mobile game, I had wondered if most people were playing the game on mute and weren’t hearing anything I spent so much time on. But as it turned out, the game was played with the sound on 96% of the time. Phew.

 

Social media buttons pressed

So this was kind of interesting. In the first version of Swift, I had a tab with some buttons where players could open up a browser to see related web pages. Phanatix’s company page was clicked on the most. However, I was surprised that my IndieDB page came in second place for most clicks, while the company’s Facebook and Twitter pages were of little interest. This might have to do with the game being most popular in China, where Facebook and Twitter are difficult to access.

Swift_Buttons

This was really good feedback for me, since now I know the importance of maintaining my company profiles, since people actually do link to them directly from the game. In the future, this might be a useful strategy for encouraging unauthorized players to download an official version of the app or just let them know about important update notices.

 

Conclusion

I learned a lot from collecting data in Swift, and it was definitely worth my time to add the code to make tracking possible. Since it’s clear that the first version of a game gets the most distribution, I will be paying more attention to ways I can monetize pirated apps that are floating around the internet. I now know that localization isn’t as important as I thought it would be, and I don’t need to worry about adding extra languages right away. I also learned that including both landscape and portrait modes for mobile games is important; I thought people would only play Swift in landscape mode, but now I know to include options for both in future games.

Swift has taught me a lot, and so did its players. The knowledge I gained here will be of exceptional use in my next game, which I’ll FINALLY be introducing in my next article.

Leave a Reply