Android Game Development with libGDX

androidAfter selling games on PC, Mac and Xbox 360, I want to develop games on mobile plaforms, and I will start with Android. I chose Android instead of iPhone for two reasons:

  • It’s cheaper: my Mac is a PowerPC and you need a Mac Intel for iPhone development. Also Android phones are cheaper than iPhones.
  • Java is similar to C# : I have C# games ready to be ported to mobile. As Android uses Java, it’s a great platform for me to port those games.

My last X360 game, Don’t Feed the Trolls is a great fit for mobile: quick gameplay sessions and not requiring too much processing power or memory. I therefore decided to port it to Android.

libgdxI started to look for available 2D game libraries on Android and after hesitating between AndEngine and libGDX, I chose libGDX. I will describe here some features and my thoughts about this library.

What I like

Complete API

It’s a simple but complete API. We often see libraries with only rendering support, but with libGDX, you can do rendering (2D and 3D), audio, file management and input (touchscreens). There are also a few useful utility classes and tools (more on this below).

Box2D

box2dThere is also a port of Box2D, the physics library used in Spring Up Harmony (PC, X360). If I ever want to port Spring Up Harmony to Android (probably), the physics part should be easily portable.

Open Source

I like to have access to the source code of libraries I use. I find it reassuring and when debugging, it’s good to be able to step into libraries source code.

Activity

activityThere is currently quite a lot of updates and bug fixes, by the creator of the lib (Mario Zechner) and by community.

Bitmap Fonts

font_small_cropThere is a tool available to create bitmap fonts. This is very similar to the tool I used on XNA (SpriteFont2 Texture Tool) so porting my existing code was very easy.

Desktop Version

If you ever used the Android Emulator of the SDK, you are probably aware that it’s terribly slow and not really usable. I didn’t buy my Android Device yet, but can still work on the game and test it properly because libgdx also compiles for desktop java.

Don't Feed the Trolls for Android running with the Desktop version in libGDX

Don't Feed the Trolls for Android running with the Desktop version of libGDX

Texture Packer

This is another great tool, used to pack many textures in one. I usually don’t care much about texture size and texture memory waste when developing on X360 but this is important on mobile devices due to their limitations. Some features of this tool:

  • Grouping small textures in textures pages (power of two).
  • Strip transparent pixels on the borders of textures. This required quite some tweaks and update in my own fgDrawSprite class and rendering functions to manage properly, but this is really a great way to save memory and disk space.
  • Has an incremental option to avoid generating everything when updating only some resources.
  • Can be called from the game itself in the desktop version. A good practice is to automatically call the packer in the desktop version, and use the generated assets in both Desktop and Android.

This is really a time saver tool.

What I don’t like

Lack of documentation

There is no good and centralized documentation. You need to look for information on the forums, in the source code and/or on blog articles. Due to the activity of the library, I sometimes find out that I’m using old stuff that is not supposed to be used, because it’s deprecated and has been replaced by something else. The parameters of some API functions are not always properly documented too. For instance, I had trouble using a rendering function and found out that the rotation parameter was an angle in degrees (it’s usually in radians in the libraries I used before).

Reverted Y-Axis

coordsI found this very strange but in all the 2D APIs I used, the coordinate system used the point (0,0) as the top-left corner, with X going right and Y going down. In libgdx, the Y axis is going up, and the 0,0 is bottom-left. I had to change some rendering functions to take this into account.

Android Specific

Doing Android specific code is not very clean because the lib is supposed to work on desktop and Android. I guess this is also because of Java, and I wished we could have some preprocessing to condition Android specific code. There are many workarounds, because the Android application overloads the Desktop application. So you can create empty methods on Desktop that are overloaded only in the Android project with Android specific code. I hope this won’t get too messy when I’ll work on very specific and touchy stuff such as in-app purchases.

What I don’t know

Performance

I don’t own an Android device yet and did not test other API, so I can’t really talk about the performance of the API. According to users, it is faster than most other APIs.

Conclusion

