Things I hate about AS3
After the experience of working on the almost 50,000 line Dragon Age: Journeys project, I’ve been thinking about what I love (and hate) about AS3. It’s really not a bad language, and it’s certainly professional enough to make high quality browser product. So, kudos from making something which looks sort of like Java and has a professional IDE like Flex to boot. But there are quite a few areas which just mystify me, and here’s the list:
Here’s my list of areas that could be improved upon.
- No ability to determine where an SWF was loaded from. If someone embeds a link on their page to my SWF which is hosted on my site, why can’t the SWF determine who is loading it — as opposed to who is hosting it? Sure, I can lock down the SWF on my site, but what if I wanted to have the SWF itself decide whether it could be loaded from an arbitrary domain X, and at runtime do different things?
- No multiple inheritance. Why, Adobe, why? You can implement an interface, and extend a class, but not extend more than one class at once? This would actually be a useful concept to have, even if you can kludgily work around it via aggregation.
- The Flex profiler. Some parts of it aren’t terrible, but why can’t you start and stop sampling via the GUI? Is that not an obviously necessary feature a developer would want? It might take me 5 minutes to play the game far enough to get to a point where I want to sample, and yet it seems to always grab the entire history of the running app.
- Enums. Where the heck are the enums? There are some nifty ways to roll your own via reflection (looking at the XML of the class itself), but come on here, people — this should be a native language feature.
- Block scoping. Anyone that’s tried to write “for (var i : int = 0; i < 10; i++)” more than once in a function knows this pain. What’s the point of even allowing a var declaration inside a for (or other) statement if it’s not going to be scoped to it? You might as well make it a compiler error and force all variables to be declared at the top of the function.
- Integer serialization. You would expect an int to be a 32-bit number, just like every other language in the planet. But the AMF format evidently uses this wacky 29-bit scheme which means your biggest unsigned int is actually 2^29-1.
- Release mode is useless. What’s the point of release mode compiling, if all my variables, symbols, and data can still be inspected in plaintext by any braindead Chinese hacker using off-the-shelf tools?
- Number types. If I write “x = 7″, what is 7? An integer? A double-precision float? Who knows! A rounding and precision nightmare.
Music is dead
Aside from the game business, I do dabble in music. I’ve also been running a small indie record label for the last 8 years or so. Recently I’ve been thinking that the music business is truly and completely fucked, partly because of some dumb moves on the part of the big labels, and partly because of vast societal changes.
This quote from a recent NYT article pretty much sums it up.
A study last year conducted by members of PRS for Music, a nonprofit royalty collection agency, found that of the 13 million songs for sale online last year, 10 million never got a single buyer and 80 percent of all revenue came from about 52,000 songs. That’s less than one percent of the songs.
76% of all songs up for sale never find a buyer! And it’s not just a quality issue, there’s just too much stuff out there. Got a new band? Good luck. “Long tail”? Doesn’t exist, unless you’ve already been selling music at a decent rate. “Promotion”? If you look at pretty much any band’s MySpace page, you’ll see that online promotion is akin to 100,000 people in a room all shouting at each other.
What you have here is:
- A low barrier of entry to content (lots of crappy bands can easily make records)
- “Infinite” distribution (gatekeepers are less relevant)
- The death of mass media and terrestrial radio (will U2 be the last ever Big Stadium band?)
- A highly explored artform (when’s the last time you said to yourself, “I’ve never heard a sound like this before?”)
Could this ever happen to games? Perhaps, but there are some key differences:
- Games are considerably harder to make than records, as they involve multiple disciplines of expertise
- Games can be interactive, providing a longer lasting experience
- Games can go online, helping to circumvent the piracy problem inherent in digital goods
Maybe someone will come along and reinvent the music industry’s business model, but I doubt it. Welcome to a future where you pay your $10/month to Spotify, get all the music you want, and creators are stuck getting a tenth of a penny per play. If you’re lucky enough to be Amanda Palmer, or Trent Reznor, perhaps you can live for a while convincing your rabid Twitter fanbase to buy $300 box sets or autographed beer mugs…
the monetization battle continues
Yeah, 2009 is a great year for trying to make money off of Flash games. Instead of being able to buy a venti iced cappucino (and a muffin!), you’re reduced to whatever grocery store swill your 85 cents per day can buy. Yep, ad revenue is in the toilet. GameJacket recently went bankrupt, not only leaving developers in a lurch, but making games which used their technology unplayable. (Server-side game storage doesn’t sound so hot now, does it?). Some people have noted that they were one of the only sites to guarantee 0.50 CPM’s, which probably contributed to their downfall.
So, now everyone wants to get into the microtransaction game. The obvious problem has been that Flash games by nature percolate from site to site, often making single-portal monetization solutions unattractive (sorry Whirled!). There are some exceptions, but in general the really good games are intended to get their millions of plays across a number of high-traffic sites. Thus what we need is a way for players to have some sort of shared currency, stored in some secure central location, that is available to them when playing a number of games across any portal which they happen to be hosted on.
Finally, some companies are stepping up to the plate. First is Mochi, with their predictably named MochiCoins service, still in private beta, but with at least one game floating around various portals. Not to be outdone, the Flash Game License crew has come up with their own system, GamerSafe, which combines microtransactions with server-side save games and achievements. There is also HeyZap, Andrograde, and a number of other solutions.
I think for any solution to gain traction, there needs to be a few key factors:
- First-mover advantage - The service which gets the first “hit” game, with microtransactions smartly implemented, will have a huge advantage.
- High-quality games — Users want to know that their transactions will be useful, bug-free, and for quality game content.
- The psychology of “free” — Users are used to free products. so if the games seem like “demos”, that will be a big turn-off. Instead, the transactions should feel like paying for icing on the cake, useful features that enhance their experience and are priced at a reasonable (i.e. cheap) cost.
- Stickiness/replayability — What’s the point of paying for premium features in a game that you’ll only play once for 5 minutes? Games that use this feature need to have depth and replayability. Ideally, the premium features should enhance long-term playability: fun, status among peers, UI advantages, etc.
- Variety of payment options — Paypal is great, but what if the user doesn’t have a credit card? (Other options like SMS transactions would be smart…)
- Security - At the very least, phishing of an in-game account should only let the thief access the stored credits. If there is a “gamer coins” to “real money” transaction path, there will inevitably be trouble, since Flash games can easily be decompiled/cloned/hacked to grab user login information.
Judith
Terry Cavanagh (of recent “Don’t Look Back” fame) has a new short indie game — Judith. This one’s downloadable, not Flash, but shares the same atmospheric/creepy aspect. It plays with an interesting split-narrative approach, and the Wolf3D-esque engine strangely helps make the game much more immersive.
It’ll only take 30-45 minutes to play through, but it’s highly recommended.