# Hack rom

Le ROM hacking est le processus de modification d’une image ROM d’un jeu vidéo dans le but de modifier ses graphismes, ses dialogues, ses niveaux, son gameplay ou d’autres éléments. Ceci se fait habituellement par des fans de jeux vidéo qui en ont les compétences techniques afin de donner un second souffle de vie à un vieux jeu dont ils ont la nostalgie, en tant que variation créative, ou pour créer des jeux non officiels et pour l’essentiel « nouveaux » en réutilisant le moteur du jeu ancien.
Le hacking de ROM est généralement réalisé à l’aide d’un éditeur hexadécimal (un logiciel permettant de modifier des données non textuelles) et divers outils spécifiques tels que des éditeurs de tuiles, ainsi que des outils spécifiques à un jeu donné, lesquels servent surtout à modifier les niveaux, les objets, etc., bien que des outils plus poussés tels que le langage d’assemblage et les débogueurs soient utilisés à l’occasion. Une fois terminés, les hacks le plus souvent distribués sur l’Internet pour que les autres puissent y jouer à l’aide d’un émulateur.
La traduction amatrice est un type de hacking de ROM ; il existe également des hacks anti-censure dont la finalité est de restaurer un jeu dans son état initial. Cela se voit régulièrement sur des jeux anciens qui, lors du processus d’importation, ont été censurés à cause de la politique de contenu de l’éditeur (en particulier Nintendo) sur les jeux vidéo, qui était bien plus stricte aux États-Unis qu’au Japon ou en Europe. Bien que la méthodologie s’applique aux deux types de hacking, cet article se concentre sur le « hacking créatif » tel que l’édition des niveaux d’un jeu.

## Communautés

De nombreux hackers de ROM forment ou rejoignent des groupes pour diverses raisons, comme la mise en place d’un espace commun en ligne pour partager des hacks ou des captures d’écran, pour obtenir le soutien ou la collaboration d’autres membres du groupe, pour un statut privilégié sur le forum du groupe (le cas échéant), pour le prestige associé au groupe, ou juste pour la camaraderie. De nombreux hackers choisissent cependant d’opérer en solo. Tous les membres d’un groupe donné ne sont pas eux-mêmes nécessairement des hackers ; certains ont pris leur « retraite », d’autres proposent des services de développement web et/ou administration de forum, et certains se proposent simplement de guider les aspirants hackers.
La plupart des groupes de hacking proposent un espace en ligne pour héberger les hacks et les captures d’écran (parfois hébergeant uniquement les hacks réalisés par les membres du groupe, parfois hébergeant presque n’importe quel hack), un forum et ont souvent un canal IRC.

## Méthodologie

Les données contenues dans la ROM, ayant été créées par de nombreux programmeurs ou équipes de programmation différent(e)s, peuvent être très variées.

### Édition hexadécimale

Un éditeur hexadécimal est l’un des outils de base de la panoplie de tout hacker de ROM. Les éditeurs hexadécimaux servent habituellement à modifier les textes et d’autres données dont la structure est connue (par exemple, les propriétés des objets), et le hacking d’assemblage.
Modifier le texte est l’une des formes les plus basiques de hacking. Nombre de jeux ne stockent pas leurs textes au format ASCII, aussi certains éditeurs hexadécimaux ont été développés spécifiquement, disant quelle valeur d’octet correspond à quelle(s) lettre(s) de l’alphabet, pour faciliter la modification du texte ; un fichier qui détermine ces relations octet=lettre s’appelle un fichier "table". D’autres jeux utilisent des techniques simples de compression de texte (telles que l’encodage de paires d’octets, également nommé DTE – dual-tile encoding en anglais, où certaines combinaisons de deux lettres ou plus sont encodées dans un seul octet), dont un éditeur hexadécimal adapté peut faciliter la modification.
Un éditeur hexadécimal est l’outil de choix pour modifier les propriétés d’un personnage/objet, si la structure et l’emplacement de cette donnée sont connues et s’il n’existe pas d’éditeur spécifique au jeu permettant de modifier cette information. Certains hackers téméraires effectuent aussi de l’édition de niveaux avec un éditeur hexadécimal, mais ceci est extrêmement difficile (à l’exception des jeux dont le format de stockage des niveaux ressemble étroitement à la manière dont il est présenté dans l’éditeur hexadécimal).

### Édition de graphismes

