GAME JOBS
Contents
Moving Hardcore Gaming To The Web: Making History
 
 
Printer-Friendly VersionPrinter-Friendly Version
 
Latest Jobs
spacer View All     Post a Job     RSS spacer
 
June 7, 2013
 
Sledgehammer Games / Activision
Level Designer (Temporary)
 
High Moon / Activision
Senior Environment Artist
 
LeapFrog
Associate Producer
 
EA - Austin
Producer
 
Zindagi Games
Senior/Lead Online Multiplayer
 
Off Base Productions
Senior Front End Software Engineer
spacer
Latest Blogs
spacer View All     Post     RSS spacer
 
June 7, 2013
 
Tenets of Videodreams, Part 3: Musicality
 
Post Mortem: Minecraft Oakland
 
Free to Play: A Call for Games Lacking Challenge [1]
 
Cracking the Touchscreen Code [3]
 
10 Business Law and Tax Law Steps to Improve the Chance of Crowdfunding Success
spacer
About
spacer Editor-In-Chief:
Kris Graft
Blog Director:
Christian Nutt
Senior Contributing Editor:
Brandon Sheffield
News Editors:
Mike Rose, Kris Ligman
Editors-At-Large:
Leigh Alexander, Chris Morris
Advertising:
Jennifer Sulik
Recruitment:
Gina Gross
Education:
Gillian Crowley
 
Contact Gamasutra
 
Report a Problem
 
Submit News
 
Comment Guidelines
 
Blogging Guidelines
Sponsor
Features
  Moving Hardcore Gaming To The Web: Making History
by Matt Seegmiller [Business/Marketing, Design, Programming, Serious, Social/Online]
31 comments Share on Twitter Share on Facebook RSS
 
 
January 5, 2010 Article Start Previous Page 2 of 3 Next
 

Running Backend Services

Early on, we realized that there would need to be a number of services running on the backend to support Sandstone. Each of these services potentially needs to talk to other services, and some of them need to be accessible by web servers that allow people to play our games. We chose to have most of the API for these services be HTTP requests.

This makes it easy for any web framework to talk to the Sandstone service, no matter what language it is written in. As long as it can make HTTP requests (which is a fundamental ability of most web frameworks), it can interact with the services.



Initially, most data was passed back and forth as XML. This proved to be fairly unwieldy, as most data was simple data, the most complicated parts being name-value pairs and lists.

Eventually, we changed over to use JSON for this data, which was a lot smaller than the equivalent XML and was much easier to parse in the languages we used.

Since these service APIs are implemented as HTTP requests, we needed to use a language that makes it easy to implement HTTP requests.

We chose to use Python instead of PHP or Ruby, because it is a very self-consistent language, has a lot of support for web services, and is easy to bridge to C++ code (which is very useful for running game servers).

Content Distribution

When it comes to running a game in a web page, rendering 3D graphics in a browser is not the real problem. Rather, a large part of the problem is getting the 3D art assets to the client machine in the first place. The art assets for 3D games are generally much larger than the art assets for more traditional browser-based 2D games.

From the beginning, we recognized that it would not be acceptable to download assets as needed, stored in memory. It has gotten to a point where waiting for some of the more complex Flash games to load is becoming unwieldy, and most 3D games would likely be larger than this.

Rather than come up with a way of compressing art assets to the point where the download and extract times would be acceptable (an extremely hard, if not impossible problem), we instead decided to try to build the Sandstone Player so that it made it possible to create better user experiences while waiting for the download.

We chose to write our downloader in Java, since we were already using Java in the Sandstone Player to bridge the gap between the browser and our C++ game engine. This also turned out to be easier than C++, because Java has much better library support for making HTTP requests, which is how the content is downloaded.

This downloader can be run as a separate applet from the applet that runs the game, and it can communicate with the page around it, so the page can do whatever it wants with this information.

It can put up a progress bar, it can let you chat with other people also waiting for the game to download, and it could even give you a small 2D minigame to play while you're waiting for the download to complete. The bottom line, it becomes more of a user experience question than a technical question at that point.

We made two other important decisions aimed at improving content distribution. First, we chose to break up our content in small, reusable chunks. And second, we chose to cache these chunks on the local disk of the client machine.

