Our latest iwGame Engine game cOnnecticOns is now available on BlackBerry App World for BlackBerry PlayBook gamers atย http://appworld.blackberry.com/webstore/content/95862/
cOnnecticOns for iOS now FREE!
Hey everyone, we decided to make cOnnecticOns FREE for a few days to increase its visibility and hence visibility of the IwGame Engine. If you haven’t already downloaded it then please take a look atย http://itunes.apple.com/us/app/connecticons/id505645452?mt=8
Please consider leaving us a nice review, it only takes 2 mins!
cOnnecticOns Now Available for iPhone, iPad and iPod Touch
Great news. cOnnecticOns is now available on the Apple iTunes app store. Woohoo, passed fist time!
It’s available for almost a kings ransom ($0.99 in earth money). For those of you that are as bad off as me, here are a few promot codes so you can grab a FREE copy:
3KYAR49RTMMM
LLHREAPKT6W3
FKA3R6L6PJPF
J6AN4AWK3T9F
ETTWL46PYE4W
Please consider leaving a nice review. It’s always nice to see a good review ๐
IwGame Engine v0.31 Released – Facebook and Full cOnnecticOns Source Available
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:
bool PostWall(const char* message, const char* link_uri, const char* image_uri, const char* name, const char* description);
- 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:
<!-- Create change connecticons buttons --> <InertActor Name="ConnectButton2" Position="0, -200" Size="81, 84" SrcRect="555, 482, 81, 84" Image="sprites1"> <ActorText Name="ConnectButton" Depth="0" Font="trebuchet_12" Rect="-100, -50, 200, 100" Colour="0, 0, 0, 255" Text="2" /> <InertActor Name="DownButton" Position="-60, 0" Angle="-90" Size="48, 51" SrcRect="868, 299, 48, 51" Image="sprites1" Depth="0" OnBeginTouch="DownBeginTouch" OnEndTouch="DownEndTouch" OnTapped="DownTapped"> <Actions Name="DownBeginTouch"> <Action Method="SetTimeline" Param1="buttonin4_anim" /> <Action Method="PlaySound" Param1="ui_tap" /> </Actions> <Actions Name="DownEndTouch"> <Action Method="SetTimeline" Param1="buttonout4_anim" /> </Actions> <Actions Name="DownTapped"> <Action Method="AddVar" Param1="EditorConnecticons" Param2="-1" Param3="0" /> <Action Method="UpdateText" Param1="ConnectButton" Param2="EditorConnecticons" /> </Actions> </InertActor> <InertActor Name="UpButton" Position="60, 0" Angle="90" Size="48, 51" SrcRect="868, 299, 48, 51" Image="sprites1" Depth="0" OnBeginTouch="UpBeginTouch" OnEndTouch="UpEndTouch" OnTapped="UpTapped"> <Actions Name="UpBeginTouch"> <Action Method="SetTimeline" Param1="buttonin5_anim" /> <Action Method="PlaySound" Param1="ui_tap" /> </Actions> <Actions Name="UpEndTouch"> <Action Method="SetTimeline" Param1="buttonout5_anim" /> </Actions> <Actions Name="UpTapped"> <Action Method="AddVar" Param1="EditorConnecticons" Param2="1" Param3="10" /> <Action Method="UpdateText" Param1="ConnectButton" Param2="EditorConnecticons" /> </Actions> </InertActor> </InertActor>
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.
cOnnecticOns
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:
- EditScene – Level editor scene, contains level editor logic
- 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 IW_GAME_XOML->addClass(new InertActorCreator()); IW_GAME_XOML->addClass(new GameSceneCreator()); IW_GAME_XOML->addClass(new LevelSelectSceneCreator()); IW_GAME_XOML->addClass(new ZoneSelectSceneCreator()); IW_GAME_XOML->addClass(new CounterActorCreator()); IW_GAME_XOML->addClass(new PlacerActorCreator()); IW_GAME_XOML->addClass(new GravityPlacerActorCreator()); IW_GAME_XOML->addClass(new SelectorActorCreator()); IW_GAME_XOML->addClass(new EditSceneCreator()); // Add custom game actions to XOML system for (int t = 0; t < CIwGameXomlAction_Global::Action_Max; t++) IW_GAME_XOML->addAction(new GameXomlAction_Global((GameXomlAction_Global::ActionType)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.
cOnnecticOns is now available on the Android Market!
Hey everyone, some good news. We finally got the first version of the first IwGame Engine game ย cOnnecticOns up on the Android Market at https://market.android.com/details?id=com.pocketeers.connecticons. Playbook, Bada and iOS builds will be available within the next few weeks.
And the even better news is that we are on schedule for releasing the full source this weekend! We’ve had a bit of a delay because we decided to upgrade the game a bit. We added an extra zone with 10 additional levels, as well as a game editor to allow players to create and play up to 20 of their own levels. Oh, and players can also post their scores to Facebook using the new CIwGameFacebook class (coming in the next IwGame engine update 0.31 this weekend)

