views:

293

answers:

9

When considering a platform for a game, I've decided on multi-platform (Win/Lin/Mac) but can't make up my mind as far as browser vs. desktop. As I'm not all too far in development, and now having second thoughts, I'd like your opinion!


Browser-based games using Java applets:

  • market penetration is reasonably high (for version 6, it's somewhere around 60% I believe?)
  • using JOGL, 3D performance/quality is decent; certainly good enough to render the crappy 3D graphics that I make
  • there's the (small?) possibility of porting something to Android
  • great for an audience of gamers who switch computers often; can sit down at any computer, load a webpage and play it
  • also great for casual gamers or less knowledgeable gamers who are quite happy with playing games in a browser but don't want to install more things to their computer
  • written in a high-level language which I am more familiar with than C++ - but at the same time, I would like to improve my skills with C++ as it is probably where I am headed in the game industry once I get out of school...
  • easier update process: reload the page.

Desktop games using good ol' C++ and OpenGL

  • 100% market penetration, assuming complete cross-platform; however, that number reduces when you consider how many people will go through downloading and installing an executable compared to just browsing to a webpage and hitting "yes" to a security warning.
  • more trouble to maintain the cross-platform; but again, for learning purposes I would embrace the challenge and the knowledge I would gain
  • better performance all around
  • true full screen, whereas browser games often struggle with smooth full screen graphics (especially on Linux, in my experience)
  • can take advantage of distribution platforms such as Steam
  • more likely to be considered a "real" game, whereas browser and Java games are often dismissed as not being real games and therefore not played by "hardcore gamers"
  • installer can be large; don't have to worry so much about download times

Is there a way to have the best of both worlds? I love Java applets, but I also really like the reasons to write a desktop game. I don't want to constantly port everything between a Java applet project and a C++ project; that would be twice the work!

Unity chose to write their own web player plugin. I don't like this, because I am one of the people that will not install their web player for anything, and I don't see myself being able to convince my audience to install a browser plugin.

What are my options? Are there other examples out there besides Unity, of games that have browser and desktop versions? Did I leave out anything in the pro/con lists above?

+1  A: 

You mentioned Android in your question - have you thought about developing the game purely for Android?

In effect you get the best of both worlds, easy to maintain, easy to release new versions, easy to monetize and get some small income and you don't have write your own installer or update mechanisms either.

James
A: 

I don't think you can really compare the two:

In my opinion:

  • Applet, flash and other browser based games are typically small "toy" games either written for free or supplemented with advertising. For examples, check out the Addicting Games website.
  • C++ games are more likely to be heavyweight studio-written games relying on dedicated physics engines, graphics engines, etc (particularly true of games distributed on Steam I would have thought). The learning curve is likely to be much steeper, as C++ is inherently a more difficult language than Java / Flash.

If you're unfamiliar with C++ my advice would be to steer towards Java with JOGL. That way you can scale the Open GL learning curve before having to tackle C++.

EDIT

To address the other section of your question regarding implementing a game in both browser and desktop form, you could consider implementing the game in Java and deploying an applet and standalone version, whereby the standalone version can take advantage of Java's full-screen exclusive mode API. You could base both applications on the same codebase. You could also consider shrinking the applet's footprint size by retaining data files (e.g. game levels) on the server-side and retrieving them dynamically when required.

Adamski
This is actually exactly what I was talking about when I said a desktop game is "more likely to be considered a 'real' game". Have you seen RuneScape or any Unity game? Or the HTML5 Quake demo? I understand that serious browser games are a minority but this says nothing about the browser platforms themselves. "typically" is a key word in your first bullet point...
Ricket
Also it seems to me that even deploying a standalone Java app wouldn't be very good. I should probably go back and play with it a bit more, though. It could very well be my best option.
Ricket
+5  A: 

If you really want that kind of penetration then I suggest HTML 5 + javascript depending on the performance you need.

James Westgate
+1. With new features like WebGL coming to browsers, this is a viable long-term target.
greyfade
I have often thought that the browser offers a fantastic platform for game development with a lot of built in functionality - networking is there and graphics layout/sprite animation a cinch. Asynchronous processing is there with html 5 and chrome v8 makes performance less of an issue.
James Westgate
+2  A: 

You might want to look into Google's Native Client, which allows you to write your application in C or C++ (or anything else that compiles to native code, really). A new feature coming to the SDK is LLVM support, which will (hopefully) allow NaCl software to target any platform that Google's Chrome browser runs on (or any browser that the NaCl plugin works with - currently x86 and ARM are supported, IIRC).

greyfade
Thanks for pointing out the Native Client project, looks interesting.
shuttle87
Agreed, it certainly does look interesting. It's one of those things that just makes security people cringe though... I wish they had a wiki page dedicated to explaining how they intend to keep native code safe (and their current progress on that).
Ricket
A: 

While WebSense won't let me browse directly to the site, for obvious reasons, the first thing that came to mind when reading this question is a game like Wurm Online. It's written in Java with JOGL, implements content streaming and local caches, and seems to have touched on a lot of the points you're interested in. It's a desktop Java application rather than being truly "in-browser" but I think you could still learn quite a bit from its implementation.

The in-browser game is always in peril of having its window closed or refreshed, causing it to abruptly lose state unless everything is being kept server-side. This means you either have very simple games that can maintain synchronization using a call/answer model (such as the myriad of Facebook "Mob Wars" text-based games) or risk an inadvertent bump of F5 catapulting someone back to their last "saved game."

Chris Peredun
All current browsers support JavaScript's "onbeforeunload" attribute which allows you to ask the user "are you sure?" before they leave a page (whether by clicking a link, F5'ing, or closing the window, or any other method of leaving the page). It is even used here on SO if you start to write a question and then try to leave the page. This pretty much covers your second paragraph.
Ricket
@Ricket: While it keeps people from refreshing or clicking away, it doesn't cover the instance in which a browser crashes or becomes unresponsive; eg. if another tab decides it wants to hang up and the user's browser doesn't launch each one in a separate process, your app will go down, JavaScript or not. Both the client and server would need to be able to gracefully handle that in terms of resuming as close as possible to where the state left off.
Chris Peredun
+4  A: 

