Useful Fun

Let's have fun all the time.  Enjoy being alive.

Ever wonder if you can have fun while doing useful stuffs?

Yes you can!  This site is where we record down all the things we do to make fun things useful and do useful fun things.  Watch us and see how we have fun!!!

Current projects

SIT Leader

This program helps to remind leaders to apply different styles whenever situation calls for it.  Simple and fast reminders.

A departure from writing games.  Trying my hand at writing simple applications.  This one was done online without any compilations locally at all.  Interesting way to write a program.  Very simple though.  Ask me to know how.

It can only be downloaded from this URL when you are using your mobile phone, so far only tested on Android phones. 
or via this 
QR code: 
Use your mobile phone to read this QR code to download and then install the simple application.

Current projects

SKU Number:20111205001
Before we go into network games, let's detour for a while...I love watching the kids create their own levels.  And Cannon Madness is their creation.  Ok, I deleted and modified some impossible ones, but all in all, the levels are exciting enough.  Try all 15 of them.  There is also a final hidden, bonus level at the end.  Putting onto App Store now, waiting for review and acceptance.  Wait for it.  At least a week away from today 5 December 2011.
Cannon Madness icon

Hey kids!  Guess what!  We are going to be able to use all our devices and play games together!  Oooooh great!  Android, iPad, iPhone, PC, MacBook, they can all play what game will be fun like that...not too speedy though...needs more thinking...not crazy firing type...maybe turn based...maybe quiz type...or time-limited tic-tac-toe, advanced chess, RISK, iglooWar, SkidRacing, Tower Madness, drawing together, typing together, chatting in game, Math quiz, interactive story books with multiple characters all choosing different paths through the book, moving around a big world together or separately...experience shows that if we want to have fun, just try the craziest idea in the list...but to make money pick the simplest one and give it a twist.  I'll go for the craziest idea first *grin*, life is short. 

SkidRacing version 3 accepted by App Store!
Go download 40 levels of new enemies and more weapons.  Break the high scores and see how you rank in the world!

iglooWar is now on Apple App Store and Android Market!
SKU Number:20111115001 
Screen shot of IglooWar
Lots of fun for 2 players hurling snowballs and other weapons at each other.  You are allowed to build a wall first in defence!  There is a new Solo Play mode where you try to score points and climb the ranks.

Learning Side Note
Integration with OpenFeint to allow high scores and unlocking of achievements meant our kids will see their high scores online and they try to reach the next rank to beat their brothers!  Well, something broke, and after a few hours of trials found that the build.setting file requires 
CFBundleVersion = "1"
within the iphone's property list (plist)...not documented anywhere!  Amazing that I happened to infer and hit on this little trick.  Yeah, now let's have more ranks to be promoted to!

SkidRacing Version 3 launched!
+40 levels to play with now.
+Made it more difficult by having less bullets on lower levels but increases quickly at high levels for maximum kill
+More types of bullets that behave differently at different levels
+More enemies...ok ok my kids drew some of these.
Launched on Android Market already.  Being reviewed in Apple App Store still, needs a week probably.
SkidRacing Version 2 launched!
Screen shot of SkidRacing main menu
+Skid marks when turning
+Shake will give a speed boost
+OpenFeint works better
-Still can't find out why it stops functioning when LIFE reaches ZERO at times.  Working on it still…what a mystery!  You will have to get out and get in again so
mehow.  (I have a suspicion...must check if parent of object exists before I remove it...try out over the weekend.) (SOLVED!  That is indeed the solution!)

SKU Number:20111031001
The kids have been bugging me for a racing car game for some time...but I really can't think of how to beat those great simulators out there, that bangs and crashes with such dramatic effects.  Well...I do like to have a car that can fire at the enemies instead of avoiding them all the time.  And skidding or drifting around definitely sounds more fun than plain old now we're driving on ice!  So presenting...our beautiful racer who skids on ice.  Tap him to fire at the enemies!

And guess what?!  Enabled high score tracking online, so you can compare who are perfectionists and insist on firing at every single enemy available!  
(Openfeint enabled.)

SKU Number:20111029001 
The little dinosaur is as small as a cherry, hence the name...but he is not alone.  There are many small creatures like it in the area.  Some are good, gives you life, some are dangerous, make them extinct.

Note to self:  Touching special objects will change your weapons.  That should be a cool thing to do.

Learning Side Note
Big discovery about why the programs have thus far seemed turned out to be because I have buttons on my screen during the game play.  Removing all buttons allowed the game characters to respond well.  Hm...strange strange.  Nevertheless, it implies that we need new ways to command the characters for now...tapping on the screen directly seems good for firing.  Auto-firing is preferred by the kids.  Shouting at it will probably make this game rather irritating for the fellow commuters.  We'll see what is natural.