Using libGDX is a good and easy way to start developing Android games. For now, I’m happy with this library and you can see on the screenshot above that development is going well. I will probably release a few games with it.

If you tested different Android libs or have anything to add, feel free to comment about it.

You can find out more about Frozax Games or me on twitter, facebook or g+.

Don’t Feed the Trolls available on Xbox Live Indie Games!

I am proud to tell you that my last game Don’t Feed the Trolls is now live on the XBLIG market. Here is the trailer:

Please download the game on the marketplace and tell me what you think about it!

As usual, I’ll post sales figures in a few weeks/months for the curious.

Have fun slapping trolls!

5 for $5 Bundle and Spring Up Harmony Statistics

As you probably know, Spring Up Harmony was in the 5 For $5 Bundle (also called buygamesnotsocks). You can read a full postmortem of the bundle on Jorge Rodriguez’ blog. With data gathered from my leaderboards, I made a few statistics (I love stats ;) ). Though the bundle sold 3,642 copies, I have (only) 1,139 “bundle players” on the leaderboards, but new bundle players are still appearing every day.

I will show you four graphs.

Levels completed per day

The first graph is showing the levels completed per day. Note that the bundle went out on June, 22th, and ended on July, 3rd.

graph1

The days are based on GMT, therefore, on the graph the bundle went live at 6pm. The first full day is June, 23rd. Today, I still have about 4 to 5 times more players than before the bundle.

Activity of the game depending on the time of day

The second graph shows the activity of the game depending on the time of day.

graph2

This time, I converted the graph to be based on Pacific Standard Time (USA West Coast). I didn’t put numbers on the vertical axis because it’s just meant to show variation of players throughout the day.

Nationality of the players

The third graph shows the nationality of the players.

graph3

The results are not really a surprise, especially since the bundle was in English and news sites writing about the bundle were mostly all american websites. There are players from 47 different countries.

Number of levels completed per player

This fourth graph shows the number of levels completed per player. The game has 35 levels.

graph4

I’m happy that many players completed the game. I tried to find a reason to the spike of players doing 9 levels but could not find any. I don’t think the 10th level is that terrible ;)

Conclusion

I am really happy that this bundle gave the opportunity to people to play Spring Up Harmony. Many players would never have heard of it without the bundle. And I also think some players bought the bundle because of some other games but took the time to try them all.

I’ll use this article to thank to all the great developers involved in the bundle, and especially Jorge who organized it very well!

Feel free to comment, and follow me on twitter, facebook or google+.

5 For $5 Bundle is LIVE!

logo

Today, four indie game developers and Frozax Games launched a new bundle : 5 Games for $5, check out the trailer:

The games are:

These are all great games, try them now and support indie developers! The website is here and you can buy a bundle here!

Please spread the great news on twitter and facebook!


Achievements/Rewards statistics for Spring Up Harmony

Spring Up Harmony PC was released a few months ago, it’s now a good time to study statistics of the rewards (or achievements) of the game. Rewards are a good way to see what the players are really doing in the game.

These are the stats of online players that played the full version of the game. To have more data, I also used data from pirate players. Pirate players do not appear in the leaderboards, but I still log their achievements. I consider a player has the full version (legally or not) when he has played a level not included in the demo.

I sorted the achievements according to the percentage of players having it.

beginning

Beginning

Complete the first level of the game.
100%
beginning

Two in One

You hit two Harmony objects in one shot.
100%

Five

You completed five levels.
99.8%

All Clean

You removed all the objects of a level.
83.0%

Bronze Medal

Your global score is 500,000 points.
82.6%

Just in Time

You completed a level with less than ten seconds left.
65.1%

Catcher

You caught 500 objects with the bucket.
55.4%

Silver Medal

Your global score is 1 million points.
47.5%

Fast

You completed a level with seven shots or less.
38.0%

Shooter

You shot 500 balls.
35.4%

The End

You completed all the single player levels.
19.9%

Gold Medal

Your global score is 2 million points.
17.9%

Top Scorer

You scored 200,000 points in one level.
16.5%

Addict

You played for 5 hours.
2.9%

Multiplayer

You played ten multiplayer games.
1.2%

Another stat not shown above is that no player have all achievements.

The main thing to learn from these stats is that I probably spent to much time implementing the multi-player mode. It was not that long to develop but more levels would have been better. It’s probably because it’s only multi-player on the same screen and not online. The achievement “Two In One” seems too easy. Maybe it should have been “Three in One”.

Players, do you like achievements?
Developers, do you also log the achievements of your players?

Feel free to comment and follow me on twitter and facebook.

Useful C# and Visual Studio tips you might not know

While working on my next game, I tried to keep notes of interesting tips I used. They are related to C# and Visual Studio.

Overriding ToString()

When debugging or prototyping, you often need to display complex objects on the screen on in the debugger output. A handy way to do this when dealing with complex classes is to override the ToString() member. Here is an example:

class ComplexClass
{
   int _number = 0;
   string _string = "My String";

   public ComplexClass( int n, string s )
   {
      _number = n;
      _string = s;
   }

   public override string ToString()
   {
      return String.Format( "{0} / {1}", _number, _string );
   }
}

ToString() is also used by the debugger in the Watch dialog.

?? operator

I discovered the ?? operator a few months ago. I don’t use it much but could be useful in some cases. It allows you to replace the following code:

if( a != null )
   b = a;
else
   b = c;

by

b = a ?? c;

New class template

When you create a new class (using the right-click on the project, Add, New Item…), the file created is not empty but already has a template and a few using statements. You can edit this template easily. For instance, I added a “using fg;” with my own game library to this template. The template is found in the Visual Studio directory: {Program Files}\Microsoft Visual Studio 10.0\Common7\IDE\VCSExpress\ItemTemplatesCache\1033\class.zip. There are templates for anything and you will probably want to edit a few of them.

new does not always allocates

In C#, even when using the new operator, you might not allocate memory. For instance, the following line:

Vector2 point = new Vector2( 10, 20 );

does not allocate memory, because Vector2 is not a class, but a structure. The rule is as simple as that: a class allocates memory (and returns a pointer) and a struct does not allocate memory. It’s simple, but often misunderstood, especially if you come from C++.

Add As Link source file

Recently, I re-used source files from a previous project for a new one. I used the Add Existing Item option but Visual C# creates a copy of the source file in the current project directory instead of referencing the old file. I want to reference the old file so that it can be modified in both projects. To avoid that, you must select the hidden Add As Link option, by clicking the small arrow next to the Add button of the dialog box.

add_as_link

Overloading the [] operator

I often have objects containing a list of items. For instance, in Spring Up Harmony, I have a Ball Manager used to manage and draw the balls. I found it very handy to overload the [] operator to access elements of the list inside the manager from the outside directly.

List<Ball> _balls = new List<Ball>();
public int Count { get { return _balls.Count; } }
public Ball this[int i] { get { return _balls[i]; } }

That’s it!

I hope you found some of the tips useful!

Feel free to share more tips in the comments!

Follow me on twitter or facebook to get notified of new posts.

How to recover a file in Google Chrome cache (gzipped or not)

Exceptionally, this article is slightly off-topic and will not be related to game development.

I wished I could find an article like this one a few hours earlier, therefore I’m writing it myself, hoping to help people fixing the same problem I had.

The context

Earlier today, I was logging onto my ftp to download the latest log of Spring Up Harmony hiscores history in order to gather up-to-date piracy statistics. As the log files can grow quite large, I regularly download it locally and remove the server copy. Then, I use all my local copies to generate new stats, similar to the one shown in my 96% Piracy blog article.

The mistake

I was probably not really focused, but instead of transferring from my site to my local computer, I transfered the other way round and lost all my logs of the last 4 days! Argh! I’m sure the next time I will examine the “Are you sure you want to overwrite this file?” popup carefully.

The failed strategies

Here is a list of actions I made trying to recover data:

  • As I looked at my stats log online a few hours earlier, I hoped that I kept a tab open in my browser but I didn’t.
  • I checked the automatic backup of my hosting provider, but the daily backup was made 20 hours ago. That’s already a few days recovered, but I hoped to recover more of it.
  • I looked into Chrome cache folder, only to find 285 Mb of strangely-named binary files. That will not get me anywhere.
  • I looked for a free app to access chrome cache but the only one I found only told me which binary file contained my log file (ChromeCacheView).

However, this last app gave me hope because it displayed information about the name and date of the file I was looking for. Only 3 hours from the mistake. Losing 3 hours of log would be acceptable.

The Solution

Looking on google, I found that Chrome has an interesting integrated cache viewer that could have helped me from the beginning. By typing about:cache in the address bar, you access a list of cached files. You can also type a direct url if you know the file in the following form: chrome://view-http-cache/http://example.com/file.htm. I thought I found the solution and quickly accessed my log file. However, Chrome does not simply give you a way to get the cached file but instead displays raw data with HTTP headers and data received from the server. For my file, it gave me something like that (click for full size):

chrome_cache

As you can see in the red circle, it’s pretty obvious that the binary data displayed below is gzip data, and not plain text sadly. However, the presentation in Chrome is not really handy to get the real binary data because it contains on the left the addresses and on the right the binary form. The useful part is the hexadecimal version on the middle.

An article on Alex Korn site gives a php script he used to extract the file content section of Chrome cache into a text file. It won’t be that simple in my case because my content is binary but it’s a good start. Alex Korn had his text file directly visible. The first time I ran this php script, I had errors extracting the gzip file (corrupted data). After a closer look it’s because of the reg exp used in the preg_match_all. Some data on the right side (binary) could match the reg exp and inject invalid bytes. I replaced the reg exp by using spaces (\s) instead of whitespaces (\b) and added code to directly decode the gzip data. This is the full script I used:

// cache.log is a copy of chrome cache page with only the file content section
$cacheString = file_get_contents("cache.log");
$matches = array();
preg_match_all('/\s[0-9a-f]{2}\s/', $cacheString, $matches);
$f = fopen("t.bin","wb");
foreach ($matches[0] as $match)
{
  fwrite($f,chr(hexdec($match)));
}
fclose($f);

ob_start();
readgzfile("t.bin");
$decoded_data=ob_get_clean();
echo $decoded_data;

And that did it, I finally recovered my file!

Conclusion

I know this article is really specific but as I said in the beggining, I really hope people looking for this information will find it here instead of spending as much time as I did figuring it out.

You can follow me on twitter or facebook, and feel free to comment this article here.

Never released game design and prototype #2 : DJ Machine

This is the second post of the series, you can read the introduction of the series in the first post.

Project 13

I will talk about a prototype called “DJ Machine” (Project 13), that I started while Spring Up Harmony (PC X360) was being approved for Xbox Live Indie Games. I was looking for something fun and that could only be done with XNA. I was playing DJ Hero at that time and logically started to create a simple program playing with the turntable (see image below). Nick Gravelyn already did some research on it and this information was very useful to get something working very quickly.
dj-hero-turntable

I didn’t want to make a clone of DJ Hero because I could not afford licensing many interesting songs and don’t want to compete with the AAA guys. After a few crazy ideas, I finally came up with the idea of manipulating a machine using the turntable. Each part of the turntable (scratch, buttons, euphoria, fx dial) activates/moves a section of the machine. Some of the inspiration came from a very old game called Night Shift where the player controls a worker that must take care of a machine and quickly becomes overwhelmed by the amount of elements requiring attention.

Screenshots and Video of DJ Machine

Here are a screenshot and a gameplay video of my prototype:

dj_machine_last_version

I removed the sounds in the video as I do not own the rights to some of them:

I suppose this requires some explanation. Refer to the image of the turntable while I explain the gameplay for those not familiar with the controller. The player is supposed to build objects using the “DJ Machine”. Of course, it’s still very abstract because of the programmer art.

  • Square items are coming from the left on the gray path. They stop at the first black square. Here, the player has to scratch with the corresponding button and direction (for example, blue scratch up, green scratch down). There are between one and three scratches to do per item.
  • When all the scratches for an item are done, the item moves to the next black square on the top right. Here, the player must spin the knob as fast as possible.
  • The item is then transformed in a shape (yellow circle, blue star or red octagon) that falls down the screen.
  • The player then controls the dark red claw with the cross fader (if the cross fader is on the left, the claw moves to the left, the player must move the cross fader back to center to stop the claw).
  • The player must move the claw below the shape items on the right and use the euphoria button to close the claw (keep euphoria button down) and catch the item.
  • He then moves the item to the corresponding area on the left and drop it by releasing the euphoria button.

There is also a penalty if the player activates elements when not needed. For instance, if he scratches when there is nothing in the top left section of the machine, the machine gets stucked and can’t be used for a few seconds.
You can also see the crosses on the top left (one is red, two are white on the screenshot). They represent the errors made by the player. After three errors, the game stops.
On the right, there is, from top to bottom the time, the score and the number of objects succesfully made. If the player drops an item when not on the proper location with the claw, the object is lost.
That’s basically it. The game was supposed to be played in short sessions where items come faster and faster.

I also planned another game mode where the player first choses between different music styles (techno, rap, funk…) and then scratches and mixes with proper sound samples on an abstract background. I named this game mode Freestyle DJ. Here is a gameplay video:

Sadly, without sound, it’s not very exciting but it is actually working pretty well. There is two short music loops that the player could mix with the cross fader, scratches play sound effects and fx dial speeds up/slows down the music.
The graphics in the background are made from Spring Up Harmony’s algorithm.

Design Document (notes)

Here is a copy of my design notes. I just translated the bits in french and added comments in blue. It’s in chronological order, it means that ideas on top have no connections with “DJ Machine” prototype and were discarded:

Byala 80 pts (a game (strange) name with a price: I think I made a mistake by pricing Spring Up Harmony at 240 pts at the beginning, so I precised very early I’d put the next one at 80 ;) )
Musical Arts (other idea : just playing music with nice backgrounds : not really a game, but gave birth to the freestyle game mode)
Platform game playable with turntable (first game idea: platform game (inspiration: Donkey Kong Country that is playable with drums))
Playable with guitar? drums?
Original rendering : squares, blobs, glow (Inspiration: the Sony PS3 dashboard but I finally used Spring Up Harmony’s algorithm as a starting base)
Night Shift (from here, I’m going toward the design described above, citing my main inspiration)
A cube comes to a platform, after 1 to 3 scratches, it goes in step 2, after fx dial, it goes in step 3. Movement with XFader, player has to make the cube fall in the right hole with euphoria (this is the sentence that resumes it all ;) )
Show a message to the player if he’s playing with a pad.
Classic “Freestyle DJ” game mode
Choices betwee left/right handed and buttons on the left/right (same as in DJ Hero)
Different difficulty levels: Tutorial, Easy, Medium, Hard, Expert and Hardcore
Game over because of three errors or machine full if player does not play fast enough
Restrictions of the free version: Only 4 difficulty levels out of 6, DJ Machine sessions only 3 minutes long, Freestyle DJ sessions only 1 minute long.

Here is a early prototype screenshot I used to set up of the gameplay:

dj_machine_history

Why I didn’t complete it, and thoughts