This means that if two scenarios use 99% of the same content, if you've already downloaded all the content to play scenario A, then you will already have 99% of the content it needed for scenario B cached on the local disk. Therefore, the scenario B download will be very small.

Next, we gave our content system two versioning systems. The first system simply changes the identifier of a content package, and is used for major upgrades of a package, when a change is made that will "break" other existing content.

For example, when code is changed that won't work with other modules calling it, or a 3D model is changed and is a completely different size so that it won't fit where it used to. When this is done, any other package that uses this package can manually change to use the new version.

This is useful because the new and old versions are identified differently, and they can coexist on a client machine at the same time. So if Scenario A uses Version 1 and Scenario B uses Version 2, a client machine can have both Version 1 and Version 2 on disk at the same time to play both Scenario A and Scenario B.

The other versioning system changes the revision of a package in place. This is used for non-breaking changes of a package, things like bug fixes. For example, a memory leak in code is fixed, or a 3D model is changed to fix a mesh that sometimes renders incorrectly. Updates of this type happen automatically when getting content, so the game you play stays up-to-date all the time.


The Making History Gaming Headquarters (GHQ) facilitates the sharing of user created content.

 
Article Start Previous Page 2 of 3 Next
 
Top Stories

image
Microsoft's official stance on used games for Xbox One
image
Keeping the simulation dream alive
image
A 15-year-old critique of the game industry that's still relevant today
image
The demo is dead, revisited
Comments

Shakeel Shafiq
profile image
2D games on social networks was great fun but now 3D will take it to highest level. Piracy can be handled easily on PC games using this method.

Megan Fox
profile image
why did you go with a custom Java solution over something more standard, like Unity 3D? Licensing costs?



(that is - as far as I know, Unity meets most of your requirements and is widely used, though maybe in practice it did not?)

Greg Jandl
profile image
@megan - That was covered in the article"



"Most 3D-in-the-browser solutions currently solve this issue by writing a browser plug-in. However, there are two drawbacks to this. First, many people distrust custom browser plug-ins (Flash and Java plug-ins being the exception.) Second, each browser plug-in is very browser specific. Even the Mozilla plug-in architecture, that many browsers support, still often needs to be slightly tweaked for each individual browser. This eventually becomes a maintenance nightmare."



Also, though I think Unity is interesting, I don't see how you could possibly refer to it as "standard" - most especially not as "more standard" compared to Java! The Java plugin's penetration is (depending upon version and who's numbers you trust) between 85% & 90%. Unity is in the single digits.

Anatoly Ropotov
profile image
Unless you are doing it in Flash, you are doing it wrong.

Java penetration is as sub-par as Silverlight is. Unity and other custom plugins = puke. Do you want your game to be played by 95% of people visiting web page or by 10%?

Kirill Vainer
profile image
You can use hardware accelerated graphics in Java using OpenGL, using LWJGL or JOGL libraries. Have you considered it? There are also game engines built on top of those, like jME: http://www.jmonkeyengine.com/

Matt Hackett
profile image
The development process for this sounds like quite a beast, and from what I could gather, the following technologies are required:



C++, Java, JavaScript, Python, XML



Is it just me, or is that too complex?

Tim Carter
profile image
I always thought Muzzy Lane wanted to specialize in being a history-driven game company. So why is it acting like a technology company?



Aren't people figuring out that if their core speciality is content-oriented, why waste time creating new technology?

Mike Wuetherick
profile image
You can install standard 'mozilla-style' plugins in both IE & Firefox without a refresh of the browser - this works 100% of the time and is what both GameCore (a 'Unity-alternative' that the company I am the CTO for produces) and Unity do. Having the extra runtime requirement of Java (which is a technical nightmare and is hideous from an end-user perspective) just adds yet another layer of complexity to what is already a difficult process. Debugging anything in a browser is extremely painful - and having to jump from C++ to Java and THEN to the browser just sounds like a nightmare waiting to happen. Too many dependencies for my liking. To each their own however...



Game sounds cool though ;}

