GameMaker HTML5 – deeper impressions

For Ludum Dare 24, I worked on my project in Game Maker: Studio, and did most of my development work targeting HTMl5. I produced a Windows build as well as an HTML5 build, and have spent a lot of time enhancing the game since the compo deadline.

This has afforded me the opportunity to become much more familiar with GameMaker’s HTML5 shortcomings, so it seems like a good time to follow up on my initial impressions from the January beta. While most of the basic features are solid, there’s still a lot of bugs, unsupported features, and inconsistent implementations in the HTML5 runner. Unfortunately, it adds up to make the HTML5 module a bit lacking for serious game development.

Don’t get me wrong — it’s still very possible to make a decent, playable HTML5 game with GameMaker Studio. Just, if you’re hoping to be able to do absolutely everything in HTML5 as you can in Windows, you’re in for a long wait. While much of the framework runs equivalently, there are a lot of minor differences. And while these are minor details, producing a polished, professional game is all about minor details, and getting them right.

I still think there is a lot of promise for HTML5, but W3C, WHATWG, and the major browser developers have to pull together to solidify the technology standards. YYG can’t do some of the things with the HTML5 runner that they currently do in the Windows runner, without this happening. To their credit, they have been releasing updates rapidly, patching bugs almost weekly.

Unfortunately, this means that HTML5 games built in GameMaker Studio are not going to be as pretty or as polished as Flash can be, at least for the foreseeable future. Of course, Flash has many of its own problems: with the rise of the open HTML5 standards, Flash’s future is in doubt, and it seems to be in decline, so it’s not like it’s a great platform to pick up right now if you’re not already well versed in it. Unfortunately, the usurper isn’t quite ready yet. The W3C recently announced the HTML5 recommendation will be finalized in 2014, but even once that has been accomplished, it’s still up to the browser developers to support the standard consistently and completely — something they were never able to accomplish with HTML4. This points to HTML5 being a less solid platform than game developers might hope for.

Here’s some of the shortcomings I ran into while developing Karyote.

Color blending

The Game Maker HTML5 runner doesn’t support all the color blending modes that the Windows runner does. Color blending effects really make games look great when done well, so this is a huge disappointment graphically. I submitted a bug report for this and YYG closed it saying they can’t do anything to address it until the web standards catch up.

Surfaces

Surfaces kindof work in HTML5, but I have a major problem with my implementation in Karyote. Somehow, the game broke when I added a drawing surface, such that in normal run mode, most of the objects in the game don’t draw/don’t exist. I don’t have any understanding why, either.

It works fine in Windows, but in my HTML5 build it doesn’t work unless running in debug mode. The problem only exists when the game is not running in debug_mode, so debug mode is not helpful for me to trouble shoot with. In fact, the running version that I have up of the enhanced build currently is running in debug_mode, with the debug console hidden with CSS.

Creating sprites – no control over collision masks

This was my first game where I implemented procedurally generated sprites, and they work great in my Windows build, but not in HTML5. For some reason, when I create my sprite in HTML5, they don’t get a correct collision mask, and end up with a mask that is much too large, resulting in poor hit detection. It seems the collision mask is set to match the bounding box of the sprite, rather than the image. In the Windows build, the sprite automatically gets an accurate, precise collision mask.

There’s a gml function sprite_collision_mask() which is supposed to allow me to set the collision mask, but this doesn’t work in HTML5, either. In reading up on the issue, I learned this is a bug, and there’s presently a workaround available by using sprite_duplicate(), but this approach apparently can cause excess memory consumption and/or performance issues.

Drawing round objects are approximated

If I draw_circle() in gml, I don’t get a true circle. I get a polygon which has enough sides to reasonably approximate a circle, as long as the radius is sufficiently small. For even a moderately sized circle, you can see the flat edges and corners. Smooth, scalable vector graphics like you’d expect to see in an SVG or Flash animation don’t seem to be implemented yet.

Update: There’s a gml function, draw_set_circle_precision(), which can be used to set the number of sides in your circle-approximating polygon between 4 and 64. The more sides in your pseudo-circle, the slower they are drawn. This still isn’t a true circle, and will still have smoothness issues when scaled very large, but it’s better than nothing.

Conclusion

I still see much potential for HTML5 games, but until these issues have been fixed, it’s going to be hard for GM:Studio developers to equal the graphical quality of a good Flash developer. HTML5 is the heir apparent to replace Flash, but it’s still emerging and has yet to establish itself as a mature technology, and it will likely be a few years before this will happen.

Meanwhile, Flash is not the best game development platform, either, and it’s not the best web application platform, and while it’s under steady assault due to the mobile market spurning it, it’s still a more mature technology, and there are game development frameworks for it. While I can’t really recommend Flash to a new developer, if you’re a seasoned Flash developer you may want to stick with Flash for web browser games for a while longer yet, unless you really want to reach the mobile device market yet don’t want to do native development for some reason. But really, the answer for mobile devices is to do native development — the difference between a native Android or iOS game and what can be delivered through HTML5 is like night and day.

Or, if you’re really looking to make web browser games, you may want to take a look at some of the competing technologies, such as Construct, or Unity 3D, native HTML5, or something else.

GameMaker has some definite strengths, and is making steady strides, but the battle is far from over and there are other legitimate contenders in the market.

If you use GameMaker for other platforms, the HTML5 module is still worthwhile, but you’re not going to be able to do absolutely everything you want to be able to do with it. Buying it now still gives you a lot of capabilities, and if you haven’t yet, you’ll probably want to get started now in order to get familiar with them so that you’ll be ready to deliver robust, high quality games once the technology catches up. Waiting until the platform is perfect before jumping in is just not a good idea, as you want to have as much of a head start as you can get to sharpen your skills.

You’ll need to HTML5-ify a version of your project to work around some of the limitations of HTML5. Use your source control and fork a branch for your HMTL5 customizations and workarounds.

An HTML5 game has a lot of potential to be a good way to entice players to try your game, and may lead them to download your other builds, by providing a limited demo that runs right in their browser. And there are plenty of games that you can make right now that are “fully featured” as long as you don’t require the things that HTML5 isn’t capable of delivering right now. But if you want something with a lot of eye candy, the equal to what you can currently do on your Windows GameMaker projects, it’s just not there today.

Site Update: Wider is Better

I’ve widened the wordpress theme for the site a bit more. This should allow for larger images, videos, and games. Unfortunately at the moment I think it’s made the text a bit harder to read than the narrower-width column was. I’m not entirely sure what to do about that at the moment. I’m interested in your feedback, obviously, so if this is too wide for your screen, or you don’t like it for some other reason, be sure to leave a comment and let me know.

Site update: Now using Google Translate

I’ve added a new feature to the site today, Google Translate’s website translator. This will enable you to tranlate the site automatically into over 60 languages.

Hopefully this will help readers who are more comfortable reading in another language to make use of the information I provide here. I have no idea how well the translator works, but I hope it does a good enough job to convey the understanding.

Keep in mind if you write a comment, I only speak English. If you post a comment in another language, I will try to translate it using the service, and will reply in English, which you will need to translate in order to read.

Ludum Dare #24 rankings

Voting is over. Rankings are up.

I wasn’t expecting great things for Karyote, and I got about what I expected.

Karyote Ratings:

Ranking/1406 Category Score (out of 5)
Coolness 100%
#253 Theme 3.20
#301 Audio 2.60
#335 Mood 2.70
#449 Humor 1.86
#459 Overall 2.82
#489 Fun 2.58
#492 Innovation 2.58
#628 Graphics 2.22

Comparing to my LD23 game, I ended up doing about as well as last time. I’m a little surprised, because I really didn’t think this game was as good at deadline, and I struggled during most of the compo, both to come up with ideas for the game, and to implement most of my experimental ideas, and I probably put in 10 fewer hours over the weekend on this one.

