Création d'un fichier de cheat pour l'émulateur Mame

toki_title_debug.jpg

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.

k10_4e.bin.png

hexedit.png

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.
toki.xml.png



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.

toki_roms_files.png

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

debugger.png

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. toki-dump.png



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



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. mame-debugmode.png



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.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet