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!

 

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.

 

Monetizing Your Web Game Part 1

Monetizing Your Web Game Part 1

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 1: Sponsorship and Licensing

Before I get into the ins and outs of licensing a web game, let me define some terms:

Sponsorship

  • A deal made between an entity (the sponsor) and a developer in which the sponsor pays to have their branding/ads in one of the developer’s games. The terms Sponsorship and License are used interchangeably in most cases (and in all cases for the purposes of this article).

Primary License/Sponsorship

· A sponsorship where the Sponsor has their branding in every copy of the game on the web except where the developer has explicitly sold a Secondary License (defined below) to another entity. The developer has complete freedom to remove the primary sponsor’s branding and make any other changes to the game as long as it is licensed and locked to the other entity’s domain.

Non-Exclusive License/Sponsorship

· A Sponsorship where the license of the game is not exclusive to the buyer. The buyer is purchasing one custom version of the game.

Secondary License (aka Non-Exclusive Site-Locked License)

· A Sponsorship where the license of the game is not exclusive to the buyer. The buyer is purchasing one custom version of the game, and this version must be “locked” to the buyer’s domain. This is the most common type of non-exclusive license and it is compatible with the primary license.

Performance Bonus

· A bonus paid by the Sponsor to the Developer based on pre-defined performance milestones. Bonus structures take many forms. A couple of examples are: a lump sum payout if a game gets a certain number of plays, or a CPC (cost per click) deal where the Developer is paid for each unique user sent back to the Sponsor’s site.

There are many more licensing types, but these are the most popular and most important for this article. You can find a longer list of licensing types and terms here: http://www.flashgamelicense.com/view_library.php?page=license-terms

At its core, the Primary Sponsorship model is simple: A Sponsor is interested in getting his or her branding into a game that will potentially be viewed and played by millions of people. In most cases, the ultimate goal is to get those users to click back to the Sponsor’s site via the links in the game.

So, this is why your game is worth money to sponsors, but how do you get the most money out of the deal as possible? The trap many developers fall into is assuming that their game has a set worth to a sponsor, and that if the sponsor pays $x for the game, then they must surely be making more than $x from the game. This isn’t entirely accurate. Sponsors make money by licensing games in two main ways. One, is they plan on the long term funnel of new users a game will bring them. And two, they sponsor many games in hopes that a handful will be successful. So, what this means is that they are investing in your game so that they can make their money back long term or, if that doesn’t happen, that your payment will be absorbed by another – more successful – game. Of course, it is slightly more complex than that in the sense that they are getting brand association with your game and other perks like having high quality content for their site, but when thinking about how to get the most out of a deal the two main factors of long term earnings and uncertain returns should be considered the most. In short, if you can convince a sponsor that your game will have massive, long term, appeal and that their investment is well spent, you can make more money.

Easier said than done, right? Maybe not. Having a great game is definitely most of the battle when it comes to sponsorships, but there is a lot you can add to a game to increase its worth to a sponsor (as an aside I want to mention that you should NOT release your game before you seek a sponsorship. Once a game is released “into the wild” it is virtually worthless to a sponsor). The easiest way to do this is to give players a strong incentive to click back to a Sponsor’s site. This can be done by adding bonus content that is only playable on a Sponsor’s site, or linking to walkthroughs on the Sponsor’s site, or any number of other things. Take note, however, that you have to be extremely careful in how you execute, and present, this sort of tactic. You need to make sure that the game, on any site, is fully playable and not limited in any way. If players perceive the game as being nothing more than an advertisement, or that it is trying to trick them in some way, the game will undoubtedly be rated down and hidden on sites.

Before I continue I think it is important to point out something that will be a reoccurring theme in this series. It is important that you choose a monetization model for your games that you are comfortable with and that suites you. There are pros and cons to any path you choose. Some may have high risk, high reward. Others may be low risk low reward. Some may provide you with the creative freedom you desire, but limit you in how you can monetize the game, and so on. So, with this next bit of advice I caution you to decide what model you are most comfortable with. Based on what has been discussed this far, my recommendation is to strive to invest in the success of your game. This is usually a little bit more risky, but ultimately it drives everyone involved to push for the game’s success. The reason it is more risky is because it usually means you take less up front in the deal. Here are a few examples of how you can invest in your game’s success:

- Aim for a performance bonus (preferably based on CPC to the Sponsor’s site).

- Include links in your game to your own, Developer, site where you have site ads.

- Aim to include Ads in the game and Microtransactions if appropriate. Implementing either or both tastefully is key.

Notice that none of these investments harms the sponsor. In fact, they should increase the value to the Sponsor as well. Services like GamerSafe and CPMStar have built in mechanics to share revenue with Sponsors. And since you make more money by making the game more successful, the Sponsor is benefiting from a very motivated developer wanting to make sure the game does as well as it can.

Another great thing about Sponsorships is that you get to benefit from the Sponsor his/herself. Sponsors want the game to do well, and in most cases they know what players like. A Sponsor’s advice can be invaluable. Of course, you should never feel forced to make changes you feel will hurt the game, but you should be open to any suggestions a Sponsor may have.

Once you have accomplished these steps, the real fun starts. This is the point where you are actually pitching your game to sponsors. The easiest way to do this is at FlashGameLicense.com where we have an entire system built to assist you in this exact situation. The easiest and fastest way to find out your game’s worth in Sponsors’ eyes is to get them to bid on your game. Bidding wars often get heated and in the end the most motivated Sponsor ends up on top. And who else would you rather have investing in your game?

And once your Primary Sponsorship deal is complete you can start to sell non-exclusive licenses. This has proven to be a great secondary source of income for the Developer, but also a harmless condition for the Sponsor to allow. The point of a non-exclusive license, for the buyer, is not to drive traffic but instead to retain traffic and acquire quality content. Most sites who buy non-exclusive licenses would never take the distributed version of the game anyway since they do not allow branding other than their own on their site. What this means is a sponsor is not losing any traffic, but the developer is able to resell their game indefinitely. Oftentimes a sponsor will ask for a short period of time after the Primary Sponsorship deal is done before you can sell non-exclusive licenses, however.

This is merely an introduction to the world of sponsorships and licenses with 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.

To summarize what has been covered here:

- Make a great game (or have it nearly finished)

- Don’t release your game!

- Give players an incentive to click to the Sponsor’s site

- Invest in the success of your game (if it is right for you)

- Be open to Sponsor’s suggestions

- Get your game in front of as many Sponsors’ eyes as possible and have them compete to get you the best deal

- Sell non-exclusive licenses

As a final note I want to stress that the Sponsorship 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.

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 12">
<meta name=Originator content="Microsoft Word 12">
<link rel=File-List href="Monetizing%20your%20web%20game_1b_files/filelist.xml">
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Author>cahughes</o:Author>
  <o:LastAuthor>cahughes</o:LastAuthor>
  <o:Revision>2</o:Revision>
  <o:TotalTime>5</o:TotalTime>
  <o:Created>2011-01-05T00:19:00Z</o:Created>
  <o:LastSaved>2011-01-05T00:19:00Z</o:LastSaved>
  <o:Pages>4</o:Pages>
  <o:Words>1448</o:Words>
  <o:Characters>8259</o:Characters>
  <o:Company>UC Davis Financial Aid Office</o:Company>
  <o:Lines>68</o:Lines>
  <o:Paragraphs>19</o:Paragraphs>
  <o:CharactersWithSpaces>9688</o:CharactersWithSpaces>
  <o:Version>12.00</o:Version>
 </o:DocumentProperties>
</xml><![endif]-->
<link rel=themeData
href="Monetizing%20your%20web%20game_1b_files/themedata.thmx">
<link rel=colorSchemeMapping
href="Monetizing%20your%20web%20game_1b_files/colorschememapping.xml">
<!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:SpellingState>Clean</w:SpellingState>
  <w:GrammarState>Clean</w:GrammarState>
  <w:TrackMoves>false</w:TrackMoves>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-US</w:LidThemeOther>
  <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:DontUseIndentAsNumberingTabStop/>
   <w:FELineBreak11/>
   <w:WW11IndentRules/>
   <w:DontAutofitConstrainedTables/>
   <w:AutofitLikeWW11/>
   <w:HangulWidthLikeWW11/>
   <w:UseNormalStyleForList/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";}
h2
	{mso-style-priority:9;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-link:"Heading 2 Char";
	mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	mso-pagination:widow-orphan;
	mso-outline-level:2;
	font-size:18.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:"Times New Roman";
	font-weight:bold;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:"Times New Roman";}
