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">
	<Fixtures>
		<Fixture Shape="LandScapeBase" Box2dMaterial="FixedHeavy" CollisionFlags="1,1,1" COM="0,0"/>
		<Fixture Shape="LandScapePeak" Box2dMaterial="FixedHeavy" CollisionFlags="1,1,1" COM="0,0"/>
	</Fixtures>
</Icon>

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", {
	Name="Label1",
	Font="serif",
	Position="0, -100",
	Text="Hello World",
	BackgroundColour="80, 80, 80, 255",
	Background="Button1Brush",
	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)

Timers

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
  • actions.call() 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.

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 http://www.appeasymobile.com 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 market.name() 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
* variable.save() 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.

Changes are Coming Soon

Very soon IwGame will be transformed into a new form known as the AppEasy Core SDK. AppEasy Core SDK is the new version of the IwGame Engine that has been tidied up and made portable, making it easily portable to other platforms. Initially AppEasy Core will support the Marmalade SDK as a target platform with support for the following platforms being added over the coming months:

  • Cocos2d-x
  • iOS native
  • Android native
  • Windows XP/7/8 native
  • Windows Phone 8 native
  • BlackBerry OS 10 native
  • HTML 5

Our aim is to bring XOML to as many platforms as possible, making mobile app and game development as easy as possible for everyone.

We will also be creating AppEasy players for all of the supported platforms to enable C++ free development for everyone.

To keep tabs on the progress of our project take a look over at http://www.appeasymobile.com

AppEasy 1.4.5 now available – In-app Purchasing

AppEasy Version 1.4.5 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.5 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 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.

Changes include:

Core Engine

  • If child actor layer not set then it will be assigned its parents layer
  • Added new Market XOML tag. This provides access to the Market which can be used to define products that can be purchased via in-app purchasing (Android, iOS, Windows (simulated on Windows))
  • Added new system array index (10) – This represents the ID of the last purchase attempt using Market
  • Added new action called Purchase which allows you to purchase an item defined in the market
  • BUG FIX: SetKeyFocus not working when supplying actor for P1
  • BUG FIX: DebugText action output nothing when no parameter 2 specified
  • BUG FIX: Camera permission added to AndroidManifest

Market

The new Market enables in-app purchasing for iOS and Android devices as well as simulated in-app purchasing under Windows simulation. The market and its products are declared in XOML. ere is an example:

<Market Name="Market1" .............. >
    <Product Name="Coins1" Id="1" iOSId="com.pocketeers.coins1" AndroidId="coins1" Consumable="true" Price="0.99" />
    <Product Name="Coins2" Id="2" iOSId="com.pocketeers.coins2" AndroidId="coins2" Consumable="true" Price="1.99"/>
    <Product Name="Coins3" Id="3" iOSId="com.pocketeers.coins3" AndroidId="coins3" Consumable="true" Price="2.99"/>
    <Product Name="Coins4" Id="4" iOSId="com.pocketeers.coins4" AndroidId="coins4" Consumable="true" Price="3.99"/>
    <Product Name="Levels1to10" Id="5" iOSId="com.pocketeers.levels1to10" AndroidId="levels1to10" Consumable="false" Price="0.99" />
    <Product Name="Levels11to20" Id="6" iOSId="com.pocketeers.levels11to20" AndroidId="levels11to20" Consumable="false" Price="0.99" />
</Market>

Purchasing can be done via actions or script, e.g.:

<Actions Name="MakePurchase">
    <Action Method="Purchase" P1="Coins1" />
</Actions>

function PurchaseCallback(status, product_id)
    print("Purchased - " .. product_id .. " - " .. status);
end
function MakePurchase(_scene)
    local product = market.find("Levels1to10");
    market.purchase(product, PurchaseCallback);
end

Note that the Market is currently an alpha component and is still undergoing testing. If you try it out then please let us know if you have any problems.

IwGame Engine 0.4 has Landed – Massive Update, Lua, Camera and more


New here? What’s IwGame? IwGame is an open source free to use cross platform game and app engine for iPhone, iPad, Android, Bada, Playbook, Symbian, Windows Mobile, LG-TV, Windows and Mac, built on top of the Marmalade SDK. You can find out more and download the SDK from our IwGame Engine page.

Its been a long while since we did a major update of the IwGame Engine, but we have one heck of an update for you today. We have a huge number of new features, changes and bug fixes for you.

