New here? What’s IwGame? IwGame is an open source free to use cross platform game 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 tough week, my Apple Mac blew a gasket and refused to boot. Didn’t know this until I had spent 4 hours trying to make the Mac boot from Snow Leopard, but you cannot boot a Mac Mini from any version of the OS other than the original version that came with the Mac! Arrrgggghhhhh, insanity! In the end I turned my office and house upside down to find the original Mac disk.
Finally got cOnnecticOns cleaned up and submitted to the app stores. I also added 10 more levels and a game editor that allows players to create up to 20 of their own levels on-device and play them. I plan to allow sharing of these custom levels in a future version. We also added Facebook posting to IwGame and therefore has now been added to cOnnecticOns. You can find our more info about the game at http://appliter.com/apps/connecticons/connecticons.aspx
Ok, onto the update. IwGame v0.31 is kind of a special release because it contains the FULL source and assets of the game that you will see on Android Market and very soon Blackberry App World, Apple iTunes and SamsungApps for Bada.
Here’s the full list of changes for 0.31:
IwGame 0.31 Changes:
cOnnecticOns full commercial game with source and assets provided as an example of engine usage
CIwGameFacebook added – Currently provides login and wall posting access
New AddVariable action added which allows you to add a positive or negative value to a XOML variable with limits
New EnterValue action added that brings up the devices keyboard allowing the user to enter a value into a XOML variable
New UpdateText action added will update a text actor with the value of a variable
New Exit action added that allows the user to exit the game
3rd paramater added to XOML actions
DoSleep added to CIwGameBox2dWorld to enable / disable object sleeping, also added to scene XOM
IIwGameXomlResource now has an actual type, allowing type checking for exact object types
OnKeyBack and OnKeyMenu events added to scene and XOML. These fire when back and menu keys are pressed
BUG FIX: CIwGameSprite position and origin now 32 bit vectors, which helps prevent positions overflowing
BUG FIX: When a scene is destroyed and it has touch focus it was causing a crash
BUG FIX: If a scene becomes inactive or invisible it now loses touch focus
BUG FIX: Velocity / angular velocity now applied when actors have no physics attached
BUG FIX: JPEG image data is now correctly converted from BGR to RGB
BUG FIX: CIwGameString, find index now properly reset
As well as the release of the full source for cOnnecticOns, we also snook a few extra col bits and bobs in there.
New CIwGameFacebook Class
The main purpose of this class is to allow the user to log into facebook and interact with it. Right know, only logging in and wall posting functionality is provided using the following method:
message – Message to display to the users wall visitors
link_uri – URL that the user will visit when clicking on the wall post link
image_uri – URL of an image that you would like to be displayed along with the post
name – The title of the post
description – Description of the post (displayed in weaker font beneath title)
A Facebook wall post will look something like this:
New XOML Actions
It is now possible to add a value onto an existing XOML variable using the new AddVariable action. You can also update a text actor with the value of a variable in XOML. Here’s an example showing how the editor in cOnnecticOns uses both actions together to create an up / down UI element that the player can use to change the number of cOnnecticOns available in the level:
The mark-up marked in red show the new AddVar and UpdateText XOML actions.
Basically when the user taps the DownButton actor the OnTapped event fires which calls the DownBeginTouch actions list. This actions list contains two actions:
AddVar – This adds -1 onto the EditorConnecticons variable and limits it to 0, so it does not go below 0.
UpdateText – The next action copies the value of the EditorConnecticons variable into the ConnectButton text actor, which updates the number of connecticons on screen.
Support for Android Back and Menu Buttons in XOML
It is now possible to attach actions in XOML to the menu and back button events in a scene by handling the OnKeyBack and OnKeyMenu events. Note that only the current scene will handle button events.
Text Input via XOML
Using the new EnterValue XOML tag you can bring up the device keyboard and allow the user to input some text into a XOML variable.
As previously mentioned the full source to cOnnecticOns has been provided to enable developers to see a real working commercial game utilising IwGame. The first thing you will notice when looking at the code base is just how little code is actually there. This is because much of the mundane functionality such as creating layouts, handling events, creating animations, scenes etc.. are all handled by XOML. Please note that the supplied XOML is not optimised in way shape or form, in fact I have done many things long hand so as not to make the scripts convoluted and difficult to understand. When creating your own XOML you should probably focus more on re-use with templates, styles and global actions / animations etc..
Here is a brief overview of the provided XOML scripts:
Actors – This file contains physics materials, shapes and game object templates
Common – Contains common styles, animations and actions that are used across many scenes
ConfirmDialog – This is the dialog box scene for the rest scores action, it is displayed to the user when they attempt to reset their records
EditLevelSelect – Level selection screen that allows the user to select a custom level to edit
Editor – The level editor scenes
GameComplete – Shown to the player when they complete all zones and all rounds
Help – The basic help dialog that is accessible from the main menu
HUD – The in-game HUD that displays the scores and game buttons
Intro – The IwGame intro that is displayed at game boot
LevelCleared – The end of level score dialog that is displayed when the user completed or fails a round
LevelSelect – Level selection screen that allows the user to select a level to play
LevelSelect2 – Level selection screen that allows the user to play a custom level to play
Menu – The main front-end menu scenes
PauseMenu – The in-game pause men scene
ZoneLocked – Dialog scene that is displayed when the player finishes round 10 but has not unlocked all levels in the zone
ZoneSelect – Zone selection scene
Scenes 1 to 30 – Game level scenes
Scenes 101-120 – Custom blank level scenes
Note that some files contain more than one scene. For example, each game level file contains the pause menu, the main game level scene as well as the in-game HUD. The pause menu and HUD exist as separate XOML files so they can be re-used across all levels.
The code base contains implementations of the following custom scenes:
GameScene – A game level scene, contains game logic
LevelSelectScene – Custom scene for level select that handles updating of the scores in the level screen
ZoneSelectScene – Custom scene for zone select that handles updating of the lock / unlocked status of each zone
The following custom actors are also used:
ConnectActor – An actor that connect two bugs together with minimal logic
CounterActor – This is the main bug actor (originally called counters), handles all bug logic / collision etc
FloaterActor – Handles floating / fading text
GravityPlacerActor – Special actor that can be modified to change gravity within the editor
InertActor – Basically an actor that doesn’t much other than display itself
PlacerActor – A basic placeable object, used to position actors in the editor
SelectorActor – A basic selector actor used by the editor object selection screen to select which object to place
The rest of the code is pretty bog standard stuff. Game is the implementation of CIwGame and contains initialisation and shut down. Probably the most interesting part is where the custom XOML classes and events are added using the following code:
// Add custom classes to XOML system
// Add custom game actions to XOML system
for (int t = 0; t < CIwGameXomlAction_Global::Action_Max; t++)
These custom actions and events allow us to tie our game logic much closer to our XOML code.
Well that’s it for this update. We were aiming to get conditional XOML actions in for 0.31, but unfortunately it didn’t make it, but should do for 0.32.