Category LD23 LD24
Coolness 56% 100%
Overall 2.76 2.82
Innovation 3.41 2.58
Fun 2.62 2.58
Theme 3.34 3.2
Graphics 2.75 2.22
Audio 2.07 2.60
Humor 2.07 1.86
Mood 2.68 2.70

Really, both games are fairly similar if you compare them — they both are about microorganisms. I guess microorganisms are easy to do games about when you don’t have any good ideas ;-) I hope I have a game idea for LD25 that doesn’t have anything to do with microorganisms!

Now that I’ve worked out a lot of the kinks in my post-compo version, I think Karyote is a lot better than it was at deadline, and I wonder how the enhanced builds I’ve been working on over the last two weeks would have rated. I’m two major features away from calling it complete now, and I am hoping it won’t take me much longer than the next two weeks to finish it up.

A Viable(?) New Business Model for Indie Game Development?

This article has also been posted on Gamasutra blogs.

So, I was thinking about making games, and why I do it. I’ve always said that I don’t care if the games I make generate income. I’m doing it because I love it, and while that’s enough motivation for me, any money I do make will help justify doing it more.

Then I thought about business models, and piracy, and copyright, and all the pain that goes along with that, on all ends of it. And I thought about the “pay what you feel like” model, and the crowdfunding model, and the way some AAA games get pre-ordered so gamers can reserve a copy at their retailer. I kindof like pay-what-you-feel-like. But then I thought of something innovative, that combines the strengths of these approaches, and takes them to the next level.

It’s a secret to everybody

So here’s my idea: All the games I release are free/pay-what-you-want. There’s no DRM on any of it, you can play it as much as you want, share it with whoever you want. I think most will agree that DRM sucks, and I don’t want to spend time or resources trying to come up with some copyright enforcement mechanism that will only be broken hours after I release the game, or tie the game to some online service that will mean that if the company ever goes out of business, all the games will become unusable. I don’t want to inconvenience legitimate owners of my game and then have to offer a quick patch and a lame apology for it later. I want people to play my games — and share them with their friends — why would I want to put an obstacle between them and the game that I want them to play? I’ll even put in social features that help you share it with all your friends and tweet about how much fun you’re having playing my game.

Let’s play money making game!

Here’s the money-making part of the plan: You pay for me to make my next game. Whatever it is. I’ll announce my projects and work at them at the pace that I can sustain. If I have to work a lot at some other job in order to pay my bills, then I spend more time working, less time making games, and the game still happens, but probably not for a long time, and maybe not ever.

This is, after all, pretty much how Kickstarter works: you pay up front for a thing to be developed, and you wait some time until it is ready to be released. And like Kickstarter, pledged funds would not be collected until the goal has been reached. And it seems to work well, at least for established names who have a reputation and fan base. But how does an unknown attract The Crowd and convince them that they’re worthy of funding? Anyone can start out small and build their fanbase over time, assuming they are dedicated and talented and put in the work. I know of no other way to build a fanbase than to release high quality games and distributing them as widely as you can, and ensuring that people who get to play them learn how they can get to play more awesome games even better than the one they just played. And the best way to ensure the widest distribution is to release for free. Once you have fans who believe in what you are doing, enough of them will gladly pay to see more.

If I finish the game before it has reached the money goal, I hold on to it until my fundraising goal is met, and taunt you with YouTube videos showing how awesome it is, and asking for money to release it, and otherwise marketing the game. Once I hit my revenue goal, I release it, for free, no DRM or anything, and the game becomes an advertisement for my next project which I am happy that you share with anyone and everyone.

So, if you like the games I make, and you want to see more of them, give me more money, and the more I get, the more time I can spend making games instead of doing other things that make me money.

I like it. It’s straightforward, it completely eliminates any concern about piracy or DRM, because you can’t pirate what hasn’t been built yet, and in fact my games’ popularity is aided by people who enjoy the games spreading the word about them, and getting more people to play them, it basically de-fucks copyright and performs its original purpose — To promote the Progress of Science and useful Arts — and, if the money comes in, it encourages me to make more, better games faster.

