Hackez Bubble Bobble en vous servant des Pointeurs, par Skeud


Voilà enfin ma ptite doc sur la traduction de BB (plus rapide à ecrire que Bubble Bobble !). Dans cette doc, vous trouverez des infos sur differentes sortes de pointeurs. C partit !

Part 1 : Première approche... On commence par le début, c'est à dire, la recherche de la table de caractères. Pour un jeu nes, rien de plus simple : vive Nesticle ! On zieute dans le menu de nesticle pour voir les differents graphismes (view/pattern table) ert on clique sur les lettres. Des chiffres apparaissent, et voilà votre correspondance. Après, on charge la rom sous thingy avec la table toute neuve. On cherche le texte... hum... Ah trouvé !(1CB82). Merde, pas assez de place... pas grave, on va chercher le pointeur de cette phrase.

Pour les jeux NES, il existe une formule de base, mais qui peut varier selon les différentes rom (celle là aussi d'ailleurs :)).

Addresse_du_texte. On la met en 16 bits (XXXX). Ici, on a donc CB82 (j'ai retiré le 1). On soustrait 10 (mais pourquoi 10, c'est le header de la rom, c a d des infos utilisées UNIQUEMENT par les emulateurs, comme le mapper utilisé, etc...) On a donc CB82-10=CB72. On inverse ( c'est normal, comme la plupart des processeurs, les adresses sont notées "à l'envers" dans le code). On a donc 72CB. Vallaaaaaa, not' pointeur.

Ensuite, armé de ce chiffre-sésame, vl'a ke je fait une recherche dans la rom... Là, j'ai une technique de barbare... chacun sa technique, mais ici elle était adaptée (rom pas trop grosse etc..) donc, je fait un remplacement de 72CB, par 7100 par exemple. Je lance l'emu, et avec de la chance, le jeu se lance :) [comme j'ai fait remplacer tout, beaucoup d'octets ont étés modifiés, et si je modifie la routine d'initialisation (par exemple) bah chuis dans la merde!]

Enfin, ici, le texte est tout merdike (style des bubulles qui font les lettres). Et bah C PARFAIT!! Ca veut dire que 72CB est BIEN le pointeur... Mais kekchose m'a interloqué, le texte de la ligne du dessous est bien, et dans thingy, des mots sont collés... j'en déduis donc qu'il y a un pointeur par ligne (chouette encore plus de boulot. Nan nan nan, chuis pas maso :) ). Alors, pour trouver l'adresse exacte du pointeur (à quel endroit de la rom se situe le 72CB qui sert de pointeur), j'ai fait une technique dont_je_me_souviens_plus_le_nom. Je m'explique, je divise à chaque fois par 2 l'espace de recherche, pour limiter les solutions.

---------------------------------------------------------------
PAUSE! Explication d'une technique assez utile parfois.
---------------------------------------------------------------

Donc, imaginez, dans la rom de 256 ko, il y a 112 solutions. Je part à la moitié de la rom, et je fais " remplacer " juste sur la fin de la rom. J'ai moins de solutions (logike !) et je relance le jeu, voir si c'est la bonne " zone ". Si oui, je fais pareil. Je divise cette zone par 2, et je recherche dans la zone de fin (si vous suivez, on devrait cherche sur 64 ko 256/2/2, vous zietes pas ? tant pis, c pas grave). Si après avoir modifié et lancé le jeu le texte ne change pas bah faut rechercher dans l'autre partie) N'oubliez pas de refaire les modifs avec une nouvelle rom a chaque fois : sauvegardez l'ancienne rom !
---------------------------------------------------------------
Finitoooooo
---------------------------------------------------------------

Donc, maintenant, on a le pointeur, et son adresse (pour ici le pointeur se situe à 1CC09). Mais ca ne nous sert à rien si on n'a pas de place !

Part 2 : A la recherche de l'espace perdu... Faut d'la place. Avec de la chance, dans cette rom, y'en a beaucoup. Là, j'vais à l'adresse 1BD82. Avec thingy, on commence à écrire le texte en français...tip tap tap tip... Valaaa c bon ! maintenant on calcul l'adresse de cet endroit (comme pour le pointeur). Utilisant la même formule, on trouve 6EBD (enfin là, j'menfuit avec une pirouette, passke g pas soustrait 10 mais 20 ! C a kause du jeu, j'vous l'avez dit, faut adapter !). On retourne à l'adresse où se situe le pointeur (1CC09 vous suivez ?) et je remplace 72CB par 6EBD. On lance le jeu, mais Ouaaaaa, la phrase est coupée ! J'en conclue que la rom limite la taille des phrases, chouette, encore une autre merde à fixer !

Part 3 : Encore un truc à modifier, Y fait chier ce jeu ! Pour trouver l'adresse où se situe la taille, je prend d'abord la taille maximum (ici rien de plus simple : on compte les mots ! Mais parfoit, la phrase peut avoir 6 cacatères, et finir par un espace, donc en fait 7 ! Ici, une solution TRES rapide : toujours avec nesticle, on etite chaque espace de la table, et on la remplace par n'importe quoi, un trait etc.

Pour trouver cette adresse, j'ai galéré comme pour les pointeurs, mais finalement, j'ai trouvé que la taille était 6 octets après le pointeur ! ! (ah ouais, j'ai oublié de dire que la plupart des pointeurs dont le texte est regroupé (le texte d'intro par exemple) sont regroupés, voir même séparés par seulement quelques octets).

Donc, je remplace l'ancienne taille par la nouvelle, et là, le texte n'est pas coupé. Mais c pas Bo ! la phrase n'est pas cadrée.

Part 4 : Et maintenant, on fait mu-muse avec une autre sorte de pointeur ! J'avait déjà vu ca dans une doc en anglais (balzy tables). Donc, j'me suis dit qu'il existe un moyen de déplacer les phrases. C logike, car les phrases étaient toutes alignées. J'ai commencé à debugger avec nesticle, mais je trouvais un truc franchement naze. Genre, pour " appuyer sur start "

07/FDC4: A9 FF
07/FDC6: A9 22
07/FDC8: A2 73
07/FDCA: A0 05
LDA #$FF //Pointeur
LDA #$22
LDX #$73 //CHANGEMENT DE PLACE DU PASSWORD
LDY #$05 //LONGUEUR DU PASSWORD

Ca peut etre bien, mais non. Ca les pointeurs sont sur 2 octet. Donc ici, 19FF est un pointeur. Mais regardez avant la taille, y'a un 73, ni une, ni deux, j'le change en un magnifiqe 85 ! Sauve, lance le jeu, et là, là, là, y'a plus d'phrase ! enfin, après differents essais, je trouve la bonne valeur (73) pour centrer le texte. Je fais donc pareil pour toutes les autres phrases...

Part 5 : La fin est proche mes frères... Après avoir fait toutes les modifs nécessaires (c'était TRES chiant et long ! ! j'aurait pu faire un prog ki automatiserait tout ça, mais bon.. j'aurait passé autant de temps à tracer les bugs ! :) ) J'me suis dit " tiennnnn la fonte ressemble à toutes les autres fontes sur nes, et si on la modifiait ? ". sur mon HD, y'a un logiciel ki permet de voir les fontes 8*8 sous windoze (recupéré sur le site de dejap, il y a des siècles ! l'adresse de wild était à squareplanet, et les moggles étaient en train de faire FF6 ! Si ca interesse kelkun, mailme). Donc, y'avait des fontes livrées avec ce prog. Après en avoir trouvée une, j'edite BB sous naga... Ouaaaarghhhh, y'a pleiiin de fontes differentes ! Chier Chier chier ! y'en a marre, que des emmerdes ce jeu, chouette ! Donc, après une intense recherche, et BEACOUP d'ALT+TAB, je trouve la fonte du début. Copier coller dans la rom, et ca marche. Mais pour la fin du jeu, c'est une autre fonte... on la recherche, et on trouve. Enfin, on rajoute l'accent mis à FF ou FE (je l'avais dans un espace libre après les lettres, mais le jeu l'utilisait pour les graphismes). Je relance le jeu, et C bon !

Ca y est, enfin... C finit.


Greets :
Lag, t kool komme gars !
Mera, merci pour tout
Wild, merci d'être là !
Card Master, tu es loin du ptit mec qui débutait y'a quelques temps !
Copernic et terminus translation, pour la première -grande- traduction : chrono trigger
Yazoo, pour ton aide et ta patience pour FF6
Alload, pour ta traduction de FF6
Et pour tous les autres traducteurs que cette doc a pu/pourra aider.

Si ça vous a interessé, des remarques, d'autres infos, des corrections (et je sais qu'il y en a!) etc... une seule adres
se skeud@caramail.com


Retour