Category

Android

Mobile World Congress 2012

By | Android, Blackberry, Game Development, General, Microsoft, Nokia | No Comments

I had a chance to go to Barcelona for Mobile World Congress 2012 at end February. Here are some pictures and what was interesting from game development perspective.

NVIDIA

NVIDIA stand was big as usual and they had TV’s attached to Tablets. I got to see NVIDIA tablets running Tegra 3. I think the tablet was made by ZTE as a prototype.

NVIDIA Booth with Tegra 3 being the most highly visible product/tech

 

Huawei Smartphones and Tablet

Interestingly Huawei has started to manufacture Tablets and Smartphones. They looked really nice and polished. Something interesting for future. All running Android 2.3 (for phones) and 4.0 ( for tablets).

ZTE

ZTE launched its smartphone called ZTE Era as well. Phone runs Android. No pictures for that either.

RightWare

RightWare wan interesting company. They provide system called Kanzi UI to create 3D UI for mobile platforms. Don’t forget to checkout their demo video. They even had a device that had 3D display without glasses. The UI engine works using OpenGL ES and should be possible to use in-game for creating Menu etc. I was promised a trial licence and will know more when we try ourselves.

 

 Qualcomm

Qualcomm’s Snapdragon was very interesting. I had a short game (CS like?) with Manish who is Product Manager for Graphics, Gaming and Tools. I hope he forgives me for making him lose the game he was playing all day. I am excited to get hands on the tools they got and see what we can learn and improve for our games.

Blackberry

Blackberry had a big booth as well. Bigger than I was expecting. We have already released BLAZ3D for Blackberry and it was nice to chat with people there. The guys at developer connect section were very helpful and we discussed a few things and got some contacts to stay in touch and updated with RIM world.
The most interesting part was a Porsche running Blackberry Tablet OS (QNX).

 Android

Android booth was big as well. I stayed there for quite long and had fun chatting with guys. Complimentary IceCream sandwich and smoothie were awesome. I also took a ride in their slide as seen and got a printed picture from their automatic camera. The whole feel of Android booth was playful and it felt less business like there. Too bad they didn’t have Stickers this time, so no free android goodies. As for tech it was all usual Android tablets and HTC/Samsung phones on display.

 

Nokia

Booths for both companies were separate and quite far from each other. Even in separate halls. Booth for Nokia was like whole hall in itself. Probably the biggest booth in the whole conference. There were some phones like Lumia but Iforgot to check on Nokia 808 PureView. We are hoping to release BLAZ3D soon for Symbian.

 

Microsoft

Microsoft had pretty much just a big blue wall. I am not sure if it was some sort of secondary booth but it hardly had anything. One interesting thing was a scoreboard where comparison of phones was made based on speed. Not sure exactly what it was but I think it was similar Smoked By Windows Phone challenge. Got some Windows Phone stickers only.

 

 

These are really interesting times for mobile game development. The processing, graphics and resolution is increasing rapidly for smartphones. There are more players entering the market that would shake things up. There are even more uses of mobile OS than just being on Mobile and Tablets (Porsche example).

Openfeint extension for Marmalade

By | Android, Developer Diary, Game Development, iPhone, Technical | 26 Comments

We wanted to integrate Openfeint in our game BLAZ3D but there was no extension in Marmalade, the game engine we used. We decided to create an Openfeint extension for ourselves.
The extension and relevant documentation is available on Marmalade Github Community repo at[highlight type=”two”]https://github.com/marmalade/openfeint[/highlight]

The extension supports following API
[list style=”arrow” color=”blue”]

  • User login/approval
  • Display of Main dashboard
  • Display of dashboard directly to specific page like Challenges, Acheivements, Leaderoards (iOS Only)
  • Sending of challenges (iOS Only)
  • Highscore submission to leaderboards
  • Acheivement unlock
  • iOS Push Notifications for Openfeint (iOS Only)
[/list]  

Some sample code snippets (Not all API is available on Android as OpenFeint doesn’t support them either)

 

Initialising OpenFeint


s3eNOFSettingVal *settings = (s3eNOFSettingVal*)s3eMalloc(sizeof(s3eNOFSettingVal) * 6);
// Fill settings
// UIOrientation value
strncpy(settings[0].m_varName,
"OpenFeintSettingDashboardOrientation",
S3E_NOPENFEINT_SETTINGS_STRING_MAX);
settings[0].m_intVal = s3eNOFUIInterfaceOrientationPortrait;
//
// Shortdisplay name
strncpy(settings[1].m_varName,
"OpenFeintSettingShortDisplayName",
S3E_NOPENFEINT_SETTINGS_STRING_MAX);
strncpy(settings[1].m_stringVal,
"FunkyRacers",
S3E_NOPENFEINT_STRING_MAX);
// Push Notification Setting
strncpy(settings[2].m_varName,
"OpenFeintSettingEnablePushNotifications",
S3E_NOPENFEINT_SETTINGS_STRING_MAX);
settings[2].m_intVal = 1; // TRUE/YES
//
// Sandbox Notification Mode
strncpy(settings[3].m_varName,
"OpenFeintSettingUseSandboxPushNotificationServer",
S3E_NOPENFEINT_SETTINGS_STRING_MAX);
settings[3].m_intVal = 1;
//
// Disable User generated content
strncpy(settings[4].m_varName,
"OpenFeintSettingDisableUserGeneratedContent",
S3E_NOPENFEINT_SETTINGS_STRING_MAX);
settings[4].m_intVal = 0;
//
// Disable ask for approval in debug mode
strncpy(settings[5].m_varName,
"OpenFeintSettingAlwaysAskForApprovalInDebug",
S3E_NOPENFEINT_SETTINGS_STRING_MAX);
settings[5].m_intVal = 0;
//
s3eNOFArray array;
array.m_count = 6;
array.m_items = settings;
s3eNOFinitializeWithProductKey("PRODUCT_KEY_HERE",
"APP_ID_HERE",
"RacingGame",
&array);
s3eFree(settings);

