31/12/2014 Déplacer des textes dans une autre bank en agrandissant une rom SNES
31/12/2014 Déplacer des textes dans une autre bank en agrandissant une rom SNES sans conaissances ASM http://www.hiei-tf.fr/tutoriels-romhack/tutoriel_expansion/ 1/7 Déplacer des textes dans une autre bank en agrandissant une rom SNES sans conaissances ASM Note : Ce tutorial va être basé sur la rom "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)". Souvent, les banks où se trouvent le texte ne contiennent pas uniquement du texte mais aussi les tables de pointeurs 16-bits, ainsi que du code pour le jeu. Le but de cette manipulation est de déplacer la table de pointeurs et les textes d'une bank donnée dans une nouvelle bank vide ajoutée à la rom (en utilisant "LunarExpander" pour agrandir la rom), ce qui va permettre d'utiliser tout l'espace disponible dans cette nouvelle bank (ou presque, disons entre 95 et 99% de l'espace disponible, car il faut compter la place que va prendre la table de pointeurs, qu'on déplace en même temps). Il nous faut connaître divers informations : L'adresse de début et fin de la table de pointeurs (0x30000-0x302DB). L'adresse de début et fin du texte (0x302DC-0x35108). Tout d'abord, on lance donc "LunarExpand" pour agrandir la rom sans se casser la tête à le faire manuellement. La rom originale fait 1 Mo (8M bits), on va la passer à 1,5 Mo (12 Mbits), sachant qu'on pourra toujours l'agrandir de nouveau plus tard si nécessaire. On choisit donc "12 Mbit (1.5 MB)", on clique sur "Apply to Rom...", on choisit la rom sur laquelle on veut effectuer la modification, et hop, la rom est agrandie. On va ensuite dumper le script principal de façon classique, personnellement j'utilise "Hareng-Tool", ce qui donne ceci dans mon cas comme ligne de commande : extraire("Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).smc", "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).tbl", "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Script_Principal.txt", 0x302DC, 0x35108, 0x30000, 366, 2, "X+$8000", little_endian) Ce qui me donne un dump tout ce qu'il y a de plus classique, dont voici un extrait : [PT0001] [Kame Sennin] 「いやいや おまえたちが コンビを[nl] 31/12/2014 Déplacer des textes dans une autre bank en agrandissant une rom SNES sans conaissances ASM http://www.hiei-tf.fr/tutoriels-romhack/tutoriel_expansion/ 2/7 くむとはのう‥‥。[nl] これなら かてるかもしれんぞい!」 [Pause] [Kame Sennin] 「しっかりやってこいよ![nl] しぬでないぞっ!!」[End] [PT0002] [Bulma] 「ゴハンくんのぼうしに ドラゴンボール[nl] がついてたわよね!?[nl] ドラゴンレーダーをつかえば ばしょが[nl] わかるんじゃない!?」[End] [PT0003] [Kulilin A] 「オレがいっても ゴクウたちの やくに[nl] たてそうもないな‥‥」 [Pause] [Kulilin A] 「ゴクウ!しぬなよ[!!]」[End] [PT0004] [Kulilin A] 「いや‥その‥‥[nl] ピッ‥ピッコロも・な!?」 [Pause] [Kulilin A] 「ホラ これもってけよ」[End] [PT0005] [Piccolo A] 「‥‥‥‥‥。」[End] Il faut ensuite une ligne de commande fonctionnelle pour réinsérer le dump en question, ce qui donne ceci dans mon cas : inserer("Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).smc", "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).tbl", "Dragon Ball Z - Super Saiya Densetsu (J) (J) (V1.1)_Script_Principal.txt", 0x302DC, 0x35108, 0x30000, 366, 2, "X+$8000", little_endian) Ce que j'ai l'habitude de faire, pour être sûr que ma réinsertion fonctionne parfaitement, c'est de réinsérer le script original dumpé sans modifications (cf la ligne de commande au dessus) et ensuite de comparer la rom originale et la rom dans laquelle j'ai réinséré le dump. Si la réinsertion fonctionne parfaitement, les deux roms doivent toujours être identique après la réinsertion du dump original. Maintenant, comment déplacer la table de pointeurs et les textes ? En fait, pour que le jeu puisse accéder à la table de pointeurs, et donc aux 31/12/2014 Déplacer des textes dans une autre bank en agrandissant une rom SNES sans conaissances ASM http://www.hiei-tf.fr/tutoriels-romhack/tutoriel_expansion/ 3/7 textes, il faut bien qu'il sache où se trouve la table de pointeurs en question, et pour cela, le jeu lit un pointeur. Sachant qu'il y a plusieurs tables de pointeurs/textes dans différentes banks, il faut que le jeu connaisse l'adresse exacte, et pour cela, il lit donc un pointeur 24-bits. Ce pointeur 24-bits pointe sur le début de la table de pointeur, il faut donc le trouver. Une fois trouvé, il "suffira" de modifier les adresses dans la commande de réinsertion pour réinsérer la table de pointeurs/les textes dans une nouvelle bank (vide) avec "Hareng-Tool", puis de modifier ce pointeur 24-bits pour qu'il pointe vers cette nouvelle bank. Pour calculer facilement les pointeurs au format SNES (qui est différent du format classique), j'utilise "LunarAdress". Petite explication à propos des différences entre les adresses SNES et celles que l'on appelle "PC" (celles qu'on utilise dans un éditeur hexadécimal, par exemple "0x32DBC") : La SNES ne reconnait pas l'adresse 0x32DBC. Pour "elle", cette adresse équivaut à 0x06ADBC ("06" étant le n° de bank et le reste étant l'adresse dans la bank en question). Pour utiliser "LunarAdress", rien de plus simple. Il suffit de cliquer sur "Auto- Detect Type", de choisir la rom en question, et le logiciel choisira automatiquement le bon mode. Vous entrez ensuite l'adresse PC (hexadécimal dans le cadre en bas à gauche, "03:2DBC" (vous pouvez effacer les deux points, le logiciel n'en tient pas compte) et vous obtenez à droite "06:ADBC"). Il faut donc, en premier lieu, trouver le pointeur 24-bits de la table de pointeurs originale. On connait l'adresse de début de la table de pointeurs, 0x30000, on demande à "LunarAdress" de faire la conversion en adresse SNES, ce qui donne "06:8000". On sait que les pointeurs SNES sont en "little endian" donc il faut inverser notre résultat, ce qui donne : "0080:06" (je conserve les deux points dans ce tutorial pour bien séparer l'adresse du n° de bank mais en réalité, on s'en fiche). Maintenant, le but du jeu est de chercher "008006", sachant que selon les jeux (ou même dans un même jeu), on peut avoir le pointeur 24-bits en deux morceaux, la partie adresse à un endroit donné, et l'octet de la bank dans les alentours, On cherche donc chaque occurence de "008006" dans la rom. Pour vérifier si c'est la bonne occurence, il y a une méthode simple. La table de pointeurs est composée de pointeurs 16-bits (2 octets). Si l'on remplace"008006" par"028006" et que l'on a trouvé la bonne occurence, le dialogue affiché devrait être différent (la modification ci-dessus indique au jeu que la table de pointeurs comme 2 octets plus loin, ce qui signifie que tous les textes vont être décalés d'un pointeur, et donc le dialogue de base devrait soit 31/12/2014 Déplacer des textes dans une autre bank en agrandissant une rom SNES sans conaissances ASM http://www.hiei-tf.fr/tutoriels-romhack/tutoriel_expansion/ 4/7 afficher un autre dialogue, soit ne rien afficher/bugger s'il s'avère que le dialogue en question était lié au dernier pointeur, mais ce cas est plutôt improbable. Dans notre cas, il y a une probabilité sur 366 que ce soit le cas vu qu'il y a 366 pointeurs). La première occurence de "008006" se trouve à 0x2B78E. On modifie en "028006" et on vérifie dans le jeu si le dialogue choisi au début a changé (dans mon cas, le premier dialogue de Bulma). Le dialogue n'a pas changé, ce n'est donc pas la bonne adresse, je continue donc ma recherche dans la rom. L'occurence suivante de "008006" se trouve à 0x38F1C. On modifie en "028006" et on vérifie dans le jeu si le dialogue choisi au début a changé. Oh, le dialogue a changé :-) Le portrait de Bulma s'est transformé en portrait de Krilin et le texte en lui-même est également différent. Cela signifie que c'est bien le pointeur 24-bits de la table de pointeurs que l'on a trouvé. Maintenant, on va réinsérer notre dump (fait au début de ce tutorial) dans une nouvelle bank vide. La première bank vide se trouvant dans la partie agrandie de la rom se trouve à 0x100000. Comme la rom est une "low-rom", chaque bank fait 0x8000 et donc elle se termine à 0x107FFF. La bank suivante commence à 0x108000 et se termine à 10FFFF. Celle qui suit commence à 0x110000 et se termine à 0x117FFF, etc... (Note : Si votre rom est une "high-rom", il faut savoir que chaque bank d'une rom "high-rom" fait 0x10000. La première bank vide commencerait donc à 0x100000 et se terminerait à 0x10FFFF. La bank suivante commencerait à 0x110000 et se terminerait à 0x11FFFF. Celle qui suit commencerait à 0x120000 et se terminerait à 0x12FFFF, etc...) Donc, je disais, on va réinsérer notre dump dans la première (nouvelle) bank vide, donc 0x100000. On modifie notre ligne de commande d'insertion du début, en tenant compte du changement de plusieurs adresses : L'adresse de début de la table de pointeurs qui était 0x30000 devient 0x100000 (début de la première bank vide). L'adresse de début du script principal qui était 0x302DC devient 0x1002DC. L'adresse de fin du script principal qui était 0x35108 devient l'adresse de fin de bank (vu qu'on veut utiliser l'espace libre disponible dans la bank entière), ce qui donne donc 0x107FFF. Voici donc la nouvelle ligne de commande pour l'insertion du dump du script principal : inserer("Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).smc", "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).tbl", "Dragon Ball Z - Super Saiya Densetsu (J) 31/12/2014 Déplacer des textes dans une autre bank en agrandissant une rom SNES sans conaissances ASM http://www.hiei-tf.fr/tutoriels-romhack/tutoriel_expansion/ 5/7 (J) (V1.1)_Script_Principal.txt", 0x1002DC, 0x107FFF, uploads/Litterature/ deplacer-des-textes-dans-une-autre-bank.pdf
Documents similaires
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/Ik1Nw8JmJMxrUwofSWXgO8I1Jn0kFf9nU42XExLX76swmY4qpxYMLH8Kid2MksLzfRmbh1NRUxFU5X2R0T2MA2tS.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/2mkcdu2DW6JO6l0NU2yGD29qTAIlKFdHBbvN7VyKui3tGPBwAQFswPtFLHtMe9IwmSKkr08ydBda1aQJMsJ6aKgT.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/or3QnrUEuTAe07wo65hRcvZ2UIhUpgbnpdp5aFbj4wLnF8VMwRcQ4v68oHTc2RHNqO7T9IOfH5z6Gcq3u8N1BOju.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/8FO0m5jPQo5JGkOCnjqOqZmoETCChDfXxchNxZvamhFUVSgwNSvAkBwawFHLrAdC68tna04IRpVNf6i1uoQHgzBw.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/27Pd7RajJSah2MPzdP2geDTbXzw133bNF4SgHky7Xgo4z1oEk7o5QCnEAagqw0osxfuPZmr71zeMGkbqr8rdaqAL.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/PjQcPpN9EYS6tmTwQrXe8mZCHi0B59G4atSfhT2RokwMmN2F89viRvjBFs27A2wPjzc70VjPiNLUbFephQaCCjqi.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/rWJgniN4pygCvLSTf9oeCuy0E00WiOsq4uLYox4grFATq1SRez4bhi35b39y3euZY1X8Sfx899eDXw8TFE362i2k.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/ZAzrjv585RNUviG7atGgOVT3nrXtyHY98IWBdfyzieGTR17qb5q2Eu874H7tCGQSyImnxXarTWC1iX8LDnFerciQ.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/cGRSnI6pB9noWrLZ7XbXDICFeSW3hCaPqi6dKNUehiQqnR7udF0qjpqWzNzBcjUWtMxtsDaE3gyNTzKrGplPnf1u.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/Iuh470jJil9azog7QamiT9WMkCu2xzUEMKBCLf9SEPT60OJOYlrWRgVJTmvsUQWNTOSaNpOjy2zowJ4hOZbeiqdr.png)
-
24
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 22, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.2632MB