First of all you start with the wrong question. Your decision for a technology should be driven by the concept behind the game. It seems that you are sure about the idea to write a game - so ask your self what the requirements for the game are. This will lead you to your technologie. If it doesn't get an idea of "what" you want to do.

To your Pro's and Con's: Don't focus on things you will never need or be able to use. Thinking about the steam platform isn't interesting for a hobby developer. Also android isn't interesting if you are not really want to ship your application for android. This Pro's will actually never be a pro in reality.

To sum it up: Let this decision be driven by your idea, not the technology itself. If you have a clear idea of what you want to do you will get your answer.

(And btw.: Think about what browsergames imply. Behind a Browsergame there is a huge service-area, only for keeping the game running. Companys working in such areas are basically service-providers.)

ins0m
+1  A: 

Yes. You can make something that will work in both. Basically, make your program work inside a JPanel. The applet can display the JPanel, and the desktop version is just a window with your JPanel in it.

You could also have a full Swing (or whatever) GUI, which the applet launches in a new window when they click the little "start" button you'd have on your applet.

There are a few other differences you'll have to take into account, like possibly loading resources, but I've done it before for simple games I've made.

MBCook
+6  A: 

I'd suggest writing a game first.

It's easy to get caught up in how to make the best game ever,which can run on anything from an abacus to SkyNet, but the reality is that you're going to have plenty of challenges ahead of you just finishing a game that runs on your own PC.

Write a game first, for one platform (whether that platform is "Windows native with DirectX", or "Java applet" or even "pure AJAX in a browser"). If you can do that, then you can start thinking about how to port it to other platforms. But trying to do everything is a sure way to end up achieving nothing.

Or to put it another way:

I've decided on multi-platform (Win/Lin/Mac)

so you've actually decided nothing. Decide on a platform to develop on. Then make the game. Then make it work on other platforms.

Don't worry so much about what your "audience" will find acceptable. If your game is fun, then yes, people will happily install Unity. Just like they'll install your game if it's not browser-based. But the important point is not "what do I have to install to play it", but rather "is it worth it". Your focus should be on making a game that is worth the installation.

And unless you're planning to sell 20 million copies of the game and live off it, your "audience" doesn't really matter that much, does it? What matters is putting the game out there so those who are interested can try it.

But a single-platform game is a lot better than an unfinished cross-platform nothing.

A game that requires me to install Unity is a lot better than something that takes you an additional 3 years to develop because you insisted on reinventing the wheel.

jalf
In some other question I might appreciate an answer like this, but this was not at all what I'm looking for; I believe you're stereotyping the game-development community on SO. I suppose you judged my experience from "not all too far in development" - by which I meant I have a prototype Java applet that I've developed over a number of weeks (and, ahem, it is most certainly cross platform utilizing one jar file and then the appropriate JOGL native libraries are automatically chosen by JOGL's JNLP file). I do appreciate the motivational speech but in this context it comes off as a bit offensive.
Ricket
+2  A: 

Yes you can have the best of both worlds.

It's perfectly possible to write a Java application that will run in both an applet (for your online users) while also running as a standalone application in downloaded form.

The key technologies are:

  • JNLP
  • JOGL for the graphics, which also has some good demos
  • I'm not so familiar with it but I think jMonkeyEngine looks very promising if you want more of a full-featured game engine

If it's any use, an old game I wrote called Tyrant supported running both as an applet and as a standalone downloaded .jar file, all the source is open if you want to look at it. This used simple AWT rather than 3D graphics.

And finally here's another example of converting an applet into an application with a pretty minimal amount of code.

mikera
ALso of note, the online game RuneScape which is a Java applet (and uses custom bindings for OpenGL and DirectX) now has an executable application which is open source, includes the JVM in the executable (Java doesn't need to be preinstalled), and is NOT simply a bare browser window. I intend to look at the source soon to see how they did it.
Ricket