Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon Join the GFS Discord Server!
27. March 2014


Wow, I gotta say this announcement pretty much broadsided me.  I wrote Moai off for dead, which was a huge shame, as I did a tutorial series on the subject, and frankly found MOAI to be some of the cleanest C++ code I had ever read.  So to hear of a new release certainly makes me happy.


So then, what’s new?


Feature merge from Zipline:

  • Massive rework of the garbage collection system to simplify object tracking
  • Reworking of the AKU Modules API
  • New SDL host to complement the GLUT host
  • A flag to MOAIAction to disable auto-stop on no children

A New Build System:

  • The CMake build system that was in place for the linux and blackberry hosts was extened to include all hosts
  • Luajit support was added to all platforms (via cmake scripts)
  • create-project-* scripts were created that allows you to generate vs2008->vs2013 and xcode project files.
  • Changes to a project can be recorded once in the relevant cmake script and all platforms should work instead of maintaining 6+ build configs
  • Plugin support was added for installing modules which are outside the moai sdk (other repos) [More]
  • Custom host support was added for compiling a host outside of the repo [More]
  • Support for compiling with Ming-w64 for a completely open source experience on Windows (no more vcruntime to distribute)

Additional Features:

  • Vector Pathfinding (MOAIVecPathGraph)
  • Box2D Closest Raycast Exposure
  • Twitter support in android
  • MOAIShader was enhanced with the 4x4 matrix and given access to UNIFORM_WORLD_VIEW
  • A faster and smoother android host with working keyboard support.
  • MOAISafariIOS is now MOAIBrowserIOS and MOAIBrowserAndroid added
  • Visibility can now be inherited!
  • Google Play Services
  • Updated Tapjoy and Vungle
  • MOAISim showCursor and hideCursor support
  • Documentation improvements
  • Chartboost for IOS and android
  • You can now EnqueueJoystickEvent from the host.
  • New HTML/JS host based on emscripten


  • Android logging support repaired
  • VFS works correctly on all platforms
  • A heap of lua stack overflows
  • Fixes to JSON parser and encoder
  • Textbox string bounds calculations fixed
  • PVR support working now


Certainly some nice new features in there, and hopefully this new release will breath renewed life into this project that frankly always deserved a better fate.


You can access the MOAI source code here.

You can read a more complete release notes here.

News Programming

21. August 2013


I have been a big fan of the Moai game engine for a long time, going back to when I created a tutorial series about using it.  Lately though, things got quite, really really really quite.  The forum activity really dropped off, and new commits weren’t being added to the github.  I had personally written it off as a promising but dead end technology.  I decided to take a look at the forums after a few months off and found this interesting post from Patrick at Zipline games a couple days back:


Thoughts on the future of Moai


Marko Pukari sent me an email yesterday asking for a comment on what's going on (or not) with Moai SDK from Zipline's perspective. As you know we've been heads down on internal projects for quite a few months now. It's been ages since I've looked at the forums or our pull requests - I just haven't had the time. Looking at them this morning I saw a lot of high quality pull requests and bug fixes (thank you!) but was a bit surprised that they hadn't already been merged in to develop. I went ahead and grabbed the obvious ones and will try to close out the rest when I have time to get back to the SDK.

The specific question Marko wanted me to address is whether or not Moai SDK is a 'dead engine.' It isn't (and it won't be) for a few reasons. The first is that we are actively using it to develop our own games and will continue to do so. The second is that Moai SDK started life as my personal code base and I intend to keep working on it no matter what happens. Third, there is a community branch so even if I get hit by a bus the project will continue.

As of this writing nobody has productized the engine, so if you are a less experienced developer and not prepared to fully maintain the engine yourself then think seriously about going with a commercial engine or authoring tool instead. Open source is great because you won't get boxed in by a missing feature or a bug... but you have to be experienced enough to implement the feature or fix the bug yourself, or rich enough to hire someone to do it.

Regarding Zipline, our games are paying us right now but developing them takes up our every working moment. This should ease up in a month or three, but nobody should sit around waiting for us. The big project for me personally is going to be to merge our 'studio' branch back into develop. From that point I will continue to work on the SDK. In fact, I can hardly wait!

I can confirm that we do plan to offer products and services around Moai in the future. Moai Cloud didn't work out, but there are some other things I'm hoping to announce later this year. None of them involve taking Moai closed source.