Dave Mariner
profile image
OK - maybe it's just me being dumb, but I don't see a difference between creating a custom java extension that has to be installed, and using a third-party plugin such as Unity. If anything, the user distrust is going to be far greater for the custom extension. You're asking the user to install specific piece of software to enable them to play a *single* game *in-browser*. You're not starting from a plugin penetration of 85%-90%, you're starting from an effective penetration of 0%. No-one is going to be able to simply land at your site and play the game.

Additionally, you're opening up a potential security hole within someone's java plugin. Execution of native, non-sandboxed code from within a browser where the plugin is a means not an end for the developer. How is this better, or more trustworthy?



I can see that it made sense for you to wrap an existing codebase to enable you to get to market sooner within the "browser-based gaming" sphere, and it doesn't sound the worst way of doing it, but I just don't buy the reasons set out in your article.



But best of luck with the game, and thanks for sharing your experiences :)

Eric Hardman
profile image
I am surprised by the backlash against this idea. Yes, it's complicated, but it's also an area in which Flash has failed repeatedly. There is no question, IMO, that 3D in a browser that hits the hardware is an inevitability. The question is how do we best get there and who will win?



There are terrific plays out there by Unity, and to a much lesser extent, Torque. So far, nothing in Flash compares or even comes close to the immersive experience of a real game engine. Users want 3D, but they also like the ease of Flash, having already installed it. I think we are at a tipping point, a moment of great opportunity. It astounds me that Flash hasn't been able to capitalize on this yet since they are poised for the greatest potential success. But even if they win, how's Flash for debugging? How is it for collaboration and version control? Getting better, yes, but still inferior.



Ever notice how the only way to play Farmville is in low quality mode? If you haven't, you probably haven't tried the kind of hardware most people have access to. If Farmville is pushing the boundries of Flash, well, I just tremble...



Believe it or not, I am not anti-Flash, quite to the contrary. I've done the bulk of my work with the tech since the very first version, completely sold by the fact that it came from the "Dark Castle" guys. But it bothers me to see blind fanboidom applied to it: it's not the best solution to every problem.



As for the argument that "everyone uses Flash, anything else is an instant fail!"... I guess I would reply that it would have been insane for a search engine to compete with Infoseek, Yahoo, and AOL at one time. Good thing the Google guys weren't paying attention. By that standard, Apple should stop making computers today, instantly! Less than 10% of the market? Pshaw.

Peter Dalton
profile image
Thanks for the article, I greatly appreciated it. We are looking at creating web based games in the future and currently we come from a console background, so hearing how you solved the problem was very informative. Thanks for taking the time to share your experience.

Dave Mariner
profile image
@Eric: I don't think anyone is really against 3D games in the browser. Any backlash against the article was down to the method employed and/or the reasoning behind it.

I was arguing that the percieved user acceptance of this method was a fallacy. A solution provided my a middleware company is more trustworthy, basically because their aim is to get maximum plugin penetration, so security is disproportionately high on their agenda. Muzzy Lane's aim is to produce a game that people want to play, so plugin security will be comparatively lower on their agenda.

Mike was saying (excuse me for paraphrasing you here) that even with their goal of simplifying the development / deployment process of a unique browser-based game, the added complexity introduced through the java layer outweighed the benefits of not tweaking the plugin for each browser.

Matt Seegmiller
profile image
@Megan Fox - Unity does the 3D in the browser part, but we had other requirements, mostly involving distribution and communication with web sites that aren't even touched by something like Unity.



@Kirill Vainer - We have looked at the Java based solutions. Primarily, we had a rich C++ codebase to start from, and were not looking to rewrite the world. We instead wanted a thin wrapper on top of our existing C++ code. Honestly, those Java engines were the inspiration for creating a Java plugin.



The other problem with the Java engines is that they are all OpenGL, and we've learned the hard way that OpenGL on Windows, at least, is a nightmare. It's not too much to ask the end user of a commercial PC game to update to the latest graphics drivers, but it's a lot to ask of someone who only plays your game through a website. In our experience, a large percentage of initially released OpenGL drivers do not have much more than OpenGL 1.1 support, even though the cards themselves support all the latest OpenGL features. I've seen way too many debug logs from end users that say "OpenGL 1.4 not supported" despite the presence of a less-than-one-year-old graphics card. This exact issue drove us to switch to a Direct3D renderer.