The next update of the game will feature sharing levels between users using a web service, for which we will release the full source code, including the server side scripts.
The update after that will feature in-app purchase content using new classes that e are developing for the IwGame engine.
If you download the game then please consider leaving a nice review
IwGame Engine v0.3 Released – The 36 hour game
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.
Well, Dan said a few weeks ago that “itโs only until you eat your own dog food that you know you have to improve the taste of it”. I thought about this and decided that we really needed to create a game using the engine to show its various features in action. So with this, I began work on a game (currently unnamed), but decided that the game would take a few weeks to finish off, so moved over to producing a completely new game from scratch but with a simpler design. The end result was a game that was created in less than 36 man hours, including art production, coding, design and scripts (I was aiming for 24 hours but I came across a a few nasty bugs that took a fair bit of time to fix). In addition,. I underestimated how difficult it would be to put levels together without an actual editor. I will very likely build an actual editor into the cOnnectiCons game itself to allow players to create their own levels. So the game ended up with 20 levels, with an additional 20+ levels coming later.
You can take a quick look at cOnnecticOns at http://www.youtube.com/watch?v=sVa8TWYQEsQ and here are a few screen shots of our 36 hour game cOnnecticOns:



We have already started submitting the game to app stores, so when we release the source “Don’t go getting any ideas lol”. The source will be provided as a learning exercise, and not for someone else to make a quick buck off.
Ok, now that’s out the way, lets take a brief look at the changed that have arrived in IwGame v0.3:
- Support added for particle based actors via CIwGameActorParticle and CIwGameActorParticles as well as XOML via ActorParticles and Particle tags. Particles can be defined individually or in batches using random parameters. Particles have position, linear velocity, angular velocity, scale velocity, colour velocity, depth velocity, velocity damping, lifespan and repeat
- Support for Marmalade fonts has been added via CIwGameFont wrapper and a new XOML Font tag
- All rendering now uses IwGx instead of Iw2D. This offers more control over rendering as well as makes the code more portable / versatile in the future
- All internal rendering upgraded to sub pixel coordinates offering MUCH smoother rendernig
- New 2D rendering class added CIwGameRender2d. This cklass allows batch rendering of primitives and rendering of text CIwGxFontPreparedData prepared text
- New very powerful template system added to XOML. The template system allows you to create a complex piece of XOML using paramaters that can be passed in when the template is instantiated. Templates can also be instantiated from code using CIwGameTemplate::Instantiate()
- CIwGame::addScene() can now auto bring a scene to the front of scene stack
- New global actions added to XOML – Launch, setBGColour, SetCurrentScene and BringtSceneToFront
- Actors and sprites now have a depth property allowing you to add 3D depth to them
- Actors and sprites now have an origin attribute
- Support added for sprites and actors for none uniform scaling
- Support added for linked actors. A linked actor will utilise the transform, colour and visibility of the actor it is linked to. In XOML, you can use the new LinkedTo tag to set linkage or the more natural and readable method of defining actors within actor tags. This system allows complex multi-patr actors to be created and animated
- Actors now support OnCreate and OnDestroy events in code and in XOML
- Scenes now support OnCreate, OnDestroy OnGainedFocus and OnLostFocus events in code and in XOML
- New text based actor and sprite types added CIwGameActorText and CIwGameTextSprite.
- Animation system now supports linear, quadratic, cubic and quartic on / out easing in code and in XOML. In addition value interpolation can be enabled / disabled
- Animations now support absolute and delta values
- Animation timelines now support OnStart, OnEnd and OnRepeat events in code and in XOML
- CIwGameAudio::PlayMusic now supports repetition with additional parameter in XOML
- New CIwGameSlotArray class added for efficient resizable arrays
- Actor Box2D collision system was broken and inefficient. The system has been completely reworked and now uses the new more efficient CIwGameSlotArray
- CIwGameBox2dBody now has new awake and active methods
- CIwGameCamera now supports velocity, damping and touch panning. Touch panning will pan the camera to follow the users finger
- More than one scene can now receive input events using the new AllowFocus functionality in code and in XOML
- New findClosestActor and findFurthestActor methods added to CIwGameScene
- CIwGameBitmapSprite now supports colour per vertex
- CIwGameSpriteManager supports enabling / disabling of batching and a new centre of projection property for depth used by depth sprites
- CIwGameInput reworked to better support multi-touch
- PlayTimeline, StopTimeline and SetTimeline now supports a second parameter which points to the scene or actor that the timeline change should be made to
- Actors can now be marked for hit testing in XOML
- Image files can now be loaded directly from XOML without the need for Marmalade resources files
- CIwGameScene and CIwGameActor based objects are now marked as destroyed when they are removed so they cannot be found in a scene or actor search
- CIwGameXmlNode now supports cloning
- Bug Fix: Actors now take into account their visibility when being hit tested
- Bug Fix: CIwGameActor::setCollidable no works
- Bug Fix: StartTimeline action now restarts a stopped timline properly
- Bug Fix: Clipping rect is now transform by the scenes transform (will not clip correctly against rotated scenes however)
- Bug Fix: XML parser fixes
- Bug Fix: CIwGame game scene switch scene bug fixes
- Bug Fix: CIwGameAds::ErrorFromResponse fix that were causing some valid ads to be in error
- Bug Fix: CIwGameAnim fixes
- Bug Fix: Polygon based Box2D bodies now fixed
- Bug Fix: Sprite rendering transform fixed
- Bug Fix: CIwGameBitmapSprite with no loaded image no longer crash
- Bug Fix: CiwGameString crashes fixed (were causing rare problems with XML system)
- Bug Fix: Fixed issue with CIwGameXmlAttribute::GetValueAsColour not checking for correct parameter count
- Bug Fix: On device scene shut down camera deletion fixed
Ok, that’s a shed load of changes, but I can assure you that they are all for the better. IwGame is now a professional grade and fairly stable engine that can be used to create games in as little as 36 hours!
Lets take a look at some of the new additions in more detail.
Templates
I want to start with my utmost favourite change to 0.3 which is templates. I am so in love with templates that I feel like I could almost marry one! They saved me so much time when developing cOnnecticOns. Templates allow you to create large sections of XOML as templates then instantiate those large
pieces of XOML somewhere else using custom parameters that you pass to the template when you instantiate it. Lets take a quick look at a super simple example:
<Template Name="ActorTemplate">
<InertActor Name="Explosion$name$" Image="$image" Position="$pos$" Scale="$scale$"ย Depth="$depth$" Layer="1" AngularVelocity="0" />
</Template>
Here we define a template called ActorTemplate that contains a basic InertActor definition. You may notice some strange markers in there surrounded by double dollars signs ($name$, $image$,$pos$, $scale$ and $depth$).
Now when we instantiate this template somewhere we would use:
<FromTemplate Template=”ActorTemplate” name=”actor1″ scale=”1.0″ pos=”300, 150″ depth=”1.0″ image=”sprites1″ />
The above XOML command will instantiate whatever is in the ActorTemplate template passing all of its parameters, replacing the double dollar definitions inside the template (Hmm, sounds very much like calling a function? Which I guess in some ways it is)
Templates can be as massive and as complicated as you like, allowing you to design and instantiate some very complex objects with very few lines of XOML.
Rendering Engine Upgrade
Up until version 0.29 of the IwGame Engine we used Marmalade’s Iw2D engine as the rendering core. As of v0.30 we have switched to Marmalade’s IwGx rendering system as it offers much more versatility as well as brings the engine into the realms of 3D rendering, which is where we will eventually be steering the engine.
To facilitate this change over and to keep the game engine code nice and readable, all rendering has been abstracted away into a nice simple class called CIwGameRender2d. CiwGameRender2d is and will in future be the centre point for all rendering that takes place within IwGame.
At the moment CiwGameRender2d offers:
- Batch and none batch sprite rendering of quad based polygons
- Rendering of prepared text from the Marmalade IwGxFont system
In the near future we will be adding support for various other types of primitives, 3d models and hopefully our own custom shaders etc..
Lastly, all rendering now uses sub-pixel accuracy which looks much much smoother.
Text and Fonts
IwGame now supports definition of Marmalade fonts and custom rendering of those fonts using a new text based sprite and actor. Text based sprites and actors are treat just like any other sprite or actor objects, so they can be spun, scaled, linked, colour changed etc.. Unlike generic actors text based actors can be instantiated without deriving your own class from CIwGameActorText
3D Sprites / Actors
Another one of my favourite additions to 0.3 is 3D sprites. All sprites and actors can now have a depth value (think iof this as a z value) that allows you to project sprites into 3D. ย This system is great for create parallaxing effects etc..
Oh and sprites / actors also get an adjustable origin and none uniform scaling
Linked Actors
Actors can be created within other actors to form a parent / child relationship. Inner actors will be linked back to their containing actor forcing them to be transformed by their parent actors. This system allows you to create a very powerful intuitive multi-part actor system complete with animations per actor part. Note that all positions, depths etc will be relative to the container actor, so for example, if the parent actor has a Depth value of 1.0f and the child actor has a Depth value of 1.0f then the child’s effective Depth will be 2.0f. Here’s an example showing parent / child actors:
<InertActor Name="Level1" Style="LevelButtonStyle" Position="0, 0" OnBeginTouch="BeginTouch11" OnTapped="StartLevel1">
<ActorText Name="Record1" Style="LevelButtonTextStyle" Colour="255, 80, 80, 255" Position="0, 0" Text="0" Depth="0" />
<ActorText Style="LevelButtonTextStyle" Position="0, 60" Text="Round 1" Depth="0" />
<InertActor Name="LevelComplete1" Size="74, 67" Image="sprites2" SrcRect="582, 423, 148,134" Position="60, -20" HitTest="false" Depth="0" Timeline="tick_scale_anim" />
</InertActor>
In the above XOML the parent actor level1 contains three children actors that will all follow theLevel1 actors visual transform.
Particle System Actors
This actor is special in that it is optimised for creating, displaying and updating a complete system of sprites (kind of like its own sprite manager). The advantage of this actor is that it does not have to deal with each particle as a separate actor object. The CIwGameActorParticles actor supports both manual and auto generation of particles. Auto generation can be controlled using a number of a control parameters.
Particles have a number of properties that can be adjusted:
- Visual
- Position
- Velocity
- Velocity Damping
- Gravity
- Scale
- Scale Velocity
- Scale Velocity Damping
- Angle
- Angle Velocity
- Angle Velocity Damping
- Colour
- Colour Velocity
- Colour Velocity Damping
- Depth
- Depth Velocity
- Depth Velocity Damping
- Active state
- Visible state
- Lifespan โ Duration of particle in seconds
- SpawnDelay โ The amount of time to wait before spawning for the first time
- Lives โ Number of times the particle will re-spawn (-1 for infinite)
The particle actor system allows auto generation of particles within certain limits as well as manual generation. Patricles can be defined and placed both in code and in XOML.
Animation Frame Easing
Animations now support in and out easing on a per frame basis using the โEaseโ attribute of the frame tag or in code. Valid values of easing include:
- linear โ No easing
- quadin / quadout โ Quardatic in / out easing
- cubicin / cubicout โ Cubic in / out easing
- quarticin / quarticout โ Quartic in / out easing
Time lines now in the Events System
Its now possible to attach actions to timeline events such as OnStatr, OnEnd and OnRepeat. So for example, each time an animation repeats you could play a sound effect or maybe when an animation finishes yu kill destroy the actor or start a particle system off going etc..
Animations now support delta / absolute coordinates
Every animation can now be specified as absolute or delta. An absolute animation will write its interpolated frame values directly into the target objects properties (such as position), whilst a delta animation will update the current target properties. So for example, a delta animation for position would adjust the position by dx, dy, where dx and dy is the current interpolated frame value.
Automatic Touch Panning for Cameras
Cameras now have X and Y axis touch panning. When a camera is touch pan enabled it will track the users finger drag on screen to determine a velocity to move the camera by. Touch panning can be enabled on the X an Y axis independently.
Other cool changes
Multi-focus scenes – More than one scene can now receive input events
Local images can now be loaded from XOML
There are many other changes but I don’t really have the time to go through them all. There’s also a mound of bug fixes that weer found during development of cOnnecticOns.
We will be releasing the full source to cOnnecticOns later this week along with an additional 10-20 levels.
Raspberry Pi – The $25 Computer
Want to begin raising awareness of a new computer that’s coming out very soon called the Raspberry Pi (http://www.raspberrypi.org/). It’s basically a $25 credit sized computer that plugs into a display / keyboard etc.. I like to call it mini-awesome!
The computer is reported to have better performance than the iPhone 4S. Heres the basic specs:
- The SoC is a Broadcom BCM2835. This contains an ARM1176JZFS, with floating point, running at 700Mhz, and a Videocore 4 GPU. The GPU is capable of BluRay quality playback, using H.264 at 40MBits/s. It has a fast 3D core accessed using the supplied OpenGL ES2.0 and OpenVG libraries.
- RAM 128MB (Model A), 256MB (Model B)
- USB Ports: 1 (2 on Model B)
- Video Outputs: Composite RCA, HDMI
- Audio Outputs: 3.5 mm jack, HDMI
- On-board Storage: SD / MMC / SDIO card slot
- On-board Network: None (Model A) , 10/100 Ethernet (RJ45) (Model B)
And its small enough to fit in your wallet! Like I said mini-awesome
We are so impressed with this little marvel that we are considering porting the IwGame Engine over to enable hobbyist and indie developers to get games up and running quickly on the platform.
Would like to hear your thoughts on the Raspberry Pi
Please Vote for Our App
We have been nominated for 2011 Best App Ever Award over at http://bestappever.com/v/vido/2/com.pocketeers.funkycam3d in the video app category. Please take the time to give us a quick vote.
IwGame Engine v0.27 Released – Powerful Animation and XOML Support
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.
After much bashing with hammers and sawing with saws IwGame version 0.27 is now available for download, including updated documentation. Some of you may get a little upset as we have completely replaced the old animation system with a brand new more powerful system. Sorry for that, but thought better to change it sooner rather than later.
Lets take a quick look at the changed for v0.27:
- Added new customisable mark-up language XOML that allows you to declare most IwGame obects declaratively, including scenes, custom actors, images, resource groups, animations, animation timelines
- CIwGameAnimManager has been removed and replaced with the much more powerful CIwGameAnimTimeline, paving the way for very powerful actor and scene animations
- Animation system has been completely changed to use a proper key frame interpolation system
- Support for animation targets to automate update of object properties
- CIwGameActorImage initialisation no longer requires a scene or an animtion. CIwGameActorImage initial image source rectangle now matches the initial size of the actor
- setCollisionSize() added to CIwGameActor to allow setting of collision size from a radius
- CIwGameDataInput and CIwGameDataOutput stream classes added
- Simple, fast pooled memory XML parser added (CIwGameXml)
- CIwGameResourceGroup system added to encapsulate Marmalade resource groups
- Global and scene local resoure systems added
- CIwGameImage can now be instantiated 3 ways, from memory buffer, from file or from web file
- CiwGameImage initialisation from memory buffer no longer requires specification of the is_jpeg flag
- Blocking parameter can now be passed to CIwGameImage::Load()
- CIwGameScene scenes can now be assigned a colour. All contained actors will be scaled by the colour, allowing flash and fade effects
- CIwGameBitmapSprite::setSrcRect() now takes a CIwRect
- FRAME_SPEED_LOCK_MS now added to set frame rate cap
- CIwGame::Init() changed to CIwGame::Init(bool enable_http), passing true will boot up the HTTP manager and allow you to use it in-game
- Bug Fix โ CIwGameHttp crashed if a request came back after the object was shut down
- Bug fix โ CIwGameActor::setCollisionRect() bug fixed
- Bug fix โ All actors were being treated as though they were collidable
- Bug fix โ Sprites no lnoger try to render themselves if their associated image is not yet loaded
Yes, I know that’s a lot of changes! Lets take a look at some of these new changes in more depth
What’s this new XOML Mark-up Language stuff all about?
Ok, time for the old copy and past. After working two days flat on updating documentation I feel less obliged to write fresh content ๐
I like to make code that is extensible but I also like to make life easier for myself without sacrificing too much versatility, so my coding style constantly strives towards balancing ease of use and extensibility. I’ve done a lot of Silverlight / WPF coding in the past which is where I came across Microsoft’s XAML mark-up language. I later came across Adobe Flex’s MXML mark-up language and decided that mark-up language was the way to go with game and app development. Being able to define my whole UI, game scenes, animations and even game logic using simple readable XML seemed like the best way to go.
IwGame adds some of the great functionality found in XAML / MXML allowing you to declare much of what will appear in your game using XOML (XML Object Modelling Language).
The major advantages of using XOL include:
- Saves a whole bunch of typing
- Design and layout scenes and actors using mark-up
- Design resource groups and images using mark-up
- Design complex animations and time line animations
- No recompiling required to test changes
- Add new content without resubmitting to the app stores
- Add content that is streamed from a server
As you can see, we have some pretty neat advantages to switching over to using a mark-up language
Lets take a quick look at an example XOML file:
<?xml version="1.0"?> <xml> <ResourceGroup Name="Audio" GroupFile="Audio.group" Preload="true" /> <ResourceGroup Name="Level1" GroupFile="Level1.group" Preload="true" /> <Image Name="Sprites" Location="Level1" Preload="true" /> <Image Name="Buddy" Location="http://www.battleballz.com/bb_icon.gif" Preload="true" Blocking="false" /> <Animation Name="PlayerImageAnim" Type="rect" Duration="0.8" > <Frame Value="0, 0, 36, 40" Time="0.0" /> <Frame Value="0, 40, 36, 40" Time="0.1" /> <Frame Value="0, 80, 36, 40" Time="0.2" /> <Frame Value="0, 120, 36, 40" Time="0.3" /> <Frame Value="0, 160, 36, 40" Time="0.4" /> <Frame Value="0, 200, 36, 40" Time="0.5" /> <Frame Value="0, 240, 36, 40" Time="0.6" /> <Frame Value="0, 280, 36, 40" Time="0.7" /> </Animation> <Animation Name="SpinAnim1" Type="float" Duration="8" > <Frame Value="0" Time="0.0" /> <Frame Value="90" Time="2.0" /> <Frame Value="180" Time="4.0" /> <Frame Value="270" Time="6.0" /> <Frame Value="360" Time="8.0" /> </Animation> <Animation Name="ScaleAnim1" Type="float" Duration="4" > <Frame Value="0.1" Time="0.0" /> <Frame Value="1.0" Time="1.0" /> <Frame Value="1.5" Time="2.0" /> <Frame Value="1.6" Time="3.0" /> <Frame Value="1.65" Time="4.0" /> </Animation> <Animation Name="ColourAnim1" Type="vec4" Duration="4" > <Frame Value="255, 255, 255, 0" Time="0.0" /> <Frame Value="255, 255, 255, 200" Time="1.0" /> <Frame Value="255, 255, 255, 255" Time="2.0" /> <Frame Value="255, 255, 255, 200" Time="3.0" /> <Frame Value="255, 255, 255, 0" Time="4.0" /> </Animation> <Animation Name="PlayerStates" Type="string"> <Frame Value="State1" Time="0" /> <Frame Value="State2" Time="0.5" /> <Frame Value="State3" Time="1.0" /> <Frame Value="State4" Time="1.5" /> </Animation> <Timeline Name="Scene1Anim" AutoPlay="true"> <Animation Anim="SpinAnim1" Target="Angle" Repeat="1" StartAtTime="0"/> <Animation Anim="ScaleAnim1" Target="Scale" Repeat="1" StartAtTime="0"/> </Timeline> <Scene Name="GameScene" CanvasSize="320, 480" FixAspect="true" LockWidth="false" Current="true" Colour="128, 128, 128, 255" Timeline="Scene1Anim"> <Timeline Name="Player1Intro" AutoPlay="true"> <Animation Anim="PlayerImageAnim" Target="SrcRect" Repeat="0" StartAtTime="0"/> <Animation Anim="SpinAnim1" Target="Angle" Repeat="4" StartAtTime="10"/> <Animation Anim="ColourAnim1" Target="Colour" Repeat="10" StartAtTime="2"/> </Timeline> <TestActor Name="Player1" Position="-100, 0" Size="100, 100" Angle="45" SrcRect="0, 0, 36, 40" Image="Sprites" Timeline="Player1Intro" /> <TestActor Name="Player2" Position="0, 0" Size="100, 100" Angle="-45" SrcRect="0, 0, 36, 40" Image="Sprites" /> <TestActor Name="Player3" Position="0, 100" Size="100, 100" Angle="0" SrcRect="0, 0, 64, 64" Image="Buddy" /> </Scene> <Scene Name="GameScene2" CanvasSize="320, 480" FixAspect="true" LockWidth="false" Colour="0, 0, 255, 255" AllowSuspend="false"> <Timeline Name="Player1Intro2" AutoPlay="true"> <Animation Anim="PlayerImageAnim" Target="SrcRect" Repeat="0" StartAtTime="1"/> <Animation Anim="SpinAnim1" Target="Angle" Repeat="4" StartAtTime="10"/> </Timeline> <TestActor Name="Player1" Position="0, 0" Size="100, 100" Angle="45" SrcRect="0, 0, 36, 40" Image="Sprites" Timeline="Player1Intro2" /> <TestActor Name="Player2" Position="100, 0" Size="100, 100" Angle="-45" SrcRect="0, 0, 36, 40" Image="Sprites" /> <TestActor Name="Player3" Position="100, 100" Size="100, 100" Angle="0" SrcRect="0, 0, 64, 64" Image="Buddy" /> </Scene> </xml>
It may look like quite a bit of XML but the above would take many hundreds of lines of code to instantiate all of these classes and set up their data.
XOML is also extensible in that you can provide your own custom tags, allowing you to extend the syntax.
How to work with XOML files?
How is XOML meant to be used? Well that’s up to you, I’m pretty sure you already have hundreds of cool ideas bouncing around your mind right now. That said we do have some recommended usage and work flow ideas.
The idea is to define all of your different types of actors and / or scenes derived from IwGame base scenes and actors then add the creators to the XOML system. This allows you to declare them in XOML.
You should have very few if not a single global resource XOML file that contains all of your global resources. This gets loaded first when you boot the game.
You then create separate XOML files that contain either single scenes or scenes grouped by functionality.
Try to keep scene specific resources within scenes so they can be freed up when the scene is no longer needed, but try to balance resource group loading times with resource re-use.
The animation system provided by XOML is very powerful so try to use it wherever appropriate.
Start looking at your game as being driven by XOML rather than XOML being a simple data format.
How to load a XOML File
Loading a XOML file is incredibly simple:
// Load a test XOML file IW_GAME_XOML->Process(this, "Scene1.xml");
The first parameter to the Process() method represents the parent class that you want to load all of the XOML data into. For example, if you load a XOML file that contains scenes then you should pass the CIwGame derived game object so that the created scenes will be added to the main game object. On the other hand if the XOML file contains a simple list of global resources then you can pass NULL. This kind of versatility allows you to split your game definitions across multiple files.
Its worth noting at this point that you need to ensure that IwGame::Init() has been called before using the XOML system as IwGame::Init() sets up important systems that are used by the XOML system.
What’s the future of XOML?
XOML was initially designed to simplify the mundane and time consuming tasks involved in creating scene layouts and animations etc, but luckily it turned into something much more. Over time XOML will evolve into even more with future with plans for the following addictions:
- Data binding
- Declartion of user interfaces
- Declartion of physics materials and scenes
- Support for styling
- More IwGame class support such as support for video, data files, camera streaming, audio time lines and more..
New Animation System
Now XOML (the biggest addition to IwGame) is out the way, lets look at the new animations system. The new animation system supports proper key frame interpolation where key frames can be spaced apart in time in a none linear fashion. The new animation system also has support for animation timeline’s and more types of animation data.
Timeline animations are collection of animations that are played simultaneously on some kind of animation target. An animation can be anything such as an actor or a scene. In fact, any class that is derived from the IIwGameAnimTarget interface.
Animation target and animation target properties allows the animation system to automatically updated properties of target objects with their interpolated animation values.
The new animation system has support for boolean, floating point, 2d, 3d and 4d vector, image frames and string based frame data.
XML parser and Streams
Stream input and output classes and XML parser utilities have been added. The XML parser is basic but quick and uses tag / node pooling to reduce memory fragmentation.
Marmalade Resource Group Wrapping and Global Resources
Marmalades resource groups have been wrapped into CIwGameResourceGroup to enable then to be integrated into XOML and facilitate auto loading / destruction in scenes and the global resource syste,
A new global resource system has been added (use IW_GAME_GLOBAL_RESOURCES to access) which the XOML system uses to store application global resources. Scenes also support a local resource system for resources that should only exist during the scenes lifetime.
Other Bits and Bobs
Images can now be created directly from a web resource (no need to go through the file system)
Game scenes now have a colour and opacity that can be animated. Note that the colour and opacity will be applied to any contained actors (good for flashes and fades)
CIwGame can now initiate and take care of update and clean-up of the HTTP manager, so you no longer need to handle this from outside CIwGame.
In closing
Well that’s it for this update of the IwGame engine, our next update will include Box2D integration into the actor and scene system, maybe even into the XOML system too, we will just have to see.
The latest version of IwGame can be downloaded FREE from the IwGame Engine page.
Happy coding!
IwGame Engine v0.26 Released โ Supports 12 Ad Providers, Accelerometer and Compass
Well me, Santa and the elves have been very busy bees this week and between us we managed to hammer out another update to the IwGame Engine before Christmas (Thanks Santa, couldn’t have done it without those delicious mince pies!)
Here are the latest changeds for IwGame v0.26:
- Bug fix – Actor crash bug when no camera assigned to the scene
- Bug fix – Fixed CIwGameHttp crash bug
- Bug fix – Fixed ad rendering crash bug
- Bug fix – Deleted scenes are now removed at the end of a frame and not immediately
- Bug fix – Scenes with no attached camera didnt set transform correctly
- Bug fix – Sprite hit test could be called before transform was set up
- Accelerometer support added to CIwGameInput
- Compass support added to CIwGameInput
- CIwGameAdsMediator added to mediate ad requests between multiple ad providers to improve fill rate
- Support for VServ, Mojiva, Millenial Media and AdModa ad providers added
- ExtraInfo added to ad requests to allow custom information to be passed to ad providers
- Added URLDecode method to CIwGameString
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.
I want to include a big thank you to all those that have reported bugs and documentation errors, especially Phillip who saved me many hours of proof reading.
As you can see from te list of changes there are a fair few bug fixes (sorry about that), but more importantly some new stuff:
New Ad Networks Added
Yes, we now support six ad providers (twelve ad providers indirectly), a couple which also deliver ads from other networks providing you with access to 12 ad networks in total. Here’s the complete list:
- Inner-active
- AdFonic
- Vserv โ Also provides support for InMobi, BuzzCity, JumpTap, ZestAdz / Komli Mobile and Inner-active
- Mojiva
- Millennial Media โ Also provides support for AdMob, Amobee, JumpTap and Mojiva
- AdModa
Many thanks to those ad providers that bent over backwards to support our integration efforts.
New Ad Mediation Support
Now we have so many ad providers we need some way of mediating ad requests between them all. Ad Mediation is the process of going through a list of prioritised ad providers requesting an ad, if the ad provider does not provide an ad then request an ad from the next provider. Keep on doing this until you get an ad that you can use. This should hlpe you attaina near 100% fill rate and maximise your apsp potential ad revenues.
IwGame provides automated ad mediation using the CIwGameAdsMediator. To use the mediator you create a CIwGameAdsMediator, populate it with ad party’s then attach it to the CIwGameAds object as shown below:
// Create ad mediator and attach it to the main ad object CIwGameAdsMediator* ad_mediator = new CIwGameAdsMediator(); IW_GAME_ADS->setMediator(ad_mediator); // Create Inner-active ad party and add to the mediator CIwGameAdsParty* party = new CIwGameAdsParty(); party->ApplicationID = "Your inner-active App ID"; party->Provider = CIwGameAds::InnerActive; ad_mediator->addAdParty(party); // Create AdModa ad party and add to the mediator party = new CIwGameAdsParty(); party->ApplicationID = "You AdModa App ID"; party->Provider = CIwGameAds::AdModa; ad_mediator->addAdParty(party); // Create AdFonic ad party and add to the mediator party = new CIwGameAdsParty(); party->ApplicationID = "Your AdFonic App ID"; party->Provider = CIwGameAds::AdFonic; ad_mediator->addAdParty(party);
As you can see, incredibly simple. The process of attaching the ad mediator will ensure that the ad object will attempt to collect ads from all ad parties should previous parties fail to collect an ad. You do not need to make any changes to the ad view, the system is completely automated.
Support for Accelerometer and Compass added to CIwGameInput
CIwGameInput now has support for reading the devices accelerometer and compass devices allowing you to integrate these alternative input methods into your games.
Well that’s it for this update. More features coming soon (probably in the new year).
Happy holidays everyone!
