Marmalade Offering FREE licenses

Get Marmalade SDK for FREE

Marmalade the developers of one of the most powerful cross platform mobile and desktop development systems the Marmalade SDK are now offering FREE licenses. Marmalade are committed to ensuring that developers have the tools to deploy to established and emerging platforms first.

What is the Marmalade SDK? The Marmalade SDK is an awesome easy to use cross platform SDK that enables cross platform development for smart phones, tablets and emerging technologies such as smart TV. Marmalade supports unified development and testing across iOS, Android, Windows Phone 8, BlackBerry PlayBook / OS 10, Bada, Windows, Mac OS X and soon Tizen.

Marmalade comes in three flavours:

  • Marmalade C++ – Develop and test 2D / 3D apps and games using a mature C++ API that covers everything from 2D / 3D graphics and audio to native UI and unified in-app purchasing
  • Marmalade Quick – Develop and test 2D apps and games using a very easy to use Lua API that covers everything 2D and audio to physics and unified in-app purchasing
  • Web Marmalade = Develop and test HTML based apps and games using a very easy to use JavaScript API

All of the above enable testing right on a Windows or Mac desktop, with easy device deployment.

AppEasy 1.4.9 Now Available – Polygonal sprites, multiple fixtures, sqlite and SVG, TexturePacker tools

AppEasy Version 1.4.9 is Now Available

AppEasy the cross platform mobile game and app development system for iPhone, iPad, Android and Windows that is aimed at all levels of experience releases latest update

AppEasy version 1.4.9 is now available for download from here.

Please upgrade to the latest version. Note that before updating, close down your current version of AppEasy, rename c:\AppEasy to c:\AppEasy2, install and run AppEasy 1.4.9 then copy any changes / certificates from c:\AppEasy2 to c:\AppEasy. Note that if you install the update before renaming c:\AppEasy then simply exit the AppEasy project manager, rename the folder and run AppEasy again.

New Tools:

  • New tool added that converts Texture Packer and SVG data to XOML

Core Engine Changes:

  • Timeline has new property called AutoDelete which if set to true will auto delete the timeline when its finished. Be careful not to delete timelines that are shared across multiple objects
  • Animation has new property called AutoDelete which if set to true will auto delete the animation when its finished being played by a timeline. Be careful not to delete animations that are shared across multiple timelines
  • Actors now support multiple physics shapes (fixtures) using the new Fixtures inner tag
  • Actor Shape property is now write only. Setting a shape will remove all previous shapes
  • Support for new Geometry type which enables creation of actors that are built from collections of triangles, quads or a polygon
  • Actor has new attribute called Geometry which defines a geometry that the actor will use to render itself
  • New example (Tes68) added that shows how to use Geometries
  • Removed Video OnStopped event as its no longer needed
  • Support for sqlite added
  • Added Test69 which shows a sqlite test
  • BUG FIX: Fixed VideoOverlay OnEnd and OnStart events

Polygonal Sprites

One of the most exciting changes we have brought to 1.4.9 is the ability to step outside of the rectangular sprite based actors system using our new versatile geometry system. Using the new geometry system you can create any shape you like. Actors can now be built from polygons, triangle lists and quad lists. You can also specify your own UV texture coordinates as well as per vertex RGBA information. AppEasy will handle taps and intersection of this new type of geometry including disconnected geometry. Here are a few examples of geometries:

<!--Create a single triangle-->
<Geometry Name="Geoms1" Vertices="-200,-200,200,200,-200,200" UV="0,0,1,1,0,1" Type="TriList" />
<!--Create two triangles-->
<Geometry Name="Geoms2" Vertices="-200,-200,200,200,-200,200,-400,-400,-200,-400,-200,0" Type="TriList" />
<!--Create a house shape -->
<Geometry Name="Geoms3" Vertices="-200,-200,0,-300,200,-200,200,200,-200,200"  Indices="0,1,2,3,4" Colours="255,0,0,255,0,255,0,255,0,0,255,255,255,255,255,255,255,255,255,255" Type="Poly"/></pre>

Once you attach any of the above geometries to an actor the actor will take on the new geometric shape:

<Icon Name="Sprite1" Position="200,0" Background="bg1" Geometry="Geoms1" />

Physics Now Supports Multiple Fixtures

Actors now supports the new Fixtures inner tag that enables you to specify multiple shapes and materials etc that are attached to a single actor, e.g:

<Icon Position="0,0" Background="Land" Box2dMaterial="FixedHeavy">
		<Fixture Shape="LandScapeBase" Box2dMaterial="FixedHeavy" CollisionFlags="1,1,1" COM="0,0"/>
		<Fixture Shape="LandScapePeak" Box2dMaterial="FixedHeavy" CollisionFlags="1,1,1" COM="0,0"/>

SQLite Added

Due to popular request we have added lsqlite3 to 1.4.9 which enables SQL interaction via Lua.

Asset Conversion Tool

A new tool has been added that facilitates conversion of Texture Packer and SVG data to XOML. In particular the tool enables you to use SVG editors such as Inkscape to layout game levels and app layouts as well as create complex geometries easily.

AppEasy 1.4.8 Now Available

AppEasy Version 1.4.8 is Now Available

AppEasy the cross platform mobile game and app development system for iPhone, iPad, Android and Windows that is aimed at all levels of experience releases latest update

AppEasy version 1.4.8 is now available for download from here.

Please upgrade to the latest version. Note that before updating, close down your current version of AppEasy, rename c:\AppEasy to c:\AppEasy2, install and run AppEasy 1.4.8 then copy any changes / certificates from c:\AppEasy2 to c:\AppEasy. Note that if you install the update before renaming c:\AppEasy then simply exit the AppEasy project manager, rename the folder and run AppEasy again.

Core Engine Changes:

  • Added new Lua function particles.removeAll() which removes all particles from the actor
  • Added new Lua function resource.findOfType(resource-type-name, container (optional)) which returns a table of resources that are of the specified type
  • Added new Lua function scene.findOfType(scene-type-name) which returns a table of scenes that are of the specified type
  • RemoteReq now supports Header inner tags that enables you to add headers to requests
  • New RemoteRequest test example added (Test 64)
  • Added new Lua function actor.findAll(scene) which returns a table of all actors in a scene, including actors that are in the process of being destroyed
  • New lua library added called xml which deals with creating xml as well as loading and saving it
  • Scene Physics property can now be written to, however if the scene was not declared with physics enabled then it has no affect
  • Added new keyboard functions to Lua input library, getKeyPressed(), isKeyDown(key-code), isKeyUp(key-code)
  • Added new keyboard test demo (Test65)
  • Added new lua function sys.getTotalFrames() which returns the total number of frames that have been processed since app boot
  • Added new lua function sys.getFrameRate() which returns the current estimated frame rate
  • Added new lua function sys.pauseTime(paused (boolean)) which pauses / un-pauses time. Passing false will reset the time delay from the last frame, useful when performing long operations that take a long time such as loading and prevents sudden jumps at the start of a level
  • Added new lua function sys.isTimePaused() to test if time is paused
  • Added new SetPaused(paused (boolean)) action
  • Added new lua function variable.asTable(variable) which returns an array variable as a lua table
  • Added new lua function resource.create(type-name(string), parameters(table), parent(object, optional)) that allows creation of any type of XOML resource from lua (actors, scenes, images, fonts, etc..) (returns an instance of the created resource)
  • Added new lua function resource.createFromString(xoml-string (string), parent(object, optional) that creates XOML directly from a string
  • Added Anchor property to actors that enables you to change the anchor point between top-left and centre. Anchoring does not currently work with actors placed inside container controls such as list boxes
  • Added new lua function scene.updatePhysics(scene, time) – Manually calls the scenes physics update, can be used to stabilise physics world pre frame
  • Added new lua function scene.cleanup(scene) which cleans up deleted actors from the scene
  • Added new XOML type called Timer that enables actions to be called when they time out. Global resource manager, Actors and scenes each have their own timers manager
  • Added new Lua library called timer which enables interaction with XOML timers
  • Added new ChangeTimer action
  • Added new Test0 example that shows the use of anchors
  • Added new Test67 example which shows how to use timers
  • BUG FIX: When no actor is specified and scene is specified in CallActions the scene will now be used as the target
  • BUG FIX: Fixed bug in xml parser that wasnt correctly reading tag values
  • BUG FIX: Fixed crash that occurs when attempting to set a property that is read-only or read a property that is write-only
  • BUG FIX: Weld joint reference angle wasn’t correctly calculated for rotated objects
  • BUG FIX: Fixed box2d polygon vertex winding issue

Creating XOML from Lua

One of the biggest changes in 1.4.8 is the ability to create any type of XOML resource on the Lua side. This includes actors and even scenes. Lets take a look at a short example that shows how to create al label actor:

-- Create a XOML label from a table
local label = resource.create("Label", {
	Position="0, -100",
	Text="Hello World",
	BackgroundColour="80, 80, 80, 255",
	Size="-100, 50",
	AutoHeight="true"}, _scene)
-- Change the Text property
actor.set(label, "Text", "Hey man")

Also, it is now possible to instantiate a complete string of XOML from Lua. Lets take a quick look at an example:

-- Create XOML label from string
local xoml = [[
<Label Position="0, 100" Font="serif" Text="Test creating XOML resources from Lua" BackgroundColour="80, 80, 80, 255"
Background="Button1Brush" Size="-100, -10" AutoHeight="true" IgnoreCamera="true" />]]
resource.createFromString(xoml, _scene)


Another great new feature that has been added is Timers. Timers are incredibly useful in game and app development. A timer can be created and given a timeout duration, when the timer times out an actions list will be called. Timers can repeat a specified number of time and can also delete themselves when finished, allowing you to use them in a fire and forget manner.

Actor Anchors

Its now possible to change the position of an actors visual anchor, so those of you that are used to working with placing sprites using their top-left anchor point can do so.

Remote Request Headers

Remote Requests now support headers allowing you to pass heads along with HTTP requests to your web services.

Pausing Time

We’ve now made it possible to pause and resume game time. This is very useful if you have operations that take a while to complete mid-game (such as loading) and can be used to prevent unrealistic frame time jumps.

AppEasy 1.4.7 – The Easy Cross Platform Development System for Mobile now Available for Download

AppEasy Version 1.4.7 is Now Available

AppEasy the cross platform mobile game and app development system for iPhone, iPad, Android and Windows that is aimed at all levels of experience releases latest update

AppEasy version 1.4.7 is now available for download from here.

Please upgrade to the latest version. Note that before updating, close down your current version of AppEasy, rename c:\AppEasy to c:\AppEasy2, install and run AppEasy 1.4.7 then copy any changes / certificates from c:\AppEasy2 to c:\AppEasy. Note that if you install the update before renaming c:\AppEasy then simply exit the AppEasy project manager, rename the folder and run AppEasy again.

Core Engine Changes:

  • ActorParticles has new property called VelocityAll which sets the velocity of all particles in the particle system
  • actor lua lib has new closest(actor, type) and furthest(actor, type) which return the closest and furthest actors from the specified actor
  • CallGlobalScript action now works the same way as CallScript
  • All lua functions now report file and line number errors
  • All command and actions now report error files and line numbers, although line number reported is the actions list or program that contains the problem action or command and not the actual problem action or command
  • ActorParticles has new attribute called AutoDelete, when set to true (default) actor is deleted when it finishes otherwise it is left in an inactive and invisible state
  • BodyAwake attribute added to actors which returns true if the physics body is awake
  • Destroyed attribute added to actors which returns true if actor has been marked as destroyed by the system
  • can take a scene or actor. If neither are supplied then the containing actor or scene will be used as the target
  • sys.loadXoml() function added to load XOML files from Lua
  • Scene now has new OnPan event that gets called when the scene is panned
  • New actor.findOfType(type, scene) added that returns a table of all actors of the specified type
  • Bindings now support index variables
  • Adding to Position, PositionX and PositionY are no longer applied using the original position
  • PositionOrg, PositionOrgX and PositionOrgY added that do reference the original position (write only and cannot be set, only used for adding)
  • Added new particles lua library that can be used to interact with the particles within an ActorParticles based actor
  • ActorParticles Gravity changed from float to vec2
  • ActorParticles has new ParticleCount property
  • BUG FIX: Calling global script from actions in actor container was not passing in container actor
  • BUG FIX: Memory leak when adding a tag other than particle inside ActorParticle definition
  • BUG FIX: Particles depth broken in ActorParticles
  • BUG FIX: Some events were not being over written when set via properties
  • BUG FIX: actor.add() fixed
  • BUG FIX: Setting opacity property did not work as intended
  • BUG FIX: When setting variable to a whole number from lua, trailing zeros are now removed
  • BUG FIX: Box2dMaterial was not being applied when set as a property
  • BUG FIX: OnCollisionStart / OnCollisionEnd was being called for each actor that the target actor collided with

Error Reporting

We have done more work on the error reporting system, you will now find more meaningful error reports in debug.txt, including file names and line numbers.

Programmable Particle Systems

Particle actors have been made more versatile, including providing a new lua API (particles) that provides direct access to individual particles.

Other stuff

Scenes now support the OnPan event, which is called when a user pans the camera in a scene. The sys lua library also now allows loading of XOML files from lua.

Murder Detective 2: Corruption Available – Made with AppEasy

Murder Detective 2: Corruption Made with AppEasy

I’m pleased to announce that our team at Pockeeters has finished a brand new AppEasy powered game for Australian based developer Tournay Software. The game is called Murder Detective 2: Corruption and was developed with AppEasy. In fact, some of the features of the game helped shape many of the features of AppEasy that you see in the latest release.

AppEasy is a cross platform game and app development system that enables easy development using XOML mark-up and Lua.

The game is currently available on iTunes for iOS and Google Play for Android

The games features include:
* A thrilling murder mystery storyline.
* Mini games and puzzles.
* Hidden objects.
* Interact with characters.
* Cinematic cutscenes that enhance gameplay.
* Inventory interaction.
* Plenty of locations.
* A must for any murder mystery fan.

The Android version of the game will be available very soon.

Murder Detective 2 is the first fully fledged Pocketeers produced commercial game utilising many of the latest features of AppEasy and shows just how powerful and flexible AppEasy has become.

Very soon we will post a small post mortem that examines how and what we did to create the game using AppEasy

AppEasy Now Available

AppEasy the cross platform mobile game and app development system using XOML and Lua has received a new major update. See for more details. AppEasy is currently in FREE open beta.

Core Engine:
* Scene property can now be retrieved from actors
* physics lib now has setJointBodyA and setJointBodyB
* Actor, scene, camera and user properties can now all be set via a string, number, boolean or vector types (Optimisation)
* Added new Ads example (inner-active and leadbolt, we will add more to the mix in the future and turn it into a first class API)
* BUG FIX: Crash when passing no table to template.from()
* BUG FIX: Incorrect web view size / position on Android

You should find that the new way to set properties is much faster than setting them with strings as the data does not need to be converted from string to the required format.

The Ads example is also directly usable, just edit the Lua code behind file and change the id’s to your own!

AppEasy 1.4.6 the cross platform app creation system is now out!

AppEasy the cross platform mobile game and app development system using XOML and Lua has received a new major update. See for more details. AppEasy is currently in FREE open beta.

AppEasy 1.4.6 is now available for download. Changes include:

* TextFilter attribute added to UI labels
* Added market.restore() to restore previous purchases
* Added market.products() which returns a table of all product ID’s in the market
* Added market.price() which returns the price of a product
* Added which returns the name of a product
* Added variable.count() which returns the actual number of used elements in the variable array
* ActorText now supports animation Text target property
* actor.bringToFront(actor) added to bring an actor to the top of its child hierarchy
* Added new load_xoml command to programs
* New system variable (index 11) which holds current screen orientation in degrees
* New Lua display,width(), display.height() and display.orientation() script functions added
* New input.setAccelerometerRef() and input.getAccelerometerOffset() functions added
* Market products no longer support an ID
* market.findbyID() has been removed
* market.products() now returns product names and not ID’s
* market.setCallback() added
* Callback removed from market.purchase()
* market.lastPurchase() has been replaced with market.currentProduct() which now returns the last attempted refunded, restored or purchased product.
* sys.yield() added
* added to force save a XOML variable
* Variables have new attribute called Instant. If set to true then the persistent variables value is saved as soon as it is changed. Marking a variable as instant will automatically mark it as persistent
* Added new change command to programs which enable you to start, stop, pause and restart a program
* Added new media.enableMusic(enable) and media.enableSound(enable) to enable / disable music and sound globally
* Added new AudioEnable action which enables / disables music and sound (P1 = music_enable, P2 = sound_enable)
* sound command 5th parameter changed from target scene to repeat (boolean)
* Current scene is no longer brought to front of scene stack when new scenes are added. This will need to be done manually, or you can use the more appropriate scene layering system
* KillAllScenes action now accepts up to 5 scenes to exclude
* Video now supports OnStopped event
* VideoOverlay now supports OnError event
* WebView now supports OnPageLoaded, OnPageLoading and OnPageError events
* CallActions parameters changed to actions-name, parent-actor-name, parent-scene-name
* PlayTimeline will now restart a stopped timeline
* More resource properties exposed to property setters / getters, animation targets and bindings
* Actor HitTest replaced with Tappable
* Added new UserProperties to scenes and actors. UserProperties allow you to add any number of custim user defined properties to actors and scenes
* New SetUserProp(PropertyName, Propertyvalue, actor, scene), AddUserProp(PropertyName, Propertyvalue, actor, scene), SetUserPropToVar(PropertyName, VariableName, actor, scene) actions added
* New set_userprop(PropertyName, Propertyvalue, actor, scene) command added to programs
* New userprops LUA library added that provides set, get, add and find user properties
* You can now change templates and the data source assigned to grids and list boxes in real time
* All time related properties now work in seconds instead of per frame (scale up by 30 to convert to new system)
* New camera lua API
* Array index variables can now be used in actions and commands (e.g. my_array:my_index)
* BUG FIX: Crash bug when adding actors to layout panel actors such as grid, stack panel, list box and wrap panel
* BUG FIX: Label Text and Font properties now returned correctly
* BUG FIX: Label with autoheight and proportional sizing set changing size when tapped
* BUG FIX: Label / text actor actor height fixed
* BUG FIX: Fixes to market
* BUG FIX: Scene panning on y-axis not stopping at extents properly

Apologies for any changes that force you to make modifications to your existing XOML / Lua but these changes are essential for moving forward.

Documentation and XOML schema has also been brought up to date with 1.4.6

Lastly, note that all of the old examples have now gone and have been replaced with a single Tests example. This to a) clean up the examples folder to make way for bigger better examples and b) enable you to see all of the features in a single app instead of having to build, deploy and test each individual example.

Book Review – Marmalade SDK Mobile Game Development Essentials

I recently obtained a copy of a new book called Marmalade SDK Mobile Game Development Essentials by Sean Scaplehorn, which is currently the first and only book available that covers the Marmalade SDK. The Marmalade SDK is a cross platform game and app development system for a number of mobile devices including Android and iOS, which I have been using now for a few years. With this book being the first and only book and considering that I had spent so much time writing tutorials to help bring would-be Marmalade developers get up to speed that I felt inspired to review this book. In addition, I was approached by Packt publishing some time ago to write this book, but unfortunately due to my busy schedule I had to forego the opportunity. So once I heard that the book was out you can bet I’m gonna read and scrutinise it :)

Ok, the first thing I do with all new books is take a scan through the chapter list to see how much content is there, I can usually judge a books value from the contents pages. I’m happy to say that this book passed my initial contents inspection. There’s quite a lot of content squashed into a relatively short book.

The book begins with a short introduction to the Marmalade SDK, including step by step instructions on how to install and setup Marmalade on your computer. It then moves on to building a fairly simple Hello World application complete with a step by step explanation of each of the parts of the program. The book then progresses on to explain many of the Marmalade API’s, below I will cover each section of the book:

* Resource management – This section covers Marmalade resource management. You should pay particular attention to this section as resource management is one of the most important things to get right when developing cross platforms apps.
* 2D Graphics – This section compares IwGL, IwGx and Iw2D then goes into in-depth details of IwGx (my favourite Marmalade graphics API), including materials, streams, textures and polygons
* User Input – This section covers detecting key presses, touch screen (including multi-touch) and accelerometer (would have liked to have seen compass covered also). Gestures sample project is good as it shows how to detect swipe and pinch gestures, something many developers have trouble with
* 3D Graphics – This section has a short introduction to 3D graphics, followed by an explanation on how to render 3D shapes with IwGx (polygon by polygon),, description of view / model matrices. The chapter then moves on to show you how to get data from popular packages such as Blender / 3DS Max into a format that Marmalade can use using the Marmalade supplied exporters. Finally the chapter covers rendering exported 3D data using Marmalades IwGraphics API.
* 3D Animation – This section covers basic PAS animation using matrices, morph target and bone animations, although morph target animations are not covered as in depth as I would like to have seen. I did however have a fair bit to learn from this chapter.
* Fonts, User Interfaces and Localisations – This chapter starts out by covering IwGxFont and bitmapped fonts, including building bitmapped fonts from Marmalade Studio Font Builder. I will admit that I personally prefer and would recommend looking at true type fonts instead (see IwGxFontCreateTTFontFromBuffer for reference) as you do not have to deal with intermediate tools such as the font builder. The author briefly touches on IwUI and IwNUI for user interfaces but opts to roll his own solution which I completely agree with because IwUI is difficult to get to grips with and IwNUI is only supported by Android and iOS, although I would have liked to have seen IwUI / IwNUI covered in a separate section for completeness.
* Sound and Video – This chapter covers playback of compressed audio (for in-game music), playback of sound effects and video playback.
* Support a wide range of devices – This chapter has to be by far my favourite. It not only covers handling different device capabilities and screen resolutions (things that will plague you unless you get the right at the start), it also covers other topics such as dealing with application configuration files, multiple resource sets and compression. This is a must read section, even for advanced Marmalade developers
* Social media and other online services – This chapter covers logging in and out of Facebook as well as posting information to the users wall using the Facebook Graph API. It briefly explains other services that are available but doesn’t venture into any of them with much depth. Hopefully a 2nd edition will delve deeper into these services.
* Extensions Development Kit – If you are coming to Marmalade from iOS or Android and have libraries of code that you would like to use in your Marmalade project, or maybe you want to simply integrate a 3rd party iOS or Android specific API into your app then the EDK is essential for you. The EDK enables you to call those libraries from Marmalade without too much hassle. The Marmalade EDK is impressive and this section is definitely worth absorbing. The author covers the creation, building and usage of an EDK extension for Windows, iOS and Android, providing an excellent step by step introduction to the EDK.
* The skiing app – I must say that I am impressed with Seans example skiing game, he not only provides a 2D version, but also a full 3D version. The code contained in these apps is invaluable for beginners.

In summary, I think that Sean Scaplehorn has done a great job and I would recommend this book to any would-be Marmalade developer, even seasoned Marmalade developers may have a few things to learn from it. I thought I knew just about everything about the Marmalade SDK, but this book proved that there are still a few corners that I need to investigate. I can say that I wish that this book was available when I first started my Marmalade journey. Marmalade is not the easiest of SDK’s to learn to use, but it is the best in my opinion, so its worth the time and effort to learn it properly and go on to create wonderful things. This book will help you along this journey much quicker than stumbling around in the dark the way I did when I first started using Marmalade. The accompanying sample code is also well written and well commented providing a good starting point for your own projects.

Overall I give the book a 9 out of 10. I would liked to have seen more coverage of the likes of True Type Fonts, In-app Purchasing, IwHttp and IwNUI. If a 2nd edition is forthcoming and these sections are covered then I could quite easily give an extra point.

New Marmalade SDK Developer Book

Packt Publishing have brought out a new book that mabny of you should know about called Marmalade SDK Mobile Game Development Essentials. I’m hoping to get a review of the book up over the weekend.