I'm also glad to see there is a community branch; I'll keep an eye on it and pull features and fixes from time to time. Alternatively, I've asked before and I'll ask again: if anyone wants to volunteer to maintain Zipline's branch and CI then I would welcome them to do so. This extends to all aspects of community and project maintenance. Just contact me directly via email.



Later in the comments was this interesting tidbit:

3) Sure. The moment someone wants to pay me to do that, I will. Until then I cannot take time away from studio work. Every hour I spend not doing studio work I am losing money. Me personally. As in out of my pocket. Bread off my table. Etc. Don't get me wrong - I appreciate everyone's interest and contributions. But so far to date Moai SDK has paid me exactly $0.00. In spite of it being used to develop flagship titles by companies that received over $10m in venture capital. Just sayin'.


And no, Patrick isn’t whining, I get 100% where he was coming from.  He published Moai and certain studios certainly benefited majorly from it and that didn’t trickle back.  This of course is one of the joys of open source software.  It’s a bummer, but to me not surprising, that the Moai cloud efforts didn’t turn into a revenue stream.  There is no need to contribute upstream to the success of Moai… but karma’s a bitch!


What I did and do find incredible disappointing is the complete lack of contribution I have seen from studios other than Zipline.  Harebrained Schemes made Crimson Steam Pirates and StrikeFleet Omega using Moai and must have made pretty extensive changes… but did they contribute anything back to the engine?  There was some early promises, but I haven’t personally seen a damned thing.   And that is a gigantic shame.


At the very least though, we will be getting Ziplines internal copy pushed to the git repository, so that is good news.  I hope others decide to get more involved in the community and make Moai a success.

News Programming

3. March 2013


After a 4 month pause, there has been a new Moai release.  They also removed sign up requirements to download the SDK ( which was misleading before, so nice move ) as well as added nightly builds for those that like to walk on the wild side.


The biggest new features are android keyboard support ( finally! ), better threading and off screen frame buffering.  The full changelog is below


tTerrainMask () to MOAIPathFinder; renamed setTerrainScale () to setTerrainWeight ()
* Some work has been done on threading. Check MOAIThread.
* added support for default texture; finished async load; samples for async texture load
  and default texture
* added support in MOAIDataBuffer to detect zip files, inflate on load; added inflate on load
  support to MOAIDataIOTask
* moai coding style guide in .doc format
* first phase of offscreen rendering architecture completed
* added setClearColor () to MOAILayer
* samples to test multiple viewports inside an offscreen buffer
* integrated sfmt random number generator
* Merged playnomi contribs to MOAIImage, MOAIImageTexture, MOAIParticleSystem and MOAIParticlePexPlugin


by Adam Villalobos ( )
* Adding GCM support ( replacing C2DM ) to Android host.
* Adding file not found log if a texture file fails to load
* Fixing build errors for DataTaskIO
* Fixing issue with setting visibility not properly updating dependencies
* Fixing bug with Font reloading on Android
* Added Android keyboard support


by John Copic ( )
* Adding sfmt lib to android build.


by JoakimBlomberg ( )
* Script node apply of attributes should unpack attribute id or it will not be applied


by Bogdan Tatarov ( )
* adding MOAIUnitzSound::_getFilename()


by mxttie ( )
* updated box2d physics sample adding mouse manipulation using mouse joint


by Tommo Zhou ( )
* fix edge case that new-created-paused action cannot receive further update
* fix: MOAIImageTexture not override OnInvalidate


by Antonio ( )
* Initial Camera Support for iOS


by sporksmith ( )
* Log file-open failures


by Clement Farabet ( )
* Fixed VSYNC issue for OSX host.
* Added missing files to iOS (XCode) project.


by Francisco Tufro ( )
* Several fixes in build systems for all platforms
* New release script in bin/distribute


by Stephen Belanger ( )
* Recommended to enable this with C-Ares


by Ben Borowski ( )
* Adds call to FMOD update to iOS sample project.


by Robert Wahler ( )
* GlutHost will run "main.lua" if host binary is called without arguments
* add Lua global 'arg' that mimics the lua/luajit built-in global 'arg' to GlutHost


by Alexey Zankevich ( )
* MOAIJsonParser fix - checking if lua number is integer has been added
* Fixed MOAIEnvironment.screenDpi nil issue for Android
* Fixed MOAIEnvironment.screenDpi nil issue for iOS host


by Seebs ( )
* Clarify description of textbox color escapes, fixing one typo and reducing confusion
  between number of bits and number of values represented.