Une autre compétence basique de hacking est le hacking des graphismes, qui consiste à changer l’apparence des éléments du jeu, tels que l’environnement, les personnages, les polices de caractères, ou autres. Le format des données graphiques varie d’une console à l’autre, mais la plupart des plus anciennes (NES, Super NES, Game Boy, etc.) stockent les graphismes dans des tuiles, qui sont des unités de données de 8x8-pixels, et sont disposées à l’écran pour produire le résultat escompté. Modifier ces tuiles est également possible avec un éditeur hexadécimal, mais il est plus simple d’utiliser un éditeur de tuiles (tel quel Tile Layer ou Tile Molester), qui peut afficher les données de la ROM de manière graphique, ainsi qu’en modifier les tuiles.
Les hacks graphiques peuvent aller de modifications légères (comme donner à Mario une coiffure afro) à "porter" des personnages d’un jeu à un autre, jusqu’à des changements complets de thème visuel (généralement accompagnés de changements de palette ; voir ci-dessous).
Un hacking graphique plus poussé implique davantage qu’un changement dans les tuiles et les couleurs, en modifiant la manière dont sont disposées les tuiles, ou les groupes de tuiles générés, donnant plus de flexibilité et de contrôle sur le rendu final. Ceci est réalisé par de l’édition hexadécimale ou un outil spécialisé (pour le jeu ou un système). Un bon exemple de hack graphique est l’inachevé Pokémon Torzach, un hack qui a essayé d’ajouter au jeu une génération entière de Pokémon et les tuiles associées. Le hack a depuis été abandonné, mais il sert encore de bon exemple de ce qui peut être réalisé avec les outils disponibles.

### Édition de palette

Une autre forme répandue de hacking est le hacking de palette, où les valeurs des couleurs sont modifiées pour changer les couleurs que voit le joueur dans le jeu (ce qui va souvent de pair avec l’édition de graphismes) ; Les valeurs de palette sont communément stockées en hexadécimal. C’est très facile pour les jeux NES, dont les graphismes utilisent un ensemble prédéfini de couleurs parmi lesquelles le jeu fait des sélections ; le hacking de palette correspond dans ce cas à changer laquelle de ces couleurs est choisie. L’affaire se complique un peu avec les jeux Super Nintendo ou d’autres systèmes, qui stockent les valeurs RVB absolues des couleurs. Les éditeurs de palette sont généralement simples et proposés avec les éditeurs de niveaux ou éditeurs graphiques spécifiques à un jeu.

### Édition de niveau

L’une des formes les plus populaires de hacking de ROM, l’édition de niveaux consiste à modifier ou reconcevoir les niveaux ou les cartes d’un jeu. Ceci est presque exclusivement effectué à l’aide d’un éditeur taillé sur mesure pour un jeu particulier (nommé éditeur de niveaux). Les éditions de niveaux peuvent être réalisées pour rendre le jeu plus difficile, pour modifier la séquence scénaristique du jeu, ou simplement pour ajouter quelque chose de nouveau à un ancien jeu. Avec en plus un hacking graphique complet, le jeu peut changer radicalement d’aspect et d’impression de jeu.

### Édition de données

Un élément central de nombreux hacks (en particulier de RPG) est la modification de données telles que propriétés des personnages, des objets et des ennemis. Cela se fait habituellement soit « à la main » (avec un éditeur hexadécimal) si l’emplacement et la structure des données sont connus, soit avec un éditeur spécifique au jeu et qui propose cette fonctionnalité. De cette marnière, un hacker peut changer le fonctionnement des armes, la force ou le comportement des ennemis, etc. L’objectif peut être de rendre le jeu plus facile ou plus difficile, ou encore de créer de nouveaux scénarios que le joueur devra traverser.

### Hacking d’assemblage

La technique de hacking la plus puissante et sans doute la plus difficile est la modification du code lui-même du jeu, un processus nommé hacking ASM ("ASM" signifiant "assemblage", en référence au type de langage de programmation utilisé pour les jeux des consoles les plus anciennes). Il n’y a pas de méthode standard pour le hacking ASM, le code changeant fortement d’un jeu à l’autre, mais la plupart des hackers ASM expérimentés peuvent utiliser soit un émulateur équipé d’un débogueur ou traceur intégré, ou parcourir la ROM à l’aide d’un désassembleur, puis analyser le code et le modifier à l’aide d’un éditeur hexadécimal ou un éditeur d’assembleur selon leurs besoins. Si cela représente un gros défi en comparaison avec les méthodes relativement simples listées ci-dessus, "tout" est virtuellement possible avec du hacking ASM (dans la limite bien sûr des capacités matérielles/logicielles de la plateforme de jeu), allant de la modification de l’intelligence artificielle des ennemis à la modification de la manière dont les graphismes sont générés. (Bien entendu, les possibilités sont toutefois limitées par la capacité du hacker à comprendre et modifier le code existant.)
Si les développeurs ont utilisé un langage typé, le hacker pourrait être en mesure de compiler son propre code pour le jeu dans le même langage s’il a accès à un compilateur adapté. Un tel exemple serait d’utiliser le C pour hacker des jeux Nintendo 64, puisque MIPS-GCC peut compiler du code pour la Nintendo 64$^,$.

### Hacking de musique