Learning from previous business models

During the shareware era, the proposition to the market was: “If you like this game that you just played for free, pay the shareware license for this game, because if you don’t then I’ll go out of business and there won’t be any more games.”

But most people ignored this. Revenue from shareware releases was always a tiny percentage of the total number of people who used the software. Users don’t like the nag screens and the guilt trips, and they’ll hack the binaries to eliminate them. They share the activation codes or crack whatever license controls you can think of, and you end up spending more time researching anti-piracy and fighting the spread and popularity of your game than you do making more cool games. It’s counterproductive.

But with this new approach, where the developer is explicitly saying: “This game is free, play the hell out of it and share it with as many friends as you can!” but also, “Here’s what else I have to offer, and you can help make it happen by contributing money to the project.” Kickstarter and IndieGogo have proven that this is viable. So, we’ve fixed all the problems of the old model — although the difference is subtle, the business model is crucially different, and addresses the failings of the previous models, and turns them into strengths. All the games are free upon release. Suddenly, there’s no longer an adversarial relationship between the players and the developer: I do what I love and make games, and you do what you love and play them. And if you want to play my next game sooner, you help me out by funding it.

By itself, I think many, perhaps most gamers would still ignore and pay nothing, like always. I mean, sure there’s always going to be leeches in any system. Leeches gonna leech. But that’s fine, because in my business model, they’re performing a valuable service: they’re doing your marketing for you, if you get out of their way and let them. Some people would pay because the idea that they’re helping to create the next game sooner holds great appeal. It’s that hipster “I was into X before X was cool” prestige. But there does need to be enough of those people. I think Kickstarter and IndieGoGo and others have established that there are indeed enough of these people. So, there just needs to be ways to encourage and incentivize gamers to fund your next project.

We’re already seeing this done with the Kickstarter model. A pitch video, a tiered system of rewards, regular, open communications between the creator and the backers. That’s part of what was missing from the old shareware model. In the shareware days, the developer was faceless. But today, the developer’s on the web, on youtube, on Twitter, in your inbox. You have a relationship and they’re more responsive to you than ever before. This makes you much more likely to be willing to spend some money. Because you know who it’s going to, and you see what it does.

To encourage people funding me, I would have a progress bar tied to my income stream showing the actual money raised, making that information public. And some kind of goal showing what my expenses are. We’re not just talking direct project expenses, but the funding level needed to buy me out of my job and go full time indie.

There could also be a progress bar for each project I have announced, or each feature, showing how many hours are needed to complete them, how many hours are funded in the next week, and how many dollars need to be raised to fund more hours.

That way, you could see things like:

  • How much I’m making
  • How much I need in order to not have to work on anything but game development
  • How much the money you’re paying towards my projects is helping me to get them done
  • What projects I have announced
  • How much progress has been made on each project
  • How soon you can expect my next release to be

I’d also establish a relationship with the players of my games, through active blogging/tweeting of what I’m doing with the game projects, and where my time is going, why it’s not going to game development, and stuff like that.

I figure if people see the person creating the games, it will tend to humanize them, and make it clear that the developer isn’t a faceless corporation with huge revenues that won’t notice if their money isn’t added to the giant swimming pool of gold that we all splash about in.

Plus, if gamers know how much money a game is making, it will tend to disabuse them of the idea that wealthy corporations are raking in all kinds of money hand over fist, that they can’t possibly be hurt by people not paying anything to enjoy the games. And by tying the money paid directly to new projects, it’s easier for them to see what they’re getting for their money.

