- Jeu TPS sorti en 2003 et réservé à Windows, GunZ: The Duel
→ porté pour être exécutable dans le navigateur via WebAssembly + WebGL - Sans installation, jouable immédiatement dans Chrome en ouvrant simplement l’URL https://gunz.sigr.io/
- Fonctionne sur Linux, macOS et même mobile, soit dans presque tous les environnements
- Le code C++ existant est conservé presque sans modification
- Environ 99 % du code nouvellement écrit a été généré par l’IA
Pourquoi c’est important
- Jeux PC classiques :
- téléchargement/installation nécessaires
- dépendance à Windows
- Résultat obtenu ici :
- exactement le même jeu tourne dans le navigateur
- pas une « implémentation similaire », mais un portage fidèle de l’original
- C’était jusqu’ici un domaine considéré comme « théoriquement possible, mais irréalisable en pratique »
Tentatives passées et échecs
- Approche précédente :
- réimplémenter le moteur en JavaScript + Three.js
- Résultat :
- seul le rendu de la carte a pu être réalisé
- la difficulté de réimplémenter l’ensemble du moteur était trop élevée, le projet a donc été abandonné
- Conclusion :
- l’approche par « réimplémentation » est en pratique presque impossible
Problème central : la dépendance à Windows
- GunZ repose sur du C++ et dépend de Direct3D
- Problème :
- Direct3D est une API réservée à Windows
- impossible de l’utiliser directement dans le navigateur (WebGL)
- Une simple compilation en wasm ne suffit pas
- En clair :
- seul le code indépendant de la plateforme peut être compilé en wasm
- la partie dépendante de l’API graphique constitue le principal obstacle
Limites des approches existantes
- Modifier directement le code du jeu
- nécessite de retoucher des dizaines de milliers de lignes
- maintenance impossible
- Conversion automatique (D3D → WebGL)
- conversion mécanique impossible à cause des différences de sémantique entre les API
- Conclusion :
- les approches existantes sont toutes irréalistes
Idée clé : une « couche de traduction »
- Approche :
- conserver le code du jeu tel quel
- intercepter les appels Direct3D
- les convertir à la volée en WebGL
- Implémentation :
- un wrapper WebGL exposant la même interface que l’API D3D9
- inséré entre le jeu et l’API graphique
- Effets :
- presque aucune modification du code du jeu
- suppression de la dépendance à Windows
- le coût du portage est ramené à la seule « implémentation du wrapper »
Le rôle de l’IA
- Outils utilisés :
- Google Antigravity
- Claude Code (offre Max)
- Résultat :
- automatisation de l’analyse et de la modification de grandes bases de code
- des problèmes qui prenaient des semaines ont été résolus en quelques heures
- l’IA a concrètement réalisé un travail difficilement faisable par un humain seul
- En particulier :
- l’IA a pris en charge l’essentiel de l’implémentation du wrapper D3D → WebGL
Résumé essentiel
- Il ne s’agit pas de « recréer le jeu »
→ mais de préserver le code existant tel quel autant que possible - Technologies clés :
- WebAssembly
- couche de traduction Direct3D → WebGL
- Changement majeur :
- grâce à l’IA, le portage à grande échelle de logiciels legacy devient une tâche réaliste
- Enseignement :
- il devient possible que la difficulté de porter d’anciens jeux et logiciels vers le web chute fortement à l’avenir
10 commentaires
L’IA est impressionnante, mais j’ai l’impression que le fait que D3D9 soit bien découpé en interfaces y est encore pour plus ; si tout avait été imbriqué avec des références directes, cela aurait sans doute été bien plus difficile.
J’avais vu un article d’Inven l’autre jour, donc en fait ils ont traité ça en mettant en place une couche de traduction Direct3D.
Quand je l’ai testé, en moins d’une minute, j’ai tout de suite eu la forte impression que la qualité d’image n’était pas terrible, mais en y repensant, si ce n’était pas l’idée de tout recréer depuis zéro mais de conserver tel quel en passant par une couche de traduction, je peux comprendre que ce soit le cas...
En revanche, j’ai l’impression que le blog original va être géré d’une manière un peu risquée. Il faudrait préciser qu’il s’agit d’un texte traduit ou indiquer clairement la source originale... J’ai fortement l’impression qu’il essaie de se faire passer pour l’auteur lui-même... Quelqu’un l’a aussi signalé dans les commentaires, mais il n’y a pas eu de réponse.
(À la base, tous les articles de référence du blog original sont d’ailleurs du côté japonais.)
Il y a aussi des éléments qui ne tiennent pas debout : au tarif coréen, il n’existe pas de forfait Anti Gravity à 3000 wons par mois. Et dans les images, tout apparaît en japonais. Il y a même de l’anglais dans certaines images.
Dans ce cas, je me dis qu’ils auraient plutôt dû tout convertir en coréen dès le départ avant de publier.
Vous dites avoir payé pour le 5x, mais sur la capture c’est bien le 20x… enfin bon, vous habitez peut-être au Japon, donc...
À force de regarder, on a presque l’impression que c’est lui en personne.
La phrase affichée quand on accède à sigr.io est aussi une parole de chanson d’aespa,
et le nom du projet Gunz, Whiplash Gunz, reprend également le titre d’un morceau d’aespa,
et comme son pseudo sur velog est aussi aespa, on a l’impression qu’il aime aespa de façon assez cohérente, donc je me demande si ce n’est pas lui-même qui a fait tourner la traduction avant de la publier sur velog.
Donc, ce n’est pas lui qui l’a fait.
Mais la version Steam de GunZ est sortie... Je me demande s'il n'y a pas un problème juridique.
Waouh, c’est vraiment impressionnant.
C’était un jeu que j’aimais énormément, alors merci de l’avoir fait revivre.
Par contre, il n’y a personne en ligne.
On dirait que c’est parce que le serveur tourne aussi dans le navigateur. Si vous voulez jouer à plusieurs, il semble que les joueurs doivent échanger leurs informations entre eux et se connecter mutuellement via des WebSocket.
C’est impressionnant, on dirait une véritable utilisation pertinente de l’IA.