I've just spent the better part of a couple of weeks playing with a wide variety of languages and platforms. In part, my goal was to broaden my programming horizons. But my primary goal was to evaluate platforms and languages that would be suitable for commercial development of casual games or other games that would be browser-playable and/or easily downloadable. C++ was my default choice - it's what I knew. But would any other languages beat it by enabling faster development, and/or allowing the use of a single platform for both browser play and downloadable stand-alone play?
Languages fully evaluated include Flash, Java, and C/C++, and I also took a short look DarkBASIC, BlitzBASIC, and a few other alternatives.
Of late I've been interested in different alternatives for commercial game development. After spending 12 years developing deep strategy PC games for retail sale, I want to take a break and try something different. One area I'm considering is casual games, mainly puzzle games, which have grown in popularity recently.
To be commercially successful, casual games must be small (because of low-bandwidth internet connections), and the most popular ones generally feature simple gameplay and 2D graphics. In particular, casual games that can be run in a web browser, with no separate download and install, seem to have the best prospects for success. So I wanted to evaluate platforms that would allow fast development of small simple 2D games, and ideally, allow them to be browser-playable.
About 99.5% of retail games for PC and console are developed in C/C++. But casual games, for playing in browsers, and to a lesser extent, phones and mobile devices, are developed on a wider variety of languages and platforms, particularly Flash and Java.
C/C++ games are generally compiled to native code, and distributed with a variety of large supporting libraries (like Direct X). But for security reasons, browsers don’t like to run native code (it can accidentally or intentionally do all kinds of damage to a user’s computer). Downloading a game as a standalone installer, installing the game, and then running it outside of a browser is a possibility, and indeed, it’s the general method used to sell a user the $20 "deluxe version" of a game. However, for casual gamers browsing the game portals and sampling different games, the need to download and install a game (then uninstall it later), is a major barrier, and it seems like all the most popular games allow users to try them on-line, in-browser. Indeed, those who run the gaming portals have a strong desire to have the games playable in-browser, and either won’t carry your game at all, or will give it much lower prominence, if it’s not browser-playable.
Adding in other important factors, my feature checklist looks something like this:
1) Easily playable in-browser, by the vast majority of users
2) Development Ease
3) Can be made into a stand-alone, browser-free, downloadable program as well
4) Support across the widest variety of PCs, new and old, and including alternate platforms like the Mac and Linux
5) Speed and flexibility of code execution
6) Small deliverable size – both the size of the executable code and accompanying libraries, and the ability to work with tightly compressed sound and graphics files.
7) Promising future – a language that won’t be obsolete in a year or two
Quickly Rejected Languages
Initially I was pretty wide open. I looked into a lot of development alternatives, but eventually settled on three (Flash, Java, C/C++). Before I get to those, here’s some I gave up on early. Note, some of these may be suitable for small games, I just felt that given my experience and needs, they were clearly inferior to one or more of the three "finalists". Also, in places where I list features as missing or of poor quality, it’s possible that the features really exist and/or can be improved with plug-ins. But if I couldn’t locate the important features and use them quickly and easily, it’s a bad omen for the language.
DarkBASIC – A $100-ish version of the classic BASIC language, catering towards game development with 2D and 3D features built in.
This language might be suitable for a beginning programmer. I took a look at the free demo version and quickly ruled it out for myself. The language appears to force you to use the integrated, ugly looking, full-screen IDE, which is apparently hardwired to 800 x 600 mode only. There is no integrated debugger that I could locate. There is no built in design tool for windows or U.I. elements. When you compile standalone EXEs, they’re quite large (1.5MB for the simple example they include). Finally, various forum postings from people I trust indicated that if you dig deeper, there are more problems – BlitzBASIC was more recommended for a game-oriented Basic language.
BlitzBASIC – This is, rather confusingly, a set of three different language products, all made by the same company and costing $50-$100.
The products are BlitzPlus (aimed at 2D development), Blitz3D (aimed at 3D), and BlitzMax (apparently the be-all end-all product they’re working on at the moment, but it’s only available on Mac OS-X at the moment). From the site, it appears that all 3 are incompatible. However, I downloaded the trial versions for BlitzPlus and Blitz3D, and in fact, they're very similar. They have virtually identical IDEs, and the credits list the same lone-wolf programmer as the sole creator of both. I don’t understand why he split 2D and 3D functionality into separate packages. Note that BlitzPlus has support for creating a GUI, but Blitz3D does not (hey Blitz guys, even 3D games need an interface).
The IDE, while better than DarkBASIC, is still nowhere near state-of-the-art. It has a very simple debugger (the only option is ‘Debug Enabled?’ - yes or no). It runs in a window, and has a few semi-modern conventions like tabs. The version that supposedly supports GUI development (BlitzPlus), has no GUI design tools -i.e. no way to lay out a GUI interactively -it all has to be done in code.
A major problem in evaluating the Blitz programs is that they include only a very cut-down set of documentation in the trial version – the all important Command Reference (which tells you what functions are available and how they work), is only in the full version. Also missing from the demo (full version only) is the ability to compile to EXE – you can only run games from within the IDE. These limitations make the demo by itself almost useless except for looking at the IDE and running the demo programs. That said, it looked like a better package than BlitzBASIC, and probably a good starting point for a new programmer. But there was nothing here that was going to revolutionize game development or cut dev time down for an experienced C programmer. Next.
C/C++ with Active X - For a number of years, Microsoft's solution to browser-playable content (including games), was Active X (aka .COM), a sort-of Microsoft alternative to Java. Since MS makes it, it only runs on Internet Explorer, and it only runs in Windows. But the big problem with Active X is that it’s totally insecure. For Flash and Java, an application that has run amok (intentionally or not), cannot damage the user’s system. But for ActiveX, which was designed to have more power to use native functions, a haywire or rogue app can do just about anything, from reformatting the user’s hard drive to turning the user’s machine into a zombie. Even Microsoft now realizes this, and they’ve essentially abandoned Active X. They’re not developing it any more, and if the user is running I.E. in Windows Service Pack 2, trying to run an Active X app will cause all sorts of scary warning messages to appear. Active X is basically dead, and once I had educated myself on this, I didn’t fiddle with Active X any further.
Microsoft is planning to replace Active X with .NET, a secure solution that’s a lot like Java. But .NET is not pre-installed on ANY PCs now, and it’s a 19MB download, so it’s not really viable for casual games.
Note that one major casual game developer, PopCap (Bejeweled, Zuma), is using Active X for their browser-playable games. But their recently released open-source framework does not expose the ActiveX elements, and in reading the FAQs and other info on their site, their support for Active X seems a bit tenuous, going forward.
Objective C - Interesting variant of C in many ways, but it can really only produce executables for the Macintosh, and perhaps with some fudging, *nix OS’s (i.e. Linux). With no ability to target Windows, it’s easy to rule out.
Visual Basic, C# - Both are Microsoft proprietary implementations of Basic and C, respectively, that are included for free in the Visual Studio .NET software (which I own). I checked out Visual Basic - it’s as I remembered it from my corporate days more than a decade ago - very easy to lay out forms and access data from corporate SQL servers. You can even compile to EXEs. But it requires users to download the 19MB .NET assembly. Fine for a corporate environment, but not realistic for downloadable games. I didn’t actually test C#, but it’s got the same limitations as VB (19MB .NET download required), and, from reading up on it, doesn’t offer any really big advantages over regular C++ to justify the limitations for the games market.
Perl, Python - I didn’t actually try these. They appear to be popular for web apps, but I saw little evidence of anybody using them for games. (The top google site for Perl Games yields a few text-only, downloadable games. Googling for Python games yields only downloadables, not browser-playable games). If few are using them for games, there’s probably a reason – I skipped them. If anybody has any compelling rationale why these do a good job of fitting my criteria above, let me know.
Shockwave - Macromedia, the makers of Flash, also make a higher-end product called Shockwave. You create Shockwave playable games in their $1,200 Director program. Shockwave has support for 3D and more optimized 2D than Flash. But the Shockwave player has a much lower market penetration than Flash. Moreover, Macromedia seems to be de-emphasizing Shockwave and pushing many of it's features into the more ubiquitous Flash. So I skipped Shockwave in favor of Flash.
WildTangent - Like Shockwave, another product that theoretically allows advanced 3D games to be played in-browser. Also like Shockwave, it appears that end-user support for playback is low, and that WildTangent as a platform is fading. I saw virtually no discussion of WildTangent as a viable option among development community-forums. It appears WildTangent's day has passed, and so I skipped it.