Hashi Extreme Puzzles Sales and Ads Stats

The Game

Hashi Extreme Puzzles is a game I released on Android (February, 22th, Download on Google Play) and iPhone/iPad (March, 7th, Download on AppStore). The game is free to download and was released with 560 levels. Levels are grouped in packs: there are 4 free packs with 40 levels each and 4 paid packs with 100 levels each. In an update (March 25th on Android, April 4th on iOS), I added 4 free packs and 4 paid packs for a total of 1120 levels. The game displays ads at the bottom of the screen (using iAd and AdMob). The ads are removed when the player purchases one pack. Each pack is sold $1.49 on Google Play and $1.99 on iOS.

The marketing

I spent no money and nearly no time marketing the game. All I did was:

  • Post on facebook (only 100 fans, many real life friends), twitter (about 200 followers, mostly game developers) and reddit.
  • Display a one-time in-game advertisement message in two previous mobile games. If the player taps on “OK”, he is taken to the store page of Hashi Extreme.

I didn’t send links to journalists or reviewers for a few reasons:

  • The game is not really original, it won’t stand out enough for most journalists.
  • I sent quite many email for other similar games (puzzle games), and it didn’t work out very well (but still got me a few download spikes).

The Downloads

Here is the graph of the downloads (remember the game is free to download).

downloads

The iOS downloads (blue) are somewhat classic to what I’ve seen in most of my other games: starting quite high, slowing down quickly and staying there forever. The iOS downloads are between 50 and 100 per day, which is not that bad. The interesting part is the Android downloads (red). It’s a common start too with low downloads, but with a huge spike starting on March, 14th with the top of the hill on March, 31st (3024 downloads that day). The effect is then fading out and still is. The downloads are still quite good today (800 per day). Let’s see what happened…

The Luck

What happened is that I got lucky! It took me some time to find what was causing this spike, as I could not find any review or post on a big website. It came from Google Play: Hashi Extreme Puzzle was the first game in the section “Users Also Installed” of the game Puzzle Retreat. This section is displayed on the store and is also shown to the players right after he downloads Puzzle Retreat. This was the good part, but the great part is that Puzzle Retreat was featured by Google Play at that time! They have more than 1 million downloads and I guess got most of them from this feature. Hashi Extreme is now “only” fourth in this section, but my other Hashi game took the third place. However, Puzzle Retreat is not featured anymore so it’s not affecting my downloads much more, now. Here is a screenshot from the Google Play app taken from my tablet (NB: the Google Play app changed on April 30th, I don’t know yet the consequence it will have) (click to enlarge):

puzzle_retreat

If you’re curious, I used the following google request to find this:

"users who installed this also installed" "hashi extreme"

If you are a developer and have an unknown spike, replace Hashi Extreme with your game and see if you find any big or featured games. Another user on reddit had a similar spike and could find the origin with this request, too.

The Sales

Here is a graph showing the money made per day, split between platforms, sales, and ads. sales The Android download spike is easily visible. Here is a pie chart showing the revenue per source/platform.

sales_pie

Here are the actual numbers used for these charts and total benefit from the game. I developed the game in my free time and don’t value the time spent working on it.

budget

The Countries

I now localize all my games. I localized my previous game in 10 languages, and 11 languages for Hashi Extreme (English, French, Italian, German, Spanish, Portugese, Dutch, Korean, Japanese, Russian and Chinese). Here are stats on revenue per country: sales_per_country ad_per_country The language I added (Dutch) appears in the iOS Sales and Android Ads. Russia is in good position for sales on both platforms.

Sales per Download (conversion ratio)

Important note: Players can purchase up to 8 packs so this conversion ratio is not really showing paying players.

sales_per_download

The Android download spike affected a lot this curve. It’s now quite stable at a low value of 0.8%. However, it takes time for players to purchase packs and I probably should check again in a few weeks.

The iOS curve has the same shape that on my first Hashi Game (see stats). However, it’s much lower (about 50% lower). I’m really not sure why, I honestly think the second game is better. A possible reason could be that on my first hashi game, there are only 60 free levels, while there are 160 free levels in this one.

The Conclusion

Even with a simple game, without marketing, it’s possible to make some money on Android. It stills confirm that luck is a huge factor, too. If you like sales stats, make sure you read our other articles on the subject. Feel free to comment, share and tweet.

Mobile Game Localization: Countries, Numbers and Statistics

I’ve released a series of puzzle games on mobile (you can check them on the sidebar). Don’t Feed the Trolls and Hashi Puzzles: Bridges & Islands were localized in English and French; Battleship Solitaire Puzzles in ten languages (English, French, Italian, German, Spanish, Portuguese/Brazilian, Russian, Japanese, Chinese and Korean); and Hashi Extreme Puzzles in eleven languages (same as Battleship with Dutch).

I compare here Hashi Puzzles and Battleship Solitaire as they both have been released for a few weeks and are both puzzle games with a similar monetization strategy: games are free to download and I sell additional level packs.

I focus of the 21 first days after release for both games. For sales data, I use iOS and Android numbers. I don’t use Amazon numbers as Amazon is only available in a few stores and sales are very low. Also note that even though I took into account Android sales, Android sales are only 0.45% (not a typo, read more!) of the revenue for Hashi, and 11.9% of the revenue for Battleship. For ads, I only used iAd numbers, so it’s iOS only.

Revenue per country per game (Ads and Sales)

This first chart is about Hashi Puzzles, translated only in English and French.

hashi_country

Not much surprise here: the game sold in USA and France. The other countries with at least 2% of the sales are also speaking English (or French for part of Canada).

Have a look now Battleship Solitaire, translated in 10 languages.

battleship_country

We still have USA as the top country but we can see new interesting countries, Switzerland (mostly German language but also French and Italian), Germany, Russia, Spain, Italy, Brazil, Japan, South Korea. I’m surprised to see Switzerland ahead of France as it’s a small country. But the game as been in the top charts on iOS in Switzerland, and that probably kept the downloads high for some time there.

The only language not visible in this chart is Chinese. I’ve read it’s a huge market but nothing shows up here. It’s important to know that Google Play is not available in China, though. I had a few downloads on iOS but no sales.

Top countries per platform

Here are the top countries per downloads on Android and iOS, for Battleship Solitaire Puzzles. For this statistics, I use all the data since release, on both platforms (22 days on iOS, 28 on Android).per_platform_downloads

With this first chart about downloads, you can see United States is not on the podium in both platforms, and only 9th on Google Play. Let’s see the sales, now.

per_platform_sales

United States are back on the podium when considering revenue.

Was it worth it?

Yes, it was. I think it also gives more possibilities for the game to show up in local charts for added visibility (top downloads or top grossing). For my latest game (Hashi Extreme Puzzles, released on Android a few days ago, and coming soon on iOS), I first though of dropping Chinese but finally decided to keep it. I added Dutch, too.

Here are two drawbacks of localization, though:

  • You may receive customer emails or store ratings in a language you can’t read or write. I could not get the overall meaning of some emails, even with google translate.
  • Every time you want to make an update with a description of the changes, you need to pay new translations.

Thanks for reading! As usual, use the buttons below to share, tweet and comment!

Sales and Ads Stats for Hashi Puzzles (iOS, Google Play and Amazon App Store)

Hashi Puzzles: Bridges & Islands is a mobile game that I released a few weeks ago on three mobile platforms: Google Play on November 25th, 2012, App Store (iPhone/iPad) on December 3rd and Amazon App Store on December 18th.
Here are a few statistics about the sales and ads revenue of the game.

The Game

Hashi Puzzles is a logic game (same kind of gameplay than sudoku). This game was an experiment on two specific points:

  • I wanted to develop a game very quickly. The initial version was made in 45 hours (read “How I Developed and Released a Game in 45 Hours“)
  • I wanted to allow players to spend more than $0.99 if they like the game. Therefore, the game is made up of level packs. Three packs of 20 levels each are available for free. Then, the player can buy up to six packs of 60 levels each for $1.99 per pack. This is considered expensive for a mobile game, even though I think that multiple hours of gameplay for the price of a cookie is still cheap, but that’s not the point here :) . I had a few reviews mentioning the price, as expected.

Let’s see some charts.

First stat: Downloads

On the charts the horizontal axis is the number of days since release on the given platorm.
downloads

As you can see, on iOS, the downloads are great after the release, probably because of the “New Releases” section. After that, the game was featured in the Puzzle and Family charts in France and USA. The game left the charts on December 31st, and you can see the final drop after day 28.
Downloads are now quite low for every platform (between 5 and 30 per day).

Second stat: Sales

As this is a game with in-apps, a single player can purchase multiple packs of levels. Each pack sold is considered a sale.
salesSince the game is released, I’ve had sales everyday on iOS. However, it took 14 and 12 days to get my first sale on Google Play and Amazon respectively!
Obviously, more downloads led to more sales. Let’s see the connection between downloads and sales in the next chart.

Third stat: Sales per Download

This chart shows the number of pack sold for 100 users. For instance, 2% means that on average for 100 downloads, I sell two packs (at $1.99 each). I don’t know if both packs are bought by the same player or different players (this information is only available on Google Play). The horizontal axis goes to 49 days in this one.
packs_per_dl It’s interesting to see that iOS is also much better compared to Android in this chart. Players spend more on iOS (this will not be a surprise to most of you). The value is also still increasing on iOS. I suppose that’s because players downloading the game recently probably searched for the game. They probably like it better that someone that downloaded it right after the release, just because it was new.

Fourth stat: sales per pack

sales_per_packThis stats shows that many players bought the last (hardest) pack without purchasing the previous ones. The most sold packs are the first one, second one and last one.

Fifth stat: Revenue repartition

Let’s see now the revenue repartition between sales, ads, iOS, Google Play and Amazon. Please note that ads revenue for Google Play and Amazon are shown together.
revenue_repartition
Blue is iOS, Red is Android. No surprise here, given the previous charts.
I use iAd and AdMob on iOS, and AdMob only on Android. I was disappointed by revenue on AdMob Android, especially compared to my previous game Don’t Feed the Trolls (sales stats). However it’s fair to notice that the TTR (Tap Through Ratio, amount of player taping on the ads) is 10 times lower on Hashi Puzzles compared to Don’t Feed the Trolls.

Sixth stat: total revenue per platform

net_revenue_per_platform
I made more than 12 times more money on iOS compared to Android. This is a surprise to me as once again, I had really different stats with my previous game. Overall, Hashi Puzzles was more successful than Don’t Feed the Trolls. It’s even more successful if we consider that:

  • I had no press converage for Hashi: this is a simple game, not very original that most journalist don’t care about
  • I spent much less time and money making the game

That’s it! Feel free to share and comment, or ask me anything on twitter @Frozax !

How I developed and released a mobile game in 45 hours

icon_96_transparentDeveloping a game always takes longer than expected. I made an experiment and tried to develop a simple but descent game quickly, while keeping tracks of time spent on each feature. I also wanted short development times to see if I can make a profitable game, even if I were paid for it (I’m not doing this for a living, just for fun).
This experiment ended with the game Hashi Puzzles: Bridges & Islands, available right now for Android and iPhone/iPad (free download).

Simple design

In order to release the game quickly, I had to have a safe design, without too much risks. I therefore came up with the idea of implementing a game of Hashiwokakero (Wikipedia), a logic game made by the inventors of sudoku. I know the “gameplay” has already been tried and it’s fun: I won’t need to spend time iterating or tweaking the design.
As I’m not an artist, this is also a good choice because it is graphically simple. I initially planned to do all the art myself, but my brother (Vincent) nicely offered his help when I gave him an early build of the game. He therefore made the game icon and logo. He also worked with a tight deadline (1 day).
To have a complete and polished game, I added levels, level packs, hints and a progression (inspired by the great game Flow (Google Play, AppStore)).
I also integrated ads that are removed when the player purchases any of the six purchasable level packs. Purchases are made with in-app payments.
The game has no music, and only very basic sound in the menu (actually, the code used to play the validation sound in the mainmenu is in my framework so it was faster to keep it than to remove it).
The game is translated in French and English. [By the way, if you can speak any other language, feel free to contact me as I'd love to port the game in other languages. The game has very few texts, as you can see on the editable texts sheet, and a simple description on the stores].
With the design in place, experience gained from a released mobile game (Don’t Feed the Trolls), and an engine ready (cocosd-x), I can start the actual development of the game.

45 hours

I worked on the project part-time, mostly in the evening when my kids are sleeping ;) .
The android version of the game was made and released after 45 hours of work distributed in 11 days. I don’t count the time spent thinking about it in the shower, though :)
I then spent another 5 hours to port, build and submit the iOS version. In addition to creating the project, I added a feature on iOS that I didn’t implement in my previous game: the ability to use iAd as well as AdMob as advertising sources.
It also took 5 hours for the Amazon App Store Kindle version (it’s in review right now and should be available in a few days). It was the first time I implemented the in-app API for Amazon, that’s why it took a bit longer than it should have.
My brother spent a total of 5 hours on the art (on the last day).

Total breakdown per feature and sub-feature

Here is the time spent per feature:
feature
I included everything in this chart : my work, the artist’s work and the ports to iOS and Amazon. This is a total of about 60 hours. We can see the distribution is quite even between each feature.
It’s more interesting to see a sub-feature breakdown:
subfeature
A few comments about this chart:

  • I develop as much as possible on Windows, with Android being my main real device test target. Therefore, I grouped together windows and android in a platform specific category because most of the specific behavior is done on windows if possible (portrait orientation for instance).
  • The tutorial took quite some time to implement but it was done twice. After the first playtest with my wife, I realized the tutorial was not understandable at all and I changed it entirely.
  • Optim is performance optimization so that the game can run on lower end devices. I first made everything working, and then optimized it, mostly by reducing draw calls with the techniques I describe in this article.
  • Most of the time was spent building the UI of the menus. I have three screens:
    • the main menu with three buttons
    • the pack selection screen with a vertical smooth scrolling
    • a level selection screen with horizontal scrolling with pages

    I already did these kind of menus in my previous game, but it still required some work to put it all together correctly in Hashi Puzzles.

  • In the core gameplay section, the longest part was obviously the level generation part. In order to have only interesting levels, I had to tweak the level generation for some time. I also had to develop a solver to help the generation. However, the puzzle solver allowed me to develop the “hints” feature very quickly.

Conclusion / Tips

Developing this game was very intersting and I (objectively? :) ) think the game is good even if it was developed in only 45 hours. There are a few features that I did not implement to save time, and that I might implement later on:

  • Different theme/colors (estimation: 1h30)
  • Player statistics (estimation: 0h30)
  • Improved art (estimation: 3h)
  • “Smart hints” (hints are currently just brining attention to specific islands, I could be way better with text explaining the hint) (estimation: 2h30)
  • Detection of isolated islands to tell the player (estimation: 2h)

I will probably make an article about the revenue of the game in a month or two.
Please try the game (Android, iOS), share it with your friends and rate it if you like it!
Feel free to comment here or on twitter if you have any questions about the game or the experiment!

Building for Android with Cocos2d-X (NDK+JDK) in one step

One Step to Better Code

Recently, I’ve read once again the old but awesome article “Joel Test : 12 steps to better code” (do it now if you haven’t). When developing Don’t Feed the Trolls, I always had a few steps to build a new android version of the game. I made a few scripts but I still had multiple steps. My workflow was:

  1. Copy the resources in the android assets folder
  2. Compile the C++ code with Gygwin
  3. Launch eclipse
  4. Use option Android / Build Signed Package in Eclipse
  5. Type two passwords for signature

I recently improved this workflow, and now it is:

  1. Double click the “build_android.bat” file

Much better!
Here are details of the script.

1. Copying the resources

It’s simple batch script that copies the resources from the multiplatform “Resource” folder (used in cocos2d-x templates) to the assets folder used on Android.

rmdir /S /Q "D:\gamedev\Games\swg21\Dev\android\assets"
mkdir "D:\gamedev\Games\swg21\Dev\android\assets"
xcopy "D:\gamedev\Games\swg21\Dev\Resource" "D:\gamedev\Games\swg21\Dev\android\assets" /S /H
del "D:\gamedev\Games\swg21\Dev\android\assets\snd\*.wav"

I first delete the existing files. Then I create the directory and copy all my resources. Finally, I remove wav files, as these are used only on the windows version. My multiplatform Resource folder contains sound in formats for all platforms.

2. Compiling the C++ source code

The native C++ code is compiled in cygwin. I spent a lot of time trying to figure out how to run a script from a batch and having it return immediately (with an error code). For the record, I was missing the –login parameter to the bash command. Here is the command I use:

cd "d:\gamedev\cygwin\bin"
bash --login "./swg21.sh"

The swg21.sh is a bash script placed in my home folder, calling cocos2d-x build_native script.

cd /cygdrive/d/gamedev/games/swg21/dev/android
./build_native.sh

build_native.sh is a bash script calling ndk-build after setting up proper environment variables.

3. Compiling the java and creating the signed apk

This was the main step I wanted to optimize from my previous workflow. Running Eclipse just to build a version was really slowing down the whole process. For that part, you have to use ant, as explained in the Google documentation.

cd "D:\gamedev\Games\swg21\Dev\android"
call ant release

The problem was that I was still asked to enter my password to sign the apk. This is fixed by editing the ant.properties file, as shown below (Credit goes to NickT from stackoverflow):

key.store.password=password
key.alias.password=password
key.store=path/to/your.keystore
key.alias=alias

4. Dropbox

I use dropbox to transfer apk to my Android device. Therefore, I need to copy the file to my dropbox folder.

copy "D:\gamedev\Games\swg21\Dev\android\bin\swg21-release.apk" "C:\Users\Win7\Dropbox\temp\swg21.apk"

5. Error checking

Steps 2 and 3 can fail (compile errors). I added some batch script to change the screen color to green when it’s successful, and red if not. Here is the final build_android.bat with error management.

@echo off
@echo "============================================ COPY RESSOURCES"
rmdir /S /Q "D:\gamedev\Games\swg21\Dev\android\assets"
mkdir "D:\gamedev\Games\swg21\Dev\android\assets"
xcopy "D:\gamedev\Games\swg21\Dev\Resource" "D:\gamedev\Games\swg21\Dev\android\assets" /S /H
del "D:\gamedev\Games\swg21\Dev\android\assets\snd\*.wav"

@echo "============================================ COMPILE NDK"
cd "d:\gamedev\cygwin\bin"
bash --login "./swg21.sh"
IF %ERRORLEVEL% NEQ 0 GOTO FAIL
GOTO SUCCESS
:FAIL
COLOR 40
GOTO END
pause
:SUCCESS

@echo "============================================ COMPILE JDK+Sign"
cd "D:\gamedev\Games\swg21\Dev\android"
call ant release
IF %ERRORLEVEL% NEQ 0 GOTO FAIL

@echo "============================================ COPY FILE TO DROPBOX"
copy "D:\gamedev\Games\swg21\Dev\android\bin\swg21-release.apk" "C:\Users\Win7\Dropbox\temp\swg21.apk"
COLOR 20
:END
pause

Improvements and Conclusion

I’m glad I did this script and don’t understand why I didn’t do it earlier. I now build a new Android apk almost every night.
If you’re working on a team, you might also add source control scripts to get the latest version of your code/resources automatically. Also, my projects path are hardcoded, I should set “swg21″ (the project name) in a command line parameter and use relative paths. I’ll probably do it when I’ll use this script for a second project.
I’ll also do the same thing for iOS when my current project will be closer to release (I’ve read it’s not that trivial to do, we’ll see).
Feel free to share and comment this article here or on twitter.

A simple but useful Finite State Machine (FSM) in C++

Why?

When developing games, I often need FSMs. Most of the time, they are simple with only a few states. Some examples of state machines I used in previous or current games:

  • Tutorial: each state represents a step in the tutorial
  • UI : The animated elements are using a FSM to transition from “on-screen” to “off-screen” going through a “moving” state.
  • Game State : Playing, Paused and End-of-level screens

Some complex FSMs are often used in AI. I used some in this prototype.

Features

I realized that I always implemented the same methods when adding a FSM into an object, therefore I took a few minutes to implement a simple class I could re-use easily. Here are the features of this FSM:

  • The states are represented by an enum (easy to debug)
  • To run the FSM, just call SetState and UpdateFSM( float delta_time )
  • Get the current state using GetState()
  • Many transitions are based on timing. Therefore, I implemented a GetTimeInCurState() method
  • Perform your specific actions in methods BeginState, EndState and UpdateState

Source Code (.h)

// (c) Francois Guibert, www.frozax.com (@Frozax)
#pragma once

template<typename T>
class fgFSM
{
public:
	fgFSM() : _time_in_cur_state(0.0f), _cur_state(-1)
	{
	}

	virtual void BeginState( T state ) {}
	virtual void UpdateState( T state ) {}
	virtual void EndState( T state ) {}

	void SetState( T state )
	{
		EndState( (T)_cur_state );
		_cur_state = state;
		_time_in_cur_state = 0.0f;
		BeginState( (T)_cur_state );
	}

	void UpdateFSM( float delta_time )
	{
		if( _cur_state != -1 )
		{
			_time_in_cur_state+=delta_time;
			UpdateState( (T)_cur_state );
		}
	}

	float GetTimeInCurState() { return _time_in_cur_state; }
	T GetState() { return (T)_cur_state; }

private:
	float _time_in_cur_state;
	int _cur_state;
};

Usage

First create the enum you will use for the states, such as:

enum EState
{
	STT_OFF = -1, // optional, -1 is the initial state of the fsm
	STT_WALK,
	STT_RUN,
	STT_STOP,
	STT_EAT
};

And inherit from the class fgFSM:


class ObjectUsingFSM: public fgFSM<EState>
{
public:
	// ...
	void UpdateState( EState t );
	void BeginState( EState t );
	void EndState( EState t );
	// ...
};

Improvements, Closing Words

That’s it, feel free to use the code in your games/projects. This is very simple but often more than enough. The other feature you might need one day is having a GetPreviousState() or even a GetNextState() usable in EndState().
Questions? Contact me on twitter @frozax or comment here.

Statistics and Fun Facts About the Players of Don’t Feed the Trolls

Two weeks after a post about the sales and the ads revenue of Don’t Feed the Trolls, here’s another statistics post, this time about the players of the game. Don’t Feed the Trolls is a reflex game released in May on iPhone/iPad and Android (Google Play and Amazon). Feel free to try it, it’s a free download.

The data

The data used for these statistics are mostly coming from the online leaderboards of the game. I only used information from players that spent at least five minutes playing the game. The data is taken from the release up until July 30th and is made of 3,991 players. Depending on the charts, I sometimes use a subset of players to get more relevant information.

Play Time

First chart is showing repartition of players based on their play time. It’s actual time spent playing the core gameplay, not the time spent in the main menu or paused. The chart might be slightly biased by recent players that got the game during the last few days, and didn’t have the time to play that much.
playtime
Fun Fact #1 : One player played 31 hours (and he’s still active)
Fun Fact #2 : Total cumulated play time since release is 107 days and 14 hours

Updates

Since the release of the game, I made 5 updates on Google Play, 1 on Amazon and 3 on iOS. I was looking to know whether active players are updating their version. To make this chart, I ignore Amazon Players and use the 1.2 update of the game as a reference. This update was the biggest update of the game, and was released simultaneously on Google Play and App Store on July, 5th. I then checked the players that first run the game when this update was not available and are still playing one week after the update. It narrows down the set to 804 players but it’s much more relevant. The chart shows the percentage of players that updated to the last version.
update
I find this chart is very interesting. Please remember we are talking about active players. I don’t find surprising that Android players are updating more than iOS players but having only 38% of iOS players updating the game is very low. Especially since the 1.2 update is a content update. Knowing that, it’s important to get your game right on release.
Fun Fact #3 : The Top 20 players of the classic mode are all up-to-date

Time of Day

The following chart shows in blue the time of the day where the player launched the game for the first time (while being connected). Please note that more than 70% of my users are from France (GMT+2) and the chart is showing GMT times.
The red curve shows the last time players played the game before they definitely stop playing it. For this curve, I consider that a player will not play the game anymore after 14 days of inactivity.
hourofday
Quite common chart here too, players are mostly playing in the evening, and there are less players in the middle of the night. Unfortunately, the red curve does not give us any useful information as it’s similar to the blue one. I hoped to see that more players would stop playing the game if they launch it at a specific time for instance but that didn’t happen ;) .
Fun Fact #4 : The record is 126 players launching the game for the first time on June, 27th between 18:00 and 19:00 GMT.

Achievements

The next chart is probably more interesting if you know the game a little. It shows the percentage of players that got each achievement of the game. It is taken from the players owning the version 1.2 of the game, which contains 25 achievements (click the image for full size). This is a set of 899 players.
achievements
Seeing these statistics, I don’t think there are many players trying to get all the achievements. The easiest achievement to get is not tied to the gameplay (”visit frozax.com”) and is only obtained by 3.78% of players. Players probably just play the game and unlock achievements as they play. Please note that a few achievements can’t be done without paying for the full version.
Fun Fact #5 : The achievements statistics are extremely similar between iOS and Android. I thought I’d see more completion from Android players.
Fun Fact #6 : Only one player has all the achievements.
Fun Fact #7 : 95.8% of players have 10 achievements or less

Pausing the game

This stat comes from Flurry Analytics and not from my leaderboards. Here is an interesting pie chart showing why does the player pause the game.
pause
I didn’t think that many players would pause and retry the level that much. I knew Don’t Feed the Trolls is a lot about scoring but it still surprises me. The stats are similar on iOS and Android. Also, note the the tutorial is automatically showed to the player on its first play. Someone clicking on the tutorial button wants to see it again.

End of Level

Similar to the previous one, this time showing the option selected by the player at the end of a level, completed successfully or not.
eol
The skip option is quite used, even though if the player didn’t succeed this level, he will have a tough time completing the next one.

Accuracy of data… and China

A final note on the data reporting tools. I have three different ways of evaluating the numbers of players:

  • My leaderboards: only taking into account online players completing at least one level
  • Google Play / App Store : it gives me the number of downloads. Someone downloading the game without playing it is shown here
  • Flurry Analytics : there is a “New Users” statistics in Flurry. The user has to be online, too

Now, let’s compare these numbers. The number into parenthesis is the ratio of players compared to the number given by the store (that is theorically exact):

Android iOS Amazon
Leaderboards 5,912 (92.6%) 2,269 (59.3%) 610 (66.7%)
Store 6,385 3,827 915
Flurry 10,579 (165.7%) 3,382 (88.4%) 741 (80.1%)

You probably noticed the strange value in there: on Android, Flurry reports more players than Google Play does. I guess you found out why: piracy. Google Play is not available in China, but according to Flurry, Don’t Feed the Trolls was played by 4,123 unique players in China. The game is monetizing through in-app purchases to unlock the full version, and Chinese players cannot buy the full version. However, I don’t know if they only play the free version or have a crack for the full version. Also, do they have ads displayed in the free version? Last question, why are the leaderboards numbers not showing a similar value? I though about the “Great Firewall of China“, even though the tests I made showed that my domain is not blocked in China…

Anyway, unlike Matt Gemmell (interesting article, though) I don’t blame piracy (anymore) and I’ve been pirated much more than that in the past (see Piracy of Spring Up Harmony: 96%). I honestly don’t think a pirate would have bought the game if he couldn’t pirate it. Anyway, it’s another topic.

Conclusion

Fun Fact #8 : The Top 10 players of classic mode are on Android (but note that 72% of total players are on Android)
Fun Fact #9 : 10% of the players fed 62% of the bears
That’s it for the statistics of Don’t Feed the Trolls. As usual, comments, shares and tweets are welcome!

Sales and Ads Stats of an iOS / Android Game

Don’t Feed the Trolls has been released for more than two months now, and revenue is slowing down. I think it’s a good time to look at how much money the game made.

The game and the business model

Don’t Feed the Trolls is an arcade reflex game released on Google Play on May, 3rd, on Apple App Store on May, 17th and on Amazon App Store on May, 31st. The game is free to download and contains ads (AdMob).

On Google Play and iOS, the player can unlock the full version (removes ads, adds two game modes and levels) with a $0.99 in-app. Once purchased, another in-app called “Gold Pack” is available for players to have their name appear golden in the leaderboards. Basically, this “Gold Pack” is made for the players willing to support us with an additionnal purchase of $1.99. I decided to add this “Gold Pack” because I wanted to price the full version $0.99, but I think it’s worth a bit more than that ;) .

On the Amazon App Store, the game is free with ads, there is no in-app and no way to remove the ads. I didn’t implement in-app because Amazon only pays the developers with checks, in US dollars, and French banks charges so much for that that it’s not worth it. Also, it required a lot of code to replace Google Play in-apps and to integrate Amazon SDK. I can’t test on a real device as Kindle Fire are not available in France for now.

The raw stats

Here is the chart with net revenue per day (after Apple/Google’s cut). iPhone/iPad revenue is blue, Android (Google Play and Amazon) revenue is red. Dark colors are sales revenue, light colors are ads revenue (click to enlarge).

sales_stats_dftt_small

If you take some time to look at this chart, it’s pretty easy to read. You can see I added black numbered arrows for specific events, here is the legend:

  1. Release of Don’t Feed the Trolls on Google Play (Android)
  2. Contact many Android-only press/review sites
  3. Release of Don’t Feed the Trolls on the App Store (iOS)
  4. Contact many multiplatform and iOS-only press/review sites
  5. Release of Don’t Feed the Trolls on Amazon App Store (Android, Kindle Fire)
  6. Review on the biggest French android site (FrAndroid)
  7. Contact the press once again with the news : “More than 250,000 trolls slapped! Join the fun”
  8. Game of the Week on the biggest French videogame site (jeuxvideo.com)
  9. App of the day in a French Android app : FreeApps365. This app notifies users every day of the “app of the day”. FreeApps365 had between 100,000 and 500,000 downloads on Google Play (I don’t know the current number of active users). Don’t Feed the Trolls had about 1400 new Android installs this day.
  10. Contact the press for the third time, because of the “Bears Update” (first big content update with new levels)

I got many other mentions and reviews on small sites, but it didn’t really affect downloads (main quotes of reviews are available on the game page).

Some conclusions from this chart:

  • The traffic coming from new players when the game is just released is much bigger on iOS. That probably because of the “New Releases” section in the App Store. There is no such things on Google Play, unfortunately.
  • It’s important to get reviews and articles, especially on big sites. However, download/sales spikes drop quickly once the article leaves the front page.
  • You can’t really see it on this chart, but Amazon traffic is extermely low (you can see the Android revenue stays close to zero the few days after Amazon release).
  • Users of FreeApps365 are really looking for free stuff and didn’t buy many games, but played a lot (big ads spike). Jeuxvideo.com and FrAndroid players on the other hand bought more copies.

 

Total revenue repartition

Here is a pie chart showing a more global repartition of revenue.

sales_stats_pie

This is is even easier to read:

  • Android brought me more money than iOS. It’s obviously because I got covered by Android only sites/articles.
  • Ads brought me more money than sales, both on Android and iOS. However, note that the free version of the game as a lot of content. In fact, I think I shouldn’t have put that much content in the free game. Of course, I can’t tell how reducing free content would have changed this repartition. Also note that without the FreeApps365 mention, sales on Android would bring more money than ads.

It’s also interesting to take into account the number of players. Here is a new pie chart with revenue per active user. I consider an active user a player that played at least one level (or the tutorial) while being connected (he must have an entry in the leaderboards). I ignored Amazon App store for this one but this is negligible, anyway.

sales_stats_pie2

And now, iOS seems to be more valuable.

Conversion Rate

This chart shows the conversion rate of the two in-app purchases, per platform (Full Version is the $0.99 in-app and Gold Pack is the $1.99 one).

sales_stats_cr

Remarks:

  • Before Don’t Feed the Trolls appeared on FreeApps365, the conversion ratio for the Full Version on Android was very close to the iOS one.
  • As the Gold Pack is only displayed to paying players, the ratio of Gold Pack buyers amongs the Full Version buyers is interesting: 10% on iOS, and 4.69% on Android.

 

Ads

I’m using AdMob on both Android and iOS. I noticed very different statistics depending on the platform and thought it would be interesting to share. I’m not showing numbers, the interesting information here is to see the values relative to the other platforms. Once again, keep in mind that my Amazon stats are quite low.

sales_stats_ads

If you are not familiar with these acronyms, here is a definition:

Impressions: Number of different ads displayed to the user.
CTR: Click-Through Ratio : percentage of ads that are clicked
RPM: Revenue per 1000 impressions
RPC: Revenue per click

We already knew that Android ads brough in more money, but you can see in this graphs that the quantity of impression is much higher too. Therefore, the CTR of iOS is a lot more interesting. I didn’t play Don’t Feed the Trolls much with the ads, but could see that iOS ads were sometimes very targeted (links to another game in the app store for example) compared to some of Androids ads (dental surgery for example).

Conclusion

That’s is for the charts (thanks Google Docs) ! I hope you found interesting information in it. Feel free to share your thoughts, remarks and questions in the comments or on twitter !

Don’t Feed the Trolls 1.2 “Bears Update” is now Live!

A new version of Don’t Feed the Trolls is now available on iPhone/iPad and Android !

featured_image_update_small

This major update adds nine levels, three characters, and five achievements.
Discover new gameplay with the sleeping bear, the twin bears or the invisible bear and keep slapping the trolls getting in your way. Collect the additional stars and take the opportunity to climb up the leaderboards.

Here is the full changelog:

  • Feature: Three new bears : Sleeping, Twin and Invisible
  • Feature: Nine new levels (three per difficulty)
  • Feature: Five new achievements
  • Tuning: Speedy bear is slightly slower, especially in “Hard”
  • Bugfix: The achievement “Good Start” now unlocks properly when you have exactly 10 stars

Don’t Feed the Trolls version 1.0.2 (iOS and Android)

A new version of Don’t Feed the Trolls (1.0.2) is now available on Google Play and in review for iPhone, iPad, iPodTouch (should be released in about a week).
It contains the following fixes:

  • Fix the accidental slap when feeding the starving bear
  • Add a sound effect when feeding the starving bear the first time
  • Pause the game when taping the “buy game” ad

Follow Us

rss_32 twitter facebook youtube google_plus

Search Blog