Les Pointeurs NES par Minh the Mystic Knight |
Télécharger cette DOC au format Word. Enfin, la voilà, la doc que j'avais promis de faire sur les pointers...De plus en plus de personnes aspirent à devenir romhacker, et ils doivent alors passer par le chemin des Pointers... J'ai écrit cette faq pour que même les plus idiots comprennent comment ça marche...Enfin, n'empeche que rien n'est parfait, mais déja si vous comprenez bien cette FAQ, ca me fera très plaisir.. Si j'écris cette FAQ, c'est pour que beaucoup plus de personnes aussi s'y interesse, car nous avons très peu de faq en france.. Aussi, je vous conseillerai pour ceux qui voudrait se lancer dans le hacking SNES de completer ces informations que je vais baser plus sur la NES (et tout ce que j'ai rencontré comme pointer), par celle d'Anus Pee, traduit en Français par Elfe_Noire et dispo sur la TRAF... La comprehension de ce document ne demande pas de competence exttraordinaire, suffit que vous ayez un peu dans la tête, il vous faudra aussi ne pas hesiter à faire des modifications dans la rom car il ne faut pas seulement comprendre, mais aussi apprendre à faire..A oui, il vous faudra aussi un ordi, (le fait de lire ce doc je crois ca veut dire que vous en avez un), du courant(pour le faire marcher) et savoir faire une table....La faq de la traf explique tres bien comment faire une table.. Let's go: 1°)LA STRUCTURE D'UNE ROM NES Bien dans une rom, on va dire pour simplifier, que vous avez du texte (dialogue, et tout ce qui est ecrit), et enfin du code(graphisme, musique, etc...) Comme suit: un exemple de Final Fantasy 2j NES de l'organisation de la rom: Header Code Table de pointer Texte bloc 1 Objets/magies Code Table pointer 2 Texte bloc 2 Equipements/Mots cles Code Table pointer 3 Texte bloc 3 Code Intro Menu/Status Code Bien, je sais y'a plein de mots etrange, et des termes que vous comprenez pas, donc, je vais expliquer: *Le Header se presente comme ça pour une NES: 4E45 531A 1000 1300 0000 0000 0000 0000 En fait le header sert pour l'emulateur NES à savoir que c'est un jeu à lui, et il contient des données comme le mapper utilisé, etc... Vous remarquerez que le Header est composé de 16 octets, soit 10 en hexadecimal...Retenez le c'est important pour la suite..pour trouver un pointer... *Ensuite, vous voyez que la rom se compose aussi de texte, ca ce n'est pas inconnu à vos yeux: Un exemple de texte est: #Hilda:Notre mot de passe est Rose Sauvage, ne l'oubliez pas.#Minh est un chevalier mystique.# ce n'est qu'un fragment, mais vous devinez que tous les dialogues du jeux sont repartis plus ou moins logiquement dans plusieurs "blocs" de texte...PAr exemple, dans Final Fantasy 2j, le bloc 1 est tout le dialogue qui est interactif et qui appartient à des personnes importantes(presence de nom) ..PAs important de comprendre, mais dans le bloc 2, tout le dialogue, c'est celui des villageois, non tres important, ce n'est pas du scenario pur, du spoiler on dit en US..enfin le bloc 3, c'est le dialogue important, mais non interactif...Donc FF2j est separé de maniere logique, mais Chrono Trigger, je ne sais pas..14 blocs, je pense qu'il n'y a rien de logique!!:) Aussi il ya les magies, etc...presentés sous cette forme: #Eclair#Feu#Vie#Soin# Enfin, maintenant, vous voyez un truc zarb..Table de pointer..Bon, je dois d'abord vous dire quelquechose sur les pointers avnt de vous expliquer ça.. 2°)LA NOTION DE POINTER ET LE RAPPORT AVEC LA ROM Beau titre, hein?Je l'ai trouvé moi même...bon, je m'egare..Donc les pointers.. Un pointer, comme son nom l'indique, il pointe...Ouech, je vous en apprends des choses dans cette faq! Un exemple de pointer, c'est par exemple dans les livres dont vous etes le héros, vous avez le choix de votre itinéraire...Un exemple: 58 Le chevalier s'enfuit, et son cheval galopa de plus belle, et il coupa à travers la foret noire....Mais cette foret est reputée dangereuse...Si vous voulez poursuivre le Cavalier dans cette forêt, rendez vous au 15, si vous preferz lacher l'affaire, rendez vous au 125 Bien le rendez vous au 15, ou au 125, ce sont des pointers...Ils indiquent qu'il faut pour avoir une suite logique dans votre aventure, ou il faut aller, ou il pointe... Un autre exemple de pointer, c'est un poteau indicateur..lorsque vous etes perdus en voiture, bah vous regardez attentivement les poteaux indicateur qui vous pointe le chemin... Hé bien dans une rom, c'est pareil, il y'a des pointer qui disent ou commence le texte... Comme dans FF2j, on peut dire: Dialogue 1:Hilda:Survivra t'il? Dialogue 2:Où suis je? Bien, quelque part dans la rom, on dit: #Dialogue 1 et on pointe vers "Hilda:Survivra t'il? #Dialogue 2 et on pointe vers:"Où suis je?" Dialogue 1*Dialogue 2*. Lors du texte de depart: #Hilda:Notre mot de passe est rose Sauvage, ne l'oubliez pas.#Minh est un chevalier mystique.# Bien, en fait, on pointe au debut de la lettre de chaque phrase(a condition d'etre separé par un octet qui indique la fin d'un dialogue, le msg break en fait, le #) ainsi dialogue A pointe sur le H de Hilda, et s'arrete automatiquement avec le message break, et le Dilogue B pointe automatiquement sur le M de Minh, et s'arrete autiomatiquement au message break...Clair non?Je vois deja les questions d'ici Q:D'accord Minh, on comprend a peu pres un pointer, tu nous a un, peu pris pour des idiots avec tes exemples debiles... R:Oui, mais j'ai dit que j'ai ecrit cette faq pour que les idiots comme moi puisse comprendre.. Q:Ah, mais si on continuait la suite de la leçon? R:Fallait pas m'interrompre alors...Je passe au chapitre suivant.. 3°)LES POINTERS POUR UNE TRADUCTION DE MEILLEURE QUALITE Je vois deja des regards etonnés...Oui, comment on peut avoir une bonne traduction avec ce que tu nous a expliqué Minh?En fait, tu peut donc repointer le texte ou tu veux(a condition d'etre dans la meme bank, mais je simplifie, comme c'est pour iune NES? ca pose pas de probleme..), mais on veut plus de precisions Minh!!Ok, ok.. Regardez ce fragment de texte, ou plutot, de Magies en Anglais...tiré de FF2j: #Bolt#Fire#Life# Bien, je veux essayer de le traduire en français...Je ne peux pas ecrire complètement le Eclair, il me manque deux lettres,mais par contre, je peux facilement ecrire le Feu et le Vie, chacun étant plus petit d'une lettre(d'un octet donc)...Un aperçu: #Ecla#Feu #Vie # Bien, maintenant, avec ce que je sais sur les pointer, je peux dire que: Magie 1(qui fait eclair) pointe sur le B Magie 2(qui fait Feu) pointe sur le F Magie 3(qui ressuscite) pointe sur le L J'ai remis en jaune pour que ce soit plus clair: #Bolt#Fire#Life# Bien et maintenant, car je suis trop idiot pour trouver un bon synonyme de Eclair en 4 lettres, je regarde ma rom....Ah mais oui, je vais utiliser les pointer, et utiliser les deux espaces gagnés avec le Feu et le Vie, pour ecrire Eclair... #Eclair#Feu#Vie# Hop je lance le jeu, et je vois: Eclair pour Magie 1 r pour Magie 2 pour Magie 3 Merde, je comprends pas, ca avait l'air d'aller pourtant,...Ah mais oui, regardez: #Bolt#Fire#Life# #Eclair#Feu#Vie# J'ai mis en jaune, la ou les pointer que j'avais oublié de modifier, pointe: Le Eclair s'ecrit correctement, car un pointer pointe au debut du mot et automatiquement, se termine au message break Le Feu ne s'ecrit pas, car le pointer pointe à l'adresse du F en anglais, donc l'adresse du r en français, et se termine au message break, donc que "r" Et enfin le Life ne s'ecrit pas du tout, car je pointe sur le L en anglais, soit le # en français, qui est un message break.. Donc il faut que je change ces pointer pour les repointer de tel façon: #Eclair#Feu#Vie# Voilà, sa s'ecrit correctement quand je lance la rom: Eclair pour magie 1 Feu pour magie 2 Vie pour Magie 3 Ouais, c'est hyper simple, putain, je vais hacker plein, plein de jeux, t'imagine pas toi...Mais....Merde, Minh, comment on modifie les pointer?La tous en coeur on dit:Chapitre suivant... 4°)CALCULER ET MODIFIER UN POINTER Bien, pour calculer un pointer, il vous faut connaitre l'offset du pointé... L'offset, c'est l'adresse exprimé en hexadecimale(base 16) d'un octet quelconque...Dans un editeur Hexadecimale, vous trouverez toujours l'offset de l'octet que vous êtes en train de regarder.... Bien, alors je reprends mon exemple des magies... #Bolt#Fire#Life# Bien, on suppose que le B soit à l'offset 1802Ah(notez bien le h qui dit que je suis en base hexadecimale, base 16), j'en conclus donc que le o est à l'octet 1802Bh, et donc que le F est à l'offset 1802Fh et le L à l'offset 18034h... Donc je note les 3 adresses des lettres en gras sur un brouillon...Puis je regarde l'adresse nouvelle des premieres lettres des magies traduites: #Eclair#Feu#Vie# Le E ne change pas, l'adresse reste 1802Ah, Le F est à 18031h(on ajoute +1 en hexa à chaque octet avancé) Le V est à 18035h Donc je reprends mon brouillon, et je prends une valeur que je dois modifier... Adresse de F (fire) et de L(Life ) donc: 1802Fh 18034h La je retranche le header...C'etait quoi ce que je vous avait dit au tout debut?Le Header de la nes est de 16 octets, donc de 10h 1802Fh-10h =1801Fh 18034h-10h =18024h En fait, vous retranchez 1 a l'avant dernier chiffre, et si c'est 0 l'avant dernier chiffre, vous trouvez F, et vous enlevez 1 à l'avant avant dernier chiffre..Je le dis car j'ai vu la dernier fois une question la dessus, donc je veux etre clair.. Bien, ces deux nombres que j'obtiens, je leur garde que leur quatres derniers chiffres: 801F 8024 Je separe: 80 1F 80 24 ET j'inverse: 1F 80 24 80 Puis je fais donc une recherche dans la rom de ces deux valeurs...La va intervenir la table de pointer...Reprenons la structure de la rom du debut: Header Code Table de pointer Texte bloc 1 Objets/magies Code Table pointer 2 Texte bloc 2 Equipements/Mots cles Code Table pointer 3 Texte bloc 3 Code Intro Menu/Status Code Bien je vois la table de pointer du début, et une table de pointer est constitué de tous les pointer qui pointe dans les suivantes parties de la rom, precedant le code:(du moins pour une NES, mailez moi si je me plante) Donc tous les pointers des magies seront dans le bloc de pointer 1, qui confondra dialogue 1, puis Objets et enfin Magies.. Une table de pointer est classée en general(moi j'ai fait un drole de truc pour FF2j, mais j'y reviendrai après peut être..o_0 ) Donc je sais que ca va etre dans la table de pointer: Magie1*Magie 2*Magie 3* etc.. Donc je sais que ce sera: 1F 80 24 80 pour magie 2 et 3 donc je recherche 1F802480 pour trouver exactement le pointer, sans me tromper, car si je recherche 24 80 tout seul, je peux me trouver face dans la plupart des cas à plusiers possibilités...cela reduit le nombre d'occurence dans la rom et vous prmet de trouer une solution parfois unique.. Pratique, mais retenez qu'un jeu, meme NES ne contient pas obligatoirement de table de pointer..Les pointers peuvent se trouver n'importe où...Ce n'est pas le cas de Final Fantasy 2j sur NES, mais de Moon crystal sur NES...A ce moment, la, il faut chercher un pointer par un, et essayer à chaque fois de le modifier(si plusieurs occurences, essayez sur chaque occurence, car il n'y a aucun moyen de le reconnaitre), et en regardant en lançant la rom si c'est bien le pointer que vous avez modifé ou non..si non, remettez le bon chiffre la ou vous avez modifié, et essayez un autre solution.. Donc je reprends mes pointers que je trouve facilement car FF2j a heureusement, une table de pointer... 1F 80 24 80 Je calcule donc les pointers du F de Feu et du L de Life(respectivement 18031h et 18035h)Je les calcules et je trouve normalement, 21 80 et 25 80 et enfin je modifie les valeurs initiales(1F802480) par les valeurs nouvelles trouvés(21802580) et je sauve.. Je lance ma rom, et je regarde dans mon jeu... Eclair Feu Vie Génial non? Imaginez maintenant qu'on utilise sur NES les pointers pour des dialogues, des Magies, des objets, des menus, des equipements, etc...Donc vous allez pouvoir gagner de la place meme sur les dialogues...C'est y pas genial ça les rouillats? Mais bon, maintenant, je vais develloper sur les differnts types de pointer, car sur NES, on en trouve beaucoup;)Mais bon, je serai aussi clair que precedemment, et vous verrez c'est très facile.. 5°)LES DIFFERENTS TYPES DE POINTERS Bien, voyons les en revue:(Je m'inspire egalement de la doc de JAir sur les pointer pour vous les decrire tous, car je ne les ai pas tous rencontrés..):Remarque interessante:Une meme rom peut avoir des pointer par exemple pour le dialogue qui se calcule comme un certain type de pointer et pour les magies par ex, peut avoir un autre type de pointer...Be Careful! POINTER STANDARD(Header standard selon JAIR) Bien, ce sont les pointers que je vous ai decrit au dessus, je vous rappelle la formule...Ce sont les plus simples aussi:)Soit 12345 mon adresse: Je retranche le header(12345h-10h= 12335h) Je ne garde que les 4 derniers nombres:(2335) Je sépare:(23 35) et j'inverse: (35 23) Simple, non?Rencontrés le plus fréquemment! POINTER X000 Ce sont des pointers, qui pour je ne sais pourquoi, on doit ajouter x000 avant de garder les 4 digits, avec x compris entre 0 et F..Vous devez trouver la valeur de x par coup d'essai.... Je retranche le header:(12345-10h= 12335) J'ajoute x000(ex: si vous trouvez que x=7)12335+7000=19335) Je garde les 4 derniers:9335 Je separe et j'inverse:3593 CA, c'est à essayer si vous ne trouvez pas le pointer apres avoir modifié toutes les occurences d'un seul pointer calculé en Pointer standard...Vous essayez donc x=1, puis x=2, etc..vous modifiez et vous voyez..A noter alors que pour tout une table de pointer, enfin pour toutes les magies par exemple, si vous avez calculer le pointer de Bolt avec x=5, alors Fire sera aussi avec x=5...) Quelques remarques: Jair a dit qu'ils semblait que pour la plupart du temps, le x serait egal à 8....c'est comme ça, mais ce n'est pas à 100% vrai pour TOUTES LES ROMS...donc essayez d'abord avec x=8 avant x=1... Les pointer standard sont en fait des pointer x000, mais avec x=0...Un cas particulier comme dit ma prof de math..meuh non, elle ne dit pas que JE suis un cas particulier, elle dit ça quand elle parle des theorèmes...Pffuu...(quoique heureusement que ma prof ne lit pas ce doc, car j'aurais peur qu'elle me conteste) Jair a dit quelque chose dans sa doc qui etait en fait preuve du contraire...Il existe effectivement des pointers x500, mais il sont très rare...Je l'ai trouvé dans FF2j, pour les messages de combats, ou je devais retrancher 7500..Enfin il ne savait pas, mais c'est EXTREMENT RARE car il ne l'a jamais rencontré.. TEXTES SEQUENTIELS: Ce ne sont meme pas des pointers...Je cite ce cas simplement pour vous faire éviter des maux de têtes en essayantr de trouver des pointers, alors qu'il n'y en a pas..On le trouve par exemple pour le Yes/No de Musashi sur NES... En fait, le YES#NO, vous pouvez l'ecrire No#Yes sans changer le pointer, automatiquement, il le repointe...je l'ai trouvé chez les menus de FF3j... #Item#Magic#Status#Row#Job#Save# Je peux directement modifier: #Objet#Magie#Etat#Rang#Job#Data# LONGUEUR DETRMINEE(Fixed Length) Bien, en fait, ce ne sont pas non plus des pointers, et on rencontre ça très souvent pour des objets qu'on limiterait à 8 lettres: Ex: Potion X-PotionTent Elixir FenixDwn Bien en fait, on a 8 lettres pour le premier objets, 8 pour le second, etc...non séparés par un octet quelconque... On complete lorsque le mot est trop petit pour 8 lettre s par des espaces(Potion, c'est 6 lettres+2espaces) Pour expandre, il faut connaitre l'ASM si vous voulez allez au dela de 8 lettres, mais ca peut etre un avantage ce systeme...Quoique j'ai eu trop de probleme avec FF3legend sur Gameboy pour continuer... TEXTE SEQUENTIEL Putain;, le bordel ça....Regardez:On le calcule comme un pointer normal, mais on ne garde que les 2 derniers chiifres... 12345-header NES=12335 Je garde les 2 derniers chiffres:35 Et voilà mon pointer....Il est trop petit, et du coup, on peut avoir trop trop trop d'occurence, on a très peu de chance de trouver le bon octet 35 qui serait le pointer avant 2 heures.... Il ne serait rencontré pour l'instant que sur RockBoard sur NES, mais je pense que c'est le seul... Bien, vous avez la les differnetes techniques de calculer le pointer, je vous conseille de faire dans l'ordre pour determiner le pointer exact de la phrase ou la magie... Bien, je vais conclure avec un chapitre: 6°)UTILISER EFFICACEMENT LES POINTERS Ca, ca peut vous faire économiser beaucoup de place, et on oublie même ces petites astuces qui peuvent parfois determiner la qualité de la traduction... Vous allez devoir ruser pour trouver telle place qu'il vous manque pour un mot, ou par exemple les messages de combat de Final Fantasy 2j qui si les pointer n'avaient pas été utilisées efficacement, seraient du texte très abrégé, et même raccourci d'abreviations...Imagine, HP up, qu'il faut traduire par HP augmente... Bon, alors une méthode qui pourra vous resservir nombre de fois dans les RPG, c'est celle ci... Bien, soit dans ma rom, 3 endroits où je rencontre le mot : Bolt... Le premier endroit, après modification et essais, je vois que c'est le nom Bolt écrit dans le Menu lors de la consultation de vos magies... #Bolt#Fire#Cure# Bien, ensuite un peu plus loin, je vois le second Bolt...Mais il est précédé d'un octet étrange...Avec la pattern table du jeu, je sais que le $(symbolisant un octet), n'est en fait rien d'autre que l'icone du livre de magie...En fait, les magies exposés lors de l'achat dans un magasin... #$Bolt#$Fire#$Cure# Enfin le 3eme,Bolt, c'est le Bolt écrit pendant un combat, lorsque vous utilisez la magie... #Bolt#Fire#Cure# Bien, comme je vous ai dit, pour chacune de ces magies; est associé un pointer... Mais certain penseront à traduire chacun des Bolt, puis des Fire, et des Cure, et autres en modifiant les mointer de depart...PAs mal, ma FAQ vous a servi:) Mais encore mieux...Oui, je vois que le 1er Bolt et le 2eme Bolt ne sont pas trop loin l'un de l'autre, je ne pense pas avoir de probleme de pointer(car un pointer pointe dans une certaine zone, mais bo, je ne complique pas les choses...)..Donc je pourrais tout simplement traduire toutes les Magies 2(celle du magasins), et repointer correctement tous les pointer des magies 2(la c'est bon, )mais j'ai encorer mieux, plutot que de traduire les magies 1, je vais pointer leur pointer dans les Magies 2...Et je recupere de la placedes magies 1 pour ecrire je ne sais pas moi, mes messages de combat trop long... Regardez: #Bolt#Fire#Life#...............#$Bolt#$Fire#$Life#.......... J'ai mis en jaune et souligné les pointers (la ou ils pointent) des magies 1, et j'ai mis en jaune seulement les pointer (la ou ils pointent) des magies 2.... Je propose donc de pointer les pointer des magies 1 sur la premiere lettre des magies 2 et garder mon espace des magies 1 pour autre choses.. #****************#..............#$Bolt$Fire$Life#.... Les etoiles * sont la place que j'ai gagné..Je verifie alors dans le jeu... Les magasins sont corrects, ils me proposnt bien des magies, et les menus aussi, j'ai les magies qui s'affichent sans le livre...Il est important de vérifier, car il se peut quelquefois, a cause de la portéé du pointer trop courte, car votre autre mot est assez eloigné dans votre rom, qu'il ne prenne pas en compte l'endroit du coup pointé trop loin... La vous avez vu une méthode qui a permis justement d'ecrire les phrases des messages de combat de FF2j... Maintenant, je vais aussi insister sur d'autres manieres de gagner de la place, mais il y'en a des infinités si vous êtes rusés... Bon, alors les Ricains en traduisant les monstres, ont tendance a Gagner de la place aussi...C'est à dire qu'ils ont des monstres comme: Toad P-Toad Ou Wolf WereWolf Bien, meme principe, ils ecrivent seulement dans la place alloué aux deux monstres en japonais, seulement le P-Toad et WereWolf, puis ils pointent le pointer de Toad sur le T de P-Toad, et Wolf sur le W de WereWolf....PAs la peine vraiment d'exemple, si? Bon allez: #P-Toad#Toad#WereWolf#Wolf# J'ai mis en gras chaque pointer, donc je peux ecrire: #P-Toad#WereWolf#*********# J'ai ecrit seulement le WereWolf et le P toad, et je pointe correctement, et j'ai gagné 9 espaces, 9*... C'est donc un problème pour traduire en Français pour moi les monstres de FF2j, car par exemple, WereWolf, c'est LoupGarou, et donc je dois traduire Wolf par loup, mais si je pointe à Loup de LoupGarou, il va m'ecrire loup garou...Donc il va falloir que je trouve de la place:-) Enfin un dernier exemple... Lors de la reinsertion de texte du bloc deux de FF2j, j'ai malencontreusement dépassé la place alloué au texte...et ayant deja optimisé ma nouvelle DTE très pratique pour le bloc 1 de FF2j, il fallait que je ruse...Bon, j'ai dessiné quelques double lettrees sur du graphique, mais ce n'etait pas assez.... Or, le bloc deux du texte de FF2j, c'est du dialogue de villageois, et beaucoup dosaient la meme chose ou presque pour plusieurs phrases... Comme: #Détruisez le Navire!#...........#Il faut détruire ce Navire# Ou #Sauvez Picnesse Hilda!#............#Je vous en prie, sauvez la princesse!# ou encore #Merci!#......#Merci# Le truc c'est d'effacer une phrase, et de pointer à la place pour dialogue B, Dialogue A... Detruisez le Navire, je le laisse, mais j'efface le il faut detruire ce NAvire, pour pouvoir gagner de la place pour mon texte qui depasse, et je pointe ce dialogue correspondant au Il faut detruire ce navire, je le pointe à Detruisez ce NAvire! Bien, j'ai alors pu gagner pas mal de place, j'ai pu caser tout juste mon texte bloc 2.... Voilà, je crois vous avoir expliqué l'essentiel sur les pointer, je pense que ma FAQ sera comprehensible par meme le plus idiot de vous....Oui, je suis le plus bete et j'ai compris alors!!! REMERCIEMENTS: Wild HAM:C'est lui qui a su trouver la patience de m'expliquer les pointers..... Copernic:Un des seul qui a ecrit une FAQ en français:) Ariakas:un ami a qui j'apprend les bases, il a compris tout ce que je disais, c'est un exploit:-) Jair:Tu es un US qui est devoué à aider les autres, c'est bien! Gideon Zhi:Merci de l'idée pour utiliser les pointer efficacements:-)Il avait ecrit une FAQ la dessus:) Et tous les autres, ceux qui auront lu cette FAQ jusque la... J'aurais besoin de votre opinion......sur cette FAQ, savoir si c'etait bien expliqué, bien construit, si vous n'aimez pas, si vous comprenez ttoujours pas, si je dois enfin, ecrire d'autres faq.... email: nithomas@nordnet.fr Allez, si j'ai 5 mail d'encouragements, je veux bien ecrire une FAQ sur les DTE, tres complete, avec la definition, comment les trouver,et enfin comment les modifier, et toutes sortes de façon de les modifier que j'ai rencontrés....Enfin, je sais que c'est simple, mais bon, il n'y a pas vraiment de FAQ la dessus... Minh the Mystic Knight "Au destin de décider...". |