I started this project mostly for fun, to try to see how was working the turntable. I hesitated to complete and release it on XBLIG. I didn’t, because:

  • The market share is very small. According to numbers (DJ Hero, DJ Hero 2 and consoles) I could find, I estimate between 1.5 and 3% of xbox players have turntables (probably many DJ Hero 2 players also own DJ Hero 1). Also, XBL Indie Games are approved by other developers and you need multiple votes by creators to get your game on XBox Live. Therefore, I would need actual XBLIG developers to have turntables (well, that’s not entirely true as the game would be playable with only a pad too, but they would not fully test the game and might not want to try it). I already had to remove french support in Spring Up Harmony because I could not find two or three french-speaking developers. I honestly think there are more developers speaking french than developers with a working DJ Hero turntable.
  • Gameplay variety is very low. People might argue that DJ Hero also have few variety, but it’s of course in the musics and leaderboards that the players find variety even if the gameplay is roughly always the same. In DJ Machine, only speed brought variety.
  • However, now that the DJ Hero series will not be completed (LINK), DJ Hero players might love to be able to use their turntables again. :)

Today, I still don’t plan to work on this prototype again, but who knows. ;)

Feel free to comment and share ideas and talk about your unfinished projects in the comments section.
You can also follow me on twitter or facebook.

Never released game design and prototype #1 : Museum Director

Last week-end, I ditched a prototype of a game because it was not as fun as I thought. It gave me the idea to blog about some of the game design documents and prototypes I made that were never released. It can really be interesting, because:

  • If everyone agrees that the design sucks: I’ll definitely stop thinking about it and I’ll be glad that I moved on to other projects.
  • If some players or game designers have ideas to save the prototype and make it into a game: I’ll be happy hear it and may eventually work on this project again… and why not release it.
  • If the description of my project gives ideas to game designers and they get inspired to create an original game from it: I’ll be very happy that my failed game designs helped/inspired fellow developers.

Of course, in this series of posts, I will not talk about all the cancelled projects. I will just choose the most interesting ideas/prototypes in random order.

Process when Designing/Prototyping

Everytime I have a valid idea that I really want to implement, I create a new folder in my “gamedev” directory, using a number. I started last weekend “Project 16“, therefore, it’s easy to know how many ideas I gave up (or paused) from the released games. Here is the list of my released projets:

  • First released game “Shapy” (PC) is “Project 3
  • Second game “Around the World” (PC/Mac) is “Project 4
  • Third game “Spring Up!” (PC/Mac) is “Project 6
  • Fourth game (flash game hidden on sister site) “Futoshiki” is “Project 7
  • Fifth game “Spring Up Harmony” (X360/PC) is “Project 12

So I cancelled at least 10 projects. In fact there is more because I sometimes use a quickly ditched project as the starting point for another.

Project 8 : Design

The first one I chose to talk about is “Project 8“, codenamed “Museum Director“. This is probably the cancelled project that I spent the most time working on.

The idea came from Patrick Curry’s Game Idea #35 (you can see my comment back in 2008!) [I removed the link because Google flagged the site. The url was www.patrickcurry.com/thoughts/?p=51]. It is basically a “Sim Museum”. In addition to Patrick’s idea, the game design was mostly inspired from Theme Park (I loved this game when I was a kid!). Museum Director was planned for PC and Mac (using the same game engine than Around the World and Spring Up!).

