Minor Bug-Fix Update

Tonight’s quick update fixed a few issues that people have brought up in support tickets repeatedly, so I figured it would be useful to let people know they have been addressed:

  • When a game was in regular bidding and is then switched over to QuickAuction, any sponsors Watching the game are sent a private message explaining that they have only 15 days left before the game is gone.
  • The “preview” feature of the game uploader didn’t use the same JavaScript as the rest of the site, so it wasn’t a reliable preview. This has been fixed.
  • The website now acknowledges the existence of SWF Specification 11  (even though Adobe hasn’t released this specification to the public yet, the latest Flex SDK targets it by default, which is gross and goes against the very concept of open source specifications, but what can you do). The website was previously reporting that these games “require Flash Player 11″. This is incorrect, as SWF specification 11 can apparently target Flash Player 10.2 and 10.3. This has been fixed (including retroactively, for games that were already uploaded).
  • When a game is doing a QuickAuction, we’ll no longer send automatic emails to developers encouraging them to use site features that are disabled during QuickAuction (namely Buy it Now and Steal of the Week).
  • The “Weekday” email setting for sponsors now actually works.

Thanks, and as always if you have problems or need assistance, please use the Feedback menu to get in touch with us.

- Eric

Site Update 7/23/2011

We’ve added some cool new features in today’s update!

QuickAuction

This is an experimental game sales mode. The developer agrees that their game will be on public display for 15 days, and then they will pick a winner. (Or, if they don’t like any of their offers, they can choose to self-publish their game.) This is a great way for sponsors to make sure their funds aren’t locked up in games for very long time periods, and is a useful tool for developers who want to sell their game more quickly than the recommended two month auction period.

Anti-sniping system: To make sure that all sponsors have time to react to any last-minute bids, sponsors who already bid during the auction can continue to bid for a few days after the QuickAuction ends. The exact amount of time available after QuickAuction ends is partially random, and partially up to the developer. The intent is to guarantee that there is at least one business day after the auction period ends to let other bidders react to sudden last-minute offers.

Keeping it simple: Games that use QuickAuction cannot use ”Last Call”, “Buy It Now”, or some other site features. The goal is for QuickAuctions to be simple and quick!

How to turn it on: Developers, you can find this option on the “Edit Game” page for your game. Be careful, as once you activate it (and your game is approved, if it wasn’t already approved), then it is impossible to stop the bidding until the time is up. You cannot accept a bid during this time. While this feature is in the “experimental” stage, only developers with at least Market Level 1 will be able to activate it. This is to keep the number of games using it low, and to make sure only the savvier FGL users use this — it may have rough edges that need help, and we don’t want brand-new users to get overwhelmed!

 

“Endorsements”

Speaking of experimental features, here’s an experimental social feature. When you view a user’s profile page, you’ll see a button to “Write Endorsement for This User.” If the user approves the endorsement you write, it will be visible to anyone who visits their profile page.

The goal is to help sponsors and developers feel confident in who they’re doing business with. If you’ve had a good experience working with someone, feel free to write a short endorsement for them!

If this feature proves useful, we’ll augment it in future updates. If nobody ends up liking it, then we will follow our usual policy of removing it and pretending it never happened.

 

Sponsor Bidding Improvements

We’ve improved the sponsor bidding pages in many ways:

  • Smarter bid auto-filling: when you go to place a bid, the form will be filled in with the details from the last bid you made on that game (if you had already made a bid). If this is your first bid on the game, it will use the last bid you made on any game. There’s also a link on the bidding page to clear the entire form so you can easily start from scratch.
  • Track counter-bidding more easily: when you view a game’s previous bids, you will now see them numbered by the order in which they bid. The first bidder is “Bidder #1″, then “Bidder #2″, etc. If the same bidder places multiple bids, they’ll get the same number each time. We’ve heard from several sponsors who were confused when bids said things like “this bid uses the same details as my last bid”, and hope that this helps clarify those situations. It also adds a bit more transparency to the selling process.
  • Follow what’s going on easier: we’ve revised the “My Bids” page and the bidding page to make it easier to tell what’s going on and take action. Please let us know if there are other improvements you’d like to see!
  • See expired bids: you can now easily track your expired bids. There’s a menu-option for it under the “My Bids” menu. If the game is still for sale, you can place a new bid. If it’s already been sold and has been moved to the Game Shop, you can buy a non-exclusive license from there.

 

Other Improvements

We also have a bevvy of smaller improvements and fixes. Here are some highlights:

  • Whenever a developer adds a new game to the site, makes a major update, or has their game approved for bidding, this info is automatically posted to the developer’s Followers List, so people following you can always find your latest games. (You can always go in and delete these messages from your Follower List if you need to, and you can also completely disable this option via a new check-box on the My Account page.)
  • The game uploader has better error messages, and if things go poorly with the Flash uploader, it offers to let you switch to an old-school HTML uploader instead.
  • You can now specify “Special Notes To Bidders” for your game. These notes are shown on the bidding page right as a sponsor is placing a bid. (This feature was previously restricted to high market-level developers.)
  • We now enforce the developer’s wishes when they indicate that they only want certain types of licenses. If the developer hates Exclusive licenses, for instance, the system won’t let sponsors make those offers. Hopefully this will save time and hassle for everyone involved.
  • Sponsors can now receive their New Game Emails every weekday, skipping weekends. If you choose this option (from the My Account screen), any new games added on Saturday or Sunday will go out in your Monday email instead.
  • The numbers on the developer dashboard now update whenever you reload the page (instead of waiting until you next log in to update).
  • In the “Community-Driven Activities” forum, whoever creates a thread has the power to delete other peoples’ posts. This is to help people run contests, etc. without distractions. Please use this power responsibly.

 

Let us know what you think (or report any problems you see) on the forum!

FGL Downtime Planned