Note to self: 
  • [ok]And probably reduce the tilt sensor's detection frequency.  The event queue is jamming up too quickly.  Yes that helps.  Setting to 50Hz now.  
  • [ok]And after collision with enemy, remove latter from physics engine, otherwise it gets destroyed twice and even scored twice if chanced upon by an over-enthusiatic bullet.  But this must be done with a delay of 1ms, otherwise Physics engine just crashes randomly.  
  • [ok]Dino likes to get stuck at bottom right hand corner, very strange, but known Physics problem...may have to implement a 'shake' listener to jerk it out.  
  • [ok]There are also strange reasons probably for it crashing, especially after you click to proceed to next level, commonly happening after you first play the game.  Discovered that it is due to removal of Physics objects while still in motion, a NO-NO.  
  • [ok]Do not generate enemies right in your face when game begins.

Saving database files to the Documents folder allows it to work properly for both Android and iOS devices.  Originally storing it in Resource directory (read-only on iOS) is a mistake.  Time to correct them all.  The impact is that high scores and level informations are not saved properly in iOS unless changed to Documents folder.

Launching on App Store
Waiting for review...nibbling my nails...anxiously waiting if it will get approved...oh well, I can wait for a week.  Heard that's how long it takes for them to review.  We shall see.

Learning Side Note
There are too many things to do to launch on App Store!  Followed all instructions to the dot provided by Corona, a PDF file.  That led to creating accounts, adhoc, distribution profiles, meddling with keychains, definitely not for the faint hearted.  And guess what...this lucky fella succeeded first time!  Looks like I'm rather literal when it comes to following a document, really to the dot.  Mind the spaces, mind the capitalizations, find the exact right folder, etc.

Here's a take away, create 2 screen shots sized 320x480 (Android Market, and App Store both needs this, create another 2 screen shots sized 768x1024 (App Store needs this) and all must be 72 dpi in quality. And if you have read below, the Icon--512x512.png is definitely necessary.

Really, if reading all the above makes your head spin already, do not become a programmer.  This is advice for my children.  In case they come and tell me this again, "Programming looks hard....but fun".  They better really enjoy creating stuffs from zero, otherwise this is not for them!

MacBook with me
Time to figure out how to roll out onto the iPad and the Apple App Store.  It should be more complicated that the Android Market efforts.    
Available on Android Market

By the way, all these games are on the Android Market by now (2011/10/23).

Learning Side Note
When publishing to the Android Market, some things must be prepared first.

2 x Screenshots:
320 x 480, 480 x 800, 480 x 854,
1280 x 720, 1280 x 800
24 bit PNG or JPEG (no alpha)
Full bleed, no border in art
You may upload screenshots in landscape orientation. The thumbnails will appear to be rotated, but the actual images and their orientations will be preserved.

High Resolution Application Icon:
512 x 512
32 bit PNG or JPEG
Maximum: 1024 KB

Title of application
30 characters

Description of application
4000 characters

Best to be your own, otherwise, a Facebook product page is good as well.

Best to be your publicly support email address, not a private, personal one if you don't want to be flamed whenever an app crashes, which happens often enough for so many possible reasons!
SKU Number:20111024001 
Hm...large maps...redcrosses for extra life...shoot at many enemies...sounds like we have another arcade shooter in the works!

This one took some more Maths before I got it to work...but got too complicated and are only going to get guns shooting to the front, no firing from the sides.  Well...KISS!

Gifts fall from the sky.  Guide it to reach the recipient!


Two critters eating as much as they can.  Just don't eat the bombs as well!


Tilt to roll your bomb around.  Bomb the Mad Cat and wipe that silly smile off the mad face!

MadCat icon


All my friends are kids, and round, we all like to bounce around.

There is an irritable red block head who always stick his tongue at us.
Our favourite game is "Hit the Red guy!".

Help us hit him by moving the slides and blocks around.

Learning side note
Director class by Ricardo Rauber Pereira is cool!  Search the web and download his latest.  I'm using v1.4 at the moment.

Some conventions:-
  • main.lua calls mainmenu.lua
  • all other screens should be named the same as their file names
  • all other screens call back mainmenu to return to this top level

To ensure objects stay within the same screen, and get disposed every time that screen exits, ensure that they are inserted into the localGroup variable.

local localGroup = display.newGroup()
localGroup:insert( background )

To make a button that pops up a window...