Launch Main Dashboard after login


// Open Main Dashboard
// s3eNOFlaunchDashboard();

Pull Information about all achievements for user


const unsigned int max_achievements = 20; // whatever we think is max we need
void* data = s3eMalloc(sizeof(s3eNOFAchievement) * max_achievements);
if (data == NULL) {
AppendMessageColour(RED, ("Couldn't allocate data"));
return false;
}
//
s3eNOFArray achArray;
achArray.m_items = data;
achArray.m_count = max_achievements;
s3eNOFachievements(&achArray);
// AppendMessage("Size of achievement %d and double %d",
// sizeof(s3eNOFAchievement),
// sizeof(double));
for (uint i=0; i < achArray.m_count && i < max_achievements; i++) {
// s3eNOFAchievement* ach = &((s3eNOFAchievement*)achArray.m_items[i]);
// AppendMessage("Ach at %p", &((s3eNOFAchievement*)achArray.m_items)[i]);
AppendMessage("Acheivement title %s", ((s3eNOFAchievement*)achArray.m_items)[i].title);

Update December 30, 2011

The extension now supports both Android and iOS. Android API is extremely limited by OpenFeint itself and thus most APIs in extension just return -1 and do nothing.

Analyzing cross-platform engines for mobile phones

By | Android, Developer Diary, Game Development, iPhone | 4 Comments

Quest for Mobile 3D Engine

When we started development on our first title, the first thing as usual was to find our needs and select an engine in accordance to them. After considerable debate, we knew what we really needed was a cross-platform engine for mobile phones which should have solid 3D apis and support as many platforms as possible. This hunt coupled with our naivety as it was our first title, led to us the EdgeLib Engine. Our experiences with it was scarring to say the least, but definitely a huge learning experience which we will leave at that for a post in the future. This made us hunt for a new stronger solution, that we can call our base, our motherland, and that is exactly what we found with Airplay SDK now called Marmalade.

Marmalade is what we call a truly cross-platform engine. Supporting over 6 different os’s, and truly abstracting all api from it is a very big deal, and providing extensive support and a huge array of helping tools is unseen for an engine that supports indie developers. Instead of going into all of its features i will just point out at a few that really caught my eye:

Memory Management

Marmalade provides a very nice solution to manage memory. Instead of giving fast alloc calls and calling it a day, marmalade has a system of buckets. You allocate your data inside buckets, and specify the size of each bucket in a configuration file. This way you know exactly how much memory you are consuming in which area. Secondly, with such a system it becomes easier for marmalade to manage memory, so memory leaks are immediately detected. Add to this system an internal system of tracing call-stacks and you get a system which points to the exact code block that’s causing the leak.

Scalable 3D pipeline

Airplay does not only abstract out basic OS API calls from all platforms, but, due to the largely varying hardware of mobile phones, it also has a scalable 3D pipeline. Support between GLES 2 and GLES 1.0-1.1 in itself is a huge feature and couple that with a low level fallback software renderer and you get a game that would run on any phone in the market, may it have a GPU or not.

The Simulator

Airplay has a solid simulator for emulating the game on the PC/Mac . This simulator extends its features way over what any other phone vendor has provided yet, with features like accelerometer simulation, changing graphics drivers, compass simulation and some very detailed metric of your game. It allows you to configure the simulator in real-time to go as close as possible to the real device. Other than that the metrics the simulator provides are a very handy tool to optimize, showing all API calls made and the number of times they were made. It also tells exact memory usage of each bucket, which is again useful in optimizing your game for low memory use.

The Extra Tools

Airplay provides some very neat external tools, which are integrated which the library very well. Airplay has a system of resource groups and build styles, which allows you to sort out your games data in nice little resource files with which you can easily create multiple editions of your game for different phones and handle all the assests easily using these files. The best part, we just need to specify the compression format in the resource file for each texture, and airplay automatically compresses them on first build, and loads them in-game from the compressed file. This removes a lot of headache like manually converting each texture for different compression techniques for different GPUs. Airplay also provides derbh archive module for game data compression, which coupled with texture compression can reduce your games data by 60-70%!

 

The feature set never ends for this beast of an engine. Of course it has its fall at times too but they are always very minor compared to the huge list of features it give us.

 

[highlight type=”one”]We’ll have to say Marmalade is one of the best mobile 3D Engine we have used for Mobile Game Development.[/highlight]