We will have 1-2 hours of downtime late tonight (technically tomorrow morning, around 1am EST 7/23). We’re doing some routine maintenance and putting up a new version of the website. Stay tuned!

FGL Developer Competition – July 9th!

Time for a new developer competition! This is a contest to see who can make the best game in 24 hours. Your game must revolve around a special theme, which will only be revealed when the contest begins.

These contests are always a lot of fun, and they’re a great way to get a new game prototyped fast. Plus, the first-place prize is a copy of Adobe Flash CS5!

We hope you can make it! Get all the details here.

Site Update Notes!

We’ve made a pretty big site update today. Here are the changes, then some commentary at the end.

 

Big Changes:

  • New Bidding Parameters: when placing a bid, you will now see quite a few additional fields to fill out. These are “private fields” — the information in them will not be visible to other bidders, just to the developer. They help solidify the agreement between you and the developer so that there aren’t unpleasant surprises down the road. The new fields cover: what branding changes the sponsor wants, what branding the developer is allowed to have, what tracking APIs, high-score APIs, microtransaction APIs, and other APIs are allowed/required, translation requirements, and specific gameplay changes needed.
  • Your Last Bid Is Saved: when sponsors place a new bid, the form is auto-filled out with the information from the previous bid. Please fill out the various “Private Fields” completely — you will only need to do it once since the data will get re-entered automatically for each new bid.
  • Better Automated Email: emails sent to sponsors will now be individualized. Sponsors will be asked to pick the genres they care about the next time they log in — games outside of these genres won’t go into their emails. In addition, when there’s extra space in a day’s email, we will include earlier games in these genres that the sponsor has never viewed before. (Many of the best games tend to get overlooked on busy email days, so this helps sponsors find great games that they may have overlooked.)
  • One-Week Bids: if a game has been for bid for at least two weeks, sponsors can now place bids with only a 1-week duration (instead of the regular 2-week minimum).
  • Buy It Now More Prominent: games with Buy It Now prices will now show those prices on every browse page. (Previously this was only visible when you viewed an individual game.) In addition, if the Buy It Now price is close to the current high bid for the game, the Buy It Now price will be colored an eye-catching green.
  • “Steal of the Week”: high-quality unsold games can be eligible for this new promotion if they set a Buy It Now price below a certain threshold. (For instance, a game with an Editor’s Rating of 7.5 will be considered for “Steal of the Week” if their Buy It Now price is $2500 or less.) Each week three such games will be picked and highlighted in automated email and on sponsors’ spotlight windows. You will receive an automated email when your game could be eligible. Right now we are test-driving the promotion with a relatively small number of games (those rated 7.5 and up) but intend to increase that range in the future.
  • Search Box Improvements: The search box on sponsors’ Dashboards will now search both Game Shop and Bidding games at the same time. Crazy!
  • Sponsor Bid-Screen Improvements: it is now easier to tell when a bid is the highest bid, versus when the developer has marked the bid as the “Best Bid So Far”. In addition, when viewing a game’s bidding history, it’s now easy to tell which bids are yours, and which are Buy It Now offers, and so on.
  • Old Browse Categories Removed, New Ones Added: The “Best First Impressions” and “Developer’s Favorites” browse categories are retired from sponsor viewing due to a lack of use. (Developers can still see “Developer’s Favorites”, though.) We are testing some new browse categories to replace them. Currently they are “Unity Games” and “Epic RPGs”. We’ll be experimenting with other new browse-category ideas in the coming months as we look for things that resonate with sponsors.
  • Pre-Reviews Back, Partly: Developers who are Market-Level 3 or higher can once again request Pre-Reviews. We will reduce these requirements (eventually removing all requirements entirely) as we become confident that we can handle the increased load of reviews.
  • Managed Buyers: as part of our efforts to facilitate non-traditional sponsorships, we have been providing hands-on assistance for game buyers who need to purchase in large volume or otherwise want to avoid the traditional sponsor shopping process. In some of these cases, FGL  picks games out for them based on their desired parameters, and the buyer decides which of them to buy. We now have a new type of account to make managing these buys easier. Developers may see these “Managed Buyer” accounts in the Game View history for their games. If they like your game, expect a bid or gameshop purchase-request to follow a week or so after. (The bid or buy will come from a regular sponsor account.)
  • Organize Your Games: developers (and sponsors who won licenses for games) can now organize the games in their account profile. You can find the link from the My Account page, or just click here. (Remember that Game Shop sales are not listed in the profile for the game shop buyer at this time.)
  • New reports are available in the FGLopedia under “FGL Site Statistics”. Check them out here. These reports will give you a better glimpse into how the FGL website is doing, plus show trends in Flash game buying and selling.
  • Reviewers’ Notes can now be seen for some games. Sponsors will see a small icon in the listings — hovering their mouse over this icon will show the notes. Reviewers use these notes to point out aspects of the game that you might not immediately notice.
  • Preview On Upload: when you upload a new version of your SWF or UNITY3D file, you can preview it before saving changes.
  • See Your Market Level History: you can now see where all of your Market Points come from. This is available from the “My Account” menu item, or just click here. (Preview players don’t receive market points so they won’t see anything there.)
  • Track Threads: you can now “track” forum threads. (By default, a thread becomes “tracked” when you post a reply to it; you can also turn it on/off manually.) Your dashboard page will show any new posts in threads you’re tracking.


Bug Fixes and Smaller Features:
  • Old Comments Marked As Old: when a game goes into bidding, all old feedback for that game will be marked with a very noticeable message that indicates the feedback was for an earlier version of the game. We added this to help allay developers’ fears that sponsors might see the feedback and think the game was still buggy. (This isn’t something we saw actually happening very often, but it doesn’t hurt to make it extra clear.)
  • Coauthor Improvements: Coauthors now receive emails about new bids. They can also grade feedback in the feedback forum for their game.
  • View ALL The Top Developers: If you view the Top 100 Developers page in the FGLopedia, there’s now a link to view all the Not As Awesome As The Top 100 Developers, ranked from #101 onward.
  • Poll Opt-Out: If you don’t want to take a poll, you can get it off of your Dashboard by clicking the “No Thanks” button on the poll page.
  • Turned off “Similar Games”: the “Similar Games” listings shown under each game have been turned off for now. The games just weren’t similar enough! We’re taking the feature back to the shop for improvements, and have switched it off temporarily.
  • Bug Fix: if you entered a URL in the first post of a thread, it wouldn’t magically get turned into a hyperlink. It worked for replies, but not the very first post. (Whoops!)
  • Bug Fix: When a game receives a non-exclusive-license bid, this no longer counts toward the 7 day wait period before the developer can enact a Buy it Now Price.
  • Bug Fix: Integrated a new version of the WYSIWYG editor (TinyMCE). This new version should support IE9 correctly, and has other bug fixes.
  • Bug Fix: in some places, Editor’s Ratings were being truncated so that fractional elements were missing. This has been fixed. It should slightly increase the prominence of ratings like 6.5 (versus a 6), or 7.5 (versus a 7).
  • Wording change: we’ve changed the wording in various places to try to encourage users to give constructive feedback — that is, feedback with advice on how to improve the game, rather than just “good job!” type feedback. We’ve also made it more obvious how and when to mark constructive feedback as a “Great Post” so that those people get more credit for their hard work.
  • Many other small improvements, such as additional cross-linking and extra help buttons.

 

This is a big update with a lot of cool stuff, and we’re pretty excited about it! Please let us know here if you spot any problems.

Two things that we expected to be in this update aren’t live yet. First, we had previously mentioned that the site is being reskinned; that is still ongoing, but has become a somewhat larger-scale change than we first imagined, so it’s still a few months off (as we work out all the kinks). Second, we are still working toward our new “Agent Model” where game reviewers act more like game agents, helping you sell your game every step of the way instead of just reviewing them once. This update added a lot of the infrastructure for this idea, but we are still changing our internal policies (and getting our manpower in place) for this new idea. In retrospect, changing the entire working model of our site in two months turned out to be a tad bit overly-optimistic, but we are getting closer to this plan every day. Stay tuned for more improvements coming soon!

This update also includes many new back-end features that help us sell your games more efficiently, and helps us facilitate new kinds of sponsors we have waiting in the wings. So this is a big update which touched a lot of website features… which may well mean there are some kinks to iron out. Just let us know if you spot problems and they’ll get addressed ASAP.


Dillo Hills: Optimizing Games for Playbook and Mobile

[This is a guest post by Justin Smith, who created Dillo Hills for the PlayBook, Android, and other mobile platforms. Justin has some great insights to offer on creating games for these platforms!]

 

PREFACE

Over the past few days, I’ve been working very closely with Adam Schroeder from FGL to playtest Dillo Hills on the Playbook. He’s been very helpful in the testing process, and he’s asked me if I’d be interested in writing about my experience developing the game: from the basic experience of working in AIR, down to some of the specific tricks I’ve used to optimize rendering for mobile.

PROJECT OVERVIEW AND STATS

Dillo Hills was my first experience programming for mobile devices. I worked with an artist (changko) and an audio guy (strike911), both of whom were also new to mobile development.

The game was originally developed for the Android platform, but the code for the Playbook version is almost completely identical, so all of the tips and tricks I talk about here should apply to both platforms!

The game, for anyone who is unfamiliar, is essentially a spinoff of Tiny Wings. Your main goal is to build up speed by rolling down hills, then use that momentum to ramp up into the sky and soar. We built on to the original concept by adding in obstacles, bonuses, and by tweaking the physics a bit to give something that feels a bit more fast-paced and visceral than the original game.

The game was released on Android near the end of March, was approved for the BlackBerry Playbook a couple days ago, and will be coming to Flash and iPhone in April (hopefully). The entire development of the game, from the moment I got the idea to the moment we released on the market, took exactly 3 weeks.

Reception has been mixed, but mostly positive (4/5 on Android Marketplace). The biggest source of negative reviews has been from users who are simply not able to run the game at an acceptable framerate, or experience problems installing the game. Out of all the users who are able to install and run the game smoothly, feedback has been reassuringly positive.

Sales have been pretty nice. Nothing outrageous yet, but certainly worth the time we invested, and still growing steadily. During the first 10 days after the game was released, we sold roughly 3000 premium versions of the game, and had about 25,000 downloads of the free version, which yielded just under 300,000 ad impressions using AdMob.

As for my own impressions of the game? I’m very excited and pleased with where the game is headed, but I’m also very eager to continue working on the game, improving performance, and adding some more gameplay features to keep people entertained longer. I’ve learned a lot of important lessons that will probably have an impact on how I develop games for mobile in the future.

 

OPTIMIZING TIPS AND TRICKS

1) GPU vs. CPU

The first hurdle you’ll face when developing a game for mobile is deciding whether to use GPU rendering or CPU rendering. Based on my experience, it seems like GPU rendering is faster when you are working primarily with bitmaps (or objects that have cacheAsBitmap=true) and placing them directly onto the stage / display list, and CPU rendering is typically faster when rendering vector shapes or using blitting as your primary means of rendering. Again, this is only based on the testing I’ve done, and your own results may vary. I recommend trying both until you find the one that works best for your game on the most devices.

For Android applications, you can choose either CPU or GPU rendering from the Publish Settings menu (in the Flash Pro IDE). For the Playbook, I had to manually add this line inside the <content> object (which is inside the <initialWindow> object) of my DilloHills-App.xml file:

<renderMode>gpu</renderMode>

