Chrono Hacks par Copernic - Terminus Traduction


Table des matières

 1. Prologue
 2. Trouver la table de caractères
 3. Comprendre la compression
 4. Repérer la font et les accents
 5. Modifier le texte du script
 6. Modifier les autres textes
 7. Modifier la compression
 8. Réinsérer les textes
 9. Modifier les images
10.
Epilogue

1. Prologue

D’abord merci d’avoir commencé à lire cette FAQ. Si vous ne savez pas de quoi on va parler, c’est de ce que l’on appelle le rom-hacking. De la modification de la compression à l’ajout des accents en passant par la modification des textes, toutes les étapes du rom-hacking d’un jeu SNES sont passées en revue. En comme l’on apprend bien que ce qu’on aime, ce jeu sera Chrono Trigger (si vous préférez FF6 demandez à Meradrin de faire sa propre FAQ ;-). Ce n’est pas le jeu le plus simple pour commencer, loin de là, mais en utilisant judicieusement sa tête, on peut arriver à complètement modifier le jeu. En fait, si vous réussissez à lire cette FAQ jusqu’au bout, et que vous avez tout compris, vous aurez assez d’expérience pour vous lancer vous-même dans le rom-hacking d’un grand jeu. Par contre, la limite de quelque chose se trouve là où commence autre chose : si vous espérez apprendre l’ASM, en particulier celui de Super Nintendo, c’est raté… Je vais pas vous embêter plus longtemps avec mes beaux mais néanmoins longs discours, alors on va tout de suite rentrer dans le vif du sujet : la table de caractères!


2. Trouver la table de caractères

Sans vouloir faire de traduction de Zophar (
www.zophar.net), où se trouvent la plupart des tables des grands jeux. Mais cette méthode barbare ne nous intéresse pas vraiment, alors je vais vous donner deux méthodes très connues, la première étant graphique donc à moitié fiable, la seconde étant hexadécimale donc sûre à 100% mais soumise à quelques contraintes.


2.1. La technique graphique

C’est une technique assez simple qui n’est pas à 100% fiable, et qui dépend en fait beaucoup de la position des caractères dans la rom. Pour cela, vous aurez besoin de Naga, un éditeur de graphiques SNES très utiles pour les tables de caractères. Ouvrez Naga, choisissez votre rom de Chrono Trigger, et vous arrivez devant une bouillie verte, bleue et noire sur l’écran. Descendez jusqu’en bas, vers l’offset 4150000. Vous remarquerez sans doute deux fonts, une découpée et l’autre visible. C’est la deuxième qui nous intéresse pour la table. Regardez la position de l’espace dans le jeu. Normalement, dans la plupart des jeux, l’octet de l’espace est FF. Il suffit donc de déduire les autres caractères en partant de l’espace (celui juste avant est FE, puis FD, etc…). Et justement, quand on parle de fiabilité pour cette méthode, Chrono en est un parfait contre-exemple puisque l’espace est codé par EF dans ce jeu. Cette technique sert pour la plupart des jeux, mais pour les RPG il existe une méthode beaucoup plus efficace : la technique du RPG.


2.2. La technique du RPG

Cette méthode s’applique en particulier aux RPG, mais elle marche en fait dans tous les jeux où l’on demande au joueur d’entrer son nom (dans les high scores par exemple), et que ce nom est sauvegardé dans le fichier SRM du jeu. Pour utiliser cette méthode, commencez tout d’abord une partie de Chrono. Au moment d’entrer le nom, renommez ce bon vieux Crono par AAAAA. Faites de même avec Lucca que vous renommerez AAAAA. Sauvegardez en dehors de la maison, et quittez le jeu. Renommez le fichier SRM de manière à ce qu’il s’en crée un nouveau lors de la prochaine partie, et recommencez le jeu en nommant cette fois-ci vos personnages aaaaa. Comparez les deux fichiers SRM avec Hex Workshop et vous devriez voir les différences entre les deux sauvegardes : l’hexa du premier correspondra à A (A0), le second à a (BA). Il suffit ensuite de compléter la table normalement en remplissant les majuscules, les minuscules, et vous pouvez même utiliser Naga cette fois-ci puisque vous avez une position sûre, et même deux (A0 et BA). Ce n’est que le début mais la première étape du rom-hacking est faite, puisque vous avez la table.