Actually, hell, I could turn it into a web service and let any indie dev sign up for an account, and they’d each have their own blog, their own projects page, and their own “fund this and it will happen sooner” button. Maybe an API that they can tie into their games, allowing them to meter usage so they can show “X number of people played this game X’ times in the last 1|7|30|365 days, and collectively have kicked in Y dollars to fund my next project, an average of just Y_avg cents per play, which means that I am in H financial health, and so my next project will get delivered in Z months.” And here’s an appreciation leaderboard showing the G most generous, loyal fans, thanks so much for your patronage.

I’d love to develop this idea into an actual business, but I’d also gladly work with an e-commerce services provider who could set up a system that would work this way.

The Internet Is Vast, But We Travel At The Speed Of Light

Ingenuity Fest Day 2 is behind us now. Lots of kids came and played JS Joust and BaraBariBall. I’m not at all surprised, but younger kids especially seemed to like BaraBariBall. It just goes to show that classic game style appeals to everyone, not just nostalgia-seeking old schoolers.

JS Joust seemed to be quite popular, lots of participation. The novelty of it is that it’s more of a kinesthetic game than anything — it uses computer technology and wireless controllers, but there’s no screen at all. It’s more like a weird game of tag. Imagine playing tag while eating ice cream cones, and the way you win is to knock off everyone else’s ice cream. Only, no one’s crying at the end because their ice cream is now melting on the ground. But also, no one has any ice cream at all.

So, the internet. It amazes me. This is the best time to be alive, I think, despite everything wrong that’s going on in the world. Two days ago, I hadn’t even heard of BaraBariBall, and within a day of posting about it, I got a comment from its creator, saying that he follows the site.

I’m really starting to feel like I’m making connections in the world of Indie game development when things like that happen. Since the end of August, this site’s daily traffic has about doubled. In the last two months, I’ve receive about 20% of the visits since I started this thing back in January 2010.

I’ve been at this for going on 3 years now, which I guess is a long time in one way, and not long at all in another. It’s hard to quantify success, and easy to discount its indicators. The stats counter tells me I have an audience, and it’s building, gradually, so I know you’re out there. I don’t know who you are, though, and I don’t really hear from most of you. I don’t really know what kind of impact what I’m doing has on you, and only my own ideas to tell me what I’m doing right or wrong, or what else I should be doing.

I guess what I’m saying is, I really thrive on feedback. Like anyone else on the internet, it’s all about knowing that you’ve got people’s attention. I’m doing all of this stuff because I love doing it, but it really means a whole lot more when I know that there are other people out there who like what I’m doing and are taking interest.

I’d love to hear from you more. Even if you don’t have anything in particular to say, if you just want to drop a comment on this post, and say “hi”, that’d be great. If you’ve done anything I might have heard of (or that you’d like me to hear of) mention that, too. Or tell me how you came to find the site, what you like about it, what you don’t, or anything else for that matter.

Ingenuity Fest

This weekend is Ingenuity Fest in downtown Cleveland, held this year at North Coast Harbor. Cleveland Game Developers has a space, and we’re hanging out, demoing games and promoting our projects and talking about our craft. A number of our members brought tech demos and projects to show off.

One of the most fun games I’ve seen in some time, BaraBariBall, is on display here in our space. It is not, unfortunately, one of our creations, but it is a lot of fun. It’s a bit like Super Smash Bros., but simplified and with a graphical style reminiscent of the Atari 2600. I really like the graphical style. The animation is particularly well done. And the controls are superb. I never could get into Smash Bros. due to its overly complex controls. Any time I played it, all I could do is mash buttons and hope for the best. With BaraBariBall, the controls are greatly simplified, and this makes the game much more fun. It’s now more of a contest of reflexes and tactics, and less about memorizing and mastering strange controller contortions that unlock special moves.

I can’t wait for this to come out so I can buy it.

We also have JS Joust set up. Again, this isn’t something one of our group created, but it’s fun. It uses the PS3 ice cream cone controller and a Mac OS X computer.

Cleveland Game Developers Matt Perrin, Brian Gessler, and Jarryd Huntley have all brought in projects that they’re working on.