@Matt Hackett, @Mike Wuetherick - Yes, it's a complex solution, but as Eric Hardman was pointing out, it's a complex problem. There are all the end user headaches of 3D games (hardware incompatibilities, driver issues, graphics bugs) coupled with the end user headaches of browser compatibility coupled with the deployment headaches of a web service stack. We've tried to use the best tool to solve each problem we've faced: C++ for the game engine, Python for back end web services, XML + JavaScript for in game scripting, etc. We've been able to do this through a large amount of modularity. Our game programmers and content people almost never run the game in the browser, because we have a clean interface to launch games. They develop the game then run and test locally. Eventually official builds get put into our web ecosystem. These get tested through the browser and game services. We've rarely had bugs running in the browser that were game bugs or crashes due to game code. More often than not, it's a bug in the interface code, and the number of these has been going down steadily.



As for the choice of Java, it's definitely not the only answer. However, I've been very pleased that I can start up random browsers (Chrome and Opera in particular) and it seriously has just worked. No extra work to try the plugin there. That's definitely worth something.



@Tim Carter - Muzzy Lane is a technology company. It's rare for a technology company in the game industry to succeed without producing real games on its own technology, so here we are building Making History II.



@Dave Mariner - If the Java Extension mechanism worked as well as it claims to in the documentation, it would be a much cleaner system. The end user would get something that basically looks like "Java wants to add a feature, do you want it to?". Obviously, there is an entire side argument here about whether or not that's a security hole in the Java Plugin or not. Anyway, the reality of the Java Extension mechanism is that it is not user friendly at all. It generally just disappears into a black hole, showing a sometimes animating Java logo while your extension is downloaded and/or installed. By the time we figured that out, we decided it was better to stick with the Java shim than to write plugins from scratch. This has worked out pretty well for getting it to "just work" in new browsers.



As for installing a plugin for a *single* game *in-browser*, Sandstone is a technology that enables any number of games to be played. We have our first commercial release upcoming on it, but we've developed several more serious games with partners, and plan future releases using the same technology. And if all works out, others will eventually be using it for their own games as well. As has been pointed out, penetration is always the issue, but we have to start somewhere.

Jerome Russ
profile image
To those who are all about Flash and their installed percentage... I don't think this is intended for the casual crowd who doesn't understand how to install some plugins.

Tom Higgins
profile image
@Matt Seegmiller: can you elaborate a bit more on this statement:



"Unity does the 3D in the browser part, but we had other requirements, mostly involving distribution and communication with web sites that aren't even touched by something like Unity."



What distribution/communication issues did you find that pushed you away (in full or in part) from Unity? And for reference I'm the Product Evangelist for Unity, I just want my "angle" to be clear and transparent and I'd like to better understand what kept you away from our tool and player.



FWIW, I applaud the effort, we're all in the games industry trying to find ways to bring better, more engaging 3D experiences to end users so kudos for that, despite not using our tool in particular! :)

Anatoly Ropotov
profile image
Some facts from MMO publisher side:



- Enormous marketing efforts. If I'd be your publisher, I'd say "make it downloadable, it doesn't make sense to be inside the browser with a custom plugin or Java".

- A web-based version with a custom plugin has less chances to be played than a downloadable game, unless it has existing prominent branding or free (or careless) marketing or unless you are in Korea (where IE ActiveX plugins are a de-facto launch kick-start standard for casual MMO games).

- In reality, those plugins are a huge disaster to support. New browser versions, compatibility hassle, weeks of debugging for developers instead of focusing on the game, endless complaints from players who've updated their computer or try to migrate.



There are very very few cases besides Quake Live and FreeRealms where plugin-based product have reached great heights. Name another Unity or other custom-based plugin product please that have achieved some success.

Anatoly Ropotov
profile image
2Tom: We have an alpha version of Unity mmo game (www.jagger.ru), yet we have a backup 3d flash rendering technology just in case Unity will have too many problems in our region. Please ping me at anatoly d0t ropotov d0t com.

