URL: https://linuxfr.org/users/kekun/journaux/retro-0-1 Title: Retro 0.1 Authors: Kekun Date: 2014年12月04日T01:12:35+01:00 License: CC By-SA Tags: libretro, retro, gtk, gnome, jeux_linux, émulateur et bibliothèque Score: 35 Ce journal est une traduction d'un [article publié sur mon blog](http://bytesgnomeschozo.blogspot.fr/2014/12/retro-01-rc.html) il y a peu en anglais. Je vous le livre ici traduit en français un peu à la va-vite, sans trop adapter les structures grammaticales. # Introduction Lors du dernier GUADEC, j'ai eu la chance de présenter brièvement mon projet d'avoir un gestionnaire de jeux vidéo simple mais puissant pour GNOME. Afin d'en faire une réalité, beaucoup de travail fût nécessaire sur son backend. Cet article présente la publication de la première version de ce backend, sous sa forme de candidat de version. # Libretro [Libretro](http://www.libretro.com/) est une API C/C++ utilisée par de nombreux émulateurs de consoles de jeux rétro et moteurs de jeux. Écrire un émulateur et écrire une application avec un GUI demandent des capacités différentes, utiliser Libretro permet d'isoler les backends (souvent appelés modules ou cœurs) implémentant l'API des frontends utilisant l'API afin de les manipuler, facilitant le port des émulateurs et moteurs et offrant une multiplicité de choix de cœurs aux développeurs d'applications. ![Logo Libretro](http://www.libretro.com/wp-content/uploads/2013/10/libretro_final_thumb.png) Le frontend principal de Libretro est RetroArch et il a été porté sur de multiples systèmes. # Retro Retro (ou retro-gobject) est une bibliothèque enveloppant Libretro, basée sur GObject et écrite en Vala. Elle facilite la création de frontends Libretro en utilisant la POO et la gestion de mémoire automatisée (grâce à Vala et GObject) ; elle permet la création de frontends Libretro dans d'autres langages que C/C++ via GObject Introspection ; et elle permet d'avoir de multiples cœurs Libretro chargés en même temps, via l'utilisation de variables globales afin de stocker l'identité du cœur appelant, et via la copie de fichier pour éviter la collision de variables globales dans des cœurs déjà utilisés. L'API de Retro n'est pas à considérer comme stable pour le moment, mais elle est proche de l'être et ne devrait pas trop changer. Certains objets sont marqués temporairement avec une visibilité internal jusqu'à ce qu'ils soient testés et peaufinés et puissent faire partie de l'API publique. Mais chose plus importante, ce que Retro n'est pas est un fork de Libretro. Tout ce qu'il fait est de l'envelopper dans une jolie couche orientée objet et est complètement compatible avec les modules implémentant Libretro. Le dépôt git de Retro est trouvable ici : [https://github.com/Kekun/retro-gobject](https://github.com/Kekun/retro-gobject) Retro version 0.1 RC est trouvable ici : [https://github.com/Kekun/retro-gobject/releases/tag/v0.1-rc](https://github.com/Kekun/retro-gobject/releases/tag/v0.1-rc) ## Core Core est la classe la plus importante de Retro. Elle représente les fonctionnalités associées à un module Libretro et vous permet de le faire marcher. Un Core vous permet d'obtenir des informations à propos de son module, de définir des interfaces afin de gérer ses callbacks, et surtout, de le faire tourner. ## Video L'interface Video est utilisée par un Core afin de demander au frontend d'afficher de la vidéo et de définir les détails à propos de comment la vidéo doit être rendue, comme le format de pixels de la vidéo source. ## Audio L'interface Audio est utilisée par un Core afin de demander au frontend de lire du son. ## Input L'interface Input est utilisée par un Core afin de demander au frontend l'état des périphériques d'entrée, comme des manettes, des claviers et des souris. ## Autres interfaces Plein d'autres interfaces peuvent être définies par le frontend ou par le cœur afin de communiquer. Quelques exemples sont l'interface Log, laissant le Core écrire des messages de journal sur la sortie standard ou un fichier par exemple ; l'interface DiskControl, laissant le frontend contrôller le lecteur de disques virtuel d'un Core (par exemple, pour échanger les disques d'un émulateur de console de jeux utilisant des CDs ; ou l'interface Variables afin de permettre au frontend de connaître et définir les options spéciales d'un Core. # RetroGtk RetroGtk est une bibliothèque écrite en Vala qui lie Retro, afin de faire fonctionner des modules Libretro, et Gtk. Il fournit des widgets Gtk implémentant diverses interfaces de Retro, permettant d'afficher facilement la vidéo d'un Core, de lui transmettre les événements clavier et souris, et de mimer des manettes via un clavier. RetroGtk contient aussi des objets non liés à Gtk, comme des boucles aidant à faire fonctionner un Core, un interface transférant le journal d'un Core vers un FileStream, et une interface aidant à gérer les variables d'un Core. Vous pouvez utiliser Clutter et ClutterGtk ou Cairo afin d'afficher la vidéo, et j'espère que l'inclusion d'un widget Gl dans Gtk+ 3.16 permettra de se débarrasser de la dépendance à Clutter. It peut également aussi lire l'audio d'un Core via PulseAudio, mais cela pourrait être déplacé vers une bibliothèque "RetroPa". Un support des joysticks en bonne et due forme est encore à venir, certainement dans une bibliothèque à part (RetroJs ?). Le dépôt git de RetroGtk est trouvable ici : [https://github.com/Kekun/retro-gtk](https://github.com/Kekun/retro-gtk) # Collection de modules Libretro Être capable de faire tourner, contrôler et afficher des implémentations de Libretro ne sert à rien si vous n'avez aucune de ces implémentations à faire tourner, contrôler et afficher. Afin d'aider à résoudre ce problème, j'ai commencé à collecter des implémentations compatibles GPL dans un dépot git, ajoutant un makefile pour faciliter leur compilation et installation. C'est encore balbutiant mais ça m'a déjà pas mal aidé. Les machines actuellement émulées par la collection sont : * Nintendo Entertainment System * Super Nintendo Entertainment System * Game Boy Advance * Saturn * PC Engine * DOS Le support de la PlayStation est à venir, mais un bug gênant dans l'émulateur doit être corrigé avant. Vous pouvez trouver cette collection ici : [https://github.com/Kekun/libretro-free](https://github.com/Kekun/libretro-free) # Applications ## Démo Afin de tester tout ça, j'ai écrit une application de démo, qui utilise Retro, RetroGtk et la collection de modules afin de faire tourner des jeux. Elle permet d'ouvrir plusieurs types de fichiers (voir les modules dans la collection pour savoir ce qui peut fonctionner), de définir les options d'un Core, et elle supporte des entrées telles que le clavier, la souris, et peut utiliser le clavier comme une manette virtuelle. Vous pouvez définir la configuration de la manette via un bouton. ![screenshot-dosbox.png](http://3.bp.blogspot.com/-ZWFRXfnDLGg/VHytOY6nFHI/AAAAAAAAACM/swr8QRvxcoI/s1600/screenshot-dosbox.png) Theme Park fonctionnant sur DOSBox ![screenshot-gamepad.png](http://3.bp.blogspot.com/-9lgeBbd_7vU/VHytOYzAIOI/AAAAAAAAACQ/OYatgDDsNcU/s1600/screenshot-gamepad.png) Configuration de la manette virtuelle en faisant fonctionner PC Genjin 2 sur Mednafen ![screenshot-options.png](http://3.bp.blogspot.com/-XFTu1kVuyS8/VHytOWnPQyI/AAAAAAAAACc/qxXQazw40R8/s1600/screenshot-options.png) Les options de Nestopia ![screenshot-ungrab.png](http://2.bp.blogspot.com/-FoKqQ-pXmnk/VHytO6U2y7I/AAAAAAAAACY/IrtoOlcGeuE/s1600/screenshot-ungrab.png) bSNES faisant tourner Yoshi's Island, affichant le message "relâcher le pointeur" Voici le dépôt git de la démo : [https://github.com/Kekun/retro-gtk-demo](https://github.com/Kekun/retro-gtk-demo) ## GNOME Games Le but ultime de ce projet est d'écrire un gestionnaire et lecteur de jeux pour GNOME, ayant une interface similaire à celle de GNOME Music ou GNOME Video. Ce projet est similaire à OpenEmu pour les systèmes MacOS X.

AltStyle によって変換されたページ (->オリジナル) /