Agrandir le cadre du script principal pour "Saint Seiya :
Ougon Densetsu" sur NES


Je vais vous expliquer la démarche que j’ai appliqué sur ce jeu pour pouvoir agrandir le cadre ou s'affiche le texte du script principal dans "Saint Seiya - Ougon Densetsu" sur NES.

Pour ce faire j’ai utilisé un éditeur hexadécimal, un émulateur (FCEUXD SP) et du temps.

Voici une photo du cadre original en question :

(Note : les valeurs 100, 20 et 00 affichés à l'écran ne sont pas des tiles, ce doit être une routine qui les génère au fur et à mesure du jeu).

Je vais donc augmenter sa taille (1 tile = 8x8 pixels), nous allons travailler dans la partie encadrée en rouge, qui est une suite de tiles alignés les uns après les autres, en commençant en haut à gauche et en finissant en bas a droite.

Le premier tile, même si on ne le voit pas, est un espace vide et il est situé tout en haut à gauche. Il y a une succession de 32 tiles par ligne, la partie encadrée en rouge fait 7 tiles de hauteur (7x32).

Ici, le premier tile identifiable est le "CO" de "COSMO", ensuite le "S" et la moitié du "M", puis enfin l’autre moitié du "M" et pour finir le "O".

Grâce à l’émulateur "FCEUXD SP", je trouve la correspondance en hexadécimal de ces tiles (pour cela, il faut aller dans "Tools" => "PPU Viewer", ce qui vous donnera ceci :

En passant la souris sur le "CO" de "COSMO", on obtient la valeur hexadécimale "A5", le mot complet en hexadécimal est "A5 A6 A7".

Il faut maintenant rechercher les valeurs du mot "DAMAGE", toujours avec le PPU Viewer, ce qui donne "A8 A9 AA AB".

Il ne nous reste plus qu'à chercher dans la rom "A5 A6 A7", avec un "A8 A9 AA AB" non loin.

Dans l’éditeur hexadécimal, je trouve, grâce à une recherche, "A5 A6 A7" à l'adresse "0x1E45D", et non loin de là, en 0x1E473, je trouve "A8 A9 AA AB". Pas de doute, nous avons trouvé la tilemap de ce cadre.

Voici ce que l'on obtient encadré en rouge, il s'agit de la tilemap complète. Souligné en vert, le mot "COSMO", en jaune "DAMAGE" et en bleu "EX".

Il faut maintenant analyser comment fonctionne cette tilemap. Si l'on regarde ce qui est encadré en rouge, on commence avec la valeur "FE" suivi de "22" et "30".

Déchiffrons ces valeurs :

"FE" annonce une répétition.

"22" correspond au nombre de fois ou la valeur est répétée (ici "22" en hexadécimal, ce qui est égal à "34" en décimal).

"30" est le numéro du tile à afficher ("30" est une case vide).

Donc, si l'on "traduit" tout cela, la première ligne sera formée de 34 cases vides. Cependant, nous avons dit plus haut qu'une ligne du cadre était composée de 32 tiles, alors pourquoi 34 ?

Tout simplement parce que les tiles se suivent et donc, les 2 tiles en "trop" vont permettre d’espacer le mot "COSMO" de 2 tiles pour ne pas le coller complètement à la gauche du cadre.

On a ensuite nos valeurs "A5 A6" (COSMO), suivi de "FE 07 30 B0". Si vous avez suivi, vous pouvez normalement déchiffrer vous-même cette suite, excepté le "B0" :

"FE" = Répétition.

"07" = Nombre de fois ou la valeur est répétée.

"30" = Numéro du tile.

Cela signifie donc qu'après le "MO" de "COSMO", le jeu va afficher 7 espaces, puis afficher "B0" ("B0" représente le coin supérieur gauche du cadre).

Nous avons ensuite "FE 10 B1 B2" :

Cette suite d'octets affiche 16 fois la valeur "B1" ("B1" est le trait horizontal supérieur du cadre), "puis "B2" affiche le coin supérieur droit du cadre.

N'oubliez pas que nous travaillons ligne par ligne, et qu'il y a 7 lignes en tout pour ce cadre.

Nous continuons avec "FE 0E 30 B3". Toujours pareil, affichage de 14 espaces puis de "B3" ("B3" est le trait vertical du cadre. Tous ces valeurs et leurs correspondances se trouvent dans le "PPU Viewer").

Je ne vais évidemment pas détailler toutes les valeurs, c'est toujours le même principe.

Maintenant, il est temps de modifier la taille de notre cadre.

Nous nous replaçons au début de la tilemap dans l'éditeur hexadécimal, plus précisement là où se trouve le "A5 A6 A7". C'est à cet endroit que le cadre commence, avec le coin haut gauche qui est sur la même ligne. Ce que nous voulons, c'est le déplacer un peu plus à gauche.

Pour cela, il faut travailler sur les valeurs "FE 07 30 B0" décrites plus haut. Au lieu de faire une répétition de 7x30, on va diminuer à 5x30, ce qui va donner "FE 05 30 B0".

Ce qui donne, dans le jeu :

Le cadre est bien décalé sur la gauche, mais du coup, les mots "DAMAGE" et "EX" le sont également (ce qui est normal car tous les tiles sont alignés. Lorsqu'on en modifie un, le positionnement de tous les autres est modifié).

On agrandit maintenant le cadre avec la suite d'octets suivante : "FE 10 B1 B2" (soulignée en jaune)

.

Ce qui nous intéresse ici est le "10", que l'on remplace par "13" pour agrandir le cadre de 3 tiles.

Ce qui donne, dans le jeu :

Le cadre est à la taille désirée. Il faut maintenant continuer en modifiant les autres valeurs, pour adapter les autres lignes du cadre de la même façon. Gardez en tête qu'une ligne fait 32 tiles, et que le cadre fait 7 lignes de hauteur.

Après quelques modifications, voilà le résultat final :

(Avant)

(Après)


Première version écrit par Riku le 17 Juillet 2012 pour la T.R.A.F. (http://traf.romhack.org).
Reformulation, correction et mise en page HTML par Hiei- le 17 Juillet 2012.