However, when I enabled GPU rendering before compiling to a BAR file, the BAR would no longer render anything but a black screen when testing in the Virtual Machine. This appears to be a bug with the VM, as the game runs fine on the actual device. It’s also worth mentioning that Eric Heimburg from FGL was able to get his games to run inside the Virtual Machine with GPU rendering enabled, and it actually showed a pretty significant performance increase even within the VM, so be sure to try it out for yourself!

Dillo Hills was written and optimized for GPU rendering, so most of the techniques I mention here will be directed towards GPU rendering. A lot of these techniques are also great things that you should be doing in all of your applications (especially object pooling!), but are going to be nearly mandatory when developing for mobile.

 

2) Size does matter

And smaller is not always better! With GPU rendering, you want your bitmaps’ dimensions to be as close as possible to powers of 2 (i.e.:16×32, 128×128, 1024×256). In almost all of the tests I ran, I actually got significant performance boosts by increasing the size of my BitmapData objects to get to a power of 2 than using the smaller dimensions.

For instance, even though Dillo Hills’ characters’ dimensions are only in the ballpark of about 180×180, I was able to improve the game’s performance significantly by rendering them to 256×256 BitmapData objects.

I haven’t had a chance to test whether there is any sort of difference here depending on which platform you’re targeting, but my suspicion is that following this “rule of twos” is going to be helpful for any situation where you’re relying on GPU rendering, whether that GPU is in a phone, a tablet, or even a PC.

 

3) Scaling and rotation are expensive

It’s one thing when the renderer has to draw a bunch of bitmaps to the stage. It’s a totally different ballgame if it has to transform those bitmaps first!

Scaling, rotation, and alpha transformations are very slow to render, and should be avoided as much as possible. If you know ahead of time that something is only going to scale within a certain range, or is going to be rotated to a handful of specific angles, try pre-rendering an array of BitmapData objects at each of the desired angles/sizes so that the renderer doesn’t have to do the transformations every single frame while the game is playing!

 

4) Frame skipping

A common technique when building a game is to design all of the graphics as vector art (either in Flash or Illustrator), then prerender everything into BitmapData objects when the game starts. Then, as the game is going on, you render a different bitmap each frame, to give the effect of animation.

This technique works beautifully when building a Flash game for PC, but you will quickly run into two problems on mobile devices.

First problem: prerendering every single frame of an animation to a BMD object uses a ton of memory, and that’s something that a lot of phones simply cannot afford. Your computer probably has at least 4GB of RAM, but high-end phones and tablets are just now starting to reach 1GB, and most of that is going to be used by the operating system or other applications running in the background.

Second: rendering a new Bitmap each frame is a lot of work to process for a mobile device – especially if that new Bitmap has to be scaled or rotated.

The solution we discovered is actually quite simple – frame skipping! Essentially, we only prerender about one in every four frames of each character’s animations. This means 75% less memory consumption, and 75% less rendering stress.

This was actually one of the single biggest ways that we improved performance after releasing the game. When we implemented a 1:5 frame skipping ratio on Low graphics settings, framerate on many devices improved by as much as 12 FPS. This was especially noticeable on the Droid X, which only got about 8-10FPS at launch, but jumped to ~25FPS after frame skipping was patched in.

 

5) Object pooling

**This is something you should be doing already, even if you have no intentions of ever developing for mobile!**

One of the costliest things that your code can possibly do is create a new object: whether it’s a tiny little bullet, an enemy, or even a lowly utility variable like a String or a Boolean. A lot of programmers write their games in such a way that whenever something new is being added to the game, they just create a new object. When that object is no longer needed (monster is killed, bullet leaves the stage, etc.), they delete it, set it to null, and let the garbage collector take it away.

Creating and destroying new things like this is very slow to process. A much smarter and faster way to manage objects is recycling them.

In the world of programming, it’s usually called “object pooling,” but the philosophy is exactly the same as recycling: instead of destroying one thing and creating a new thing in its place, why not take something we no longer need, set it aside, and then reuse it later? Instead of destroying each bullet when it leaves the stage, we simple set bullet.visible=false and tell our engine to stop processing its movement, essentially putting it in a “recycle bin” mode. Then, when we need to make another bullet, we grab one of those invisible bullets in the “recycle bin”, put it in the new position, set bullet.visible back to true, and go from there!

(Bonus tip: when you’re done with an object and ready to put it in the “recycle bin,” don’t remove it from the stage: just set visible=false. Adding and removing objects from the stage is slow, but turning their visibility on and off is fast! When we made this adjustment to our score popup/particles on High settings, rendering speed when picking up crystals improved by about 4 FPS on our test device.)

This technique doesn’t have to stop at little things like bullets, either. The same principle can be applied to enemies, background scenery, tiles, particle effects, and even variables like BitmapData objects. In fact, in Dillo Hills, even the terrain and the sky in the background are just object pools of Bitmap objects that get recycled as you move from left to right! (If you could see beyond the left and right edges of the screen, you’d see where little “chunks” of the terrain disappear on one side and reappear on the right side.)

Shane McCartney has written a fantastic article on object pooling, including a sample class that I  highly recommend.

 

6) Manage your variables wisely

While rendering is usually going to be the bottleneck in a GPU application, you can always try to squeeze a little more performance out of your game by optimizing the rest of your code. This becomes significantly more important when using CPU rendering!

First, you should always make sure you’re using the right type of variable for each task. For instance, you should only use Number variables if you absolutely need to have decimal precision. If you know you’re only going to be storing integers, use an int. If you know those integers are never going to be negative, use a uint. If you know that everything inside an Array is going to be the same type of object (whether it’s a bunch of strings, booleans, or even complex objects/classes), use a Vector instead!

Second, you should always strive to remove instantiation from loops. In other words, you should avoid creating new variables as much as possible. If you know you’re going to be using the same variable over and over for simple tasks like counting a for loop, or calculating velocity, or checking the distance between two objects, consider declaring them as class variables instead of creating and destroying them every single frame!

 

