What does a Pirate need? One More Eye...

As a kid a pirate always meant a person that had one eye missing, generally covered with a black patch and a wooden leg and maybe a hook for a hand. And the only thing that a pirate was obsessed with would have been treasure. For this review it is indeed treasure and what the Pirate requires is one "More Eye"

It might sound strange what's all this about eyes and pirates, etc? For those that do not know, Moai, pronounced as "Moe Eye" is a cross platform, multi-device, open-source platform. Unlike other open source packages, Cocos2D and Sparrow, Moai offers developers Lua as the language for development which is much easier to pick up and work with than objective-C. Like most of the frameworks, Moai also relies on openGL.

Here's the good and the bad, The good part is that Moai is OpenSource, which not only means that it is FREE but also that the source code for the same is available for any developer to download and compile. Thereby offering complete transparency, if at any point any developer feels the need to add functionality, they can do so without having to wait for the next release or bug fix. It is instant, in the time when every week and month is a game changer, for serious developers waiting is a "deal breaker". The bad, well not exactly bad, the not so good part is that if you are a casual developer, Moai is not something that one might causally try. It is a serious professional tool and offers a great deal of flexibility and power over the platforms. As it is said, "Every dark cloud has a silver lining", the good news is that the developers of Moai have taken note of this point. They are quite upfront and advertise/publicize Moai as "The Mobile platform for Pro developers". Moai was a closed Beta, I was lucky to be one of the early beta testers, but unfortunately did not get around developing with it. However Moai is now an openbeta and can be downloaded from the site. The other good thing with Moai is that the code can be compiled for Mac OSX, iOS, Android, Windows so thereby providing a true Multi-Platform environment. This is great news for developers that are after releasing their apps/games to both the iTunes and the MacApp store, along with the Android stores.

As mentioned, a Beginners Pack *could* be released that would sit atop the Moai framework and provide the users with a scene manager and object model that would be similar to other frameworks like GameSalad or CoronaSDK.

The cherry on the icing is the ability to integrate to the cloud. Moai are offering this wonderful platform for free, as opensource, the business model for Moai is cloud hosting. For the developer, that is an advantage where all the data can be stored in the cloud, web pages, web apps can be served off the cloud. Robert Nay, the 14yo developer, author of BubbleBall that used CoronaSDK to develop the game is happy with CoronaSDK as the front end as it would be wise to leverage the already working code, and use Moai Cloud as the backend.

As Moai is still in the teething stage, they are working closely with the early adopters and are promising direct and focused attention in getting projects off the ground for these developers. If a developer has a worthy project, the team at Moai *could* work closely with that developer, so get in touch with them.

Lastly, to re-iterate that because the platform is Open-Source, one does not have to release their apps as open-source, there is no restrictive licensing.

There are a couple of developers that have adopted the platform to work with and soon "Crimson" from Bungie Games and "Bubble Ball" from Robert Nay ( App written in Corona ) but uses the Moai cloud backend would be seen on the app stores. Zipline are also working on releasing sample apps, namely Wolf Toss, (from the screenshots).

I would leave you with a few screenshots and a few snippets to have a feel of what Moai framework is like with lua.

hiscoreButton = makeButtonSprite ( res.spritedeck.menu, SD_MENU_HISCORES )
hiscoreButton:setLayer ( layer )
hiscoreButton:setPriority ( 40 )
hiscoreButton:setLoc ( 380, -100 )

hiscoreButton:setClickDownCallback ( 
 function ()
  hiscoreButton:setIndex ( SD_MENU_HISCORES_DOWN )
  playTvOffAnim ()
  scene:navEvent ( scene.EVENT_HISCORES )

function scene:start ()
 runInThread ( 
  function ()
   waitSeconds ( 0.3 )
   playTvOnAnim ()
scene:pushLayer ( layer )
scene:navEvent ( scene.EVENT_READY )

Here's an example of how a level is set up in Moai
level = {}

level.name = "Level 1"
level.xPos = 1300
level.groundPos = -245
level.frontAnchorPos = level.xPos
level.backAnchorPos = level.xPos + 300

-- background
import ( "level-forest.lua" )

-- objects
local hayHeight = 85

local column = 0
loadRig ( "rig-physics-hay.lua", level.xPos + column, level.groundPos + 0 )
loadRig ( "rig-physics-hay.lua", level.xPos + column, level.groundPos + ( hayHeight * 1 ))
loadRig ( "rig-physics-hay.lua", level.xPos + column, level.groundPos + ( hayHeight * 2 ))

scene = makeScene ()
scene.EVENT_DONE = 1

camera = makeCamera ()

layer = makeLayer ()
layer:setCamera ( camera )

milk = loadRig ( "rig-annoy-milk.lua" )

function main ()

 while true do
  coroutine.yield ()
  if milk.done then
 waitSeconds ( 1 )
 scene:navEvent ( scene.EVENT_DONE )

runInThread ( main )

scene:pushLayer ( layer )
return scene

Software : Moai
Version : ß
Publisher : Zipline Games
Website : http://getmoai.com
Twitter : @getmoai
Platform : Various
Demo : None
Price : FREE

Follow @whatsin4me
Follow us on Facebook by liking our page at