I think I’ve been here for 10 years now. Java gaming has never really taken off in all that time - one or two notable exceptions, er, excepted. I am sort of surprised actually, given the sheer levels of success of various games that germinated here on JGO, that more attention never got focused on Java as a solution for gaming. Minecraft’s sold 4 million copies, even I’ve shifted 300,000 copies of Revenge of the Titans, Spiral Knights by OOO (unknown numbers but basically huge), Puzzle Pirates by the same, and there have been a few other notable smaller successes such as Blocks That Matter, Tribal Trouble, er… and a some others. And of course some other really big successes that grew entirely outside our ecosystem like Runescape and Popcap in the early days and… er… well. There are probably some others but as they don’t hang out here or make much of a fuss over using Java I don’t know about 'em.
Occasionally I’ve wondered why there aren’t more successes, especially given the obvious capabilities of the platform especially when enhanced with a smidged of enabling technology (I should probably make a strong point to note, much to gouessej’s obvious chagrin, that every single one of the games that have made it are based on LWJGL). Actually on the LWJGL vs JOGAmp subject it’s getting pretty difficult to make the case for JOGAmp in the light of the statistics of successful games that have made lots of money, although without any specific concrete reason I still couldn’t specifically recommend one over the other except for the fact I had a hand in kickstarting LWJGL.
A quick scan of the various topics that have come up over the last, oh, I dunno, year or so maybe, does point me in the direction of a theory or two as to why Java is failing to gain traction.
Firstly, this obsession with entity systems is the pustulent boil of a symptom which I used to call “object oriented wank”. This is where people get so bogged down designing systems to scale to 1,000,000 simultaneous players they never actually sit down and write a bloody game. This is probably Java’s greatest weakness and of course its greatest strength. It’s massively powerful and flexible. So powerful and flexible that people generally tend to get confused about what they’re actually trying to achieve, what they’re capable of achieving, why they’re doing it, and who gives a shit.
I’ll tell you this for free: an entity system will not get you on Steam. It will not make your code easier to understand. It will not finish your game for you. It is not as easy to understand as just having Some Entities In An ArrayList that all extend a base Entity class. The language does not make it easier to write the code. It does not really even solve a problem you should be having. Entity systems were developed for dealing with hundreds of thousands of entities, with vast numbers of permutations in ability and operations. You can use them in your space invaders game if you like, with all 100 entities in it (with just 5 sorts of entity). But your space invaders game will forever remain a hazy idea wafting away in your bong smoke. Get a grip on reality! Why is your game not finished yet?
This sort of thing is endemic in Java and is expressed in all sorts of silly ways. There’s obsessions with 3D scenegraphs when most people can’t even code a 2D game. There’s obsessions with using NIO (the API designed for thousands and thousands of simultaneous IO operations) when people can’t even write a server that handles 4 simultaneous realtime players.
This is why Java4k is so good.
With 4k you can barely do anything really. You can’t fit an entity system in to 4k. Well, you can, but there won’t be much of a game. In restriction there is freedom. The less you have to work with, the more you can actually achieve. Restriction is liberating. With a pencil you can’t be expected to paint the Sistine Chapel murals.
I implore you budding developers in here to lower your sights, stop wanking about, and get some prototyping done. For what it’s worth, I’ve noticed that Android phones are an awesome introduction to limited programming environments. With miserable performance and somewhat limited APIs you are nicely restricted in your ambitions. You should be able to design some pretty neat games and finish them on Android.
My trusty flameproof pants are, of course, washed and donned, but in my arrogance I choose to ignore your derision, from atop my mound of cash, as I write my next game.