43 points par gamjaa 2026-03-25 | 10 commentaires | Partager sur WhatsApp
  • 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

 
beoks 2026-03-25

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.

 
minsuchae 2026-03-25

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.

 
vndk2234 2026-03-25

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...

 
kentakang 2026-03-25

À 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.

 
324ing 2026-03-27

Donc, ce n’est pas lui qui l’a fait.

 
wedding 2026-03-25

Mais la version Steam de GunZ est sortie... Je me demande s'il n'y a pas un problème juridique.

 
ifmkl 2026-03-25

Waouh, c’est vraiment impressionnant.

 
simryang 2026-03-25

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.

 
unknown 2026-03-25

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.

 
jtpark03 2026-03-25

C’est impressionnant, on dirait une véritable utilisation pertinente de l’IA.