Logiciels & ROM Pokemon

Le ROM Hacking

ROM Hacking
"Le ROM Hacking, c'est un art." @ Sainior

Si vous êtes ici, cela signifie que je peux au moins assumer de vous que vous avez les capacités mentales nécessaires pour comprendre que l'on ne s'improvise pas hacker en claquant des doigts. Si c'est le cas, vous avez déjà accompli un grand pas en avant, et je dois vous féliciter. Serrons-nous la main.

Ceci étant fait, plongeons-nous plus précisément dans les arcanes de cet art qu'est le ROM Hacking. Si vous êtes un parfait novice, vous allez sans doute devoir assimiler beaucoup de choses en une seule fois : malheureusement, je n'écrirai rien ici dont je ne sois pas sûr que vous en auriez besoin plus tard.

Qu'est-ce que le ROM Hacking ?

Autant commencer par là. Le hack, par définition, est l'action d'intervenir sur quelque chose pour le détourner de son usage ou d'en transformer les données. Une ROM (acronyme de "Read Online Memory") est un fichier contenant des données sur un jeu vidéo vous permettant de jouer à ce jeu via un emulateur (si vous êtes sur un ordinateur, ou tout au moins un support qui habituellement ne permet pas de jouer au jeu) ou un linker (si vous désirez jouer sur la console).

Par extension, on en déduit que le ROM Hacking est l'art de modifier le fichier ROM d'un jeu pour en faire un jeu différent, que les différences soient minces ou complètement énormes. Mais maintenant, comment on s'y prend ?

Le principe de l'Hexadécimal et des Offsets

Un fichier ROM n'est pas écrit dans un langage aisément reconnaissable à l'oeil humain, contrairement à certains fichiers constituant un jeu sur ordinateur. Si vous avez eu la curiosité d'ouvrir le fichier ROM avec un éditeur de texte comme Word, vous avez peut-être été surpris de voir une énorme suite de caractères arbitraires. Qu'est-ce que ça représente ?

Pour parfaitement comprendre ça, expliquons d'abord le principe de l'hexadécimal. L'hexadécimal, aussi appelée la base 16, consiste à écrire les nombres non pas avec 10 symboles différents, mais 16 symboles différents.

Exemple : Le chiffre A1 donne 16*10 + 1, soit 161. Le chiffre F30, lui, donne 15*16²+3*16+0, soit 3888.

Les symboles utilisés sont dans l'ordre : 0 1 2 3 4 5 6 7 8 9 A B C D E F.
Très souvent, pour montrer qu'un nombre est en hexadécimal, on le fait précéder de la mention 0x. Ce qui permet de comprendre que 0x11 ne veut pas dire 11 mais 17.

Pourquoi utiliser un système aussi compliqué, direz-vous ? Il se trouve que 16=2*2*2*2 ; ce qui facilite beaucoup la transposition du langage des machines à nos yeux. Parce que oui, les machines écrivent en binaire (base 2) soit une suite de 0 et de 1, qui serait complètement indigeste à vos yeux. Par exemple, A s'écrit en binaire 1010. Mettez ça à l'échelle d'un texte entier, et c'est l'horreur.

Il faut considérer l'hexadécimal comme étant l'alphabet de la console. C'est à partir de cet alphabet qu'elle va créer des commandes, fonctions et structures diverses lui permettant de donner jour à un jeu. Ne vous souciez pas de ce langage machine (comme on l'appelle) pour le moment. D'autres personnes plus douées que vous se chargent de créer des logiciels permettant de décrypter ce langage.

Cependant, maintenant que vous savez ça, vous pouvez comprendre le principe d'offset.

Pour faire simple, chaque symbole en hexadécimal de votre ROM a une position dans le fichier. Le langage machine se sert très souvent des positions de chaque symbole pour réussir à décrypter le fichier ROM. À titre d'exemple, vous vous doutez bien qu'il faut réussir à mettre dans le fichier ROM les informations concernant les éléments graphiques du jeu. Pour cela, on transforme les données de l'image pour qu'elles puissent être lues par la machine, et on insère les données à partir d'un certain Offset. Comme cela, pour retrouver l'image, il suffit de demander à la machine de lire à partir de cet offset. Ainsi, l'image peut être facilement retrouvée !

Les constituants d'une ROM

Beaucoup de choses doivent être stockées dans un fichier ROM de jeu, et ces données peuvent être différentes selon le type de jeu. Sachant qu'avec Pokémon, on étudie un seul type de jeu, ce n'en est que plus facile. De façon générale, avec les jeux en deux dimensions, on a quelques éléments qui reviennent et qui ont une dénomination particulière :

Les Maps :

Attention à ne pas confondre avec la carte de région que l'on retrouve dans les objets rares ! Une map constitue un de ces environnements dans lesquels vous évoluez : ville, route, intérieur de maison etc. Le jeu n'est bien entendu pas constitué d'une seule map, mais vous serez peut-être surpris d'apprendre que même un élément qui vous paraît continu dans le jeu comme l'ensemble ville-route aux alentours est formé de plusieurs maps différentes.

Une map n'est pas formée de la même façon qu'une image sur votre ordinateur. Plutôt que de raisonner en termes de pixels, on raisonne en termes de tiles.

Un tile est un carré de taille 8*8 pixels. Chaque ensemble de tiles est classé dans une bibliothèque appelée tileset, que l'on constitue à partir d'images de base. Par exemple, si on prend une image d'arbre avec un fond transparent et que l'on l'associe à différentes images formant une maison ou de l'herbe, on parvient à imager un ensemble de tiles permettant de représenter un arbre recouvrant une maison ou de l'herbe.

Map et Tileset

On appelle l'action de créer ou de modifier des maps du mapping, et celui qui fait ça est un mapper. L'action de créer ou de modifier des tiles/des tilesets est appelée le tilesetting, et celui qui fait ça est un tilesetter.

Les Sprites :

On appelle sprite tout élément graphique 2D, à l'exception des tiles que j'ai mentionné ci-dessus (en revanche, les images dont on se sert pour former des tiles sont des sprites). Sont inclus dans cette catégorie : les images de personnages, de Pokémon, éléments de l'écran titre et ce genre de choses.

On appelle l'action de créer et de modifier des sprites du spriting. Quelqu'un effectuant du spriting peut être appelé au choix un spriter, un pixel artiste ou éventuellement un truqueur sur notre forum.

Sprite de Bianca

À noter que les sprites qui se retrouvent sur les maps mais qui ne font pas partie du décor (comme les Pokémon légendaires, les objets au sol et les PNJ) s'appellent aussi des overworlds. Quant aux images qui représentent les dresseurs et les Pokémon de dos sont appelés des backsprites.

Overworld Flora Backsprite Tartrad

Les Palettes de Couleurs :

Un sprite dans une ROM n'est pas formé directement de pixels de couleurs non plus. À la place, chaque sprite est associé à une palette de couleurs (qui n'est pas à la même adresse dans la ROM). La palette possède un certain nombre de couleurs: soit 16 soit 256, mais très souvent 16. À noter que dans une palette, on doit réserver la première couleur pour représenter la transparence, donc quand vous faites un sprite, vous n'avez le droit qu'à 15/255 couleurs selon le format.

Les Scripts :

Un script est une série d'actions qui sont enclenchées lorsqu'une certaine condition est déclenchée. Par exemple, parler à quelqu'un déclenche le script associé à ce personnage, et arriver dans une nouvelle map peut lancer un script en fonction de la map.

Un script est rédigé dans un ersatz de langage machine et est par conséquent rempli de façons de jouer sur la mémoire et l'invocation d'autres scripts à des adresses différentes. Par chance, la plupart des actions de base sont assez facile à écrire. On appelle l'action de créer et de modifier des scripts du script (oui, ça change), et celui qui s'en charge est un scripter.

Pratique

Voilà, vous connaissez maintenant les bases absolues de la composition d'une ROM et des termes utilisées dans le ROM Hacking ! Quant à savoir comment exactement vous comptez forger votre Hack ROM, c'est à vous de voir. En effet, selon que vous souhaitiez modifier un jeu NDS comme Pokémon HeartGold ou un jeu GBA comme Pokémon Emeraude, voir même selon le jeu exact que vous comptiez modifier, les logiciels et les méthodes que vous utiliserez seront complètement différentes.

Il existe même désormais la possibilité de transformer un jeu Pokémon en se servant de RPG Maker, ce qui diffère complètement des codes du ROM Hacking traditionnel. Par conséquent, je ne peux que vous conseiller de lire les autres tutoriels à votre disposition : cela vous donnera une idée des limitations et des difficultés du ROM Hacking, ce qui vous permettra de forger votre projet en conséquence.

N'oubliez pas : visez grand, commencez petit !

→ Vers l'initiation au ROM Hacking

Par Theris

Par Loris