I usually don’t write “real” game design documents (GDD) as I am the only person using it. Instead, I tend to take some notes in a Google Docs or a .txt file. However, looking back in my Design folder of Museum Director, I found a 10 pages design document (I did not remember I wrote all that). This confirms that I spent a lot of time on this “unfinished project”. Unfortunately, the game design document is in French so the raw version won’t be very useful to my readers. Some sections on the document should also be in a technical design document (TDD) instead. Here is a quick “best of” in English of the game design ideas. I kept the original randomness of my GDD, as I usually just write interesting ideas in the order they’re coming in my mind. You can see how I transformed and mixed Patrick’s idea with Theme Park:

  • In the museum, there are three sections of “art works”
    • Art (paintings, sculptures…)
    • Natural history (dynosaurs, fossils, rocks…)
    • Science (experiments, atoms, chemistry…)
  • Here are the items and global museum parameters available
    • Tickets price (or free)
    • Stock management (maps, bar, food, souvenirs, t-shirts…): buy price can vary
    • Assurance of art items
    • Rules (can use camera inside museum? free entry?)
    • Advertising (local/national newspapers, TV, flyers, radio, ad on a specific art item or for the whole museum…)
    • Air conditionner
  • Goal of the game: to have a high “museum grade”, based on:
    • Global reputation
    • Cultural evaluation
    • Art maintenance
    • Quality of art items
    • Quantity of visitors
    • Organisation of the items inside the museum (don’t mix everything randomly)
    • Security (of visitors and art)
    • Cleanliness
  • Visitors have different characteristics (walking speed, likeliness of each art type…)
  • There are some VIPs (politics, rich people) (idea taken from Theme Hospital)
  • Visitors have various needs: (hungry/thirsty/toilet, leaving the museum (when inside for a long time or unhappy…), buying things (when very happy), need more money (can withdraw cash inside the museum), want to see a specific item, wandering around randomly…
  • How to earn money for the museum:
    • Entrance fees
    • Sales of food/drinks/souvenirs
    • Allocation
    • Donations
    • Selling or renting art items to other museums
  • Art can be stolen inside the museum. Player can buy CCTV and hire security agents
  • Employees (paid (high quality) orvolunteer (low quality))
    • Archeologists/scientists (through a research program) to discover new items
    • Ticket clerks
    • Security agents
    • Art specialists (to take care of items)
  • There is a world map with famous cities where you buy your location for the museum with a limited size (number of tiles).

The document also contains the list of every item available in the game as well as stats available to the player but it’s not really interesting here. I can really see Theme Park’s inspiration when I read the document a few years later.

Prototype

It took me some time to find a working version of the game :) , but I eventually could run it and take some screenshots. The art assets are coming from other games (the visitors are from virtual villagers for instance), Google Image, or I made it myself (you can see the ugly shops made with paint.NET ;) ) :

museum_director_1 museum_director_2

You might be able to see from the screenshots that many features were implemented such as:

  • Isometric tiled engine with camera translation
  • Interactive Minimap
  • Choosing, moving, rotating and dropping items with a working GUI
  • Path finding of the visitors
  • Visitors waiting in lane (ala Theme Park)
  • AI of visitors walking in the museum, looking at art, buying stuff, using toilets and leaving the museum.
  • Saving/Loading of the game

It still very sandbox-like.

Why I never released it

Here are the reasons why I stopped working on this project and the mistakes I made:

  • Despise the original museum “theme”, there is a lack of originality in the gameplay, I was too much copying Theme Park.
  • This game would require a lot of money in art assets.
  • I realized that this kind of game is very difficult to tune properly. The technical part was quite easy to do but it’s hard to have an interesting gameplay.
  • I stopped the project way too late. I looked into my source control software history (perforce) to see that I worked on the game for more than 3 months.

In comparison, I spent less than a month on “Project 15″, stopped last week. And Project 15 was already playable but the game itself is also much less complex. Anyway, I’m getting better at moving on early when something is not working, that’s good :)

Conclusion

Obviously, even if it can be difficult, it’s good to stop working on a game when you realize it’s not that good. Just backup the game, and keep it somewhere just in case a killer idea can revive it. I now try to concentrate exclusively on gameplay from the beginning of the development and avoid any technical features if it’s not required. That way, I can find out quickly if it’s fun or not.

Feel free to tell me what you think about Museum Director and to share your “failed game designs” in the comments.

Follow me on twitter and facebook to know when I post other unreleased designs. ;)

Update: see also : Never released game design and prototype #2 : DJ Machine

Piracy of Spring Up Harmony (PC Game) : 96%

It’s very difficult to estimate the piracy rate of PC games, and even more to estimate the impact on the sales. For my last game Spring Up Harmony, I found out that the piracy rate is 96% (!). Higher that I’d thought, really. Read the details below and find out how I obtained this number.

The game

The PC version of Spring Up Harmony was released last February as shareware. The trial version gives access to 6 out of 35 levels and restricts access to multi-player game play. The registered version costs $4.99 and gives access to the full game.

The game has an online rankings feature. I used this feature to gather statistics about players. Of course, I do not have any information on players playing offline.

