Guide Émulation 3 - Les portages de sources

9 minutes

Parlons un peu de tout ces projets qui permettent à faire tourner nativement un jeu sur une autre plateforme !

Pour ce troisième article sur l'émulation, je vous propose que nous parlons de quelque chose qui n'est PAS de l'émulation.

Hé, revenez c'était une blague

Enfin, c'était pas entièrement une blague. Mais ne repartez pas ! Nous allons parler des portages de sources (ou source port dans la langue de Shakespeare qui était bien évidemment un grand connaisseur dans le sujet). Les portages de sources sont des moyens de jouer un jeu sur une autre machine, à l'aide du code source originel qui a été soit porté, soit recréé de zéro sur une autre plateforme. Ici, il n'y a donc généralement pas d'émulation (il est parfois possible d'avoir des méthodes hybrides), mais un jeu natif qui tournera sur l'appareil sur lequel vous voulez y jouer.

Si ce n'est pas de l'émulation à proprement parler, c'est un sujet connexe qui permet de rendre accessible pleins de jeux rétro voir de les améliorer. Et dans certains cas, l'expérience utilisateur sera même similaire à émuler. A noter ici qu'on va parler des portages de sources qui demandent d'utiliser les données du jeu, et pas des fan-remake open-source ou non qui sont un tout autre sujet et du coup encore moins des "clones open-source".

Comment c'est fait ?

Les portages de sources comme dit plus haut naissent de deux manières :

  • La première est quand les créateurs du jeu originel publient le code source sous une licence libre, tel que cela a été fait sur Doom. Cela permet à une communauté de s'emparer du jeu pour faire évoluer son code et lui permettre de fonctionner sur des machines modernes, ou d'être amélioré. Ou dans le cas de Doom le faire fonctionner sur des frigo et des tests de grossesses, parce que pourquoi pas. De plus, quand le moteur de jeu est proche d'autres moteurs similaires, cela permet de travailler pour les rendre compatibles aussi (ou de pouvoir travailler pour le second point).
  • La seconde est quand des développeurs décident de recréer de zéro le moteur du jeu, via le reverse engineering. Le but est d'étudier comment le jeu fonctionne, et les formats de ses fichiers de données (graphismes, musiques, niveaux, textes) pour réussir à recréer une copie exacte du moteur. Cela demande un travail d'étude très long, parfois aidé via des outils qui permettent d'étudier en interne les comportement du jeu (éditeur de mémoire, etc). Généralement, on évite d'utiliser des outils de décompilation, pour rester en Clean Room, et surtout éviter de faire des infractions de copyright.

Cela permet d'avoir au final un système propre et fonctionnelle créant une copie suffisamment bonne du moteur du jeu originel pour que cela serve de base à le porter sur d'autres supports, ou le moderniser.

Il y a un dernier type, qui pose plus de question niveau légalité, c'est la recompilation dynamique. C'est utilisé pour transformer directement un jeu d'un code machine à un autre, et c'est pas mal utilisé pour les jeux Nintendo 64. Celui là pose plus de soucis (a noter que les portages les plus connus sont fait en clean room).

Les avantages

Alors, quel sont les avantages des portages de sources, qu'est-ce qu'ils peuvent apporter ?

Le premier est que cela rend les jeux disponibles sur d'autres plateforme en natif, là ou l'émulation plus généralement va demander une couche en plus. Ce que cela permet le plus c'est de meilleur performance, et un meilleur usage des fonctionnalités natives. Un exemple à cela est qu'en jouant à Doom sous DOSBox, vous êtes limité par ce qu'était l'informatique de l'époque, là ou un portage de source va permettre d'adapter le jeu aux technologies d'aujourd'hui. C'est aussi bien plus simple pour les jeux PC d'utiliser un source port que de devoir faire tourner une machine virtuelle avec un vieux Windows 2000 ou XP, quand il y a un source-port disponible.

De plus, cela permet parfois pleins d'améliorations possibles, qu'elles soient visuelles, ou quality of life. On y combine un peu le mélange qui d'habitude peuvent être faite via un émulateur, et celles qui d'habitudes peuvent être fait via un romhack, puisqu'on travaille directement avec les sources du jeu. Par exemple, je pense pas que je pourrais jouer à Doom sans y jouer avec une souris moderne, le fait de pouvoir regarder en hauteur, et le fait de profiter du 1080p. Cela apporte une précision au jeu que j'apprécie beaucoup. Les portages de sources peuvent permettre de redécouvrir un jeu entièrement sous un nouveau jour.

Et une de ces fonctionnalité est que souvent ces portages de sources rendent encore plus moddable les jeux, pour deux raisons :

  • Le caractère open-source / libre du projet fait qu'on peut étudier comment le jeu est fait, et donc en apprendre plus sur faire des mods. Cela permet même la création d'outils de développement pour les mods
  • Le second est que souvent des fonctionnalités en plus sont ajoutés pour rendre plus moddable, tel que des langages de scripting, une lecture plus facile des mods, etc.

Si les jeux peuvent être moddable sans portage de sources (au point ou des communautés entière se centre sur ça sur des jeux n'étant à la base pas du tout fait pour), les sources ports rajoutent de la facilité dedans.

Quelques exemples

Le premier exemple de portage de sources sont ceux fait autour de Doom, notamment GZDoom, qui permet de jouer à plusieurs jeux basé sur Doom. Ce portage de Doom le rend compatible avec des technologies plus modernes (OpenGL, Vulkain), permettant d'avoir des graphismes plus rapide et plus fin, tout en gardant l'esthétique rétro d'époque. Une de ses particularités est qu'il contient à la fois une compatibilité avec les iWad (fichier de données de jeu) de Doom et Doom II, mais de tas d'autres jeux du genre (voir liste ici). De plus, il est utilisé comme moteur pour des tas de mods cool (un jour je ferais un article avec mes préférés), voir pour des nouveaux jeux complets gratuit ou commerciaux utilisant le moteur.

Un autre du genre est Scummvm, qui était à l'origine un moteur pour faire tourner les jeux basé sur le moteur Scumm (Monkey Island, les points and click Indianna Jones, etc), et qui depuis à évolué pour supporter beaucoup de jeux. Mais vraiment BEAUCOUP de jeux. Il supporte même quelques uns des vieux Might and Magic, dépassant du coup le Point and Click pour gérer aussi le RPG occidental rétro. En autre moteur permettant de gérer pleins de jeux d'un coup, y'a EasyRPG (portage du runtime de RPG Maker 2000/2003) et MXKV (portage du runtime de RPG Maker XP), qui permettent de jouer à la tonne de jeux amateurs ou pro fait avec ces moteurs.

Les jeux Nintendo 64 commencent à en avoir aussi de plus en plus avec Mario 64 PC, Ship of Harkinian (faisant Ocarina of Time), Starship (faisant Starfox). C'est assez impressionnant tout ce taff, et cela permet de jouer aux jeux avec le confort de nos plateformes modernes, et d'avoir accès a des fonctionnalités comme augmenter le nombre d'image par seconde (ce qui fait super bizarre sur Ocarina of Time, qui devient presque TROP fluide je trouve quand on le fait).

En autre importants, plus centré sur un jeu en particulier on peut trouver OpenMV, ou les décompilations du RetroSDK permettant de jouer aux version PC/Mobile de Sonic 1, 2, CD et Sonic Mania.

Ou en trouver

Pour trouver des portages de sources de jeux, il y a plusieurs moyens.

  • Si vous jouer sur PC, vous devriez apprécier le listing présent sur le wiki emulation (quand je vous disait que les deux concepts étaient proches !
  • Une liste similaire est présente sur le PCGamingWiki
  • Une autre est présente sur le Linux Gaming Wiki
  • Si vous jouez sur une console neo-retro ARM (style Ambernic, etc), vous devriez apprécier le projet Portmaster, qui porte des tas de jeux pour ces consoles, en utilisant parfois d'autres technique (par exemple sur les jeux game maker changer le runtime, etc).

Miniature : Prboom and Freedoom