3. Comprendre la compression
A priori, rien n’indique que le jeu est compressé ou non. De même, rien n’indique le type de compression utilisée. Pour cela, il faut chercher méthodiquement et tenter de reconnaître à l’œil cette compression si elle existe. Si on ne s’occupe que d’extraire le texte, on peut chercher la table chez Zophar également, mais cette fois-ci, chercher la compression soi-même a des avantages importants.


3.1. Compression ou pas ?

Ca, c’est très facile à voir. Bien évidemment, il n’y a pratiquement aucun doute qu’un énorme jeu comme Chrono Trigger ait son texte compressé, c’est pratiquement acquis. On va en avoir le cœur net dans quelques secondes. Reprenez une partie, n’importe laquelle, et parlez à un personnage. Notez le début de sa phrase, sans compter le nom. Ouvrez Thingy avec votre table, et cherchez ce début de phrase. Vous n’aurez aucun résultat à moins que vous n’ayez pris qu’une ou deux lettres bien sûr. C’est une preuve que le texte ne se trouve pas directement dans la rom, il est compressé pour cela.


3.2. Quelle compression ?

Ce n’est pas très difficile de découvrir le type de compression utilisé. La compression la plus utilisée est la DTE, qui code deux lettres en un octet pour réduire le texte. Il y a aussi les mots pré-écrits, moins courants, et d’autres compressions rares comme LZSS, LZW et Huffmann. Partez toujours du principe qu’un jeu est codé en DTE, c’est la plus utilisée, et neuf fois sur dix ce sera bon. Pour vérifier cela, prenez une phrase du jeu, et ne cherchez qu’une ou deux lettres au début, avec une majuscule parmi les deux (c’est très important !). Le résultat avec Thingy vous donnera l’emplacement de cette portion de texte avec Chrono Trigger, car c’est bel et bien une DTE. Vous le remarquerez car il y aura un ou deux octets visibles séparés par un ou deux octets compressé, on peut distinguer de rares mots non-compressés, mais c’est très haché. D’autres compressions existent, mais pour les trouver je ne peux que vous conseiller d’autres FAQ, car celle-là ne va parler que de DTE.


3.3. Quelle DTE ?

Une DTE est constituée de combinaisons d’octets qui sont réduits à un seul octet grâce à une table. Avant de commencer, faites une copie de votre table de caractères, ce sera très utile pour la suite, et continuez votre table originale en ajoutant les combinaisons de DTE. Pour trouver ces combinaisons, la meilleure méthode, même si elle est très longue, c’est le test. Prenez une phrase (celle de tout à l’heure par exemple), en la notant entière. Pour mieux comprendre, je vais vous proposer moi-même une phrase : « Lucca: Yeoouch…! ». Cherchez « Yeo » dans la rom avec Thingy, vous allez tomber à l’offset $3754B3. C’est là que se trouve la phrase. Vous voyez dans cette phrase la combinaison suivante:

B8 BE C8 24 6C F1 DE
Y
__e__o__?_?__?__!

Les ? correspondent à des octets inconnus. En comparant cette série à la phrase, on sait que les trois octets inconnus correspondent à « ouch… ». Les trois points prennent toujours un octet, ici donc F1. Il reste deux octets pour « ouch ». Comme la taille d’une combinaison est toujours au moins de 2, on a 24=ou et 6C=ch. Ce qui donne:

B8 BE C8 24 6C F1 DE
Y
__e__o_ou ch …__!