Matt Perrin whipped up an interesting project just for Ingenuity, which he calls Monster Sumo. You draw your own graphics on a sheet of paper, then take a photo with a camera phone and upload your monster to a server. Then you can do battle with another monster created by your opponent. I suggested that this would be a lot of fun to play with a Kinect interface, but for now it’s just controlled with a more traditional input device — I’m not sure if it’s keyboard, or gamepad, or possibly either.

Brian Gessler brought a prototype game that uses Kinect. He described it as kindof a reverse Breakout, where you’re trying to push the wall up and the computer is trying to break holes in it. It looked interesting but unfortunately the laptop he was running it on was having trouble playing it at full speed. Brian promised to do some performance optimization before bringing it back tomorrow.

Jarryd Huntley had a game rigged up to play on an Oscilloscope, in homage to Willie Higinbotham’s original ur-pong, Tennis for Two. Unfortunately, his oscilloscope died just before the festival, and he is trying to source a spare on short notice so he can demo the game.

GameMaker has a roadmap

A few months ago while I was submitting bug reports for the HTML5 beta, I’d asked one of the mantis bugtracker admins if there was a public roadmap for YoYoGames’ plans for the product. At the time, there wasn’t.

Now there is.

Currently, the document as is is very high level and doesn’t go into as much detail as I’d like, but it’s a start. It’s good to know that this exists now, where it didn’t a few months ago. Knowing what YYG has planned for the product is very useful for game developers who want features that don’t exist yet, and helps to foster conversation between them and the YYG developers who deliver those features.

Overall, I’m very pleased to see YYG being responsive and listening to their users. Over the last few months, I’ve been able to interact with prominent persons from YYG, through twitter and this blog, and I am very appreciative of this opportunity to interact with them, ask questions, and provide feedback.

The Wii U. Texting while Driving?

Nintendo officially announced the launch date and pricing of the Wii U today. We’ve known a few things about it for a while, now, specifically the new controller with its built-in high resolution color touchscreen.

Secondary screens have been done before. The Sega Dreamcast controller had a built-in module that docked in the controller and provited a tiny low-resolution monochrome display, for minigames and private information for multiplayer games. And Nintendo has on occasions done Game Boy/Game Cube crossover games, where part of the game is played on the handheld system and part is played on the TV.

Wii U represents a maturation of the concept, and the first time a very high quality screen was put onto the controller. There are a lot of interesting possibilities that come out of this, succinctly summarized as “asymmetric”, which is fancytalk for “Thing A happens on screen A while Thing B happens on screen B.”

The main strength of 2-screen gaming is this assymetric aspect. Of course, network multiplayer gamers have had this for quite some time. The Wii U seems even more geared toward multiplayer gaming, where the multiple players are together in the same room. One difference I see is that the Wii approach lends itself more to a “shared data/private data” game. While technically this is the way it usually is with network multiplayer gaming, the sharing now becomes more literal.

Most networked PC games give each player “*My* Thing A,” where whatever that thing is, it’s essentially the same for all players, just their view of it. For example, their avatar’s first-person view of the map from its position on the map, with their private data for their health and inventory. Wii U has the potential to give each player a unique “Thing”. A great example of this is given in the recent Penny Arcade strip, depicting a hypoethetical computer-aided role playing game on the Wii U. Unlike the typical computer RPG genre, where the computer acts as the game master, and the world and storyline are all pre-programmed, the Penny Arcade concept shows a DM using the Wii U as a world realization tool, but controlling the world in a more interactive way.

This is great stuff, and I hope we’ll get to see it, but it makes me wonder how the Wii U serves the single-player game. To me, the first thing that occurs to me is that a single-player dual screen game is very much like texting and driving. Diverting attention between two screens is a challenge, but maybe not a rewarding one. There’s definitely potential for novel, interesting new modes of play, but I’m not sure yet how it will take shape.

Hopefully today’s press conference will have shed some light on this. I’m looking foward to finding out later today.

5 Stars of Ambiguity

Originally posted at my Ludum Dare blog

(more…)