Création d'un fichier de cheat pour l'émulateur Mame
Par Ryo le mardi, août 25 2015, 13:00 - Jeux vidéos - Lien permanent
Suite au visionnage de cette vidéo sur le jeu Toki, le développeur Sakuma nous donne une astuce pour activer le debug mode dans son jeu.
La manipulation est plutôt simple. Il suffit d'ouvrir le fichier k10_4e.bin présent dans la rom toki.zip
pour changer l'octet 00 par 0F à l'offset (l'emplacement) 244. Cette manipulation s'effectue avec un éditeur Hexadécimale comme Hexedit.
Seulement, si l'on fait cette manipulation le fichier de la rom n'a plus un CRC valide pour Mame et on ne peut pas facilement activer ou désactiver ce debug mode. C'est là que rentre en jeu les cheats pour Mame.
Il existe des milliers de codes déjà trouvé pour les jeux Mame, cela tourne souvent autour de vie infini ou de personnages cachés. Dans de rare cas on peut même activer les niveaux non finalisés. Tout cela se situe ici mamecheat.co.uk
Il suffit de télécharger le fichier cheat.7z
et activer la prise en compte des cheats dans Mame (je ne m'étale pas, il existe plein de tutoriels vidéo sur la chose).
Du coup la question se pose : Comment rajouter l'astuce du Debug mode de Sakuma dans le fichier cheat.7z
?
1) Le fichier cheat.7z
Si l'on ouvre l'archive cheat.7z
on découvre plein de fichiers XML. Chaque fichier XML concerne un jeu. Je décompresse donc le fichier toki.xml
dans le répertoire cheat de Mame. Si on l'ouvre on constate qu'il existe déjà quelques astuces pour ce jeu.
2) Le format du fichier toki.xml
Le fichier toki.xml
respecte une syntaxe complexe du Cheat Engine de Mame. Pour faire simple, on indique quoi changer et sous quel condition dans la mémoire du jeu quand on active le cheat. On peut faire énormément de chose et une doc est disponible ici.
Pour activer notre debug mode, le code est très simple, il faut changer un octet dans la mémoire ROM du jeu.
3) Mame et son debuggeur
On pourrait se dire que l'offset de l'octet est 244 comme pour le fichier k10_4e.bin
, ça serait trop simple. Il va falloir détecter comment Mame charge en mémoire le jeu et voir où se situe notre octet de debug mode.
J'ai donc créé 2 fichiers roms toki.zip
. Un avec le debug mode d'activé et l'original.
Je place d'abords le fichier rom original dans le répertoire roms
et lance Mame en activant le debugger interne.
mame -debug -window toki
-debug active le mode debugger
-window passe Mame en mode fenêtré (c'est plus simple pour gérer le jeu et le debugger)
A ce moment le jeu ne se lance pas mais propose une fenêtre de débogage dans laquelle on peut faire tout un tas de manipulation. On peut entre autre observer la mémoire en appuyant sur Ctrl+M
.
Je vais dumpper cette mémoire dans un fichier en tapant la commande suivante dans le debugger
dump toki-original.txt,0,0xFFFF
dump commande pour dumper la mémoire
toki-original.txt fichier texte qui va recevoir le dump (il sera dans le répertoire principale de Mame)
0 offset de début
0xFFFFF offset de fin (en hexadécimal)
Une documentation de toutes les manipulations possible est disponible en tapant "help
" dans le
debugger. Dans le cas présent pour obtenir la documentation sur la mémoire, j'ai taper "help memory
".
Le debugger annonce qu'il a fini son dump, on peut quitter le jeu.
Je place maintenant le fichier rom modifié (avec le debug mode) dans le répertoire roms
et lance Mame en activant le debugger.
mame -debug -window toki
Je refait un dump de la mémoire avec le nouveau jeu.
dump toki-debugmode.txt,0,0xFFFF
Le debugger annonce qu'il a fini son dump, on peut quitter le jeu.
On dispose maintenant de deux fichiers dump toki-original.txt
et toki-debugmode.txt
qu'il va falloir comparer.
4) Détection de l'octet à modifier
On ne va bien sur pas comparer les fichiers à la main, ça serait beaucoup trop long. Il existe tout un tas de logiciel pour faire cette tache. Personnellement, j'utilise KDiff3.
On charge les deux fichier dans KDiff3 et oh magie, il n'existe qu'une seul différence entre les deux dump à l'offset 489. Et cette différence est justement 00 et 0F.
On en déduit logiquement qu'il va falloir changer l'offset 489 en 0F pour activer le mode debug à la volée.
5) Syntaxe du Cheat Engine de Mame
Maintenant que je dispose de toute les informations nécessaires je dois expliquer au Cheat Engine comment les utiliser.
J'ouvre le fichier toki.xml
du répertoire cheat
et je consulte la documentation du Cheat Engine en même temps.
Je peux déjà créer la structure XML de mon nouveau cheat code :
<cheat desc="Debug mode"> <script state="on"> <action></action> </script> <script state="off"> <action></action> </script> </cheat>
Cette structure dit que l'on fera une action quand on activera le debug mode "on" et qu'on en fera une autre quand on le désactivera "off".
Pour connaître l'action à effectuer j'ai dû procéder à quelques essais mais voici ce que j'en ai conclu :
- l'action est un changement d'octet en mémoire ROM, les données non modifiable du jeu (on peut, dans d'autre cas agir sur la RAM, données modifiable du jeu pendant son exécution).
- l'action se fait sur le processeur principale du jeu (on peut, dans d'autre cas agir sur le processeur son, vidéo, réseau,…)
A partir de là voici la syntaxe que l'on peut en déduire pour l'activation du debug mode
<script state="on"> <action>maincpu.mb@489=0F</action> </script>
maincpu siginie processeur principale (on peut agir sur bien d'autre endroit)
.m siginifie que l'on va agir sur la ROM du jeu et non sur la RAM
b siginifie que l'on va exprimer les valeurs en byte (octet)
@489 sur l'offset 489
=0F à modifier en 0F
Inversement pour supprimer le debug mode
<script state="off"> <action>maincpu.mb@489=00</action> </script>
Voici donc le cheat final :
<cheat desc="Debug mode"> <script state="on"> <action>maincpu.mb@489=0F</action> </script> <script state="off"> <action>maincpu.mb@489=00</action> </script> </cheat>
6) Test final dans Mame
On copie ce cheat dans toki.xml
, on enregistre et on lance Mame en activant la prise en compte des cheat
mame -cheat toki
Si l'on appui sur TAB
en allant dans le menu Cheats, on découvre notre cheat. On peut l'activer avec les flèches droite, gauche et on constate son bon fonctionnement.
Le debug mode affiche des informations concernant les sprites à l'écran et fourni une invincibilité complète au personnage.
Rappel des ressources utilisées :
- Vidéo expliquant le debug mode : https://youtu.be/Yr8IQAzEg1c?t=43m3s
- Rom du jeu Toki : il vous faudra la trouver par vous même
- Editeur Hexadécimale Hexedit : http://www.hexedit.com
- Documentation du Cheat Engine de Mame : http://www.mamecheat.co.uk/forums/viewtopic.php?f=2&t=3768
- Logiciel de comparaison KDiff3 : http://kdiff3.sourceforge.net
- Le fichier cheat toki.xml avec le debug mode.