We’ve also got a slight license update. Basically the new license says that if you use IwGame then you MUST credit the IwGame either in the app / game or on the apps support web site. A VERY small price to pay for such a huge and useful engine that has taken many man months to create, test and maintain. If you cannot live with the license terms then we are willing to forego the terms for a small fee or hire one of our teams to create your project (get in touch to discuss)

Lets take a look at the complete change log:

IwGame 0.4 Changes:

  • AppEasy for Marmalade Project Manager and Apple Wizard tool added, easy wizard to help guide developers through the Apple iOS sign-up, certificate generation, provisioning etc..
  • Over 60 XOML / Lua examples added showing how to use the many parts of the IwGame engine core
  • New XOML documentation added, outlining the complete XOML and Lua API’s in depth
  • Lua API added which enables apps to be developed without C++ or a combination
  • New Script resource type added which enables scripts to be included via XOML. Globally declared scripts will exist in the global script space, whilst scene local scripts will be local to the scene
  • Support for Video Camera streaming added (IWGameCam)
  • New XOML resource type added that enables declaration of Video cam in XOML and streaming to a image (CIwGameVideoCam)
  • Sound effects have been moved into the XOML system. You can now define and play back music and sound effects from XOML
  • New RemoteReq XOML type added that enables you to make POST and GET requests declaratively
  • New XOML actions added / old ones removed
  • FromTemplate – Instantiate a XOML template from an action
  • PauseTimeline – Pauses a a timeline
  • CallGlobalScript – Calls a script in the global script space
  • ChangevideoCam – Modifies a VideoCam instance (start / stop)
  • Activate / Deactive scene removed
  • CallScript – Calls a script
  • Inline – Executes script inline
  • RemoteReq – Executes a remote request
  • Action / command parameters now support 5 parameters instead of 4
  • CIwGameActionsManager now supports removal of actions with removeActions
  • Actors / Sprites now support Orphan feature which enables them to be displayed outside their normal parent-chld hierarchy. This enables them to be layer sorted with other actors
  • Actors now support percentage positioning using the new PercPos actor property. When PercPos is set to true the actors Position property is classed as a percentage of the devices screen size
  • Actors / Sprites now have a new property called IgnoreCamera. Actors with this property set to true will ignore the scenes camera transform
  • Actors now have getProperty() method that can be used to retrieve actor properties
  • Actors now have an OnTick event that can call an actions list each time the actor is updated (each frame)
  • Actors have other new methods including CheckCollisionRect(), getDistanceBetween() and getAngleBetween()
  • Actors have many more properties that can now be set from XOML
  • Actors can now handle up to 5 simultaneous Begin / End touch and Tapped events in XONL
  • IwGameAds now sends correct user-agent for iOS and Android
  • CIwGameAnimTimelinesManager now allows removal of timelines
  • Image Brushes now support setting of UV coordinates directly using new UV property
  • XML parser pooling system changed from global to per XML parser instance, pools are auto calculated. This eliminates the need to set up XML pools.
  • Files can now transfer their data into a script when loaded
  • CIwGameImage has been extended to support CIwTexture instead of CIw2DImage, also now supports dynamic images that can be modified
  • CIwGameImage now has SaveBmp(), SaveTga(), SavePng() and SaveJpg() methods
  • New CIwGameModScript modifier added to enable actors / scenes to call scripts
  • Commands can now be conditionally executed using conditions
  • New Commands added to program system – add_var, get_var, if_var, call_script, call_global_script, inline, from_template, music, sound, wait, debug_text, remote_req
  • ChangeProgram action now supports restart command
  • Scenes now support new ScriptEngine tag which defines which script engine the scene should use
  • Scenes now support setProperty() and getProperty()
  • Scenes now have an OnTick event that can call an actions list each time the scene is updated (each frame)
  • Scene allos setting of physics time step with new PhysicsTimestep property
  • Most sprite, actor and scene parameters that were fixed point based and now floating point based
  • CIwGameSprite now has new methods SimpleTestOverlap() and TestOverlap()
  • CIwGameBitmapSprite now supports direct setting of its Uv coordinates
  • WebView (CIwGameUIWebView) completely reworked. Now uses device coordinates and can now show dynamic html / javascript
  • XOML variables can now be made persistent so that their values are saved and restored between sessions
  • XOML array variables can now be populated from comma delimited data, elements will be split at commas
  • Variables can now be removed from CIwGameXomlVariableManager
  • New CIwGameSettings class added that is used to save and restore engine settings. Currently controls debug trace output level and enable / disable device power saving
  • Many new error checks and error / warning messages added throughout
  • Slider, Imageview and TextView now support binding to integer variables
  • Labels and TextViews now have a new property TextUseParentOpacity. When set to true the labels text will scale its opacity by the label images opacity, default is not to scale
  • ActivateScene and DeactivateScene actions removed, activation / deactivation rolled into resume / suspend
  • Actors with no size or SrcRect defined will default to 100% proportional sizing
  • SetVar action now supports the generation of a random number in the same way that set_var command does
  • SetVar action and set_var command when called on an array will now fill the whole array, including the random version
  • SetVar action and set_var command now support generation of random characers with randchar
  • P1, P2, P3, P4, P5 can now be used instead of Param1, Param2, Param3, Param4, Param5 for command and actions parameters
  • All commands can now accept variable substitutions for parameters
  • Conditions can now be used on arrays for string searches, number comparisons etc..
  • Added new system variable array called touches. This array of integers represents the x, y, touched status of 5 simultaneous touches
  • Variables passed as action and command parameters now cached to speed up access
  • Raw script can now be executed inline using the new “Inline” action and “inline” command. P2 specifies scene in which to run the script (omit to run in global script space)
  • Actors that have Draggable set to true will also set Hittest to true unless you override it
  • All files are now Preload and Blocking by default
  • If you now try to add a resource that already exists in the scope it is loaded then a warning will be displayed and the resource will be overwritten
  • WebView now supports new Html attribute which can be used to pass html to the web view to be displayed
  • WebView now works in screen coordinates and not virtual canvas coordinates
  • Actors now have new UserData property that can be use to store a single integer, can be used to store index into script table / array for additional data
  • Html Ads are now integrated via the web view (see section 20 of XOML User Guide)
  • WebView now has OnError event handler which is called if the web view is not available
  • VideoCam now has OnError event handler which is called if camera fails to start
  • TTF local font loading reworked to use memory buffers
  • String class optimised to minimise memory allocations and data copying
  • String class now supports Occurrences() and Split() methods
  • Internal slot array optimised to reduce memory allocations
  • TTF local font loading reworked to use memory buffers
  • Particles defined within a Particle Actor have a new property called Attached. When set to true the particles will follow the emitter, if false then they do not.
  • Image brushes now have a new Tiled property that allows you to enable / disable tiling of the brush
  • BUG FIX: Sprites no longer appear at origin on first frame
  • BUG FIX: Fixed problems with CIwGameAnimInstance
  • BUG FIX: Scene layering fixed and optimised
  • BUG FIX: Crash when deleting or adding scenes at the same time as removing them
  • BUG FIX: Scene layers now taken into account when processing touches
  • BUG FIX: Patch9 based actor clipping bug fixed
  • BUG FIX: Text margin for labels now fixed
  • BUG FIX: Crash when assigning invalid timeline to scene
  • BUG FIX: Template parameter case issue fixed
  • BUG FIX: Nop command now returns immediately
  • BUG FIX: Crash when not assigning brush a type. Defaults to Image with a warning
  • BUG FIX: WebView was not positioned correctly when scene origin was set to something other than centre
  • BUG FIX: Web view now works on iOS and Android (does not work on Windows)
  • BUG FIX: AspectLock fixed
  • BUG FIX: None batched sprites now render correctly at edges
  • BUG FIX: Deleting particle actor that was child of another actor crashed when removing particle actor
  • BUG FIX: Particle actor placed inside parent actor didn’t scale by parents opacity when UseParentOpacity set
  • BUG FIX: Particle angvelmode, scalevelmode, depthvelmode names corrected
  • BUG FIX: Empty Param2 in FromTenplate action / commands crash
  • BUG FIX: Fixed changing orientation resizing
  • BUG FIX: Touch panning glitch fixed
  • BUG FIX: Crash fixes in CIwGameDataFile
  • BUG FIX: Compass fix
  • BUG FIX: Actors OnCreate event was not working
  • BUG FIX: Deleting scene crash
  • BUG FIX: Crash when invalid animations added to a timeline
  • Many other small additions and bug fixes that we forgot to note :)