Les hacks de musique sont relativement rares, à cause de la grande diversité de manières dont les données musicales sont stockées dans les jeux (d’où la difficulté de localiser et modifier ces données) et des difficultés à composer de nouvelles musiques (ou porter des musiques depuis un autre jeu). Le crackage de musique étant très peu courant, de nombreux hacks ne comportent pas de musique portée/composée. Le logiciel SapTapper peut cependant servir à hacker les données musicales de la Gameboy Advance, de nombreux jeux Gameboy Advance utilisant le moteur M4A (aussi nommé Sappy Driver) pour la musique.
La forme la plus courante de hacking de musique est de porter de la musique d’une ROM à une autre, les deux ayant été habituellement faites par la même compagnie. Porter de la musique entre deux ROMs posera presque toujours quelque problème, le format étant presque systématiquement différent. Un bon exemple de hacking de musique serait le hack incomplet Pokémon : The Legendary Ashes.
Certains jeux ont cependant eu leur données musicales 100 % crackées, par exemple Final Fantasy VI et Super Mario World sur SNES. Avec des outils de composition utilisant par exemple le MML (Music Macro Language), il est possible de convertir des fichiers midis en données musicales compatibles avec le jeu ou bien de faire des compositions originales. Un exemple de ces possibilités est le hack de Final Fantasy VI Return of the Dark Sorcerer, qui contient plus de 250 chansons.

### Expansion de ROM

À la base, un hacker de ROM ne peut guère ajouter de contenu à un jeu, mais juste modifier du contenu existant, les ROMs comportant peu ou pas d’espace vide. Cette limite peut être surmontée grâce à l'expansion de ROM, par laquelle la taille totale de l’image ROM est augmentée, créant de la place pour plus de contenu et un jeu plus grand. La difficulté de cela varie selon le système pour lequel le jeu a été fait. Par exemple, expansionner une ROM NES peut être difficile voire impossible en raison du contrôleur de gestion de mémoire (ou mapper en anglais) utilisé par le jeu. Par exemple, si un contrôleur autorise 16 banques de ROM et que celles-ci sont toutes utilisées, expansionner davantage la ROM est impossible sans convertir le jeu d’une manière ou d’une autre vers un autre contrôleur, ce qui pourrait être facile ou presque insurmontable. D’autre part, expansionner un jeu Super Nintendo est (quasiment) une opération de routine. Pour utiliser l’espace supplémentaire, des parties du jeu doivent être modifiées ou réécrites (voir Hacking d’assemblage ci-dessus) pour que le jeu sache où chercher les nouvelles informations. Les jeux Game Boy Advance sont généralement considérés comment étant les plus faciles à expansionner.

## Distribution

Une fois qu’un hack est achevé (ou une version incomplète est jugée convenant à une sortie temporaire), il est publié sur l’Internet pour que d’autres y jouent. La manière habituelle de procéder est de créer un patch (au format IPS ou autre) qui peut être appliqué sur la ROM non modifiée. Celui-ci est placé avec une documentation dans une archive et mis en ligne quelque part. IPS est un format pour enregistrer les différences entre deux fichiers binaires (dans ce cas, entre la ROM non modifiée et la ROM hackée) et qui est adapté aux hacks de ROM. IPS est encore utilisé aujourd’hui pour les petits patchs ; cependant, les ROMs grossissant, ce format a montré ses limites, amenant la création d’un certain nombre de formats de fichiers, tels que NINJA et PPF ("PlayStation Patch Format"). PPF est encore utilisé aujourd’hui, particulièrement pour patcher de gros fichiers tels que des images CD ISO et jeux Nintendo 64. Un nouveau format de patch, UPS, a également été développé par la communauté de hacking de ROM, conçu pour être le successeur d’IPS et PPF.
Un format de patch plus récent, APS patching system, a également été développé par un hacker de ROM spécialisé en Game Boy Advance. Le système APS est plus efficace en espace, réversible et est plus rapide que ses prédécesseurs.
L’objectif de distribuer un hack sous la forme de patch est d’éviter les inconvénients légaux de la distribution d’images ROM complètes ; le patch n’enregistre que ce qui a changé dans la ROM, aussi le distribuer ne distribue pas d’éléments du jeu original. Un patch est également plus petit que l’image ROM entière (une ROM NES peut faire entre 40 Kio et 512 Kio ; une ROM Super Nintendo peut faire entre 256 Kio et 6 Mio). L’utilisation de patchs n’élimine toutefois pas les problèmes de droits d’auteurs parce que les patchs peuvent être considérés comme des œuvres dérivées ; les compagnies toutefois les ignorent généralement tant qu’ils ne sont pas distribués avec les ROMs.

## Systèmes et jeux

La majorité des hackings de ROM se fait sur les jeux NES et Super Nintendo, ceux-ci étant petits et simples comparés aux jeux de consoles plus avancées telles que la Nintendo 64. Les jeux Game Boy sont également populaires pour le hacking, ainsi les jeux Mega Drive dans une moindre mesure. Mais en aucun cas les jeux de consoles plus récentes ne sont à l’abri de hacking, et en effet, les ordinateurs devenant plus puissants et les outils plus nombreux, il faut s’attendre à voir émerger plus de hacks pour la PlayStation et la Nintendo 64.
Les jeux populaires pour le jeu sont des jeux populaires pour le hack ; de nombreux hacks ont été publiés pour les jeux/séries Sonic, Super Mario Bros., Pokémon, Chip's Challenge, Super Mario World, Final Fantasy, Chrono Trigger, The Legend of Zelda, Megaman, Fire Emblem, EarthBound, Super Mario 64, et bien d’autres encore.