The reality of developing web games with Flash, HTML5 and Unity
Update: Lots of new links added at the bottom and feedback from comments inserted into the article body.
Today was a black day for Flash developers world-wide. Adobe announced it will drop Flash support for mobile browsers. This came the day after announcing mass redundancies across the company. On the face of it that doesn’t seem like a significant problem. But it has got the whole “Flash hate wagon” on the roll again, so I felt it was time to finally commit my thoughts to this blog.
First of all: I am only concerned about game development for the web. This entire article focuses on this specific topic and this topic alone. This is not a “Flash vs. HTML5” article. It’s not an article about building native apps for mobile. It’s entirely and utterly about the reality of making web games today.
I compare Flash, HTML5 and Unity, as they are the only viable web gaming platforms today. For each of them I cover 10 topics:
- Workflow – How easy is it to actually create a game?
- Platform Stability – Will things change between the time you start and finish your game?
- Backward Support – Will your game still run 10 years down the line?
- Mobile – Will your game run at all?!
- Distribution – There’s no point making something no-one will play
- Security – Code and IP protection
- Monetization – All about making games to make money
- Facebook – The social gaming angle
- How many people will play your game?
- 3D Support – Stage3D vs. WebGL vs. Unity
These are all areas that I feel game developers ought to be aware of when evaluating new platforms. I conclude this with my advice to Flash game developers both new and seasoned.
It’s a long read but it was vital I covered as much as I could, using facts and stats rather than hyperbole, so you can make the best informed decision possible.
Flash: Making games in Flash is easy. There are countless books, web sites, tutorials, game frameworks, libraries, videos and sample code out there. The tools to do it are completely free if you go down the Flex route, or paid if you use the Flash IDE. Flash has a versatile and very powerful vector renderer meaning you can create animations that take-up minimal file size. It has comprehensive audio support and most Adobe apps such as Illustrator and Photoshop hook into the Flash IDE. There’s a vast range of functionality built-in based on years of development.
HTML5: Editors such as JetBrains Astella are making coding less painful. There are some good debugging tools available and testing is as simple as launching a browser. There are plenty of HTML5 game dev books, web sites and on-line resources and lots of sample code. The tools to create HTML5 games are free, but there are commercial game-making apps as well including GameMaker HTML5 and Game Salad. Game specific libraries like ImpactJS exist if you want to get up to speed faster and are less worried how it works under the hood.
Unity: Unity has an excellent visual editor and hooks into mainstream 3D apps. The basic version is free for home-use. You can use it in companies too but only the turn-over less than $100k/year. The Professional version starts at $1500 with various add-ons bumping this price up. Once you have the software there are lots of books and resources for it available, so learning isn’t an issue.
2. Platform Stability
Flash: The platform on which the game lives (Flash Players AVM) is non-OS and non-Browser specific. It doesn’t matter if it’s a decrepit version of IE or the latest Chrome nightly, the experience will be the same for the player providing that Flash Player exists on that platform. Adobe typically release a new Flash Player version every year with several point releases through-out the year.
HTML5: The platform is in a state of flux and constantly shifting. There are two side-effects to this: The first is that your game could potentially break without you doing anything, just because the browser upgraded from beneath you. The second is that you don’t have just one platform to consider, you have lots. Getting your game working in Chrome is just the start, you also need to address IE, Firefox and Safari, across OS and minor release versions within a browser tree. The maintenance involved in this should not be under-estimated. The biggest technical challenges are issues including dire audio support and inconsistent canvas rendering speeds.
Unity: The Unity web player offers the same benefits as the Flash one. Providing the plugin exists for the platform, you are safe in the knowledge your game will run, regardless of the browser changing beneath you. Unity itself is also constantly evolving with new features introduced on a regular basis.
3. Backward Support
Flash: Games made in AS1 still run fine in Flash Player 11 today, a decade after they were built. Backward support is mostly excellent.
HTML5: It’s a little unfair to compare backward compatibility as the technology is ever evolving right now, meaning things can become depreciated quickly if they fall outside of the W3C standards.
Unity: [Updated]: Apparently based on comments below Unity games are not backward compatible with previous major versions of the browser plugin. Originally I had expected that it would be as backward compatible as Flash is, but it seems that might not be the case.
Flash: Until today I would have said that, iOS aside, mobile support for the Flash plugin was great 🙂 But Adobe have officially killed the Flash Player plugin for mobile and tablets, so consider this utterly dead. You can create mobile apps via AIR, but they aren’t web games so are outside the scope of this article. [Update] Stage3D for mobile still isn’t there yet and with so many hardware/vendor combinations, and an ageing AVM behind it, it’s an uphill battle for Adobe devs. Also it appears that in the restructuring Adobe have removed Oliver Goldman from the AIR team and moved him to Cloud projects. He was an absolutely key figure in AIR, there from the start, so read into this what you will.
HTML5: Here mobile support goes from strength to strength. iOS5 saw a huge HTML5 performance increase. As mobile browsers start allowing access to features such as touch events and accelerometer support, I only see this getting better. Of course you still have to deal with all the different screen resolutions and aspect ratios, but this isn’t specific to HTML5.
Unity: There is no mobile browser Unity plugin. Given Unity’s strength at compiling native mobile apps I can understand why.
Flash: Flash games package up into a single, nicely contained, easily protected SWF file. This file can be simply served via HTTP from any web site that wants to host it (if it’s a game created for distribution). Or it can be site-locked to a specific URL. The Flash gaming portal market is based entirely around the way in which these SWF files travel. Indeed the further they travel the more money you tend to make.
HTML5: There is no cross-browser / consistent way to package-up an HTML5 game yet. The biggest gaming portals don’t yet allow for developers to upload their own HTML5 games. I imagine because of the security issues involved in running “foreign” JS on their own sites (you could technically do or deface anything). This means the only way for an HTML5 game to “spread” is by URL sharing to a destination site, or embedding via an iFrame. Ultimately you the developer foots the hosting bill for these methods, or potentially your sponsor does. A lot of the way in which Flash games spread are from sites “taking” SWF files from popular portals and then hosting them. This isn’t as nefarious as it may sound, as is indeed how most Flash games make their money. Portals could use iFrames with the sandbox parameter set, but that will stop a lot of features an HTML5 game may require such as local storage or access to forms.
Unity: Unity is similar to Flash in that it creates a single file that can be uploaded to supporting gaming portals such as Kongregate.
Flash: SWF files are not perfect, but at least it combines all of your assets and code into a single place that requires technical know-how or 3rd party apps to break. There are lots of SWF protection services and software on the market which does a good job of encoding and obfuscating. Basically it prevents “casual” hacking and thieves.
HTML5: The JS code can be obfuscated but not encrypted with anything that can’t be un-encrypted client side. Code is easily tweaked at run-time in-memory. Graphic and Audio assets are extremely easy to steal, taking little more than an object Inspection in Chrome/Firefox or even a quick glance through a browser cache folder. If this is an issue for you or not is entirely dependant on your game and client (the type that pays the bills, not the browser client!). [Update] A valid comment was made below that there are ways of protecting your HTML5 assets, and that (in his opinion) Flash assets were just as easy to steal as HTML5 ones are. I’m not going to get into the debate of file protection, suffice to say that anything you can do to protect an HTML5 asset you can equally do in Flash.
Unity: Similar to Flash. Someone determined enough could access your assets, but it takes considerable technical knowledge. On the whole you’re safe from casual hackers and thieves (source).
Flash: There are many very well established ways to monetise Flash games including: Game sponsorship, in-game adverts, revenue share deals with gaming portals, ad sharing deals, in-game transactions and “work for hire” games made for clients. I know a lot of developers who live entirely off game sponsorship deals alone. Get a hit game and the ad share can rake in the cash as well. There are lots of APIs from ad networks and even the simple act of uploading your game to Mochi can net you some revenue longer-term.
HTML5: In-game advert services exist here, along the lines of putting a Google Ad in your game. I am not aware of any form of HTML5 game sponsorship market yet, or revenue share deals. In-game transaction services such as Fortumo exist and are well established. Of course you can make HTML5 for clients that ask for them too 🙂
Unity: I’m lacking in knowledge here, perhaps a reader can fill me in? I would expect there are a few advert APIs, although they may target Unity on mobile rather than Unity on the web.
Flash: Most of the top Facebook games are all running in Flash. The Sims Social with its 36 million monthly players is Flash. Half Bricks brand new Fruit Ninja Frenzy is running Flash, and they’ve reported they will take advantage of Flash Player 11 soon. Most of the new Zynga games, loathe them or love them, are Flash. The reason is audience reach, available skills (they can hire lots of Flash developers) and easy asset workflow. There are lots of ways of monetising games directly on Facebook with a vast range of 3rd party services and APIs to choose from.
HTML5: I struggled to find any examples of Top Facebook games that were purely HTML5. There must be some of course so if you have any please post links. Zynga famously bought Dextrose back in 2010 for “HTML5 gaming on Facebook” but I’ve yet to see the results. [Update] The original text said: “Some companies are already releasing HTML5 games onto Facebook such as OMGPOP and their game Gem Rush. Total daily users? Just 10″. But as a reader rightly pointed out Gem Rush is only HTML5 for the API, the game itself is Flash! Thus supporting my conclusion that it seems that the biggest players in the Facebook Social game space are firmly using Flash at the moment.
Unity: Unity games seem to have found themselves a lucrative little niche on Facebook. The games are by no means as ubiquitous as Flash, but they seem to be well supported. Titles such as UberStrike (830k monthly players) and King’s Bounty (20k monthly players) shows that Facebook players aren’t adverse to installing the Unity plugin if the content is compelling enough.
9. How many people will play your game?
Flash: Because of the fact that on the Desktop pretty much everyone connected to the Internet can play your game, the play counts are typically massive. A standard Flash game will see around 2-3 million plays in the first year or so. Exceptional Flash games see significantly more than this. Our game Home Sheep Home reached nearly 1 million plays per day upon release, and has had over 105 million plays in the 18 months it has been online. That’s a staggering number of players. Add that to the huge player figures across the top Facebook games and it’s probably safe to assume that there are hundreds of thousands of people playing Flash games online right this second. Audience won’t be your issue (visibility will!)
HTML5: I honestly couldn’t find any relevant figures for this, probably because the technology is still so new. And there aren’t all that many good games yet made with it. Glad to see links from readers to prove otherwise. Technically you could say that the potential audience is 1 billion+ but I’m trying to keep this post in the realms of reality so devs can make informed decisions.
Unity: Despite claims from Unity about the adoption rates of their player, the stats don’t really support this. If you take the top Unity game on Kongregate you’ll see it has had just 577,000 plays in total. The top Flash game on there has had 25 million plays. In fact none of the Top 100 Flash games have had less than 2.5 million plays.
10. 3D Support
Flash: Flash Player 11 introduced Stage3D. This is essentially OpenGL ES 2.0. Adobe have done a sterling job of implementing it, but there are some massive caveats. First of all the game needs to be embedded with wmode=direct. The vast majority of gaming portals don’t support this yet, so if your game spreads onto a site without that set it simply won’t run in 3D hardware. Secondly the blacklist of GPUs that are not supported is daunting. Anyone with drivers older than 2009? Gone. The most common Intel GMAs (on-board graphics chips) ? They won’t work either. Given that Intel GMAs were found in 90% of all PCs sold in 2007 this is a real concern. Of course Adobe have to draw a line somewhere, but the whole appeal of Flash is that it doesn’t matter what hardware you run it on, it’ll pretty much just work. If you target Stage3D specifically this is no longer the case, you’re actually cutting out a huge percentage of casual players. So be very careful before going down this route and be sure you can still monetise it at the end, if that is needed.
HTML5: Here we have WebGL. Very similar in lots of respects to Stage3D on a technical level given its OpenGL pedigree, but lacking in some key areas: No ability to go full-screen, no mouse capture (now available in Flash Player 11.2), no multiple render targets, no instanced drawing and more. There is an excellent article about the issues on the Autodesk blog. These however are short-term technical challenges and will eventually be overcome. The biggest issue with WebGL is simply Microsoft and their current stance on not supporting it. Microsoft are not part of the WebGL Working Group and is not showing any support for the format yet. This wouldn’t matter if it wasn’t for browser usage stats like these, that prove IE is still a force to be reckoned with, and will be for years and years to come.
Unity: Unity of course has 3D nailed. In the limited tests we’ve run we have seen GPUs that failed Stage3D blacklist restrictions run Unity content flawlessly. You have the browser plugin issue to overcome of course. But if you know your market well enough then Unity still remains the best solution for 3D gaming at the moment. Unity announced they would support exporting Unity games to Flash very soon, but that won’t get around the issues Stage3D has re: blacklists. And I would put good money on Unity exporting to WebGL in the not-so-distant future too.
How long will Adobe support Flash Player?
Let me highlight a few passages from the press release Adobe put out today. I’ve removed the corporate fluff:
“We are already working on Flash Player 12 … We will accelerate our work with the W3C and WebKit to bring similar capabilities to HTML5 as quickly as possible. We will design new features in Flash for a smooth transition to HTML5”
They also state that they see Flash Player as being primarily used in “advanced gaming” and “high end video”.
So you can read into this in several ways. On the one hand it sounds as if all of the progress and new features they are adding to Flash Player are being given to the W3C and WebKit teams, so that we see them added to HTML5. It also reads as if they are going to modify the Flash IDE so it becomes more of a tool that creates content for HTML5 rather than publish to SWF. So perhaps we’ll see it export timeline animations to SVG or Sprite Sheets.
Thibault Imbert blogged today saying we should all understand that dropping Flash from mobile is a good thing, and it allows Adobe to focus on AIR and Flash Player on the desktop. Apparently no-one was creating mobile browser Flash content anyway. I don’t disagree with this, but my issue is two-fold: First people are seeing this as Adobe killing off Flash. The “mobile” part of it is easily dropped in sensationalist headlines. This will only permeate the anti-Flash culture that Apple kick started.
My biggest problem however is this: it doesn’t matter that no-one was really crafting mobile Flash experiences. What matters is that by removing the plugin from mobile and tablet browsers you are enforcing the notion that the web is a place devoid of Flash.
The smart phone market is truly massive and mobile gaming is bigger than handheld consoles now. That’s a lot of people who can no longer experience the Flash content you’ve created. This has a knock-on effect to clients. Clients who were already unsteady about the fact that any Flash element on their site (game, video, interaction) didn’t work on iOS, are now going to be doubly scared that it just won’t work full-stop on anything except desktops. You can get away with a bit of collateral damage by not supporting iOS, but you absolutely can’t ignore all those hundreds of millions of extra people added to the list.
This is much less of a problem for us game developers, who were never really creating Flash mobile browser games anyway. But you don’t upset the apple cart like this without bruising all aspects of the Flash world in the process.
Probably the most striking part of his post concludes with this:
“In the long term, we’re actively working on an ambitious future for Flash. The implementation details may change, as we’ve been talking about today. We believe that the DNA of Flash doesn’t reside in those implementation details, but in our promise to make it easy to create and deliver the most amazing experiences everywhere”
Again this is open to interpretation – but if you take it with the press release above I think it clearly highlights the fact that Adobe themselves see no future for the Flash Player plugin on the desktop. I expect we’ll see attempts at cross-compilation from AS3 to JS, or some kind of native JS SWF shim. If they can get enough of the Flash Player features supported in WebKit then exporting AS3 to HTML5 will be much less traumatic for them.
I’m sure that it will continue to exist for AIR. This is just the future of the browser plugin I’m debating.
What should Flash game developers do?
Think carefully, stop and evaluate the situation.
Flash is not yet dead. HTML5 is not yet ready for real-world web games, the kind that actually make money. We are in a period of transition which coincides with what is quite probably the apex of Flash gaming on the web. There are more Flash games being released than ever and the quality-bar is phenomenal now. I’ve yet to see a single HTML5 game that comes close to matching the sort of games we were creating several years ago, never mind today.
But the writing is on the wall. The Flash Player plugin has a corporate bomb strapped to it with a very long fuse, but it’s lit and is burning down.
I expect HTML5 games to start eating away at the lower-level Flash games. It’s not capable yet of taking on the sort of Flash games we’re making today. But it can easily pick-off those lingering at the bottom layer, the less complex games, the quicker builds. The distribution and monetisation methods are vastly different, however I expect this to be funded by clients who insist we build their new games in HTML5. The more this happens, the more things are eroded further.
At the top end we’ve got Stage3D vs. WebGL. Stage3D is winning at the moment but only because of a handful of short-term technical issues with WebGL and the stance of Microsoft. That may sound like an insurmountable problem, but they’ve shifted direction in the past (Silverlight anyone?) and all the while IE drops in popularity. IE being gone is years away yet, but happening.
My advice is this
If you are a beginner developer don’t panic about this. Keep on learning how to make games in Flash, because the skills involved in game development are universal. The logic problems you’ll encounter, the way you need to handle pooling and user actions are rarely system specific. What you learn will transfer environment. Right now if you make a Flash game you can easily sell it, release it and have lots of people play it. Don’t under-estimate the morale boost this will give you. Finishing something is more important than platform.
If you are a seasoned game developer – carry on as usual for now too, you need to pay the bills after-all. Keep on creating those incredible Flash games and revel in the millions of players that will enjoy your game hassle-free, and of course take the clients money while it’s still there.
So why spend time on it? because I have zero hope or trust that we will ever see a tool that accurately converts from AS3 to HTML5. Not one that performs well enough for games.
So when the party is over and Adobe finally slam the door, do you really want to be the one left holding the keys?
Ben over at Playtomic wrote a nice post on how Flash game developers can disrupt the current gaming portal status quo
Grant Skinner shares his thoughts on the Flash Player mobile post mortem
Update – New Links and Articles
Here’s a collection of more news links worth reading since I posted this article:
BlackBerry say they’ll still support Flash and all is well, but them sum-up the whole article by saying go learn HTML.
Pritham Shetty, the Vice President for Video Solutions at Adobe, states clearly in this blog post that the Desktop version of the Flash Player plugin WILL be supported by Adobe. They don’t however say for how long.
Ben Forta is Adobe’s Director of Platform Evangalism. In his blog post he has a lovely retrospective about what Flash has helped do for the web. It’s well written and mostly free of BS, but the 25+ comments below it scream volumes about the reality of the situation.
It appears that in the restructuring Adobe have removed Oliver Goldman from the AIR team and moved him onto cloud projects. He was an absolutely key figure in AIR, there from the start, so make of this whatever you will.
R Blank wrote a great post called a Case Study in Message Failure. Fascinating reading and some excellent points.
Mike Chambers lays to rest the myth that the whole Flash Professional IDE Team were made redundant. They’re obviously still working on the IDE at Adobe, but it sounds like the focus is on making it create good HTML5 content. So still a confused message all-round really. I made a comment to his post asking about the future of the IDE and he basically said that “a lot of the things you do with Flash today will be done with HTML5 in the future”. I appreciate his honesty massively but don’t envy his position.
Doug Winnie was a Community Manager that Adobe made redundant. His post is passionate, warm and upsetting, if only because after reading it you realise two things: 1) He should never had been let go, because you just don’t get passionate people like him very often! and 2) his revelation that actually not even the Adobe staff had any about about the content of their press release is incredible.
Posted on November 10th 2011 at 3:59 am by Rich.
View more posts in Game Development. Follow responses via the RSS 2.0 feed.
146 ResponsesLeave a comment
Make yourself heard
All about Photon Storm and our
HTML5 game development services
Filter our Content
- Cool Links
- Flash Game Dev Tips
- Game Development
- Geek Shopping
- In the Media
- Phaser 3