local btPopUp = display.newImage( "bt_popup.png" )
localGroup:insert( btPopUp )
btPopUp.x = 160
btPopUp.y = 350
btPopUp:addEventListener ( 
"touch" ,
function ( event )
if event.phase == "ended" then
function ( event )
print("pop up closed")

To make a button/area that allows for flicking left or right...

local btSlide = display.newImage( "bt_slide.png" )        
localGroup:insert( btSlide )
btSlide.x = 160
btSlide.y = 300    
btSlide:addEventListener (
"touch" , 
function ( event )
if event.phase == "ended" then
if event.xStart >= event.x then
director:changeScene( "screen2", "moveFromRight" )
director:changeScene( "screen2", "moveFromLeft" )
        A regular button to change to another screen...
There are many possible transitions like moveFromLeft, moveFromRight, crossfade, fade, 
downFlip, flip, overFromBottom, moveFromTop and overFromRight.

local ui = require ( "ui" ) --Just need to require this once.
local bt01 = ui.newButton{
default = "bt_moveFromLeft.png",
over = "bt_moveFromLeft.png",
onEvent = function ( event )
    if event.phase == "release" then         director:changeScene( "screen2", "moveFromLeft" )     end                end,
     id = "bt01" }
localGroup:insert( bt01 )
bt01.x = 85 bt01.y = 70

Advanced, if you want to pass parameters to another screen...

local btParameters = display.newImage( "bt_parameters.png" )
localGroup:insert( btParameters )
btParameters.x = 160
btParameters.y = 400
btParameters:addEventListener (
"touch" ,
function ( event )
{ label="Sending Parameters", reload=true }, "screen2", "fade", "white"

SVG as level editor and object definition
OH I also tried using SVG for this, like InkScape...wondering if it is worth USD49 bucks to buy the library for my limited use.  The Chinese do say that to be good at my chores, I must know how to use my tools well.  Notice that the saying does not include buying new maybe I'll save the money and try other methods.


Release bombs as you move around.  Avoid the incoming enemies who are chasing you very very quickly.  Let them move past you.  The good thing is that as long as any one of them hits the fire at the top, they all disappear as one!  Talk about being united!

Need nicer hand drawn graphics.  Can use this one by my kiddo.

From sketch to digitized.

Another one.
Another sketch digitized.

Learning Side Note

Need a good shadowed icon set.  Originally I thought the list below is sufficient.

Icon sizes and file names required by Android

Turns out, this is the full list!

Icon--512x512.png = 512x512 (Android Market)

iTunesArtwork.png = as above (App Store, seems optional)

Icon@2x.png = 114x114 (App Store)

Icon-hdpi.png = 72x72 (Android Market)

Icon-72.png = as above (App Store)

Icon.png = 57x57 (App Store)

Icon-mdpi = 48x48 (Android Market)

Icon-ldpi = 36x36 (Android Market)

Past projects

King Rabbit

Inspired by King Kazma of the anime Summer Wars, we have a rabbit which kicks ass!  It will fire at the helpless enemy until it explodes.  Just hit him!

Need to know exact angles and dimensions for the carrots to fly realistically out of the gun in the right direction.

Screen dimension and angles

Learning Side Note

          1. In portrait mode, the angles in radian starts with zero southward.  The coordinate's origin is at the top left corner.
          2. Require...uses case sensitive file names.
          3. File wav files and images...also case sensitive.
          4. No sub folders are allowed...all flat.
          5. No underscores for file names...just alphanumeric characters.
          6. We switched to using GIMP (instead of PhotoShop) and it generated png files nicely. Somehow PS needs some more settings that deluded me but GIMP settled them for us nicely.
          7. Installation with AppInstaller or "adb install" both works fine, so don't have to worry that these are the cause of your problems.
          8. When publishing to the Android Market, add these into your build.settings file.
            android =
                            versionCode = "1",
                            versionName = "1.0",

Original artwork from the kids.
From this hand drawn dragon, we originally wanted it to drop bombs down onto land...but putting parental instinct first, we made it feed a baby dragon instead.

So let meat drop, then guide it to the baby.

The baby dragon is really hungry.  The meat may fall out of the sun, but it is up to the mummy dragon to bring it to the kid.  Be careful, drop the meat and you have to start over again.

Bouncing Shapes
Sean Square talking to Longman Rectangle.

Sean, 'Ask any kid what is their favorite shape and you hear "Star !" half the time.  Can't the kid say "Square"?  For that matter, did you ever hear the kid say "Rectangle"? '.

Longman scratch his head, thought a bit and agreed.

Sean, 'The world is not fair!  I'm going to leave this kid for good.'

With that he bounced away angrily.  Longman told the rest, Cindy Circle, Thaddeous Triangle, Tracy Trapezium, and soon we have a wave of bouncing shapes trying to escape by land, air, sea and even through Dreamland (by dreaming away...).

Help the shapes escape?

Catch the Frogs - Kanda
Shoot a net and catch these frogs that run around your land.  They won't stop!
Well, you never run out of nets either.  So it is just fun to keep shooting.

Latest used SKU Number: SKU Number:20111205001

Cross-platform Mobile App Development Showcase

Subpages (2): Announcements Calendar