The pirated version

A few hours after releasing my game on my site, I receive a Google Alert with a link to a Russian forum pointing to a hacked version of the game. I download it (no virus inside, good point) and it is a package with the full version with a key generator unlocking the full game included. And the following days/weeks, I regularly received alerts with sites linking to the full game for free using download sites or torrents.

The response

As soon as I found out about this version, I quickly uploaded an update. As for every update, I have a unique ID in the game. I changed it so that the ID of games downloaded from my site is different from the ID of the pirate copy found on torrents. I also modified the script used for online rankings to disable the features for pirates and I removed the existing pirates in the rankings. Instead of receiving the rankings, pirates get a specific message downloaded from the rankings server to incite them to get the full version (see screenshot below).

piracy

I also tried to take down a few links on download sites by reporting copyrighted material but it’s very slow (when it’s even working).

A twitter user posted a link to the full game too. I contacted twitter (using this specific page) immediatly, they replied in 14 days (!) and only removed the single tweet about my game. The user is still using twitter to post dozens of illegal links to games everyday. Useless.

The different categories of players

By examining the logs of the access to the online rankings script, I could split the players into different categories:

  • Registered: A player who bought a legal copy of the game. A real paying customer.
  • Pirates: A “player” who used the key generator to get access to the full version without paying for it.
  • Trial: A player who downloaded the game from an official source, and played the trial version without registering.
  • “Trial pirate”: A player who downloaded the game from an illegal source but did not use the keygen provided to access the full version. A pirate not liking the game.
  • Unknown: A player using a copy with the same ID that the one that was released on pirate sites before I updated the new one. These players could either have downloaded the game from my site (Trial category) or from the pirate sites with my pirated copy (Trial pirate category).

The results

I made two different pie charts. The left one shows the ratio of the players in the different categories. The right one is based on the number of levels completed. I find it interesting because it gives more “weight” to big players, spending a lot of time into the game (charts made with NCES Kids’ Zone; you can click to enlarge them).

players_all levels_all

You can see that the only categories that have a bigger percentage between “players” and “completed levels” charts are obviously the ones that have access to the full version of the game (registered and pirates). The 71% of the levels completed being from pirates shows that some pirates are “hardcore” players.

The refined results

However, free players and trial pirates are not really impacting my sales as they do not seem to like the game. I made other stats where I only count players that played past the level 6. It means that they accessed a paying feature (but might not have paid for it unfortunately). It obviously ignores all the “Trial” and “Trial pirate” players but that’s not all. It also ignores players that entered an illegal serial without really using it. So these players will be ignored as they would have never buy the full game. It also ignores registered players that did not play beyond the first few levels but nobody is in this case.

These charts are probably more representative of piracy of Spring Up Harmony, here are they:

players_fullversion levels_fullversion

So here you have the 96%. 96% of the players using the paying features of Spring Up Harmony and that accessed the online leaderboards are using an illegal version! The obvious question I asked myself here is “Why?“. The answers that came up when an indie developer asked the pirates are interesting to read.

The additional information

Some important facts can affect/explain these results:

- The overall number of downloads of the game is low.

- Most pirates directly downloaded the pirated version. They probably wouldn’t have found the game at all if they did not visit the pirate sites. I don’t know if it’s good or bad but pirate sites gave visibility to Spring Up Harmony. However, there are also pirates who downloaded the game from a legal source and searched for the keygen online.

- The data only take into account people playing while being connected to Internet. As the game displays a message when the game is launched online with a pirate copy, pirates might be tempted to keep playing offline and therefore do not enter in the last charts.

The conclusion

The piracy rate obtained here seems to be similar to the few numbers I’ve seen online (MachinariumRicochet Infinity (2) or World of Goo for instance). Spring Up Harmony should be available on a few portals in the following weeks, it will probably give more exposure to the game and might change the numbers.

Feel free to comment, follow me on twitter and/or facebook and try Spring Up Harmony.

Follow Us

rss_32 twitter facebook youtube google_plus

Search Blog