Doom en JavaScript et HTML 5

Image 1 : Doom en JavaScript et HTML 5

Mozilla vient de porter Doom sur JavaScript et HTML5. La démo est jouable depuis Safari ou Firefox et si nos premiers tests ont rencontré quelques problèmes, c’est tout de même une belle prouesse de la part des développeurs

Selon les explications publiées sur le site de l’éditeur, Mozilla a utilisé le code source de la démo de Doom publié par id Software. Il a d’abord utilisé Clang pour passer du code source en C à un bitcode LLVM. Il s’est ensuite tourné vers Emscripten, un compilateur LLVM vers JavaScript. Le code a ensuite été optimisé avec closure-compiler.

Doom est rendu à l’aide de l’API SDL qui est une bibliothèque multimédia implémentée en JavaScript par Emscripten. Elle offre un accès à l’audio, la souris et à la puce graphique grâce à l’OpenGL. La vidéo était affichée à l’aide de l’élément HTML5 « canvas ». Mozilla souligne aussi que l’absence d’une API universelle pour le son l’a obligé à utiliser la Mozilla Audio Data API. Cela pourrait expliquer pourquoi il n’y a pas de son lorsque la démo tourne sur Safari. Sous Firefox 4.0.1 pour Mac OS X, les choses ne sont malheureusement pas bien meilleures. Le son était saccadé et très désagréable.

Image 2 : Doom en JavaScript et HTML 5Dans l’ensemble, la démo et le système de sauvegarde fonctionnaient bien et nous tournions à 25 images par seconde. Il y a tout de même certains bugs. En plus de la disparition de textures au cours du jeu, la souris n’a jamais été reconnue et de nombreuses touches étaient inactives. Le jeu a refusé de tourner sur Chrome. Mozilla reconnait qu’il y a un problème avec le moteur V8. La démo serait aussi très lente sur Opera, selon l’éditeur.

Pour mémoire, Google avait fait une démo similaire l’an dernier. Il avait porté Quake 2 en JavaScript et HTML5. Son projet avait eu le mérite d’être plus impressionnant de par son envergure et la taille de la fenêtre de jeu. Néanmoins, dans les deux cas, on apprécie surtout le travail des développeurs qui montrent ce qu’il est possible de faire avec du JavaScript et du HTML5.