Todd Berkebile
profile image
I would be incredibly concerned about the security of a Java extension designed to allow the download and execution of arbitrary code. I certainly would never be willing to install such a thing myself, and I wouldn't be surprised if such a thing found itself in the virus definition files for major anti-virus products.

Anatoly Ropotov
profile image
2Todd: A funny fun fact. In the last 6 years, the only virus that got me was... through Java.

Anatoly Ropotov
profile image
Oh, btw, there's a live JNI/D3D product out there from http://www.splitscreenstudios.com/

And I'm still waiting (as a strategy/civ genre fan) for Call of The Kings: http://www.callofthekings.com/screenshots.php which is Java as well!

John Ingrams
profile image
Isn't this technology for technologies sake?! I mean, if a game's hardcore it needs a decent manual. On-line help just won't be enough, so why not just be able to download it with a pdf manual and play it on your PC? I don't see what benefits playing in a browser brings when it's a hardcore game.



Certainly indie developers producing hardcore sim or strategy titles have one major problem, gamers don't like 200 page pdf manuals. They wanted printed manuals that they can have open while their learning the game.



Digital Distribution is generally going to dumb down gaming unless indie publishers have a system where they can send a printed manual to their customers.

Douglas Rae
profile image
John:



I personally do not want to be able to play a game within minutes and have to wait for snail mail to arrive with my manual, if at all. I think most "hardcore" games have solved this issue by providing online help; in game tutorials / encyclopedias / very good in game help / built in play and learn content.



The whole point of having browser-based games moving to the next level is the problem of distribution / community. Get more copies out there, get their friends playing = £££ $$$. It makes it easier for the consumer to lift their card out of their wallet.



One could put it into this rough timeline



1. Going to your local game shop (hours / other factors, lose the cd/dvd/media and your up the creek, install and hope it works and you can get access to online features)



2.Steam / Direct2Drive (Still time dependant downloads are big! always available incase you lose it, multi computer, semi-cloud settings, good but limited community / web integration)



3.Browser (Time varies, but it will always be available and compatible with a lot of PCs, a lot more stuff stored in the cloud, native integration with communities / web services).



Hell i played QuakeLive for 5 minutes, within 20 minutes i had about 10 friends playing with me! If they charged $5 per user or per month they would be raking it in!



Or we could live in your world... and go have a long bath until the manual arrives.. maybe write a scroll to our friends to play as well and have penpals to share our experiences.

James Hofmann
profile image
This is interesting technology, but as others point out, getting market acceptance is the main problem with any novel browser technology. Everyone's hamstrung by that requirement - not just with games but any app. Everyone would like to make apps that you can just browse over to start using, but can make good use of the hardware and integrate well with the desktop all at the same time.



My own strategy, as a solo developer, is a defensive "follow-the-market" one:



1. Flash is what's there right now, and I don't have the resources to push anything else to users; I want the assistance of the portals to promote my game! Therefore I use Flash.

2. Develop Flash games in haXe. haXe is a VM-portable compiler, and has a strong likelihood of compiling to whatever becomes the standard after Flash. (My money is on JS/WebGL/media extensions.)

3. When the time comes, port to the new standard and be automatically ahead of the game because, presumably, less code will have to be rewritten.



Despite "only" doing a 2D game, I've still found a lot of areas that can use better tech, mostly in tools and gameplay logic. My goal is to make Flash as convenient for 2D prototypes as a tool like Game Maker. I still have a ways to go, but give me another year... :)



edit: webGL, not Canvas3D(canvas3D was a prototype)

Anatoly Ropotov
profile image
Summarizing:



Basic HTML/AJAX. 100% penetration, basic visualization. Harder to bring casual players in. Think Mafias, MUD.

Flash. 95% penetration, awesome 2D visuals, basic 3D.

Java, Silverlight, Unity3D, Shockwave, better custom plugins, various endless "web players". 1%-50% penetration. Endless compatibility problems.

Everything else. javascript canvas webgl svg and other stuff that will never catch up. Non-existent.



Game genres:

Casual games = Flash only.

Social = Flash, AJAX.

Core = It's easier to get stable game when it's downloadable, than inside the browser.