7) Avoid textfields

The built-in textfield/TLF objects that you can create in AIR are simply too much to render at a reasonable speed. They’re fine and dandy if you’re designing a simple app that only needs to run at 8-15 FPS, but if you’re building a game, you should consider pre-rendering all of the characters you need to bitmaps, and then rendering them just like any other bitmap. This is a technique that has been used in video game development for years – Flash developers have been very spoiled by TextField objects, and it’s time to get weaned off of them!

 

8 ) Don’t feel like you’re obligated to develop for high-resolution display

A lot of modern smartphones have surprisingly high screen resolutions and surprisingly small screen sizes. In the world of computer monitors, 72DPI displays are the norm. Phones, on the other hand, are all about packing as many pixels into as small an area as technologically possible, and the result is ultra-high DPI devices that rival even modern print. In fact, the iPhone 4′s “retina” display claims a 326DPI display, which is roughly 9% higher pixel density than print, and 453% more dense than a normal computer screen.

Trying to render at such a high resolution puts a huge strain on the system. After all – when was the last time you wrote a Flash game that rendered out at 800×480 (Android), 960×640 (iPhone 4), or 1000×600 (Playbook)? Probably never. Most Flash games are designed to run at sizes closer to 640×480: sometimes even smaller. Smaller rendering sizes mean less work for the renderer, and less work for the renderer means a smoother, crisper framerate. When you combine the higher resolutions of mobile devices with their lower hardware specs, you’ll start to see why performance is a huge issue on mobile devices.

Ultimately, we decided that sometimes it’s okay to cheat. I mean sure, the target resolution for most Android devices is 800×480, but does our game really need to be displayed at print-level pixel density? I think not.

Our main character and our UI are rendered at 1:1 pixel ratio, because they are important visual focus points, and we wanted them to appear crisp and sharp. Besides those things, every other single item in the game is rendered to a BitmapData object at a reduced resolution, then scaled back up at runtime. This means less memory used, less strain on the renderer (as long as you’re only scaling once, not every single frame), and only a small impact on visual appearance. The nice thing about this technique is that you can take it to more extreme levels to compensate for weaker machines. In Dillo Hills, the lowest graphics settings will actually cause most bitmaps to be rendered out at ¼ their full resolution!

 

9) Include graphics settings

One of the things I wasn’t really thinking about when I first started programming Dillo Hills was an options menu with graphics settings. What I quickly discovered was that in the world of Android, every user’s phone is going to be completely different, and there is no shame in asking them to choose quality settings appropriate for their machine!

Just be prepared to deal with your users on a psychological level: a lot of gamers are going to hope/assume that their phone can handle the graphics at the highest settings, and then get angry when it can’t. I’m actually really considering using the labels “Normal, High, and Very High” for my graphics settings, instead of “Low, Medium, and High,” just to make sure people got the right idea.

 

10) Save gamestates instead of pausing when minimized

If you’ve read through the FGL tutorial, you’re aware that one of the things you’re going to need to do for your game is deal with the player minimizing your game: maybe to go check a text, maybe when they receive a phone call, or maybe just because their project manager walked in the room and wants to see how the presentation is coming along… not that I would know anything about that!

Most programmers will instinctively just pause their game and mute all sounds while it’s in the background. This is fine and dandy, except for one small problem: if the game is still running, it’s still rendering, and if it’s still rendering, it’s eating up the phone’s battery!

What I recommend (and what I intend to do with Dillo Hills in an upcoming patch) is to completely shut the game down while minimized, but to save the current gamestate to a SharedObject before closing. Then, when the user reopens the application, all of their existing game information will be loaded back in, and they will be given the option to pick up exactly where they left off.

 

MY OVERALL IMPRESSIONS WORKING WITH AIR FOR MOBILE

1) Setting up your IDE and programming for mobile is not scary.

Overall, my experience developing for Android has been quite good. The process of setting up the IDE had a few gaps that weren’t documented as well as I would have liked, but it still only took an hour or two to figure it all out. Once the IDE was set up, working with AIR was a breeze. Anyone who is familiar with AS3 will have no trouble making the jump – in fact, unless you’re building a game that utilizes mobile-specific capabilities (accelerometer / GPS / camera), you really aren’t going to have to do anything new or different other than handle menu button presses and activate/deactivate events.

Publishing for Android was just as easy. Free applications can be distributed with no prerequisite other than signing up for a developer account and uploading your APK file. Paid accounts require only a $25 license fee to upgrade your developer account to a vendor account.

Porting to the Playbook was also a breeze. All things considered, it only took me about 4 hours to convert the game from Android to Playbook, and almost all of that time was spent downloading/installing the Playbook API and Virtual Machine, not fussing around with code. (Note to anyone who is following the FGL tutorial: make sure you use version 0.9.4 or later of the Playbook API and the Virtual Machine software, not 0.9.3. Using 0.9.3 resulted in some very unusual crashes when I tried to play audio.)

 

2) The Android market has a huge degree of fragmentation.

As I mentioned earlier, almost all of the negative feedback we’ve received so far is related to poor performance on a handful of specific phones (in particular: the Droid X, the Galaxy S, and pretty much anything over 9 months old). When you’re developing in Flash, you can really get away with a lot of dumb stuff without noticing any major performance problems. When you’re developing for mobile, though, you’re going to face performance problems even if your game is optimized beautifully. There are simply too many different phones spanning a massive range of hardware capabilities to get a reliable experience from phone to phone.

We also encountered a lot of unexpected results once the game hit the market. For instance, the Samsung Captivate has consistently outperformed the Droid X, even though it is almost 5 months older. Equally surprising: we have had a lot of people reporting worse performance using rooted/overclocked phones than users with the equivalent base models!

Just out of curiosity, I checked out the reviews for a handful of other popular Android games, and found that even some of the biggest developers are getting the exact same frustrations from fragmentation:

Fruit Ninja (Halfbrick Studios): Works perfectly on most phones, even as far back as the Motorola Droid, but some newer phones experience input lag. The Droid X seems to be an absolute wildcard – some users report flawless gameplay, while others report severe lag and crashing.

Doodle Jump (GameHouse): Works perfectly on most phones, but a handful of phones lag or crash, including the Wildfire and the Droid.

PewPew 2 (Jean-François Geyelin): Works perfectly on most phones, but crashes on the Droid X and the Nexus S.

Angry Birds Rio (Rovio Mobile): Works perfectly on most phones, but lags and crashes on some models, including the Moment, the Xperia, the Slide, and the Legend.

The moral of the story is that with Android, you just can’t ever really know for sure how your game is going to run until it’s out in the wild. Obviously, it’s important to optimize as much as you can to increase the number of phones that run your game well, but it’s going to be nearly impossible to get it working for everyone.

 

3) The Android platform is prone to piracy.

So far, roughly 20% of all people playing the premium version of Dillo Hills are playing a pirated version of the game – in spite of the fact that a free version of the game is available in the market. I haven’t seen any hard data yet, but other people I’ve talked to have reported piracy rates as high as 80%.

There are many reasons why the piracy rate on the Android platform is so high, but the simplest explanation is that Android is just a very open platform. It’s easy to access and modify files on your phone, it’s easy to install applications directly from an APK file, and it’s easy to extract the APK file from an installed application. (In fact, it can be done using file management software that is available directly from the Android market.)

This is something that Google is actively working on, and I was happy to see that they are replacing their existing copy-protection system (which was cracked within mere days of its announcement) to a licensing system. However, even this has drawbacks. First, the licensing system seems to only be accessible to applications developed in Java or Objective-C, not AIR (if anyone knows otherwise, please speak up). Second, DRM systems almost always end up causing more frustration than they’re worth. How many times have you pirated a song/program that you already own because the DRM stopped working, or only worked when you were online?

It’s a tough problem, and it’s one that the software industry has been dealing with for years: it’s just now getting to the point where Flash/AIR developers will really get their first taste of it. Up until now, all we’ve had to worry about was decompiling and illegal distribution (which usually ended up helping us more than it hurt, anyway). This problem is harder to fight, and hurts us much more.

Will we ever see a foolproof solution to piracy? Almost certainly not. For the time being, developers moving into the Android market just need to be prepared to deal with the fact that a lot of people are going to be stealing the products of their hard work.

 

SUMMARY AND CLOSING THOUGHTS

Hopefully, I’ve been able to offer something useful or insightful. I’m actually really looking forward to hearing what tricks other developers have come up with to optimize their games for mobile, because I’m sure there are all kinds of crazy things I haven’t even dreamed of!

 

Stats Break: Sales by Editor’s Rating

Hi guys, thought I’d share this since it recently came up in the Suggestions forum. Here’s a breakdown of games that accepted bids, broken down by their Editor’s Rating. This is for 1/1/2011 to 4/16/2011.

Rating # of Sales
4 2
5 0
6 21
6.5 65
7 233
7.5 128
8 60
8.5 12
9 2

And here it is in tasty pie form:

 

One of the odd beliefs is that only games rated 8+ sell, which really isn’t true. Games rated 8 do have a somewhat higher chance of selling for a satisfactory amount, but there’s nothing magical about the number.

Also, an unusual anomaly is that there are no games rated 5 that got sold in the last four months… usually there would be one or two. But in general, it is rare for a game rated below 6 to get a sale — if your rating is below 6, we recommend you improve your game before trying to sell it.

This data will eventually be part of an automated report, so you can break things down per month.

 

Update: as always, stats beget more stats… commenters want to know how many games are in each rating and what percent of each rating sells. I can’t use the date range listed above for that because it’s too new — it would indicate that games put up yesterday “didn’t sell”, whereas we don’t consider a game unsold unless it’s been up for at least six weeks. So here’s a longer-range breakdown, for all of last year and the first couple months of this year.

Let’s see how horrible pasting from Excel looks…

Editor’s Rating Total Percent of Total Number Sold Percent that Sell
Unrated 30 0.79% 4 13.33%
2 1 0.03% 0 0.00%
3 7 0.18% 0 0.00%
3.5 1 0.03% 0 0.00%
4 30 0.79% 3 10.00%
4.5 1 0.03% 0 0.00%
5 116 3.06% 5 4.31%
5.5 9 0.24% 0 0.00%
6 936 24.65% 192 20.51%
6.5 411 10.82% 121 29.44%
7 1325 34.90% 771 58.19%
7.5 389 10.24% 303 77.89%
8 457 12.04% 421 92.12%
8.5 50 1.32% 50 100.00%
9 31 0.82% 31 100.00%
9.5 2 0.05% 2 100.00%
10 1 0.03% 1 100.00%

 

I’ve talked about these stats on the blog before, and most recently you would have seen these if you used the pre-review system — it uses statistics like these to predict whether you will get a sale or not. E.g. if your pre-review score is a 6, the email will tell you that you’ve got a 20% chance of getting a sale unless you improve your game.

The biggest issue with these numbers is that the half-point scores started being used in the middle of the reporting period. (They were phased in over a multi-month period so there’s not a specific date to use.) Generally speaking, our average rating went down by .5, so what used to be an 8 is now a 7.5, etc. So this data captures a slice of both the old and the new rating scales at once, which makes the percentage of sales a little suspect, but nothing’s perfect.

It’s also worth noting again that we get lots of games that would be rated below 6, but we simply tell the developer not to bother unless they improve the game, as they don’t sell and we don’t want to give people false hope. And generally speaking, our reviewers can help get a “4″ or “5″ game up to a “6″ with extensive feedback, but not always… so the games rated below 6 are people who couldn’t or wouldn’t keep improving their game to get it a higher mark.