Il suffit d’ajouter ces combinaisons à la table, de relancer Thingy, et le texte va petit à petit apparaître sous vos yeux ébahis, chaque nouvelle combinaison décodant encore plus le texte. A la fin, il deviendra facile de tout trouver. Il restera sûrement quelques octets inconnus : 00, 05, 06, etc… Comme vous vous en doutez, ce sont des octets spéciaux, nous verrons leur signification exacte dans la modification du texte. Maintenant vous avez votre table complète avec les caractères et la compression, il est possible d’extraire le texte avec Script-E, en cherchant méthodiquement chacun des 14 blocs de texte différents dans la rom. Après avoir trouvé cette table, passons maintenant à la font et aux accents.


4. Repérer la font et les accents

avons déjà commencé à aborder le sujet en cherchant la table graphiquement, mais il est temps maintenant de rentrer en détails dans cette font, ou plutôt ces fonts, qui sont toutes les deux différentes, et par la même occasion ajouter les accents pour plus tard.


4.1. Les deux fonts

D’abord, pourquoi deux fonts ? Tout simplement parce qu’il y a deux grandes catégories de texte : le texte dans le jeu et le texte hors du jeu. Dans le jeu, vous avez le script, les messages de combat par exemple. Hors du jeu se trouvent tous les menus, les objets, le statut des personnages. La deuxième font, celle hors du jeu, est la moins belle mais la plus simple donc je vais commencer par elle. C’est une font tout ce qu’il y a de plus classique, chaque caractère se trouve dans un carré de 8*8 en bas de la rom, et toutes les lettres ont la même largeur. Il est tout à fait possible de la modifier avec Naga sans aucun problème. Pour la première font, par contre, celle du texte, c’est un peu plus compliqué. D’abord, chaque lettre standard a une taille de 8*12, ce qui les rend difficiles à voir, mais en plus certaines lettres débordent et ont un ajout qui se trouve un peu plus bas. Et par dessus le marché, la font est dite pointée, c’est-à-dire que chaque lettre à une largeur différente, et ce même si ça ne se voit pas dans l’éditeur Naga. Par exemple, le i est très serré avec 3 pixels de largeur, pendant que le m n’en prend pas moins de 10. Le gros problème, c’est qu’en plus il n’y a pas la place d’ajouter des accents à cause de ces pointeurs, il faut donc biaiser…


4.2. Les accents, quand on n’y connaît rien et qu’on veut faire tout seul

La deuxième font, même si elle est plus simple à modifier, ne sera faite qu’en dernier, car justement elle est dépendante de la première. Le but du jeu va être de modifier toute la font afin de faire rentrer les accents. D’abord, toute l’ombre des lettres représentée de couleur différente autour des caractères blancs doit être supprimée, afin de pouvoir abaisser la font. Ensuite, il suffira d’ajouter les accents au-dessus, sans avoir besoin de rajouter de l’ombre ou de faire des accents aigus semblables aux accents graves. Le problème majeur vient du fait qu’il n’y a pas d’espace libre pour les accents, en revanche de nombreux caractères comme % ou # peuvent être supprimés sans problèmes, car ils ne sont presque jamais utilisés. En comparant la taille des caractères originaux à celle de mes nouveaux caractères accentués, j’ai donc remplacé les caractères inutiles par des lettres comme é, è ou ù. Evidemment, cela limite quand même l’insertion à 5 accents, ici é, è, ê, à, ù et ç, les plus utilisés. Mon seul gros regret est de ne pas avoir pu ajouter le â, souvent présent également, mais il faut savoir faire des compromis. Un deuxième problème apparaît : la longueur des gros caractères est de 8 pixels, or celle du e standard, base du é n’est que de 6 pixels. Il a donc fallu inverser quelques lettres agrandissables (comme le U ou le O) avec ces lettres accentuées. Normalement, vous vous retrouvez avec une nouvelle font, complètement changée, sans ombre, et vous devez modifier la table de caractères en conséquence. Deuxième opération, plus simple cette fois, faire correspondre la deuxième font avec la première, il suffit là de remplacer les lettres de la même manière que précédemment, en ne souciant pas de la largeur ici puisque la font n’est pas pointée. Dernière chose à corriger, l’écran où l’on rentre le nom du personnage qui se trouve à l’offset $3FCBAC. Il suffit de remettre les nouvelles lettres à la place des anciennes, afin que les accents apparaissent en bas et non en plein milieu des lettres. Voilà pour la font et les accents, ça a dû vous paraître très long et très lourd, ce qui est vrai, mais c’est la meilleure méthode pour ajouter les accents dans une font pointée alors qu’on ne sait pas modifier ses pointeurs. Mais comme on est des boss, on va utiliser la tactique spéciale !


4.3. Les accents, quand on s’y connaît plus

Quand on est un pro, ce qu’on fait, c’est modifier les pointeurs de la font, qui se trouvent offset $262E5. En fait, vous allez vite comprendre que ce sont pas des pointeurs à proprement parler, mais simplement des octets, chacun représentant la largeur d’un caractère. Vous pouvez constater que l’octet 07 revient très souvent, donc la plupart des lettres font 7 pixels de large. Le premier octet correspond à la première lettre (A si vous regardez la liste), et ainsi de suite. Vous devriez arriver à une petite série de 00 si vous avez la rom originale sous les yeux. Là, on peut rapidement conclure qu’il n’y a pas de caractères, puisque leur « longueur » est de 0 pixel. On peut donc en ajouter. Là, on ressort Naga, et on va après les caractères. On dessine avec courage les nouveaux caractères (autant qu’il y a de place dans la rom), et on remplace les 00 correspondant avec les 07 par exemple, de manière à avoir une belle font ! C’est pas le plus difficile, mais c’est assez déroutant si on connaît pas la méthode. Maintenant, retour à nos textes, on va les modifier un peu.


5. Modifier le texte du script

Le texte du script représente près de 250 ko répartis dans 14 fichiers TXT issus chacun d’un des 14 blocs. Il est constitué de texte normal et d’octets particuliers, qui doivent être compris pour conserver la cohérence du texte.


5.1. Les octets à connaître

Il y a une série d’octets particuliers à connaître pour ce jeu, que l’on découvre en déduisant par rapport à l’affichage, et qui sont régis par deux règles. Première règle, le texte se trouve à gauche de la fenêtre (logique !), mais quand le nom du personnage est indiqué dans la première phrase (comme Marle: …), alors il y a un retrait de 3 espaces avant chaque ligne du message qui suit. Deuxième règle, il ne peut pas y avoir plus de 4 lignes de texte par fenêtre, ou alors ça déborde complètement et ça devient illisible (sans faire planter le jeu cependant). Pour faciliter l’application de ces deux règles, il existe quatre octets, ou plutôt deux groupes de deux. La première paire applique un saut de ligne simple. Il faut essayer d’ajuster ce saut à la main, car il n’y a pas de limite fixe de caractères pour une ligne (pointage de la font), mais il faut en plus penser à mettre le bon octet, car si 05 saute la ligne normalement, 06 applique à la phrase suivante un retrait, pour respecter la première règle. Dans le même ordre d’idée, la deuxième paire permet d’effacer la fenêtre après l’appui sur un bouton de la manette, afin de mettre plus de quatre lignes par message. Pour respecter la deuxième règle, on utilise l’octet 0B simple ou l’octet 0C qui applique un retrait de 3 espaces à la première phrase de la fenêtre, toujours pour respecter la première règle. Enfin, il existe un cinquième octet, l’octet suprême devrait-on dire, c’est le 00 ou message-break, qui stoppe le message net et ferme définitivement la fenêtre après l’appui sur une touche de la manette. Ce sont les principales choses à retenir pour modifier le texte, mais il reste encore quelques conseils pour ne pas avoir de difficultés.


5.2. Conseils pratiques et spécifiques

