

First 3D Commercial Web Game Powered By asm.js - blueveek
https://blog.mozilla.org/blog/2013/12/12/first-3d-commercial-web-game-powered-by-asm-js-unveiled/

======
drblast
Wayyyy back in 2007 I half-jokingly made a prediction about the future of
computing. The hot topics at the time were AJAX and new multi-core processors
targeted at consumers. Everyone was trying to envision which language would
win out by making it easy to write massively parallel programs. There were
lots of articles published about Haskell and software transactional memory.
The demise of C and C++, and their managed Java/C# spawn was imminent. How
could you write in a language that couldn't handle multiple cores for you?

The future is here, in 1/4 of the time I thought it would take. I guess I have
to go write a new prediction.

    
    
      So. . .here's my prediction, taking into account the pace
     of hardware development and the history of software
     development. In 20 years, cheap hardware will be
     ridiculously fast, but it will still look very much like
     Intel hardware today. We'll have many, many CPU cores to
     work with, but nobody will use a parallel programming
     language designed to take advantage of multiple cores.
     Instead, virtualization (i.e. VMware, Xen) will be
     integrated into the operating system, and each process
     will run on its own virtual machine.
    
      Each web browser will have been expanded into a full blown
     widget toolkit and have merged in something that looks
     like Flash, but there will still be multiple incompatible
     browsers. The latest craze will be a browser compatibility
     layer written in a programming language that compiles
     to "raw Javascript", and it will reduce the performance of
     applications but allow you to use them anywhere.
    
      People will set about re-writing a version of Photoshop in
     the new compatibility layer, and everyone will wonder why
     they'd do that, when the current version of Photoshop runs
     in Internet Explorer just fine.
    

Edit: The lesson here is that if you want to predict the future, try to do it
by making a prediction so ridiculous it could only be a joke.

------
eknkc
It works just fine in Safari. You know, without any special treatment from
Apple for asm.js optimizations.

I was sceptical but this shows that asm.js is a much better approach than
Google's ActiveX wanna be solutions.

~~~
Fr0styMatt
In what way is using LLVM bitcode (PNaCL) at all similar to ActiveX?

Yeah yeah I get it. I like asm.js as much as the next person; I just wish this
whole PNaCl-is-ActiveX meme would seriously go away. It's willful ignorance.

FWIW, I think it's fantastic that asm.js is turning out great. I also think
that PNaCl is a worthy technical achievement. Two ways of solving the same
problem given different constraints. I think Mozilla has a better chance and
agree with their reasoning re- browser compatibility and third-party adoption.
Still doesn't mean I'm going to go around calling PNaCl ActiveX when it
clearly isn't.

~~~
johnbm
Because PNaCl comes with its own implementations of input, graphics, audio,
etc and cannot talk to any of the regular Web APIs. So basically, PNaCL is
either ActiveX or it's Flash.

[https://developers.google.com/native-
client/dev/pepperc/grou...](https://developers.google.com/native-
client/dev/pepperc/group___interfaces)

That said, I support using LLVM bitcode more than asm.js myself. I think
asm.js is the dying breaths of JavaScript being hailed as its rebirth.

~~~
pcwalton
> That said, I support using LLVM bitcode more than asm.js myself. I think
> asm.js is the dying breaths of JavaScript being hailed as its rebirth.

I think asm.js has technical advantages over LLVM bitcode. Neither were really
designed for this purpose (for LLVM, you must strip the undefined behavior;
for JS, you must strip the high-level semantics), but at least JS has a fully
specified, multi-vendor standard specifying the execution semantics. Plus
asm.js has a very minimal type system and is non-SSA (while retaining high-
level loop constructs that can be easily used to construct SSA without
dominance frontiers if needed), both of which I think are advantages for
delivering bytecode over the Web.

~~~
johnbm
That must be why asm.js v0.1 already introduced non-standard language
extensions (imul) and has a roadmap full of more. Which browsers does the
asm.js of today run on? And which browsers will the asm.js of the future run
on?

------
macmac
I am not sure how to play the game. The intro messages reads:

{"success":false,"error":"DuplicateEntryException","message":"\u0027Anonymous1900\u0027
already exists."}

~~~
benjamincburns
$20 says it's a race condition being caused by multithreaded access to a
nonatomic auto incrementing ID...

~~~
ben0x539
Hm, I thought asm.js didn't expose shared memory (yet(?)).

~~~
sp332
More likely in a back-end database.

~~~
ben0x539
Duh. Good point.

------
agentultra
It works really well and I'm glad to see more of this happening. Being able to
share games over the web that run at near-native performance levels without
plugins has a lot of potential both for end-users and creators. Really cool
stuff.

~~~
timje1
I just hope that it helps drive growth away from Internet Exploder ...

~~~
philbarr
Unfortunately the "enterprise" seem set on it. Yesterday I was working with a
new content management platform and I had to _downgrade_ my Internet Explorer
to 9 because it only works with IE 7,8 and 9. Then that still didn't work
because of some MSXML problem I couldn't fix and I ended up having to use a VM
with XP installed and IE 8.

Un-be-lievable. I don't know who these Enterprisey IT managers are who are
making these decisions but they seem to have a lot of power which they are
using irresponsibly. And they seem to love IE.

~~~
acomjean
I thought things had gotten better.

A decade ago the large company I worked for switched to a web based timecard
system. The only problem, ie only and the software team of 50+ all were using
hpux or solaris workstations. No ie. Oh and they wanted timecards done daily.

The solution?

Set up 2 terminals in the lab with a unix backend and a windows NT virtual
environment so we can use IE to do timecards.

~~~
oneeyedpigeon
How complicated can/should a timecard system be? Surely one of those 50+
software engineers could have rewritten a portable version in a few days and
saved you a lot of bother.

------
kayoone
asm.js really shines for usecases like this, the fact that they did the port
in a week is truly remarkable. GFX/Audio/Multiplayer all works fine, but
loading times are pretty slow on Chrome, but for a first version this seems
great.

 _Edit_ it seems pretty playable in firefox and chrome, don't notice much of a
difference performance wise. Now please make a reverse case for PNaCL and
pepper.js and we can all get really excited :)

------
mistercow
I feel like "compatible with all modern browsers" is a little dishonest as
long as Apple keeps dragging their feet with WebGL in iOS. I know that this
isn't an asm.js problem, but the implication is that you can make a game _like
this_ which runs in all modern browsers, and that's simply not true yet.

~~~
azakai
I would argue that a browser without WebGL is not a "modern browser". WebGL is
part of what a browser is today, and it works (and is on by default) in recent
versions of Internet Explorer, Chrome, Firefox and Opera.

~~~
mistercow
I agree in some sense, but the honesty of a statement depends partly on how
the audience can reasonably be expected to interpret it. And you can
reasonably expect an audience to interpret "modern web browser" to include any
major browser released within the last year.

~~~
azakai
I disagree, when IE8 and 9 came out, and within a year of their release, did
many people consider them "modern browsers"? I don't think so. (Only with IE10
and really with 11 did Microsoft's browser be worthy of that designation.)

New != Modern

------
skloubkov
While I really see potential of asm.js couple of things about execution
(including this title)

1\. Brings my browser to its knees (Firefox here)

2\. Security. They seem to open themselves up to a whole lot of potential
hacks (I hope their code deals with cookie jacking, csrf, sniffing, etc).
While this would be a problem with closed source, this is made worse by
running it in browser

3\. Cheaters. How would they deal with people injecting code and creating
bots?

~~~
AndrewDucker
2\. It's javascript running in the browser, it can't do anything that you
couldn't already do with javascript running in the browser.

3\. The same way that companies currently cope with clients. It's not like
client-hacking isn't so common-place that you have to design around it anyway.

------
Segmentation
Is there a possibility for major titles becoming "asm.js ports"? Games like
World of Warcraft, League of Legends, Battlefield series, Starcraft 2,
Minecraft, etc.

~~~
timje1
Minecraft in the browser has been done already, hasn't it? It'd be pretty
trivial, as it's been ported to java / c# / objective c already, and has low
system requirements.

Given that asm.js games tend to run at something like 15-30% of the speed of
native code, I doubt we'll see Battlefield 4 or Starcraft 2 anytime soon.
Additionally, given that the WoW game client is many gigabytes in size, I
doubt we'll see that either, even if it could run.

So: Minecraft, yes. The rest? No.

~~~
samworm
Minecraft is FAR bigger and more complicated than people give it credit for.
Getting a terrain generation demo running in a browser is not even remotely
the same thing.

~~~
WA
I think he's talking about the apps for the various ecosystems. Although
they're not feature-complete.

~~~
timje1
Well, no, they're not as rich as the desktop versions.

But as they've had a team port (a trimmed version of) Minecraft to xbox live
arcade, and the iPad, it would surprise me if they're not already working on a
*.js version.

------
vertex-four
Trying to open this up on Chrome to see whether it works, it can't download
files, because the S3 bucket doesn't give an Access-Control-Allow-Origin
header.

Can they put a CORS configuration up?
[http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html#how...](http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html#how-
do-i-enable-cors) and
[http://docs.aws.amazon.com/AmazonS3/latest/UG/EditingBucketP...](http://docs.aws.amazon.com/AmazonS3/latest/UG/EditingBucketPermissions.html)

------
fidotron
Mozilla need to tone down the disingenuous marketing as it's going to bite the
otherwise worthy asm.js in the long run.

The problem is that video fails to explicitly point out that the only version
relying on asm.js is the browser version, which is the least interesting,
while they're all excited about different devices those are all supported
thanks to Unreal's cross platform support and has nothing to do with the
asm.js version.

~~~
padenot
The video was not made by us, it was made by the game developers. This
particular video (and blog post) is about the asm.js port of the game (and
other possible solutions), not about the game itself.

------
fritz_vd
this is quite remarkable

~~~
camus2
this is C++. now all javascript folks need to learn C and C++.

~~~
AndrewDucker
Only if they want ultra-high performance, for writing games and suchlike.

Otherwise they can stick to javascript.

(And, of course, anything else that compiles to javascript)

~~~
timje1
To be fair, if you want ultra-high performance for high quality 3d games, why
did you learn javascript? Go away and learn C or C++ ...

This doesn't give anything to web developers. It gives C / C++ developers a
way onto the web.

~~~
chc
> _To be fair, if you want ultra-high performance for high quality 3d games,
> why did you learn javascript?_

That's not fair at all, because there are valid answers to that question like
"Because I also want my programs to run in the browser."

~~~
corysama
Until recently, that was a contradictory set of goals. Now it's pretty
feasible to achieve both goals using C++. But, not so much with hand-written
JS... ( _Feasible_ , not arguing theoretical)

~~~
chc
Kindasorta. They do contradict if you only write one program. But you could
write a high-performance 3D game _and_ a web app and achieve both goals, thus
justifying learning both JavaScript and C++.

------
jebblue
It's interesting but didn't Quake Live run inside the browser?

~~~
elisee
Quake Live used a native plugin actually, it was basically a regular native
game running inside the browser's chrome.

------
marcosscriven
I really wish iOS enabled WebGL in Safari. Not sure why they don't, because
it's available in web views on their iAd web view, and thus technically
possible.

~~~
jhvh1134
I often wonder if they are just concerned about delegitimizing their app
market to some degree. Flash gave a similar threat.

------
grogenaut
It runs pretty slow with newest nvidia drivers on a 2 year old lenovo laptop
with a decent graphics card. Getting sub 10fps. It's impressive that it works
though.

------
est
Uncaught TypeError: Cannot call method 'createBuffer' of undefined
blob:http%3A//www.playverse.com/5295321b-d5f5-4862-8065-821e3ded7e1d:5046

------
chris_wot
On my iPhone, when I go to play Monster Madness it takes me to apple.com - any
reason?

------
kro0ub
And this is seen as a positive development?

~~~
DanHulton
Yeah, yeah it is.

~~~
kro0ub
So was national socialism, though.

~~~
chris_wot
Some people like trolling. Takes all sorts to make up the world I guess.