I did say there were a lot of changes :)

Lets separate some of the changes and take a look at what they mean to IwGame Engine users:

Moving Towards a Portable Engine

We have decided to make IwGame portable as we no longer see the iwGame engine as a Marmalade learning tool. With this in mind we have started abstracting Marmalade specific code out of the main code and into its own platform section (see Marm sub folders). Over time all Marmalade types, classes, functions and constants will be moved out and replaced with a universal system that can be easily ported. We will then be porting IwGame to each individual native platform, These platforms include:

* Windows XP/Vista/7/8
* Mac OS
* Android
* Apple iOS
* Windows Phone 8
* BlackBerry OS 10
* PlayStation Vita
* Marmalade SDK

With this in mind you will have a couple of changes to make to get your existnig projects to work with IwGame. Here are the changes you will need to make:

1) Add #include “Marm\IwGamePlatformMarm.h” to your main.cpp file
2) Call IwGamePlatformMarm_Create(); at the start of main() before you do anything related to dynamic memory allocation or IwGame / Marmalade
3) Call IwGamePlatformMarm_Destroy();; right before you exit main() after you have done freeing memory and shutting down IwGame / Marmalade

Lua API

By far the most interesting addition to IwGame is the Lua API. The IwGame Lua API enables you to develop games and apps without any need to fall back to C++. Just about anything you can do in C++ you can do in Lua + XOML. We want to move IwGame towards a none compiler based system where you can create great games and apps without the need for professional level knowledge of C++ or compilers or IDE’s. In fact, we have a new service for Marmalade and none Marmalade developers called AppEasy that is built upon the IwGame core that does just that and is available at http://www.appeasymobile.com

Actors can call scripts and scripts can create and modify actors, scenes and all sorts of other stuff. You can even execute inline script in XOML!

AppEasy for Marmalade

AppEasy for Marmalade has been included in this distribution of the IwGame engine. AppEasy for Marmalade is a cool little project manager that lets you organise assets, scripts, icons, splash screens, set app info and generate a fully working MKB project for you that you can build and deploy. We have provided this awesome tool to enable you to easily check out all of the new examples, as well as give you a taste of C++ free development.

Over 60 Examples

IwGame 0.4 comes with nearly 70 examples that show off the various parts of the SDK. Here’s a complete list of examples:

Accelerometer – Shows how to use the accelerometer
• ActorChildren – Shows how actor hierarchies work
• ActorCollisionFlags – Shows how to use collision flags to mask collisions between actors
• ActorConnector – Shows how to use the connector actor to visually connect actors
• ActorDocking – Shows how actors can be docked to arrange them effectively on different sized screens
• ActorLayers – Shows how actors can be layered to add depth sorting
• ActorModifier – Shows how to use actor modifiers to add additional functionality to actors
• ActorParticles – An example that shows how to use the particles system. This example builds up to 1000 animating particles at different depths over a short period of time.
• ActorPhysics – Shows how to apply physics to actors
• AdvancedCollision – Shows how to query and interact with an actors list of start / end collision contacts
• BasicActions – Shows how to use basic actions to play and pause an animation
• BasicAnimation – Shows how to create basic animation and attach it to an actor
• BasicDataBindings – Shows how to basic data bindings. This example binds properties of an actor to different variables
• BitmapAnimation – Shows how to create a bitmap animation from a sprite atlas and attach it to an actor
• ComplexProgram – Shows how to create a slightly complex program using commands that are executed in sequence or in parallel
• ConditionalActions – Shows how to execute actions based on certain conditions being met
• ConditionalImages – Shows how to load different image sets based on conditions such as the screen size
• DataGrid – Shows how to create a grid user interface component and bind XML data to it
• Demos/Happy Birthday – Shows image loading and basic animation
• Demos/SpaceGame – Shows a basic demo of an object flying through space that can shoot bullets. Lua is used to provide the game logic
• DynamicWebView – This example shows how to write html directly to a web view using actions creating dynamic web content. It also shows how to use actions to navigate web pages / sites.
• Files – Shows how to load files and bind the loaded data to a label
• Games/GameOf10 – A game written completely in XOML, including logic
• Games/HangMan – A hang man game written in XOML and Lua
• Games/RockPaperScissors – A rock paper scissors written completely in XOML
• HelloWorld – Basic hello world XOML example
• Joints – Demo that shows how to use a variety of different Box2D joints to connect actors together
• Music – Shows how to play and stop music using actions
• OverlapTest – A simple example that shows how to use script to test for overlapping actors
• PersistentVariables – An example that shows how variables can be made persistent across different app sessions
• ProgramLoops – Shows how to create and use loops in programs
• RemoveResources – Shows how to remove resources from the global resource manager
• SceneAnimation – Shows how to animate a scene
• SceneAugmentation – Shows how to add functionality to a scene after it has already been declared
• SceneClipping – Shows how to change the clipping extents of a scene
• SceneEvents – Shows how to use and handle scene events
• SceneExtents – Shows how to change a scenes extents
• SceneLayers – Shows how to layer scenes
• ScenePanning – Shows how to use touch camere panning within a scene
• ScenePhysics – Shows how to set up basic physics in a scene
• SceneSwitch – Shows how to load and switch between different scenes
• SimpleCollision – Shows how to use collision modifiers to add collision detection to actors
• SimpleProgram – Shows how to create a simple XOML program
• SimpleScript – Shows how to add a simple script
• SoundEffects – Shows how to play sound effects
• Styles – Shows how to use styles to style a group of actors
• Templates – Shows how to use templates to create multiple actors at the same time
• Templates2 – Shows how to create actors from templates from actions
• TiledBrushes – Demo that shows how to use tiled brushes to create effects
• UI_Canvas – Shows how to use the Canvas UI container control
• UI_Complex – A more complex UI example that shows a large complex virtual user interface
• UI_Grid – Shows how to use the Grid UI container control to host pre-set UI elements
• UI_Grid2 – Shows how to create a UI Grid component automatically from data
• UI_ImageView – Shows how to create an ImageView container UI control. The ImageView container supports pinch zoom / pan
• UI_Listbox – Shows how to use the Listbox container UI control to host preset UI
• UI_Listbox2 – Shows how to use the Listbox container UI control to host dynamic UI
• UI_Slider – Shows how to use the slider UI component
• UI_StackPanel – Shows how to use the StackPanel UI container control
• UI_TabBar – Shows how to use the TabBar UI container control to host different views of information
• UI_Textbox – Shows how to use the Textbox UI component to allow the user to enter information
• UI_TextView – Shows how to use a Textview UI control
• UI_WebView – Shows how to use a web view UI control to show web content
• UI_WrapPanel – Shows how to use the WrapPanel container UI component
• Variables – Shows how to use XOML variables
• Video – Shows how to display video
• VideoCam – Shows how to stream the video cam to an image and then map that image to actors
• XMLVariables – Shows how to use XML variables in XOML to pull specific information from XML files

New XOML / Lua API Documentation

The XOML and Lua API have been fully documented in an over 200 page manual that accompanies the SDK. The latest version of this manual is also available at AppEasy XOML User / Programming Guide PDF. The C++ documentation has not yet been updated with all of the latest changes so will not be available for some time.

Apple iOS Wizard

You will find that a new tool has been added to the IwGame Engine called the Apple Wizard. This handy little tool is ideal for beginners or event veterans who sometimes forget the long winded and overly complex procedures involved in generating signing certificates requests, creating developer / distribution certificates, provisioning devices, creating App ID’s etc.. Well this little tool will walk you through the whole process so it can be done in minutes.

Support for Video Camera Streaming

You can now declare a new VideoCam tag in XOML which enables you to stream the users front / rear camera to an image then display that image as an actor. Check out the VideoCam example for a cool demo.

Audio Integration

We’ve moved sound effects into the XOML system properly so you can now include compressed wav files into your apps without the need to put them through the Marmalade resource manager. You can even host them on a web server and download them as and when required, just like any other resource.

Remote Requests

We’ve made it possible to construct POST and GET requests in XOML and send and receive responses from XOML / Lua. This is a very interesting new feature that enables communication with web based services declaratively.

Orphan Actors and Sprites

A number of users have made comment regarding not being able to depth sort child sprites, well we’ve found a workable solution for you that doesn’t break our API. You can now set actors as “Orphans” by adding Orphan=”true” to their declaration. An actor that is orphaned will be taken out of the normal sprite parent / child hierarchy allowing it to be depth sorted with parent regular actors

Percentage Based Positioning

It became apparent to us that as we had a percentage based sizing system in IwGame that we also needed a percentage based positioning system too, allowing truly device screen independent layouts. Actors can now be marked as percentage based by adding PercPos=”true”. When set, the actors position will be taken as a percentage instead of an absolute coordinate.

Multi-touch Actors

Actors can now handle up to 5 simultaneous Begin / End touch and Tapped events in XOML. This enables you to create some very interesting styles of app and game play as you can monitor and react to 5 touches at the same time.

Proper User-Agent

IwGameAds now gets a proper browser user-agent from the system for Android and iOS using the new UserAgent EDK extension. This should help increase ad fill rates substantially.

XML Pools have Gone, Woopeee!

I was never keen on the global XML pool system so we destroyed it, well not completely, we wanted to keep XML memory pooling but make it an automated process. The XML parser will now pre-scan an XML file and calculate how many tags / attributes are present then allocate just the right amount of pool memory.

Cool Brushes

Image brushes can now use clamping or tiling. Also, you can now set the UV’s of an image brush directly using the new UV attribute which accepts 8 numbers (topleft-uv, topright-uv, bottomright-uv, bottomleft-uv)

Web View Reworked

The Web View control has been reworked and can now display dynamic html content that can be set via XOML, Lua and C++.

Actions and Command

Actions and commands now accept XOML variables as parameters. Many new actions and commands have also been added, expanding the functionality of XOML substantially.

XOML Variables

XOML variables have had many changes including:
* Variables can now be made persistent so theri values are saved and restored between game sessions
* XOML array variables can now be populated from comma delimited data, elements will be split at commas
* Conditions can now be used on arrays for string searches, number comparisons etc..
* Added new system variable array called touches. This array of integers represents the x, y, touched status of 5 simultaneous touches

As you can see there’s been a huge number of changes, good luck with the update and happy coding.

Oh, please direct all XOML / Lua questions to our AppEasy forum at http://www.appeasymobile.com/forum

AppEasy Open Beta!

AppEasy the cross platform mobile game and app development system for iPhone, iPad, Android, Windows and the Marmalade SDK is now open beta!

We are happy to announce that AppEasy is now in open beta, so anyone can noe join and use AppEasy for free.

We’ve been in closed beta for over 2 months now and we feel its time to move to open beta to increase the size of the user base. Whilst some of the closed beta developers have provided some great feedback (many thanks for that), many have not. We will remain in open beta for the next 6-12 months (maybe less). During that time the licensing system will be added and the top 100 beta developers will receive a one year free indie license. This license will be upgraded to pro for the top 4 beta developers.

NOTE: When the licensing system is added the free version of AppEasy will display ads in any new apps that you create.

You can find out more about AppEasy and sign up for a free account now at http://www.appeasymobile.com/

AppEasy for Marmalade Now Available

AppEasy for the Marmalade SDK Has Arrived

We have made a special version of AppEasy that allows Marmalade SDK developers to develop AppEasy mobile games and apps using a combination of AppEasy and the Marmalade SDK.

What is AppEasy for Marmalade?

AppEasy for Marmalade is a software development tool and set of libraries that are designed to bring cross platform native mobile game and application development to people from all walks of life. Our goal is to enable anyone (regardless of expertise) to develop their own apps using AppEasy and the Marmalade SDK for fun or for sale on a variety of app stores, including the Apple App Store, Google Play, Amazon Market and beyond.

How do we plan to accomplish this? AppEasy uses an easy to learn mark-up language similar to HTML but designed specifically for producing game and application content. For example, it is possible to create game characters complete with physics
and collision in only a few lines of mark-up. Its also equally possible to create complex user interface controls that are bound to remote data. We also cater for the more experienced developer that would like more control over their app. Our rich mark-up language (XOML) has support for a wide range of tasks including working with variables, events, actions, commands, programs, calling Lua scripts and much more.

IwGame Engine Libraries and headers are also provided that enable Marmalade developers to access the power of AppEasy from C/C++.

AppEasy is compatible with all Marmalade compatible platforms. AppEasy Project Manager is currently compatible with Windows XP / Vista and Windows 7

Who is it for?

AppEasy for Marmalade is designed to enable anyone that has basic knowledge of Microsoft Visual Studio to develop and deploy their own games and apps onto mobile phones and onto mobile app stores.

How Much Does It Cost?

At the moment AppEasy for Marmalade is currently free to use for all Marmalade SDK developers.

Where Can I Get It?

You can download the latest build of AppEasy for Marmalade from http://www.drmop.com/AppEasyMarmalade.zip. This beta release is locked to the root of the C drive so ensure that you unzip the file to C: or AppEasy may NOT work.

Where can I get Support?

Our web site provides lots of information to help get you started. AppEasy is also fully documented (see the docs folder in the AppEasy installation) as well as over 60 examples located in the examples folder. We also provide a support forum for all AppEasy users at http://www.appeasymobile.com/forum