* Terser output
* add (untested) support for controlling GL blend equations.


by ChairGraveyard ( )
* Add support for collideConnected flag to MOAIBox2DWorld::_addRopeJoint
by out-of-pixel ( )
* Fixed last Key Error from MOAIAnimCurve


by superquadratic ( )
* Fix Clang 4.2 (Xcode 4.6) Compiler Warnings


They also changed the file structure as follows:

bin/ Development binaries for Windows and MacOSX, Linux will be added soon
docs/ Documentation for this release and attribution images
hosts/ Source and IDE projects for the different platform's hosts
include/ Include headers
lib/ Compiled (static and/or dynamic) libraries for all the supported platforms
samples/ Moai SDK feature samples


Head on over to the Moai website to download.


1. November 2012


In the last couple days a few very useful tutorials have shown up on the Moai forums, I thought I would bring to your attention.


Resource Manager with Multi-Res support

This is an intermediate level tutorial, as the author suggested, there aren’t actually all that many tutorials serving this skill level.  He has a couple more tutorials in the works, hopefully at the same link.  In the author’s words, this tutorial:

The resource manager that we will be creating will actually be divided into several parts, each adding specific functionality and some really handy features. As far as the application (your game logic) is concerned, there is a namespace called 'ResMan' that provides functions for retrieving any type of data that it needs. This tutorial will start with a simple interface in the ResMan namespace for retrieving images and fonts, as the tutorial progresses the interface will be expanded to include more resource types as well as implement some very handy functionality.



Extending MOAI Lua host with additional 3rd party libraries

Another slightly shorter tutorial, this one is also at the intermediate level.  In the authors own words:

This is a brief how to which I'm posting here because it might save you 5 minutes (or me 5 minutes if I do this again). Recently I added lua 'bit ops' to the MOAI host so I could have bit flags. It was completely painless and here's a little recipe:


Basically it illustrates how to add another lua module to the Moai host, in this case bit ops, very handy.


Nice work guys, keep ‘em coming.  I really have to start a new Moai tutorial soon…


24. October 2012


Zipline just announced a new release of the Moai SDK, 1.3r2.  This release is mostly due to the release of iOS 6 and is a bit of a double edged sword.  What’s the catch you say?


Most importantly, we have updated the Moai Xcode project to support Apple's latest Xcode version 4.5 and the iOS 6 SDK. What does this mean for you? The biggest change is that Xcode 4.5 adds support for armv7s and the iPhone 5, but drops support for older armv6 iOS devices, and requires a minimum of iOS 4.3. Apple's armv6 devices include the iPhone 3G and earlier iPhones, and the first two generations of iPod touch devices. The Moai codebase on github can still be used to build to armv6 with previous Xcode versions, but your build flags will need to be reverted to support this.


So basically if you are supporting the most popular iPhone (3g), Apple just forked your world up.  You of course can still do it, but you will need to support two toolchains to do so, which sucks.


Other details of the release:

-iOS 6 and armv7s support added

-Dropped armv6 support on iOS

-Added setFailOnError method to MOAIHTTPTask to allow getting information from 400+ codes

-Modified MOAITextDesigner's layout behaviour to snap the layout cursor's Y-Coordinate to integer boundaries between lines of text

-Modifed MOAITextDesigner's layout method to snap lines of text to integer boundaries to prevent blurring

-Fixed a buffer overrun issue in Visual Studio 2010

-Fixed 'setLength' function on MOAIBOX2DDistanceJoint

-Fixed a bug with Curl HTTP task resetting on certain calls

-Fixed offscreen buffer ( MOAIFrameBuffer ) clipping bug

-Fixed issue with MOAICpBody not registering MOAITransformBase functions

-Fixed issue with MOAISerializer not handling escaped quotes

-Fixing bug causing '.fnt' file to fail to load if not in the current directory

-Added MOAIBox2DRopeJoint to global Lua class registration

-Added a fill method to MOAIGrid

-Fixed issue with MOAIParticleEmmiter so that it uses the proper location and apply transforms in the correct order

-Fixed a bug with 3d picking

-Added sort modes to propListForRay


As I said, mostly all about iOS6.


Don’t blame Moai for the lack of Arm6 support, that’s Apple’s boneheaded decision.  If you are willing to forgo iOS6 SDK goodies, there appears to be a way to support arm6 devices in XCode 4.5.  Your actual mileage may vary!


See More Tutorials on!

Month List