Certains messages sont centrés. Il n’existe pas contrairement à d’autres jeux de système qui centre automatiquement le texte, donc il faut ajouter des espaces devant le message de manière à avancer le texte dans la fenêtre. Certaines fois, notamment au début du jeu, au réveil de Crono, il y a des octets isolés inconnus, comme 03. N’y touchez pas, ce sont des instructions qui lancent des actions dans le jeu, ils ne gênent pas la modification du texte et sont vitaux pour le jeu. Il existe des octets particuliers assez amusants, comme le EE, qui fait apparaître dans le texte une note de musique (combat contre Gato et danse préhistorique). Enfin, si vous avez été consciencieux depuis le début, lors de l’ajout de la DTE, vous avez dû ajouter à la table les noms des personnages, codés chacun sur un octet (par exemple, 13=Crono). Certains octets sont assez particuliers dans le même ordre d’idée, comme 1A qui représente le leader du groupe (Crono au tout début et le premier personnage de la liste après sa résurrection). Vous pouvez attribuer à 1A le mot Perso1 par exemple, puisque de toute façon ce sera bien 1A et non Perso1 qui sera réinséré, mais veillez à ne pas modifier les noms des personnages dans les textes, sinon le changement du nom d’un personnage ne serait pas appliqué mais en plus vous perdriez quelques précieux octets… Voilà en gros ce qu’il faut savoir pour modifier le texte, nous verrons plus tard comment appliquer ces changements à la rom, mais avant intéressons-nous aux autres types de texte.


6. Modifier les autres textes

En plus du script, il existe de nombreux autres textes, chacun étant régi par ses propres règles. Dans Chrono Trigger, ce n’est pas un modèle particulier, avec de nombreux exemples qui se retrouvent dans d’autres jeux, comme les magies, les objets, et tous les autres textes qui ne font pas partie du script.


6.1. Les objets et magies

Ici, on oublie complètement la DTE et on ressort la bonne vieille table sans compression (avez-vous bien suivi mon conseil de copier la table avant ?), afin d’observer ces mots. De nombreuses catégories sont regroupées au même endroit, ici à l’offset $C0D69. La règle d’or : tous les mots ont la même taille, et il faut rajouter des espaces à la fin des mots courts. En effet, vous pouvez remarquer rapidement que tous les mots font 11 caractères, octets particuliers compris. Justement, ces octets particuliers, quels sont-ils ? D’abord, celui qui revient le plus, le FF, qui correspond à l’espace entre deux mots, EF pouvant être utiliser pour combler les trous à la fin des mots courts. Ensuite, des octets plus spécifiques, qui ne représentent pas une lettre mais une image, et qui comptent comme un octet parmi les onze du mot : 20 représente l’épée (Crono), 21 représente l’arc (Marle), et ainsi de suite, chaque personnage ayant un type d’arme différent et donc une icone associée. On retrouve ensuite les icones des armures, 28 représentant l’armure proprement dite par exemple. Enfin, dans les objets « équipables », 29 représentent les accessoires ou reliques (à vous de choisir la dénomination que vous préférez). Ensuite, après les armes, armures et reliques, se trouvent les objets courants, comme les remèdes et les éthers. Le nom de chacun de ces objets est précédé d’un espace FF, qui réduit donc la taille de l’objet à 10. Ce n’est pas si saugrenu que cela, car ça permet de conserver l’alignement des noms des objets dans la liste, puisque le premier caractère des armes n’est en fait qu’une image. Enfin, on retrouve les magies. Le cas ici est assez particulier, car il faut distinguer les magies et les techniques. Le Cyclone de Crono par exemple est une technique, alors que son Illumina est une magie. Or, les magies sont toutes précédées d’une étoile, représentée par 2F. Voilà, toute cette catégorie est passée en revue, passons maintenant à la suite.


6.2. Les monstres

Les vilains se trouvent à l’offset $C6700, chacun ayant comme précédemment 11 lettres pour étendre son nom. L’énorme avantage des monstres par rapport aux objets et magies, c’est qu’ils sont écrits sans AUCUN octet supplémentaire. Les espaces sont les EF normaux, il n’y a pas de codes spécial avec une icone, véritablement rien du tout qui puisse gêner. A se demander pourquoi j’en parle… Allez, au suivant!


6.3. Les messages

Ils peuvent être regroupés en trois types (et ils le sont d’ailleurs dans la rom) : les descriptions des objets ($C3295), les descriptions des magies ($C3D0E) et les messages de combat ($CCF90). Les trois fonctionnent selon le même système : ressortez votre table avec DTE car vous en aurez besoin ici, et ensuite modifiez les messages en faisant bien attention de respecter la limite : une ligne par message puis 00, donc pas de 05 ou autres 0C pour vous accompagner. Sinon, pas de spécificité particulière, ce sont des messages classiques, on va donc passer aux noms des lieux.


6.4. Les noms des lieux

Les noms des lieux se trouvent à $6F200 est sont compressés également en DTE. La situation est ici particulière mais en même temps très confortable : ces noms de lieux doivent être centrés au-dessus de l’entrée du lieu dans le jeu, mais ceci est fait automatiquement (c’est la seule fois du jeu d’ailleurs). La seule chose à respecter, c’est la longueur des lieux, pour ne pas dépasser, mais sinon ce ne sont que des noms séparés chacun par un octet 00.


6.5. Les autres textes

Ils sont dispersés en toute fin de la rom, et on y retrouve pratiquement tout ce qui n’a pas été vu avant : les mots des menus, les noms des sauvegardes, et quelques trucs variés, mais ce n’est pas le plus dur à modifier, en sachant qu’il est préférable de garder les mêmes longueurs, même si c’est possible de faire mieux en jouant ensuite avec les pointeurs. Une fois tous les textes traduits, il est possible de modifier la compression utilisée.


7. Modifier la compression

Afin d’éviter de déplacer le texte dans la rom et de changer quelques routines ASM, il est préférable de modifier les combinaisons utilisées pour la DTE. Une compression optimale peut même vous permettre de gagner beaucoup de place (largement plus de 1000 octets sur certains textes).


7.1. Trouver les meilleures combinaisons

Pour trouver les meilleures combinaisons, j’ai fabriqué un petit programme appelé DTESEEK et que vous pouvez télécharger sur les principaux sites de traduction. En entrant les noms de chaque fichier TXT et le nombre d’occurrences minimales, il est facile d’obtenir une nouvelle table optimisée pour les nouveaux fichiers. Vous ne pourrez malheureusement pas bénéficier des triplets ou combinaisons supérieures avec ce programme, car il ne donne que les meilleurs doublets, cependant, c’est déjà suffisant pour bien compresser le texte et le faire rentrer à la place du texte anglais. Une fois que vous avez votre nouvelle table, il faut maintenant modifier la rom.


7.2. Modifier la DTE

La DTE se trouve à l’offset $1EFD00, et elle est constituée de manière assez singulière. D’abord, contrairement aux autres DTE, celle-ci comprend des combinaisons à plus de deux lettres, ce qui oblige non seulement à indiquer la longueur de la combinaison mais aussi de pointer ces combinaisons. Pour cela, chaque combinaison est précédée par un octet indiquant son nombre de lettres : 02 si c’est un doublet, 03 si c’est un triplet, etc… En appliquant cette règle, il suffit de modifier la DTE pour obtenir une nouvelle compression, c’est à dire faire comme si l’on voulait modifier un texte normal : remplacer les anciennes lettres par les nouvelles. Mais il reste encore à la pointer. Les pointeurs de cette compression pointent vers l’octet indiquant le nombre de lettres, et ils sont standard:

Adresse de la combinaison : 1EFD31 - on enlève le début - FD31 - on enlève $200 - FB31 - on retourne les deux octects - 31FB

C’est aussi simple que cela, le premier pointeur pointe vers la combinaison de 21, le deuxième vers la combinaison de 22, etc… Il suffit maintenant de copier la table originale en changeant toutes les combinaisons de la DTE pour pouvoir réinsérer.


8. Réinsérer les textes

L’étape la plus importante, même si ce n’est pas la plus difficile : la réinsertion. Pour cela, utilisez Script-I puisque vous avez pris Script-E au début, ça se fera automatiquement. A l’intérieur de la réinsertion se trouve malheureusement aussi un véritable calvaire pour les rom-hackeurs : les pointeurs…


8.1. Les pointeurs de script


Parmi les pointeurs on retrouve les pointeurs du script, ce sont les plus simples, avec notamment quelques exceptions en plein milieu des tables, donc méfiance ! Les pointeurs sont déroutants au début, mais il ne s’agit ni plus ni moins que l’adresse du texte, l’endroit où il se trouve dans la rom, un peu arrangée il est vrai. Paradoxalement même, la difficulté provient parfois de la rom elle-même et de son header. D’abord, la règle des pointeurs : ils pointent vers la première lettre de la phrase, juste après un message-break 00 normalement. Donc, l’adresse de base sera l’adresse du premier caractère de la phrase. Prenons une phrase au hasard, offset $1EE705, « Marle: Looks like… ». La formation du pointeur se fait très simplement, en trois étapes :

1) On enlève le premier octet - $E705
2) On enlève $200 au résultat pour tenir compte de l’header - $E505
3) On inverse les deux octets pour notre pointeur final - $05E5

Ainsi, dans la table des pointeurs, vous pourrez voir $05E5, et vous comprendrez désormais qu’il s’agit d’un pointeur. Cette table est juste avant le bloc de texte dans Chrono, vous pouvez d’ailleurs le vérifier à l’offset $1EE50C.


8.2. Les pointeurs du reste

Le principal problème ici consiste en fait à savoir s’il y a des pointeurs ou pas. C’est assez simple : s’il y a des message-breaks, alors il y a des pointeurs, sinon il n’y en a pas. Ca peut paraître stéréotypé, mais c’est, dans le cas de Chrono Trigger en tout cas, toute la vérité. Ainsi, les objets, magies et autres reliques n’ont pas besoin de pointeurs, car tout ce beau monde fait onze octets par mot, il suffit donc de faire le compte par groupe de onze pour trouver le bon mot. Par contre, pour ce qui est des lieux et des messages, il en faut bien. La méthode et la formule sont les mêmes, donc pas de problèmes, on va revoir rapidement ça avec un autre exemple complètement aléatoire, offset $6F2DC : « Truce Canyon ».

1) On enlève le premier octet - $F2DC (6 est sous-entendu 06)
2) On enlève $200 au résultat pour tenir compte de l’header - $F0DC
3) On inverse les deux octets pour notre pointeur final - $DCF0

Là aussi c’est tout à fait vérifiable, MAIS attention, car la table des pointeurs se trouve dans ce cas, et c’est une exception, après les lieux (offset $6F630 pour notre pointeur précédent).


9. Modifier les images

Si vous avez souffert pour arriver jusque là, alors vous n’avez encore rien vu ! On arrive maintenant à la mission la plus délicate : votre rom marche, très bien même, avec un texte compressé, optimisé, pointé, MAIS… MAIS…. MAIS, quelques images subsistent, quelques images en anglais, bien sûr, ce serait trop facile sinon. Alors préparez-vous, c’est la dernière ligne droite, et c’est parti!


9.1. Repérer les images et la palette

Pour cela, et afin d’éviter un dépistage systématique à la main, j’utilise un petit programme artisanal appelé Getpal. Vous lui donnez le nom du snapshot ZST de Chrono Trigger où vous voyez votre image, et le numéro de la palette, et il vous donne de quoi se servir tout de suite après du « maître », Tlayer… La seule difficulté consiste à trouver le numéro de la palette, et pour cela il faut tester. Regardez la palette 0, testez-la avec Tlayer, si c’est pas bon continuez avec la palette 1, et ainsi de suite. La syntaxe de Getpal est:

Getpal fichier.zst palette - Getpal chrono.zst 6 par exemple

Le choix de la palette 6 n’est pas innocent, car c’est en effet la palette qui code les noms des magies dans le menu. Pour le vérifier, rentrez dans le jeu, faites un snapshot ZST avec F2 quand vous êtes dans le menu des stats avec le logo « Lightning » au-dessus, et tapez la commande ci-dessus. Dans quelques secondes, vous pourrez même le vérifier avec Tlayer…


9.2. Modifier les images

Getpal a créé un fichier tlayer.pal, qui est la palette utilisée par Tlayer pour afficher les images. Et ainsi, ce qui était invisible avec Naga devient parfaitement limpide avec Tlayer, avec les couleurs réelles, et tout ! Le système utilisé par les roms SNES oblige à beaucoup d’attention pour la manipulation des images. Comme vous pourrez le remarquer, les images SNES sont divisés en carrés de 8*8. Même si ce n’est pas vrai dans l’absolu, c’est toujours mieux de le représenter ainsi. Ouvrez Tlayer avec :

Tlayer chrono.smc

Descendez tout en bas de la rom, et vous retrouverez votre image « Lightning », mais probablement coupée. Appuyez sur la touche Gauche ou Droite du clavier pour déplacer les carrés et ainsi aligner l’image, qui est formée de 6 carrés de longueur par 2 seulement de hauteur. Ensuite, cliquez avec le bouton gauche sur un carré et reportez-le avec le bouton droit en haut à droite, dans le presse-papiers. Faites de même pour tous les carrés, le presse-papiers est l’endroit où transitent les carrés en attente, qui forment ainsi une image. En cliquant sur un carré, un zoom apparaît en bas à droite avec une distinction visible entre les 8*8 pixels. Cliquez sur une couleur à droite, puis sur un pixel, et MAGIE ! Ca marche comme sur des roulettes, vous avez modifié votre premier carré ! Faites de même de façon à obtenir une image ressemblante mais modifiée quand même, et remettez les carrés dans la rom à gauche comme vous avez fait avant : bouton gauche pour le sélectionner dans le presse-papiers, bouton droit pour le coller dans la rom. Cliquez sur Save en bas, et vous n’avez plus qu’à aller constater le résultat!


10. Epilogue

Voilà, c’est fini, vous pouvez éteindre votre ordinateur et reprendre une activité normale, … Mais qu’est-ce que je raconte, NON, n’éteignez rien, je n’ai pas fini !!! Et puis vous devez encore apprendre et tester tout ce que vous savez maintenant ! Sans oublier mon traditionnel « beau mais néanmoins long © » discours, surtout que j’ai des choses à dire ! D’abord, je vais flatter votre ego, bla-bla, en vous rappelant que vous êtes les meilleurs, baratin, et que si vous avez tout compris ici, alors vous pouvez hacker les trois quarts des roms sans aucune difficulté, foutaises ! Trêve de plaisanterie, n’hésitez pas à signaler dans vos traductions qui vous a appris le rom-hacking, ça fait toujours plaisir quand on s’y attend pas (même si c’est pas moi qui vous l’ai appris ;-). Je tiens aussi à remercier Bahamut, Rysley, Sliven, The Ordos, Kilvan et The Falatity pour tout le travail de traduction qu’ils ont effectué, et parce qu’ils m’ont permis de réaliser mon rêve, surtout sur un jeu comme Chrono Trigger ! Je vais également remercier tous les autres membres du groupe dont Card Master qui m’a toujours soutenu sauf dans les moments difficiles… euh, non, sors par le bâton Card, je plaisante, pitié ! Enfin, bref, toute l’équipe de Terminus Traduction, et même toutes les personnes qui ont joué avec notre traduction, et celles qui nous ont soutenus, et même celles qui ont lu cette FAQ avec passion. Je vous donne rendez-vous d’ores et déjà pour une nouvelle traduction et une prochaine FAQ, et même sur le Net avant, alors d’ici là, AMUSEZ-VOUS BIEN !!!!!


Tous les utilitaires seront un beau jour trouvables sur le site de Terminus, ceux qui n’y sont pas peuvent m’être demandés presque gratuitement par e-mail à copernic@ifrance.com, il en sera de même pour les questions qui seront elles facturées séparément.
« beau mais néanmoins long » est une marque déposée par Copernic himself – 2000, mais c’est comme « Chrono Trigger » qui est une marque de SquareSoft, société à laquelle je n’appartiens pas : les marques, ça s’use que si on s’en sert pas!



Sommaire