span.Heading2Char
	{mso-style-name:"Heading 2 Char";
	mso-style-priority:9;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Heading 2";
	mso-ansi-font-size:18.0pt;
	mso-bidi-font-size:18.0pt;
	font-family:"Times New Roman","serif";
	mso-ascii-font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	mso-hansi-font-family:"Times New Roman";
	font-weight:bold;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
span.GramE
	{mso-style-name:"";
	mso-gram-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
 /* List Definitions */
 @list l0
	{mso-list-id:285281490;
	mso-list-type:hybrid;
	mso-list-template-ids:654729524 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Symbol;}
@list l1
	{mso-list-id:801927238;
	mso-list-type:hybrid;
	mso-list-template-ids:-1691822192 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Symbol;}
@list l2
	{mso-list-id:1635333280;
	mso-list-type:hybrid;
	mso-list-template-ids:-780790826 199371012 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
	{mso-level-start-at:0;
	mso-level-number-format:bullet;
	mso-level-text:-;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:"Calibri","sans-serif";
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Calibri","sans-serif";}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="2050"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>

<div class=WordSection1>

<p class=MsoNormal>Monetizing Your Web Game Part 1</p>

<p class=MsoNormal>Currently there are many choices when it comes to monetizing
a web game.<span style='mso-spacerun:yes'>  </span>It can be daunting to decide
which model is best for a developer.<span style='mso-spacerun:yes'>  </span>On
top of this, there are conflicting reports as to which ones are truly
lucrative.<span style='mso-spacerun:yes'>  </span>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.<span
style='mso-spacerun:yes'>  </span></p>
<p class=MsoNormal>Part 1: Sponsorship and Licensing</p>

<p class=MsoNormal>Before I get into the ins and outs of licensing a web game,
let me define some terms:</p>

<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
line-height:normal;mso-outline-level:2'><b><span style='mso-fareast-font-family:
"Times New Roman"'>Sponsorship<o:p></o:p></span></b></p>

<ul type=disc>
 <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
     line-height:normal;mso-outline-level:2;mso-list:l1 level1 lfo2'><span
     style='mso-fareast-font-family:"Times New Roman"'>A deal made between an
     entity (the sponsor) and a developer in which the sponsor pays to have
     their branding/ads in one of the developer's games. The terms Sponsorship
     and License are used interchangeably in most cases (and in all cases for
     the purposes of this article).<b><o:p></o:p></b></span></li>
</ul>

<h2><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Primary
License/Sponsorship<o:p></o:p></span></h2>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='font-size:11.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>A
sponsorship where the Sponsor has their branding in every copy of the game on
the web except where the developer has explicitly sold a Secondary License (defined
below) to another entity. The developer has complete freedom to remove the
primary sponsor's branding and make any other changes to the game as long as it
is licensed and locked to the other entity's domain. <o:p></o:p></span></p>

<h2><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Non-Exclusive
License/Sponsorship<o:p></o:p></span></h2>

<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='font-size:11.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>A
Sponsorship where the license of the game is not exclusive to the buyer.<span
style='mso-spacerun:yes'>  </span>The buyer is purchasing one custom version of
the game.<o:p></o:p></span></p>

<h2><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Secondary
License (aka Non-Exclusive Site-Locked License)<o:p></o:p></span></h2>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='font-size:11.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>A
Sponsorship where the license of the game is not exclusive to the buyer.<span
style='mso-spacerun:yes'>  </span>The buyer is purchasing one custom version of
the game, and this version must be “locked” to the buyer’s domain. This is the
most common type of non-exclusive license and it is compatible with the primary
license. <o:p></o:p></span></p>

<h2><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Performance
Bonus<o:p></o:p></span></h2>

<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='font-size:11.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;
mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>A
bonus paid by the Sponsor to the Developer based on pre-defined performance
milestones. Bonus structures take many forms.<span style='mso-spacerun:yes'> 
</span>A couple of examples are: a lump sum payout if a game gets a certain
number of plays, or a CPC (cost per click) deal where the Developer is paid for
each unique user sent back to the Sponsor’s site.<o:p></o:p></span></p>
<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'><o:p>&nbsp;</o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>There are
many more licensing types, but these are the most popular and most important
for this article.<span style='mso-spacerun:yes'>  </span>You can find a longer
list of licensing types and terms here: <a
href="http://www.flashgamelicense.com/view_library.php?page=license-terms">http://www.flashgamelicense.com/view_library.php?page=license-terms</a><o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>At its
core, the Primary Sponsorship model is simple:<span style='mso-spacerun:yes'> 
</span>A Sponsor is interested in getting his or her branding into a game that
will potentially be viewed and played by millions of people. In most cases, the
ultimate goal is to get those users to click back to the Sponsor’s site via the
links in the game.<o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>So, this
is why your game is worth money to sponsors, but how do you get the most money
out of the deal as possible?<span style='mso-spacerun:yes'>  </span>The trap
many developers fall into is assuming that their game has a set worth to a
sponsor, and that if the sponsor pays $x for the game, then they must surely be
making more than $x from the game.<span style='mso-spacerun:yes'>  </span>This
isn’t entirely accurate.<span style='mso-spacerun:yes'>  </span>Sponsors make
money by licensing games in two main ways.<span style='mso-spacerun:yes'>
</span>One, is they plan on the long term funnel of new users a game will bring
them.<span style='mso-spacerun:yes'>  </span>And two, they sponsor many games
in hopes that a handful will be successful.<span style='mso-spacerun:yes'>  
</span>So, what this means is that they are investing in your game so that they
can make their money back long term or, if that doesn’t happen, that your payment
will be absorbed by another – more successful – game.<span
style='mso-spacerun:yes'>  </span>Of course, it is slightly more complex than
that in the sense that they are getting brand association with your game and
other perks like having high quality content for their site, but when thinking
about how to get the most out of a deal the two main factors of long term
earnings and uncertain returns should be considered the most. In short, if you
can convince a sponsor that your game will have massive, long term, appeal and
that their investment is well spent, you can make more money.<o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Easier said
than done, right?<span style='mso-spacerun:yes'>  </span><span class=GramE>Maybe
not.</span> Having a great game is definitely most of the battle when it comes
to sponsorships, but there is a lot you can add to a game to increase its worth
to a sponsor (as an aside I want to mention that you should NOT release your
game before you seek a sponsorship.<span style='mso-spacerun:yes'>  </span>Once
a game is released “into the wild” it is virtually worthless to a sponsor).<span
style='mso-spacerun:yes'>  </span>The easiest way to do this is to give players
a strong incentive to click back to a Sponsor’s site.<span
style='mso-spacerun:yes'>  </span>This can be done by adding bonus content that
is only playable on a Sponsor’s site, or linking to walkthroughs on the
Sponsor’s site, or any number of other things.<span style='mso-spacerun:yes'>
</span>Take note, however, that you have to be extremely careful in how you
execute, and present, this sort of tactic.<span style='mso-spacerun:yes'> 
</span>You need to make sure that the game, on any site, is fully playable and
not limited in any way.<span style='mso-spacerun:yes'>  </span>If players
perceive the game as being nothing more than an advertisement, or that it is
trying to trick them in some way, the game will undoubtedly be rated down and
hidden on sites. <o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Before I
continue I think it is important to point out something that will be a
reoccurring theme in this series.<span style='mso-spacerun:yes'>  </span>It is
important that you choose a monetization model for your games that you are
comfortable with and that suites you.<span style='mso-spacerun:yes'> 
</span>There are pros and cons to any path you choose.<span
style='mso-spacerun:yes'>  </span>Some may have high risk, high reward.<span
style='mso-spacerun:yes'>  </span>Others may be low risk low reward.<span
style='mso-spacerun:yes'>  </span>Some may provide you with the creative
freedom you desire, but limit you in how you can monetize the game, and so
on.<span style='mso-spacerun:yes'>  </span>So, with this next bit of advice I
caution you to decide what model you are most comfortable with.<span
style='mso-spacerun:yes'>  </span>Based on what has been discussed this far, my
recommendation is to strive to invest in the success of your game.<span
style='mso-spacerun:yes'>  </span>This is usually a little bit more risky, but
ultimately it drives everyone involved to push for the game’s success.<span
style='mso-spacerun:yes'>  </span>The reason it is more risky is because it
usually means you take less up front in the deal.<span
style='mso-spacerun:yes'>  </span>Here are a few examples of how you can invest
in your game’s success:<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-fareast-font-family:
Calibri;mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Aim
for a performance bonus (preferably based on CPC to the Sponsor’s site).<o:p></o:p></span></p>

<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-fareast-font-family:
Calibri;mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Include
links in your game to your own, Developer, site where you have site ads.<o:p></o:p></span></p>

<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-fareast-font-family:
Calibri;mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Aim
to include Ads in the game and <span class=SpellE>Microtransactions</span> if
appropriate.<span style='mso-spacerun:yes'>  </span>Implementing either or both
tastefully is <span class=GramE>key</span>.<o:p></o:p></span></p>
<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Notice
that none of these investments harms the sponsor.<span
style='mso-spacerun:yes'>  </span>In fact, they should increase the value to
the Sponsor as well. Services like <span class=SpellE>GamerSafe</span> and <span
class=SpellE>CPMStar</span> have built in mechanics to share revenue with
Sponsors.<span style='mso-spacerun:yes'>  </span>And since you make more money
by making the game more successful, the Sponsor is benefiting from a very
motivated developer wanting to make sure the game does as well as it can.<o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Another
great thing about Sponsorships is that you get to benefit from the Sponsor
his/herself.<span style='mso-spacerun:yes'>  </span>Sponsors want the game to
do well, and in most cases they know what players like.<span
style='mso-spacerun:yes'>  </span>A Sponsor’s advice can be invaluable.<span
style='mso-spacerun:yes'>  </span>Of course, you should never feel forced to
make changes you feel will hurt the game, but you should be open to any
suggestions a Sponsor may have.<o:p></o:p></span></p>
<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>Once you
have accomplished these steps, the real fun starts.<span
style='mso-spacerun:yes'>  </span>This is the point where you are actually
pitching your game to sponsors.<span style='mso-spacerun:yes'>  </span>The
easiest way to do this is at FlashGameLicense.com where we have an entire
system built to assist you in this exact situation.<span
style='mso-spacerun:yes'>  </span>The easiest and fastest way to find out your
game’s worth in Sponsors’ eyes is to get them to bid on your game.<span
style='mso-spacerun:yes'>  </span>Bidding wars often get heated and in the end
the most motivated Sponsor ends up on top.<span style='mso-spacerun:yes'> 
</span>And who else would you rather have investing in your game?<o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>And once
your Primary Sponsorship deal is complete you can start to sell non-exclusive
licenses.<span style='mso-spacerun:yes'>  </span>This has proven to be a great
secondary source of income for the Developer, but also a harmless condition for
the Sponsor to allow.<span style='mso-spacerun:yes'>  </span>The point of a
non-exclusive license, for the buyer, is not to drive traffic but instead to
retain traffic and acquire quality content.<span style='mso-spacerun:yes'>
</span>Most sites who buy non-exclusive licenses would never take the
distributed version of the game anyway since they do not allow branding other
than their own on their site.<span style='mso-spacerun:yes'>  </span>What this
means is a sponsor is not losing any traffic, but the developer is able to
resell their game indefinitely.<span style='mso-spacerun:yes'> 
</span>Oftentimes a sponsor will ask for a short period of time after the
Primary Sponsorship deal is done before you can sell non-exclusive licenses,
however.<o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>This is
merely an introduction to the world of sponsorships and licenses with web
games, and is not meant to be all encompassing or definitive.<span
style='mso-spacerun:yes'>  </span>I invite all readers to visit our site:
FlashGameLicense.com to find out more.<span style='mso-spacerun:yes'>  </span>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.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>

<p><span style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>To
summarize what has been covered here:<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Make a great game (or have it nearly finished)</p>

<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Don’t release your game!</p>

<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='mso-fareast-font-family:"Times New Roman"'>Give
players an incentive to click to the Sponsor’s site</span></p>

<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='mso-fareast-font-family:"Times New Roman"'>Invest
in the success of your game (if it is right for you)</span></p>

<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='mso-fareast-font-family:"Times New Roman"'>Be
open to Sponsor’s suggestions</span></p>

<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Get your game in front of as many Sponsors’ eyes
as possible and have them compete to get you the best deal</p>

<p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo3'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='mso-fareast-font-family:"Times New Roman"'>Sell
non-exclusive licenses</span></p>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>As a final note I want to stress that the Sponsorship model
and all of the models that will be covered in future articles in this series
are not mutually exclusive of each other.<span style='mso-spacerun:yes'> 
</span>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.</p>

</div>

</body>
Monetizing Your Web Game Part 1

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 1: Sponsorship and Licensing

Before I get into the ins and outs of licensing a web game, let me define some terms:

Sponsorship
  • A deal made between an entity (the sponsor) and a developer in which the sponsor pays to have their branding/ads in one of the developer's games. The terms Sponsorship and License are used interchangeably in most cases (and in all cases for the purposes of this article).

Primary License/Sponsorship

  • A sponsorship where the Sponsor has their branding in every copy of the game on the web except where the developer has explicitly sold a Secondary License (defined below) to another entity. The developer has complete freedom to remove the primary sponsor's branding and make any other changes to the game as long as it is licensed and locked to the other entity's domain.
  • A Sponsorship where the license of the game is not exclusive to the buyer.  The buyer is purchasing one custom version of the game.
  • A Sponsorship where the license of the game is not exclusive to the buyer.  The buyer is purchasing one custom version of the game, and this version must be “locked” to the buyer’s domain. This is the most common type of non-exclusive license and it is compatible with the primary license.
  • A bonus paid by the Sponsor to the Developer based on pre-defined performance milestones. Bonus structures take many forms.  A couple of examples are: a lump sum payout if a game gets a certain number of plays, or a CPC (cost per click) deal where the Developer is paid for each unique user sent back to the Sponsor’s site.

Non-Exclusive License/Sponsorship

Secondary License (aka Non-Exclusive Site-Locked License)

Performance Bonus

There are many more licensing types, but these are the most popular and most important for this article.  You can find a longer list of licensing types and terms here: http://www.flashgamelicense.com/view_library.php?page=license-terms At its core, the Primary Sponsorship model is simple:  A Sponsor is interested in getting his or her branding into a game that will potentially be viewed and played by millions of people. In most cases, the ultimate goal is to get those users to click back to the Sponsor’s site via the links in the game. So, this is why your game is worth money to sponsors, but how do you get the most money out of the deal as possible?  The trap many developers fall into is assuming that their game has a set worth to a sponsor, and that if the sponsor pays $x for the game, then they must surely be making more than $x from the game.  This isn’t entirely accurate.  Sponsors make money by licensing games in two main ways.  One, is they plan on the long term funnel of new users a game will bring them.  And two, they sponsor many games in hopes that a handful will be successful.   So, what this means is that they are investing in your game so that they can make their money back long term or, if that doesn’t happen, that your payment will be absorbed by another – more successful – game.  Of course, it is slightly more complex than that in the sense that they are getting brand association with your game and other perks like having high quality content for their site, but when thinking about how to get the most out of a deal the two main factors of long term earnings and uncertain returns should be considered the most. In short, if you can convince a sponsor that your game will have massive, long term, appeal and that their investment is well spent, you can make more money. Easier said than done, right?  Maybe not. Having a great game is definitely most of the battle when it comes to sponsorships, but there is a lot you can add to a game to increase its worth to a sponsor (as an aside I want to mention that you should NOT release your game before you seek a sponsorship.  Once a game is released “into the wild” it is virtually worthless to a sponsor).  The easiest way to do this is to give players a strong incentive to click back to a Sponsor’s site.  This can be done by adding bonus content that is only playable on a Sponsor’s site, or linking to walkthroughs on the Sponsor’s site, or any number of other things.  Take note, however, that you have to be extremely careful in how you execute, and present, this sort of tactic.  You need to make sure that the game, on any site, is fully playable and not limited in any way.  If players perceive the game as being nothing more than an advertisement, or that it is trying to trick them in some way, the game will undoubtedly be rated down and hidden on sites. Before I continue I think it is important to point out something that will be a reoccurring theme in this series.  It is important that you choose a monetization model for your games that you are comfortable with and that suites you.  There are pros and cons to any path you choose.  Some may have high risk, high reward.  Others may be low risk low reward.  Some may provide you with the creative freedom you desire, but limit you in how you can monetize the game, and so on.  So, with this next bit of advice I caution you to decide what model you are most comfortable with.  Based on what has been discussed this far, my recommendation is to strive to invest in the success of your game.  This is usually a little bit more risky, but ultimately it drives everyone involved to push for the game’s success.  The reason it is more risky is because it usually means you take less up front in the deal.  Here are a few examples of how you can invest in your game’s success: -          Aim for a performance bonus (preferably based on CPC to the Sponsor’s site). -          Include links in your game to your own, Developer, site where you have site ads. -          Aim to include Ads in the game and Microtransactions if appropriate.  Implementing either or both tastefully is key. Notice that none of these investments harms the sponsor.  In fact, they should increase the value to the Sponsor as well. Services like GamerSafe and CPMStar have built in mechanics to share revenue with Sponsors.  And since you make more money by making the game more successful, the Sponsor is benefiting from a very motivated developer wanting to make sure the game does as well as it can. Another great thing about Sponsorships is that you get to benefit from the Sponsor his/herself.  Sponsors want the game to do well, and in most cases they know what players like.  A Sponsor’s advice can be invaluable.  Of course, you should never feel forced to make changes you feel will hurt the game, but you should be open to any suggestions a Sponsor may have. Once you have accomplished these steps, the real fun starts.  This is the point where you are actually pitching your game to sponsors.  The easiest way to do this is at FlashGameLicense.com where we have an entire system built to assist you in this exact situation.  The easiest and fastest way to find out your game’s worth in Sponsors’ eyes is to get them to bid on your game.  Bidding wars often get heated and in the end the most motivated Sponsor ends up on top.  And who else would you rather have investing in your game? And once your Primary Sponsorship deal is complete you can start to sell non-exclusive licenses.  This has proven to be a great secondary source of income for the Developer, but also a harmless condition for the Sponsor to allow.  The point of a non-exclusive license, for the buyer, is not to drive traffic but instead to retain traffic and acquire quality content.  Most sites who buy non-exclusive licenses would never take the distributed version of the game anyway since they do not allow branding other than their own on their site.  What this means is a sponsor is not losing any traffic, but the developer is able to resell their game indefinitely.  Oftentimes a sponsor will ask for a short period of time after the Primary Sponsorship deal is done before you can sell non-exclusive licenses, however. This is merely an introduction to the world of sponsorships and licenses with 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. To summarize what has been covered here: -          Make a great game (or have it nearly finished) -          Don’t release your game! -          Give players an incentive to click to the Sponsor’s site -          Invest in the success of your game (if it is right for you) -          Be open to Sponsor’s suggestions -          Get your game in front of as many Sponsors’ eyes as possible and have them compete to get you the best deal -          Sell non-exclusive licenses As a final note I want to stress that the Sponsorship 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. </html>

And the results are in!

The votes have been tallied and the results of the 2010 FGL Developer’s Awards are here!

Best Artwork: It’s a tie! Both Armed with Wings 3 and Homerun in Berzerk Land win Best Artwork.

Best Story/Ambiance: By a large margin, the winner is The Company of Myself!

Most Original Design: This was a close one! The winner is Steambirds!

Best Music/Sound: Another big victory for The Company of Myself!

Most Addictive: Crushing the competition, the winner here is Cursed Treasure: Don’t Touch My Gems!

Technical Achievement: This was a tough race; a lot of innovative games came out last year. But the winner is… Big Pixel Zombies!

Best Game: This was an extremely tight category… we almost had another tie on our hands. But the winner is… Steambirds!

Congratulations to the winners! Thanks to the community for the event, and thanks to JJWallace for the art. We’ll attach the award badges to your accounts soon (after the next site update). For the categories of “best artwork”/”best sound”, we’ll award the badge to both the “owning” developer and the developer credited for art/music.

2010 was a very impressive year for Flash games. Let’s see what 2011 can do!

Icon Voting Is Back – With Extras

If you’ve visited the chat room recently you may have noticed a new icon-voting widget. Icon voting is back! If you have time, visit the chat room and vote on some icons! (Or, if you prefer, vote directly from the full-size voting page).

How does an icon get into the voting pool? Automagically. Any unsold game that has been uploaded within a month and is visible to developers or sponsors will automatically have its icon entered into the voting pool. Once an icon has at least 10 votes, the game’s authors can find the “icon hotness” on the game-view page underneath the description.

Remember that better icons mean more clicks from sponsors. And after your game launches, better icons mean more clicks from gamers, too! So please take care to make the best icon you can.

Speaking of icons after the game launches… we realized that we’ve been leaving sponsors out of the equation. Sponsors often need to pick the best icons, too! Many will use a game’s FGL icon, but sometimes that icon doesn’t strike their fancy (or their target demographic’s fancy) and they need to make custom icons. Now they can get their custom icons rated, too. The multi-icon upload page lets you add extra icons to the voting pool to get rated. The number of icons you can upload is determined by your Market Level. (And this feature is available to developers too, in case you have several icons and can’t decide which to use.)

PS – We’re still early in the voting (and we’re still tweaking the methodology) but you can already see some clear trends in the Top 100 Icons list and the Bottom 100 Icons list. And there’s a Middle 100 Icons list, too… the most average icons!

How To Protect Your Game From Being Rebranded

We’ve been hearing a lot of complaints recently about game “rebranding theft” — where unscrupulous websites hack your newly-released game and change your sponsor splash screen, logo, and other identifying assets. This practice is mostly confined to a few countries, especially Chinese portals, and has been happening for years, but it seems to be growing more common.

This amounts to game theft, of course, and it goes completely against the sponsorship model. It’s also quite illegal to modify and redistribute a copyrighted game like this… which is why it is less common in the US, where a sponsor could easily sue another portal for such behavior. But for portals operated in other countries, it can be difficult to take legal action against them.

But you, the developer, can take action! It is actually pretty easy to protect your game from being rebranded. First, you need to know a bit about SWF files.

SWF Format Makes Image Changing Easy

The SWF file format is an open format, well documented by Adobe itself [pdf]. SWF files are made up of little individual chunks, kind of like how a .ZIP file is made up of lots of files. Your pictures are each stored as separate chunks in the file.

Much as you can unzip a .zip file, you can unzip a SWF into its parts. Then you can change some parts (such as the images) and zip it all back into a SWF again. (I’m simplifying a lot, of course — it’s more complicated than the .ZIP file format, but the idea is very much the same!) Your images, your sounds, your shapes, and your code are all stored as separate little units inside the file.

This isn’t a flaw in the SWF format — it’s a feature! Adobe has made the format quite easy to use so that it can be read and manipulated by anybody. The convenience of this format is why there are so many great tools and languages for Flash. But it has a down side, too… it means it’s easy for somebody to replace your images with their own. There are tons of very good tools that can break your SWF down into parts and then put it back together again, with new images included.

Encryption Tools Protect Source Code, Not Images…

You may be wondering, “Well then, what do the various SWF encryptors do?” These don’t encrypt your images. They encrypt your code. If we use the zip-file analogy again, your compiled AS2 or AS3 source code is stored in the SWF file as separate chunks, completely isolated from the images and sounds and so on. What encryptors like Kindisoft do is munge those particular “code” chunks so that they are much harder for human beings to figure out.

But they don’t protect your images… since those are just stored directly as JPEGs, there isn’t much that can be “encrypted” about them. If an encryptor changed the image data, the Flash player wouldn’t know how to read the file!

… So Use Your Code To Protect Your Images

So if only code is protected, how do you protect your images? You write code that verifies your images are what you expect! Then you take advantage of Kindisoft or another code-encryptor to make sure that malicious users can’t remove your code checks.

But how does your code know if the image is right? What we need are “checksums” — a small value that mathematically represents a larger data unit. You may have heard of MD5 or SHA1 checksums… same idea. But there are actually tons of ways to checksum something. Here’s the simplest (and hence, fastest-to-calculate) checksum:

function checksum_Basic(bmp:BitmapData):uint
{
var bounds:Rectangle = new Rectangle(0, 0, bmp.width, bmp.height);
var bytes:ByteArray = bmp.getPixels(bounds);
var total:uint = 0;
for (var loop:uint = 0; loop < bytes.length; ++loop)
{
total += bytes[loop];
}
return total;
}

This function just loops over every pixel in your image, and adds all the RGB values of every pixel together. This results in a number. If the image changes, the number will change, too. Tada! Now your game just needs to check your images at runtime to make sure that it calculates the same number that you calculated originally. If the number’s not what you expected, the image was changed.

First, write a little throw-away program to find out the checksum numbers for the image(s) you want to protect. Assuming you have a DisplayObject or Image control named “picture”, this is how you call the above function on it:

var bitmapData:BitmapData = new BitmapData(picture.width, picture.height);
bitmapData.draw(picture, new Matrix());
trace("This image's checksum is " + checksum_Basic(bitmapData));

Now you should see something like this in your trace output window: “This image’s checksum is 4921452″. Collect these numbers for each image you want to protect, and then copy them into your actual game. In your game, you call the same function and just check against those numbers:

var bitmapData:BitmapData = new BitmapData(picture.width, picture.height);
bitmapData.draw(picture, new Matrix());
if (checksum_Basic(bitmapData) != 4921452)
{
// do something, we've been hacked!
}

Repeat this process for each image. (Make sure the images are fully loaded before you do this!)

If your game detects that it’s been hacked, it should display a polite message and then shut down. Warning: Always be polite in these sorts of messages; never do anything unprofessional. Remember that anything you do on the internet will eventually be taken out of context! It may sound funny to show a picture of the goatse guy when you’re hacked, but somehow, somewhere, that gag is going to backfire on you. Just show a polite message and make the game stop working.

Be Double Secure – Use Two Checksums Together

The above method is all you need to protect your game from having other images stuck into it. But the checksum function I used above is mathematically pretty weak. If a hacker was willing to try enough different pictures, they would find one that has the same number as your picture. It’s probably not worth their trouble, but you never know how determined they’re going to be.

So since we’re feeling paranoid, let’s double it up with a second checksum! We’ll use the well-known SHA256 algorithm. Why? Because it’s very secure… and also because it’s easy to get ahold of! No math is required on our part. If you’re using Flex, then it’s built right in:

import mx.utils.SHA256;
function checksum_Flex(bmp:BitmapData):String
{
var bounds:Rectangle = new Rectangle(0, 0, bmp.width, bmp.height);
var bytes:ByteArray = bmp.getPixels(bounds);
return SHA256.computeDigest(bytes);
}

Or if you aren’t using Flex, you can download the source of the AS3 Core Lib, drop that into your project folder, and use the SHA256 function that comes with that, instead:

import com.adobe.crypto.SHA256;
function checksum_AS3CoreLib(bmp:BitmapData):String
{
var bounds:Rectangle = new Rectangle(0, 0, bmp.width, bmp.height);
var bytes:ByteArray = bmp.getPixels(bounds);
return SHA256.hashBytes(bytes);
}

These functions work exactly like checksum_Basic above, except they return a string like “ce68f9ebff02e8019702a3b4bc8d93535ffcf6b4844f24c0cf37e93bb871b97b” instead of a number. So you just collect those strings and then plug them into your program, same as above. If a picture has a different string at runtime, then it’s obviously changed!

You may wonder, why use both? Why not just use the string function, since it’s harder to trick? The answer is very pragmatic: it turns out that the SWF file format stores all the strings in your game together in little bundles, separate from the code. So even if your code is encrypted, a hacker can sometimes still see and change your string literals! (Kindisoft’s encryptor has a mode that encrypts strings as well as code, but other encryptors don’t.) So a savvy hacker could look for any string that looks like a checksum value, and replace it with the checksum of their own new image, fooling your code. It would be tedious, especially if you have a bunch of images with different checksums — they’d have to experiment to figure out which checksum went with which picture. But it doesn’t pay to underestimate the patience of game thieves.

It’s much harder to track down integer values, especially if you use a lot of constants in your program. Using both a string and an integer at the same time makes it quite difficult to trick your app.

That is, unless you don’t use an encryptor! Remember, this only works if you encrypt your code. If you don’t, then all of this was a waste of time, because thieves can just view your code, see exactly what you did, and remove all those if-statements! If you still haven’t bought an encryptor, do so — it’s a necessary investment. FGL’s encryptor of choice is Kindisoft’s secureSwf product — in our tests, this is much more effective than the other encryptors we tested. It’s also quite reasonably priced for FGL members, as Kindisoft has provided us with a special coupon code for FGL users.

Finally, Beware The Cheap Trick of Moving Your Image Off-Screen!

The way the SWF file format works is both a blessing and a curse. Well, for game devs trying to keep their games safe, it’s mostly a curse. Case in point: even if you protect your images as described above, hackers may still be able to remove your branding! How? By moving it off the screen! If you use the Flash development IDE and place the image on a MovieClip frame, then that frame data gets stored separately from your code. As explained above, only your code is encrypted… so a clever hacker can simply change the x,y coordinates of your image so they’re off the screen, or shrink the width and height to be 1 pixel in size!

If you’ve placed your logo and splash screen on frames in Flash, you should write code that makes sure the images are where you intended them to be. If the picture’s supposed to be at 0, 0, and 640×480 wide (or whatever), your game code should make sure it’s where it’s supposed to be!

If you code directly in pure AS3, or if you use Flex Builder, Alchemy, or haXe, you aren’t susceptible to this problem because your code is what positions the images. The only games that are susceptible to having their images moved off-screen are the ones written directly in Flash player, when the image is placed directly onto a frame.

EDIT: pjbaron pointed out that there are more variables that can be adjusted: alpha should be 1.0, visible should be true, and scaleX and scaleY should be the values you expect them to be. Hmm, this is a lot of variables to validate!

EDIT #2: Rocketman had another approach: use checksums on your fully-rendered splash screens, instead of just the splash screen images. This is easy to do — just dump the entire stage to a BitmapData, get the checksum of it, and use that checksum as described above. If your stage’s checksum changes from what you expected, then something on the stage has gotten moved around somehow.

EDIT #3: But that idea doesn’t work too great because if your game gets resized on some portal, the fully-rendered splash screen checksum will come out wrong. So I don’t recommend that plan after all.

EDIT #4: My current “best recommendation” is to simply not put important branding like splash screens on a movieclip frame at all… in other words, don’t place them on the screen in the Flash IDE. Instead, write some ActionScript code on that frame that creates the image and adds it to the stage or movieclip via addChild(). That way you bypass all of the nonsense about the variables getting manipulated, and it’s much harder to screw up unintentionally.

AS2 Users… All Of This Applies To You, Too!

Unfortunately, I don’t know how to code in AS2… at least, not well enough to make blog examples for it! But the same ideas described here apply for you, too.

AS2 has a BitmapData object also, but it doesn’t have a way to dump all of its pixels at once, so you’ll need to use BitmapData.getPixel() to get each pixel out of your image and add it to your checksum. This method will be much slower than the AS3 version, so you may not be able to do it to all the images in a large game — it might be noticeably slow — so just pick the ones that really matter!

Hopefully a savvier AS2 blogger will pick this up and provide good examples for you to work from.

So there you have it! You can protect your games from being illegally rebranded with less than an hour’s work. Definitely worth the effort to keep your sponsor logo and game branding visible.

About Admin Review Reports

Check Out Our New, More Comprehensive Review Reports

If you’ve had a game approved for sponsor viewing in the past few months, you probably received a note from us that listed some extra information about your review score. This is our new Review Report, and it’s a courtesy feature we’re experimenting with. It includes a little chart with some numbers, like this:

Intuitiveness: 7 Good
Fun: 7 Good
Graphics: 6 Average
Sound: 7 Good
Quality: 6 Average
Overall: 6.5 Above Average

In addition to these numbers, you will also see any notes the reviewers made.

Note that the “Overall” rating is not a straight average — different factors are weighted differently. For instance, Graphics are more important than Sound for most genres of game.

What Do The Numbers Mean?

We’ve recently made some effort to make our ratings more uniform. This has also caused them to drop a bit on average, as we had slowly been inflating our game scores over time. (The change is pretty modest, though.) Here’s what the numbers mean, in English:

1 Extremely Poor
2 Very Poor
3 Needs MAJOR Improvement
4 Needs Significant Improvement
5 Needs Improvement
5.5 Acceptable but Below Average
6 Average
6.5 Above Average
7 Good
7.5 Very Good
8 Great
8.5 Great
9 Amazing!
10 WOW!

My Game Was Got Rejected! Should I Be Angry?

No! If we reject your game (instead of approving it for bidding), the rejection is only temporary: we’re giving you an opportunity to improve your game before it’s seen by sponsors. Remember: you only get one chance to make a first impression with sponsors. So if we reject your game, it’s because we believe your game has potential — and just needs some extra attention before it can reach that potential.

If you don’t agree with our advice when we reject your game, you are always free to re-submit the exact same game again; if you do, it will be approved without further rejection, using the scores we previously indicated.

But we consider rejection to be a favor we give you, not an insult. We don’t reject every game just because we have ideas about how it can be improved. If we reject your game, it’s because we think your game in particular has potential, and we think our feedback will be especially valuable in reaching that potential.

Rejecting your game is never about punishing you — it’s about maximizing the sales potential of your game!

I Don’t Like My Review Scores! Can I Get a Re-Review?

In the past we’ve tried not to put too much emphasis on the admin review scores. They cause a lot of anxiety and they aren’t the most important thing to selling your game: a great game will sell regardless of what number we stick on it. But many developers have asked us for extra feedback about their game, and while we’ve offered lots of feedback over the years, we’ve never had a uniform method of organizing it until now. We know that sometimes, an objective critique of your game is incredibly valuable, not just for your current game, but for your future games as well. We’re happy to be able to provide some of that for the Flash community.

But at the same time, we also wanted to reiterate: please don’t read too much into the precise scores you get. They just don’t make that big a difference. We often have developers request a re-review because they believe they should have gotten a half-point higher than we gave them — a half-point difference is just not important in determining how well your game sells!

But we do make misjudgments, and developers sometimes make big improvements that we should know about. Ideally, we’d love to keep re-reviewing all games as often as needed, but that just isn’t possible: due to the volume of games we receive, we simply can’t re-review every game that requests it. So we have to limit it. If your game has been for sale for over 30 days and you have made significant improvements to it (such as all new graphics or very dramatic gameplay improvements), you can use the Feedback menu item to request a re-review. You can only request one re-review for your game ever, and be aware that a re-review might actually cause your score to go down! (It’s rare, but it has happened before, since the re-review may be done by different reviewers.) When you request this re-review, you will be added to a queue, prioritized by your Market Level. The re-review may take several weeks, depending on how busy we are. When you request the re-review, please make sure to include details of what you’ve changed. We want to see large and important changes before re-reviewing!

However, the best advice is, as always, to make sure the game is the best possible before you submit it for approval. Use FGL’s great community and our other feedback methods to hone your game — don’t rely on the admin review for feedback. You only get one chance to make a first impression with sponsors! Once your game goes live, there’s nothing anyone can do to take that first impression back. Make it count!

Choosing a Title and Icon for Your Game

Second Voting Experiment: Not Perfect! Argh!

Our second  round of experimental voting has ended, and we have some pretty interesting data to share about game icons and titles. Unfortunately, a lot of the data isn’t really statistically resilient. I mean, you guys provided a ton of votes — over 35,000 — and almost all of those votes look legitimate. So what’s the problem?

The problem is that the votes were unevenly spread out over 4000 different icons and titles, and most icon/title combos didn’t get the 40+ votes they needed to be particularly reliable… let alone get the 100+ votes we were shooting for. To make matters worse, to answer our core question, I needed to control for other variables, such as Editor’s Rating and game genre. When I did that, it pared the data down so that there was even less left to look at.

This dilution was caused by our desire to make the “experiment” also be immediately useful to developers by showing them an “Icon Hotness Rating” for their games’ icons. That meant that if developers changed icons or added games, new icons were tossed into the mix and old ones stopped getting votes. This diluted the data quite a bit… much more than I expected, because more and more developers used the data to iteratively improve their icons. If we had just picked 1000 existing games and not changed the data during the test, we’d have rock-solid data now. So the whole thing was probably trying too hard to be helpful — it derailed the experiment itself. On the other hand, many people let me know that the “Icon Hotness Rating” was very helpful to them, so it was certainly worthwhile in that respect.

So I’m disappointed at how hard it is to play scientist. (The guys in lab coats make it look so easy.) But we still have some fairly solid data to share.

Icons and Titles — Does Any Of This Matter?

The hypothesis was that if your game has a great icon and title, it will be viewed by more sponsors than a game with a mediocre or poor icon/title. That’s because your icon and title are the most prominent advertising elements FGL uses in emails and webpages.

So did we get enough data to tell if that was true or not? Yes. All other things being equal, a game with a great icon and title will get between 20% and 50% more unique sponsor views than a game with a very poorly-rated icon and title. No matter how I slice up the data, that seems pretty clear.

I can hear your next comment: “But most of the bottom-tier icons are joke icons, or placeholders, or so amateurish that they obviously suck. These results don’t mean anything!” That’s why the number above was calculated only using games that actually got sponsorships during our test period. So all the joke icons, beginner games, and so on aren’t included in these numbers… unless they somehow got a sponsorship of $100 or more. Furthermore, I tried to control for different Editor’s Ratings by only comparing games with the same editor’s score. No matter whether your game got a 7, an 8, or whatever, you will still get more sponsor views if your icon and title are in the top tier of voting rather than the bottom.

And once you get these extra views, do they pay off? Yes! Considering relatively-equivalent games, it looks like:

  • Games with top-rated icons/titles sell about 8 days faster than games with very poor icons/titles
  • Games with top-rated icons/titles sell for about $1100 more than games with very poor icons/titles
  • Games with top-rated icons/titles sell within a month 38% of the time, whereas games with very poor icons/titles sell within a month 18% of the time

These shouldn’t be too surprising, because if you get more views, then it naturally follows that you sell faster and have better offers.

So that clinches our argument. Woohoo! Except.. you’ll notice that I only compared top-tier entries to bottom-tier ones. That’s because the data is too muddy to get a clear picture of the middle ground. How much more effective is a “Pretty Good” icon over a “Great” one? I dunno. It might even be that a mediocre icon is slightly better! (Maybe sponsors get scared away by really great icons, and are more comfortable clicking on slightly imperfect ones…) Seems far-fetched, but the point is we are still missing some pieces to the puzzle.

But for our sanity, we’re going to proceed with the assumption that there’s a curve of diminishing returns: a great icon/title gets more views than a mediocre icon/title, which in turn gets more views than a poor icon/title.

[A note on the rest of this article: the example icons I use below may not have been for a game that sold yet. I was only interested in the icons' ratings, and I didn't think to check anything else. That's because I make a bad scientist. However, this detail should matter very little for the purpose of critiquing the icons and titles.]

What Is A Great Icon and Title?

A great icon is a work of art. It tends to have an attractive central focus element, and a clearly distinguishable “foreground” and “background”. In most great icons, the central element is not fully contained in the scene — parts of it are out of the frame. (This is a common artistic technique to make the central element more exciting.)

                    

As often as not, the icon also includes the game’s title in it. (This may come as a surprise to followers of the first experiment — it turns out that even though the game title is displayed above the icon, having the title in the image is still good, if done well.)

Note that the titles in each of these are attractive and interesting to look at. We will soon see that a poorly-drawn title doesn’t do you any favors.

The subject matter doesn’t seem to matter a lot; the graphical style can vary dramatically as long as it’s attractive; and whether you have the title in your icon or not seems to be ultimately a matter of taste. Compare these two extremely-highly-scoring entries:

versus 

They are quite different, but both are great icons.

What can we say about the titles? Not a lot. I couldn’t easily spot a lot of patterns here, except that:

  • MOST great entries have short names of one or two words that fit elegantly overtop the icon
  • Great titles never use trademarked elements
  • These almost never use “2″ or “II” to indicate they are a sequel
  • All “great”-class titles use proper English capitalization (it’s “Medieval Wars”, not “medieval wars”)

What is a Medium Icon and Title?

(As I mentioned earlier, the “medium” area is the hardest to categorize because the data isn’t super solid. Some of these might be in the “great” or “low-quality” areas, and some icons used as high-quality or low-quality examples might be medium icons in disguise. But here’s my best-guess analysis anyway.)

Most “medium” icon/title combinations use the same basic premise as the “great” entries above, but for artistic reasons, they don’t manage to reach the same quality level.

These icons:

  • Tend to use a central image that is completely contained in the icon (instead of being partially outside the frame)
  • Often have too-complex backgrounds that are hard to parse, or else completely static backgrounds of one color
  • Sometimes try to use multiple focus elements, resulting in inadequate detail to each of element
  • Often include titles in the icons, and even though they are skillfully done, they don’t quite reach the quality level of the “great” entries
  • Are often images right from the game’s play mode. (Gameplay screenshots are never in the “great” category… they’re always medium or poor, depending on how good the game itself looks.)
  • Most “pixel art” icons end up solidly in the middle range.

One surprising thing to note is that most gray-themed icons end up being in the medium-quality range, too:

A murky gray background usually can’t rise to the highest quality level. (Though there are a few exceptions.)

And what about the titles of these medium-level entries? Again, I didn’t see a lot of strong correlation, just a few details. The titles:

  • Tend to be a few letters shorter on average
  • Have a fair number of sequels with “2″ stuck on the end
  • Mostly use correct capitalization

What is a Low-Quality Icon and Title?

[I really hope none of the developers whose icons I use here are too upset by their inclusion. It's for educational purposes! But if you want me to remove your icon, let me know and I'll be happy to do so.]

A lot of the low-quality icons are clearly just practice entries, placeholders, and the like. We’ll focus on those that seem to have an actual game associated with them, but it should go without saying that an icon that just says, e.g. “Placeholder” on a white background rates very poorly. :)

The data gives us several great “DON’T”‘s:

  • DON’T use a photographic image. These always get rated poorly!
  • DON’T use trademarked or copyrighted assets, whether photographed, traced, or otherwise… if it’s recognizably somebody else’s IP, it gets rated very poorly.
  • DON’T use gameplay screenshots of your game, especially if your game’s graphics aren’t really impressive.
  • DON’T use your title screen as your icon.
  • DON’T make your own icon if you aren’t skilled in color composition.
Here are some more examples:

You would probably be surprised at the number of perfectly good games that have bad icons. These games can still sell, but they definitely have a harder time getting sponsorships — and tend to have to settle for lower amounts. Worse, even if you change out a bad icon for a good one later, it is often too late: your original art will have already been used in automated email blasts. So if you’re serious about selling your game, get a good icon before you put it up for bidding on our website!

What Next?

Hopefully there aren’t too many mis-categorized examples in all that. I’m certainly disappointed the data wasn’t more rock-solid. But I think the data was sufficient for its purpose, for now. I don’t plan to do another icon experiment in the near future.

However, we’ve heard from many of you that seeing your game’s individual “hotness” rating was very useful. So I’m exploring ways to make this a permanent part of the website, with a bit more customization and options than the “experiment” versions had. The permanent version will also be collecting data, of course, so eventually we’ll have enough data for all kinds of statistics. It may take a year or longer, but that’s okay!

I hope this has been helpful, and I hope your games reach your sales goals.

Discover the secret to getting lots of sponsor views!

We’ve been doing some experiments recently to help nail down exactly what determines the number of sponsor views your game gets. There are a million variables — everything from genre, to market level, to day of the week, to — well, who knows what else? We here at FGL have always had our strong suspicions, but we decided to get more scientific about it. (Why did we do this all of a sudden? Actually it was because of the recent Developer Survey. One of the biggest requests was more information and statistics on how to sell your game.)

First up, we examined the importance icons by themselves. People chose which icons they found “hottest”, and then we correlated that “hotness factor” with how many views the game got. This correlated surprisingly well: it’s very important to have a good icon for your game! But what makes a good icon? Well, you can see the results, along with the actual best and worst icons, here.

We’re now onto the second experiment, and here’s where we need your help. This one is broader: it covers both game icons AND game titles. To get good results for this one, we need a lot of votes! We’ve also incorporated feedback from the first experiment to make this one much more robust and (hopefully) accurate. Have you got a few minutes?

Please go vote on some games!

It’s kind of addictive, and it’s helping gather really useful data!

You don’t need to be an FGL user to vote on icons, so please feel free to spread that link far and wide! After the experiment we’ll crunch the numbers and post the results here on the blog.

Thanks for your time!