And as requested, you can discuss it here in the forums.

Monetizing Your Web Game Part 2

Monetizing Your Web Game Part 2

Currently there are many choices when it comes to monetizing a web game.  It can be daunting to decide which model is best for a developer.  On top of this, there are conflicting reports as to which ones are truly lucrative.  The hope of this series of articles is to shine a light on many of the monetization methods to choose from by presenting hard facts based on case studies from a number of developers as well as statistics we have been tracking at FlashGameLicense.com and GamerSafe.com.

Part 2: Advertising

In part 1 of this series we covered sponsorships and licensing.  Since that article was dedicated to explaining how sponsorships and licensing works I won’t repeat that information except to say that most sponsorships and licenses are used as a sort of advertising.  It can be confusing for someone unfamiliar with the web game market when they hear the term “advertising” since, really, it could mean any branding in a game, yet the term is never used in such an encompassing manner.

First, I will point out a few of the big distinctions between Advertising and Sponsorships.

-        Advertising usually consists of rotating ads that are dynamically loaded into the game.  The most effective way of handling this is by using a 3rd party ad platform like CPMStar or MochiAds.

-        Sponsorships usually consist of static branding put in the game by the developer.

-        Due to the dynamic nature of Advertising, and the need to support hundreds or thousands of advertisers, there are limitations to how Advertising can be implemented.

-        For an advertiser, a couple big advantages of Advertising are the ability to geo-target and change up campaigns.  Whereas the advantages of Sponsorships are associating your brand with a great game and not being limited to campaigns.  Sponsorships last forever.

-        Note that neither one is better than the other, they just have different benefits.

Another confusing aspect of Advertising is the fact that it can reside both inside and outside of the game.   Usually, these are referred to as “in-game” and “around-game” advertising.  I will split this article up into two sections to handle each, but most of the focus will be on the in-game advertising.

Finally, before getting to the nitty-gritty, I want to define what “eCPM” (which is commonly merely called “CPM”) means.  This is the standard measurement for how ads perform.  It stands or “Effective Cost Per 1,000 impressions” which basically means how much money you make per 1000 viewers.  Some advertisers also factor in how many clicks an ad gets and how many actions are performed (registrations, etc…) but covering the entire realm of advertising is beyond the scope of this article and, really, you can still always boil things down to CPM anyway.

Ok, with that out of the way we can start talking about how Advertising usually performs for a Flash game and how to get the most out of Advertising.

In-game advertising

In-game advertising consists of all advertising… well, in the game.  As stated above, what this usually means, in the web-game space anyway, is that advertising is dynamically injected into your game.  The two main ways of doing this is by running a “pre-roll” ad or an “interstitial” ad.

Pre-roll ads

Pre-roll, or “stinger”, or “pre-loader” ads are ads that run sometime before a game starts.  A popular method of implementation is to have the ads run as the game is loading.  It has been proven that gamers don’t mind waiting a short period of time to play a game and are ok with watching an ad before a game.  Global CPMs of $.20 – $2 are usually what you can expect with pre-roll ads.  To achieve the higher end of this spectrum there are a couple of standards a developer will need to follow:

-        “Tasteful” integration – this may seem very general, but the reality is it will depend on the game.  Some developers just slap up ads and hope for the best.  The games that have the highest eCPMs integrate the ads in a clever way.  I’ve seen ads that are framed by art assets that have done well.

-        Require interaction to move past the ad – most of the time this merely means putting a “start game” button under the ad to let the player continue to the game.  The reason this is important is because a variety of factors can make it so that the ad is never seen by the player. For example, if a site is running a javascript pre-loader that runs over your game, players may never see your ad since it runs underneath then continues to the game automatically before the Player sees it.  The act of requiring interaction to move on, alone, will increase ad clickthrough rates by as high as 10%.  I have seen games go from $.10 CPMs to $1 CPMs by making this simple change.

Interstitial Ads

Interstitial ads are ads that play sometime during the game; usually at points where a game has a stoppage or pause in gameplay such as a game over screen or next level screen.  Much more care needs to be taken when implementing interstitial ads than with pre-roll ads because gamers are not as tolerant of ads within a game.  Especially if they perceive the ads are interrupting the gameplay. However, an upside to this type of ad is that the developer can be more creative with the implementation.  There is the possibility to integrate ads seamlessly into the game.  Standards for implementing interstitial ads are the same as with pre-roll ads.

Around game

As explained, around game ads are ads that reside on the site that host the game.  These usually consist of banner ads around the game and in various other locations on the site. It also includes, though, a pseudo-pre-roll ad that is run over the game or before the game is loaded (usually using javascript) that some sites use. Usually the revenue from these ads goes to the site owner, and not the developer.  This symbiotic relationship of developer providing the content and monetizing within the game and portal taking the content and monetizing around it is the most often encountered situation.  However, there are sites that will also share the site revenue with the developer, allowing the developer to benefit from both sides.

There’s also no reason that a developer shouldn’t create their own developer site to showcase their games and use around game advertising to monetize that site.  In fact, I highly encourage it.  Even if you get a sponsorship, having your own links to your developer site is usually not an issue.  Fans who love your game will most likely be interested in your other games.  You might as well monetize that. Just be careful not to turn your developer site into a full blown portal if you plan to use sponsorships in the future.  Sponsors may see your site as competition and not allow your links in the games they sponsor.

This is merely an introduction to the world of advertising web games, and is not meant to be all encompassing or definitive.  I invite all readers to visit our site: FlashGameLicense.com to find out more.  FGL is also THE place to buy or sell web games, so be sure to visit if you are hoping to do either or both.

As a final note I want to stress that the Advertising model and all of the models that will be covered in future articles in this series are not mutually exclusive of each other.  Developers can, and should, take advantage of all of them. I am merely presenting them individually as to make them less confusing to understand. The final article in this series will cover the best ways to combine as many of these monetization models as possible to maximize the revenue generated by your game.

 

 