Hardcore = custom plugins (InstantAction, Quake Live, FreeRealms launcher).



Note: you could make any tech or plugin acceptable by putting a lot of expensive marketing into it.

Matt Seegmiller
profile image
Wow... thanks for all the response. It's great to hear so much feedback.



Something that probably didn't come across in the article is that this technology was not developed specifically for Making History II. We additionally have about a half dozen serious games currently in production using this same technology, including a DARPA funded project to create games for middle school science. We were originally founded on the idea that 3D multiplayer games could teach people something. To that end, we found integrating our games with the web almost a necessity, allowing for much more intuitive multiplayer lobbies and much easier install paths. Plus you end up with integration into existing web infrastructures, like social networks and learning management systems.



Also, it's important to note that rendering 3D in the browser is only a small part of creating a game that integrates with the web. Additionally, a user-friendly way of distributing the content is necessary, since 3D game content is HUGE compared to anything else, and is very difficult to stream. Plus, there needs to be some way for the game to report information about the game play experience back into the website. Finally, for a multiplayer game, having a way to manage game server instances from the web makes things like multiplayer lobbies much easier to deal with, and much more cleanly integrated into the website.



That all being said, MHII is not a browser-only game. It will be sold on CD, downloadable as a separate installer, available through other game download services, etc. etc. The Java plugin will not be required to play, only to take advantage of the integration of the game with the social website surrounding MHII.

Tom Higgins
profile image
@Anatoly Ropotov: Email sent



@Matt Seegmiller: Any chance of hearing how Unity didn't measure up as per my Qs above? Either here or via email would be great if you have time, thanks! (tom -at- unity3d.com) Otherwise rock on good man.

Matt Seegmiller
profile image
@Tom Higgins - From what I've seen of Unity, there are two main things it lacks that we've placed a lot of importance on. The first is some ability to manage the download process. The Unity games I've played all seemed to download only on the page that you played the game on. There wasn't any ability to manage that process across multiple pages from HTML and JavaScript. The other is some ability to communicate from the game into the backend web infrastructure, sending out messages from the game that can be interpreted by the web server or vice versa. I'm sure this could be done with custom code in a Unity game, but we've felt it's important enough to warrant a builtin solution.

Tom Higgins
profile image
@Matt Seegmiller: you can manage incremental downloads via our Asset Bundle feature and that will work across multiple pages as they're stored in the browser's cache just fine. Optionally we do have a feature (licensed separately) that allows for storage of large collection of files outside the browser's cache but that's a pay-to-play feature only needed in extreme cases. On the communication with back-ends, that's actually dead simple in Unity either via our built-in WWW class (allows HTTP get and post calls) or by using .NET sockets, it's really a trivial thing to do.



Thanks for taking the time to explain and as noted above, kudos on the effort regardless. I'm always pleased to see others pushing for better web delivery of 3D experiences so keep at it and I wish you all the best! Rock on brother.

Tyson Woolley
profile image
This article over at web monkey talks about video and 3d rendering from within the broweser with no need for a pluggin using HTML5. http://www.webmonkey.com/blog/Google_Throws_Its_Weight_Behind_HTML_5







HTML5 is still in draft but maybe in the near future we can have in browser games with out the need for plug-ins?

Vikas Maini
profile image
this technology is going to be great in coming future.



with C++ can do anything.

KOJEN KU
profile image
Does the game require constant internet connection in order to play, like some hot titles? I don't like social features so I can live without it. To me, social means going to a club or friend's home and have fun. BBQ, ball game, fishing, ....



The hurdle of 3D web gaming with hardware acceleration is the security issues of browsers and applications. This is more of the social psychology then gaming technology. After all if the players don't trust the stuff they are running they will not buy and play the games and all these wonderful technologies will sit and waste over time. Win the trust and games will be sold fast. Call me a socialist or of a worse kind, I do think that the internet should be deeply regulated like real world in order for online businesses to win consumers' trust. At its current state, the internet is far from it.



From javascript to Java to C++ DLL to gameplay and AI, no wonder the development cost is so high. Gaming in web browsers are certainly good. I do like, however, a off-line browser gaming option when the player wants to play alone.


none
 
Comment:
 




UBM Tech