Sur Retroarch, il y a des commandes 'systèmes' ; elles permettent d'afficher le menu, de mettre en pause, de réinitialiser la ROM, de charger/sauver l'état du jeu...
Il y a cependant une contrainte à l'utilisation de ces commandes mais voyons d'abord comment elles fonctionnent avant de montrer comment en modifier l'usage : assigner une touche pour le chargement et une autre pour la sauvegarde !
Deux possibilités sont offertes pour personnaliser le déclenchement de ces commandes :
La première méthode, avec une touche Hotkey paramétrée, est celle par défaut sur Retroarch et est probablement la plus utilisée car elle propose beaucoup de fonctionnalités pratiques en réutilisant les touches déjà existantes pour les commandes du jeu (s'il y a 8 touches de fonctions et un stick, cela permet d'avoir 11 commandes). Mais elle présente comme inconvénient un manque de rapidité.
Certes, si on souhaite juste quitter le jeu en cours, appuyer sur 2 touches en même temps ne présente pas un problème de temps en soi. Par contre, si on veut sauvegarder un jeu rapidement, à un moment où le temps est crucial, localiser et appuyer sur 2 touches simultanément prend un laps de temps qui peut être critique selon le jeu. Et avec un risque d'erreur (on peut confondre le sauver et le charger par exemple).
La seconde méthode (pas de touche Hotkey) ne présente plus l'inconvénient du laps de temps critique pour sauvegarder mais nécessite d'avoir autant de touches disponibles que de fonctions à utiliser : il faut une touche pour quitter le jeu, une autre pour accéder aux paramètres de Retroarch, une autre pour charger, une autre pour sauver, encore deux autres pour naviguer dans les sauvegardes... Bref, tout un clavier !
L'idéal aurait été de pouvoir paramétrer Retroarch pour indiquer que telle fonction système est appelée soit par une touche dédiée, soit par une combinaison Hotkey+touche.
En cherchant dans la documentation de Retroarch, on apprend qu'il écoute certains ports, notamment le 55355, pour permettre d'exécuter des commandes par le réseau : quitter, faire des captures d'écran, modifier le volume... C'est indiqué ici
Dans la documentation de Batocera (qui lance Retroarch), on apprend qu'on peut créer un fichier de configuration des touches pour lancer des scripts. Cette documentation propose de jouer sur la luminosité ou le volume de Batocera lorsqu'on appuie sur certaines touches.
Vous l'avez compris : l'idée est donc, lorsqu'on appuie sur une touche spécifique, d'envoyer une commande réseau localement, qui sera traitée par Retroarch. La touche Hotkey reste utilisée mais les appels directs à certaines touches sont interceptés pour envoyer des commandes à Retroarch.
Connaître le nom des touches dédiées
L'idéal est d'avoir une touche pour sauver l'état d'un jeu et une touche pour charger cet état.
Au préalable, il va falloir trouver le nom technique de ces 2 touches. Une méthode pour y parvenir est de se connecter en SSH à sa machine et de lancer le logiciel evtest.
Celui-ci affichera, si vous appuyez sur une touche, le statut et le nom de celle-ci. Dans mon cas, j'obtiens ceci pour la touche 'sauver' :
type : 1 (EV_KEY), code 296 (BTN_BASE3), value 1 => 0
Et cela pour la touche 'charger':
type : 1 (EV_KEY), code 297 (BTN_BASE4), value 1 => 0
J'ai écrit le script à lancer dans 2 langages différents (Python et Bash). Les 2 fonctionnent mais j'ai une préférence pour le script en Bash, plus court et probablement plus rapide. Je mets les 2 ici, à choisir selon les préférences de chacun et d'éventuelles évolutions...
Les différents affichages (echo et print) ne seront évidemment pas affichés et ne servent qu'à des fins de débugage.
Les 2 scripts détectent si Retroarch est en cours. Si c'est le cas, ils lanceront le chargement ou la sauvegarde de l'état du jeu. Si ce n'est pas le cas, cela changera la luminosité sur EmulationStation (à noter que ce point-là ne fonctionne pas forcément sur toutes les installations).
Enregistrez le code ci-dessous dans le fichier /userdata/system/configs/game_state_changer.py.
Puis accordez les droits d'exécution :
Enregistrez le code ci-dessous dans le fichier /userdata/system/configs/game_state_changer.sh.
Puis accordez les droits d'exécution :
Pour capturer des touches sur Batocera, il faut créer le fichier /share/system/configs/multimedia_keys.conf.
Ce fichier est automatiquement recherché et chargé au démarrage, rien d'autre à faire.
BTN_BASE3 1 python /userdata/system/configs/game_state_changer.py 1
BTN_BASE4 1 python /userdata/system/configs/game_state_changer.py 2
BTN_BASE3 1 /userdata/system/configs/game_state_changer.sh
BTN_BASE4 1 /userdata/system/configs/game_state_changer.sh
Batocera a besoin d'être redémarré pour que le paramétrage des touches soit effectif.
Une fois un jeu lancé, si vous appuyez sur 'Sauver' ou 'Charger' vous devriez avoir un message en bas de l'écran indiquant cet état.
![]() ![]() | ![]() | ![]() |