We’re Proud to Introduce New Payment Features

We’re always looking for ways to facilitate transactions and add value for both sponsors and developers. We have a couple of great new ways to do that! First up is ProxyPay.

ProxyPay

In short, ProxyPay is a service to help sponsors and developers get money to each other across different payment systems. For instance, a sponsor can pay us via PayPal, and we can then pay the developer via MoneyBookers or wire transfer.

If you’ve ever experienced the nuances of paying internationally, or if you are an international developer that’s tired of trying to arrange a payment method that will work in your country (and tired of saying “no I can’t take PayPal in my country!”), then you probably see the benefits of ProxyPay right away.

There are modest fees associated with this service, to cover our costs. The most common arrangements (such as the above-mentioned payment via PayPal to MoneyBookers) costs $50 plus the service fees from PayPal and MoneyBookers.

The ProxyPay system has been in beta for some time, so you may already have received payments this way. However, it’s now open to anybody, so developers, feel free to ask sponsors to use ProxyPay to pay you. This page has all the details.

EasyLicense

Sponsors are increasingly needing more and more information from developers in order to license games.  Legally, in most countries, sponsors must collect tax information and have multiple contracts signed between them and the developer before they can sponsor, or even non-exclusively license, a game.  Some larger companies even require upwards of $3million in insurance coverage from the developer.  For indie developers, and even small development companies, these are large hurdles –  sometimes even roadblocks.

This is where EasyLicense comes in to make things… well.. easy!

From the developer’s perspective, EasyLicense allows you to sign one contract, and set up all of your payment information through one company, FGL.  FGL then can sub-license your game out to anyone you choose without you ever having to sign another contract, or hunt down your EIN or W8-Ben, or any number of other aggravating tasks.

From the buyer’s perspective, EasyLicense allows you to work through FGL to license potentially thousands of games without worrying about tax withholding laws and treaties in various countries.  It also allows you to pay out to a single, US, company for all games.  Companies we are currently working with have found this saves them significant amounts of money since their legal and accounting departments rarely need to get involved. This also benefits both sides in our experience as this allows payouts to flow much faster than cases where hundreds of developers are being paid individually.  All contracts also come with $1million in insurance coverage for errors and ommissions, and cyber liability by default, and more can be added if necessary.

Although this service is still in beta, we’re already seeing exciting sponsorship growth through this licensing model. If your company would benefit from this service, please drop us a line and we’ll get you the details.

 

More Stats Break: AS2 vs. AS3

In the last post, I reported that 33% of games are made with AS2 (over the past six months on this site). HansaW wondered how well the AS2 games sold versus AS3 games. Interesting question, so I dug that up:

Here’s another angle:

Yep, definitely making less money. But these are a little misleading, at least to me, since there are fewer AS2 games versus AS3 games overall. So I crunched a different stat: assuming the game sells at all, it will sell for 18% less on average if it’s in AS2 versus AS3. However, I think that disparity is more about the quality (and simplicity) of the average AS2 game, as opposed to an effort by sponsors to pay less on AS2 games per se.

In fact, anecdotally, it seems like some sponsors aren’t really paying attention to the AS2/AS3 status on the game before they bid… even if they can only use AS3 games! I just got another email about a sponsor pulling out of a bid because they didn’t notice it was AS2 before bidding. Strangely, that’s two this week. Sponsors, please note this before bidding, if that’s important to you!

FlashDevelop: How Was It Recorded?

The other big question from my last blog post was about how people using FlashDevelop are recorded in our stats: several commenters said they use Flash Pro only at the end of development, to bundle the game with a preloader, so they were incorrectly reported as Flash Pro users even though it’s not their main development environment.

I made a small effort to detect this case, actually. The “other” category includes some games that seemed like they only used Flash Pro briefly. If elements were dragged onto the stage instead of placed there via AS3 code, that was one indicator — another was whether there were a lot of non-default symbols in use, since I assume people who actually develop in Flash Pro end up creating a lot more named things (such as frames and symbols) than pure AS3 games do. But that was largely a guess: I poked at a couple games I knew were one way or the other, and made some simple heuristics based on what I saw. I don’t know how accurate they are.

So at the end of the day, it’s true: if you’re using Flash Develop or the command-line, you can assume you were incorrectly reported on that chart. I suspect a lot of the Flex users are actually not using the Flex Builder environment. I do kind of doubt there’s a huge number of incorrectly reported Flash Pro users, but I don’t really know.

Does it matter?

But on the other hand, for the most important use of that chart, it doesn’t matter!

When a sponsor asks us whether they should prioritize their development kit for Flash Pro or for Flash Builder or what, we’ll still probably tell them to prioritize for Flash Pro. Even if you don’t develop in it, the 55% number shows you at least have Flash Pro, and can make a build in it. Thus, more than half of all developers have access to, and skill with, Flash Pro.

So if someone had to choose between providing a timeline-based library or a mxml-based library, the timeline one could be integrated by more developers, it seems. (That’s a pretty terrible example… we’d never tell sponsors to make an API based on either of those approaches! But some people have multiple legacy libraries and have to choose what they will keep supporting.)

Again anecdotally, I know Adam has long been telling people that Flash Pro is underrepresented, and it seems that I interact with more Flash Pro users than FlashDevelop/etc. users.  That may be because I deal with people who have technical problems, and one could argue that that the average Flash Pro user is less technically savvy than the average FlashBuilder user, perhaps. Hard to say, really. I’ve met some amazingly skilled Flash Pro users, too.

When CS6 comes out, I’ll try to make time to create a permanent report tool that digs a little deeper on the heuristic analysis. (The chart from the last post uses several heuristics, but they are mostly unverified… in other words, they’re pure guesswork on my part.)