Archive for September, 2008

Fuzzle Lite released!

September 25, 2008

Today Fuzzle Lite was released, allowing users to discover how great Fuzzle is before they buy 🙂

Along with the Fuzzle Lite release, Fuzzle was updated, in response to all the user feedback we’ve been getting. In additional to some stability fixes, it contains more difficulty levels (with the default easy level being easier, and a new medium difficulty level being similar in difficulty to the old easy level) to satisfy a broader range of users. It also contains a ‘clockless’ mode for users looking for a more relaxed, thoughtful game. And an alternate input mode for users prefering to tap twice rather than drag-drop to move stones.

A further update is also underway – it contains support for three undos per game. This should help some users who make occassional mistakes moving. Plus it allows you to try your luck again when that ball comes in exactly the position you didn’t want it!

Also, we aim to have global high score support in this next update, although we are still testing to ensure everything is working perfectly before releasing this feature.

There also seems to have been some confusion among some users with Fuzzle having been free for a short period and then Fuzzle Lite coming out free – we had a promotional campaign whereby we gave Fuzzle away for free for a short period of time. This generated a lot of good publicity for us, and meant some lucky users got the full game for free. Now we have Fuzzle Lite as the free version for users to try, so have no more need for such promotions, so Fuzzle will remain at it standard price $1.99.

I’ll write a blog later going into detail about how we switched from free->paid and how this worked with the AppStore’s rating system 🙂

Advertisements

Hiding the status bar fun

September 19, 2008

One issue a few iPhone game developers like me have run into is that for most games you want to have the status bar hidden. Now theoretically this is quite simple to do, by simply having UIStatusBarHidden ticked in your Info.plist settings.

And in fact, this was working for me, until at some point I made some other modifications to Info.plist and it the status bar suddenly started being shown. Looking around the net, I found other people mentioning the same problem. One solution mentioned was disabling the status-bar with the code:

[application setStatusBarHidden:YES animated:NO];

Now this code does works, but the problem with it is is that until the code is executed, the status bar shows – so your splash screen will come up with the status bar still showing, which is kind of ugly (you can still see this effect in some published apps/games).

The solution to my problem turned out to be that in editing Info.plist I’d somehow switched it from being in XML format to a key=value format file, and in this format the setting just wasn’t working (you can simply check by viewing Info.plist in any plain text viewer/editor). I converted it back to XML format, and voila, it worked again! Hope this helps some developers stuck with the exact same problem 🙂

Getting the sound output ‘right’

September 19, 2008

There’s at least three ways to do sound for the iPhone. The simplest way however – using System Sound Services – is not recommended for games, where you want to be playing multiple, and potentially long, sounds.

So for our needs, we were basically left with a choice between Audio Queue services, which seems to be the generally recommended way to do sound in games, and with using the SoundEngine class from Apple’s CrashLanding example, which uses the Open Audio Library, which also has the potential advantage of supposedly being cross-platform.

I tried both using Audio Queue services and the SoundEngine. It turns out that the Audio Queue services have the advantage that you can at least hear something in the simulator when using. The disadvantage that I found however was that it was tricky to get working nicely, and had some issues I was never able to solve, for example if I played stereo sounds then there were audible audio artifacts whenever I stopped/started them, even though doing everything the same with mono sounds there were no problems, which seemed to indicate the problem was internal.

So I went for using this SoundEngine class. It turns out this is very simple to use and basically just works. In our first release of Fuzzle, we released with this, however we then discovered one problem – by default, it fades out, and stops any existing music playback, when the application starts. Turns out a number of games have this same problem …. the user can always, after application start, double-tap the home key and restart the music, however then the game sounds stop working, and most importantly, some users don’t realize this and complain in reviews!

The fix for this, which is in our next update already, turns out to be the following three lines of code, which should come immediate before the call to SoundEngine_Initialize(…):

    AudioSessionInitialize (NULL,NULL,NULL,NULL);
    UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
    AudioSessionSetProperty(
        kAudioSessionProperty_AudioCategory,
        sizeof( sessionCategory ),
        &sessionCategory );

And with this code added, the game seems to co-exist perfectly happily with background music. Of course, if your application/game has its own music etc, then it may make sense to leave the default method of stopping any existing music playback. And once this update has been out, we’ll see if any other problems surface, but at the moment this seems to be the ‘right way’ to handle this 🙂

My iPhone development story

September 18, 2008

Having worked on developing an iphone app for the past month or so, I thought it worth sharing some of my story …. so I’ll be posting here a number of tips to try to save developers some of the hassle I went through getting all the basic things working for my first iphone game Fuzzle and subsequent games. Plus you might be hearing a little about our rollercoaster ride in the crazy world of the appstore as we try to generate sales+visibility for our apps within Apple’s system.