Anus Pee Hacking Doc |
|||||||||||||||||||||||||
Ecrit par Anus P. il y a quelque temps pour aider les gens qui connaissent déjà les bases du rom hacking pour effectuer une meilleur traduction. Ce document traite aussi des tables de Pointer (ce qui peut aider tout le monde à obtenir une très grande qualité de traduction), et l'expansion des roms SNES. Ecrit par : Brian Maxwell / Anus Pompous Porté et fixé en HTML
par : Mike Loranger / CaTaclysmX Traduction Française:
Elfe Noire Version texte ici ======================================================================
======================================================================= 1.0 truc générale au sujet de ce document Ce document a été créé
pour aider les gens qui désirent apprendre les Pointers
Tables et comment étendre les roms SNES. Ce document est
peut être très confus mais j'ai essayé de le garder
aussi simple que possible! hé. Je l'ai écrit en une
seule nuit! donc je devrai sûrement l'updater plus tard
pour fixer les erreurs, ou pour écrire les chose encore
plus simplement.....mais je ne suis rien d'autre qu'un bâtard
paresseux, donc mon hack viens d'abord! dans tout les
cas, si vous ne connaissez rien au sujet rom-hacking, ou
si vous n'en savez pas beaucoup à ce sujet, alors
APPRENEZ et obtenez un peu d'expérience! Le seul
programme dont vous avez besoin pour la suite est un éditeur
hexadécimal. Je recommande "hex Workshop"! j'ai
aussi essayé d'écrire ce document pour être le plus
universel possible, donc toutes les roms ne pourrons pas
être modifiées ou étendues de cette façon. 1.1 Historique version
1.2 (HTML) 03/25/98 version
1.1(html) version
1.0(html) ======================================================================= 2.0 longueur de texte Variable Le script de la rom est
généralement stocké dans un groupement de plusieurs
texte dans ce cas, les textes apparaîtront les uns après
les autres, et seront généralement séparé par une
valeur hexadécimal laquelle signifiera la fin du
groupement. Maintenant le texte dans ces groupements (j'aime
les appeler bloc de texte)n'est pas nécessairement dans
l'ordre qu'il apparaîtra dans le jeu. Dans les roms NES
c'est comme cela que tout le texte est généralement
stocké, avec un
système de "table de pointers standard". Mais
dans les roms SNES, j'ai trouvé une autre façon de
stockage du texte; quelque fois le texte est stocké dans
des blocs comme mentionné ci-dessus, mais inclura
quelque code entre chaque groupement à la place d'une
hex standard pour signifier la fin de la ligne. Ces blocs
de texte généralement n'ont pas de table de pointer et
vous pouvez
changer la longueur de chaque groupement individuel sans
aucun problèmes! le seul problème avec le texte stocké
de cette façon est en fait que cela le rends plus dur
pour dumper son script pour le traduire. exemples de roms
ou les textes sont stockés de cette façon : 2.1 Longueur de texte constant Dans d'autres cas certains textes sont quelques fois stockés dans les roms SNES dans un format de "longueur constante". C'est généralement dans ce système que sont stockés les noms des monstres, objets etc.....dans les RPGs. La saga des Final Fantasy stocke le texte dans ce format. Qu'est-ce qu'une longueur de texte constante; il s'agit de bandes de texte (objets) qui ont une certaine longueur et qui ne sont pas séparés par une valeur hex laquelle signifie la fin du bloc. Ils sont collés les uns aux autres.....Par exemple, les objets dans Final Fantasy 4 sont long de 9 caractères, et ils se suivent de cette façon : Tent_____FenixDownPotion___BlackSwrdIronArrow Comme vous pouvez le voir il n'y as pas de valeur hex spécifique qui les séparent. ce qui veut dire que vous pouvez utiliser les espaces comme vous l'entendez! parce que si vous regardez bien il y a 5 espaces à utiliser pour Tent, donc vous pouvez faire devenir ce mots aussi long que vous le voulez! toutefois il vous sera impossible d'utiliser plus d'un certain nombre d'espace pour chaque objet. La seule façon de pouvoir augmenter le nombre de lettres que vous pouvez utiliser pour les "longueurs de texte constante" sera d'apprendre l'ASM! 2.2 Texte flottant Finalement, quelques fois dans les roms SNES, il y a juste des textes flottant quelque part dans la rom, ils ne sont pas dans des "blocs de texte" spécifique. La seule façon de les étendre est de les déplacer quelque part dans la rom où il y a de la place pour les étendre! (expliqué avec plus de détails dans la section 5) 2.3 choses que vous devez aussi savoir au sujet de la façon ou le texte est stocké dans la SNES. Certaines fois il y as
des blocs de texte dans la rom qui n'utilisent pas de
table de pointer. Ils peuvent être étendu comme vous le
voulez sans aucun problème en bougeant la valeur hex qui
défini la fin du bloc. C'est similaire au "RS"(romancing
saga) bloc de texte avec un code entre chaques groupements.
bougez juste le code pour adapter le texte dans la rom.
Mais vous devez savoir une chose c'est qu'il y as parfois
des textes stockés dans la rom (dans des blocs de ======================================================================= 3.0 Headers NES Le header (tête de la rom) dans les roms nes sont les premières lignes que l'ont voient dans l'éditeur hexadécimal. Les 16 premier bytes de la rom sont le header. En d'autre mots le header couvre 10 bytes. Il s'agit d'un nombre important qu'il faut retenir pour éditer la table des pointers des roms nes. Le header ressemble généralement a ceci : 4E45 531A 1000 1300 0000 0000 0000 0000 Vous remarquerez que les 3 premier bytes sont le standard ASCII pour la "NES"! d'autres infos sont stockés ici tel que le mapper, etc.... 3.1 Headers SNES Le header des roms snes est bien plus grand que celui de la nes. Il couvre 512 bytes. Ou plus exactement $200 bytes (hexadécimal). Il s'agit d'un autre nombre très important à retenir. Il n'est pas seulement important pour la table des pointers mais il est aussi important pour bouger les blocs de texte et bien d'autres choses! Le header dans les roms snes ressemble a ceci: 8000000000000000AABB040000000000 Les informations situées à l'intérieur ne sont pas vraiment importante. Mais si votre rom n'a pas de header, hé bien ajoutez en un! (C'est certaine fois la raison du mauvais fonctionnement d'une rom dans certains émulateurs) Pour ajouter un header à la rom copiez juste un header d'un jeux SNES qui en as un, et insérer le header copié dans la rom. ======================================================================= 4.0 Table des pointers Nes Pour trouver une table de pointers pour le texte de votre rom, il est nécessaire de savoir où le texte se situe dans la rom, quel hex signifie la fin d'une ligne, et en sachant cela vous pouvez alors trouver le début d'un bloc de texte. Une fois que vous avez trouvé le début d'un bloc de texte la table des pointers doit être immédiatement avant le texte! Prenez une adresse du début d'une ligne. (pour un exemple prenons 012D63) et enlevons toutes les lettres en plus excepté les 4 chiffres qui font 2D63. Les tables des pointers sont stockées dans des adresses de 2 paires de valeur hex..... Coupez 2D63 en deux vous obtenez 2 valeurs hex.. 2D et 63! maintenant avant de couper en deux vos 2 paires d'hex j'ai oublié de vous dire, vous devez soustraire le header, pour une rom nes comme nous l'avons vu ci-dessus il s'agit de 10 donc 2D63 - 10 = 2D53 maintenant couper en deux et réarrangez en inversant les deux vous obtenez 53 2D. Ceci vous indique un pointer de la table. vous êtes en mesure de trouver 53 dans la table mais 2D c'est une autre chose...donc vous devez actuellement chercher 53xx (ou xx est inconnu) Un exemple de table de pointers suivi par le texte dans une rom nes : 019D30: 4D76 00F8 349D 3B9D 419D
449D 499D 4D9D Explication : hé bien, l'hex 70 signifie la fin d'un bloc donc en utilisant celui-ci vous trouverez le début d'un bloc de texte lequel est a l'adresse hex : 019D44, et donc tout ce qui est avant c'est la table des pointers! vous noterez que 9D se répète plusieurs fois dans la table. hé bien, c'est votre inconnu celui que vous deviez trouver par vous même! 4.1 Table des pointers SNES La table des pointers des roms SNES fonctionne de la même manière, excepté que vous ne devez pas soustraire l'header. Mais vous devez faire attention, parce que certaine fois vous aurez affaire à une mauvaise rom et vous devrez soustraire quelque chose, mais c'est vraiment rare et assez simple de s'en occuper une fois que vous avez pigé! maintenant gardez en mémoire que certaine fois les textes des roms SNES n'utilisent pas de table de pointers (romancing saga). Donc si vous ne pouvez pas en trouver une avant le texte, alors expérimentez! essayer de changer la longueur du groupement en bougeant l'hex qui signifie la fin d'un bloc et regardez si cela marche! mais si cela ne marche pas, et qu'il n'y a pas de table de pointers, alors vous devrez apprendre comment bouger le texte à l'intérieur de la rom (expliqué dans la section 5) ======================================================================= 5.0 Bouger le texte à l'intérieur des banks maintenant il s'agit de
choses plus sérieuses! vous devez faire cela si le texte
que vous avez ne possède pas de table des pointers, et
ne s'étend pas si vous bougez l'hex qui signifie la fin
d'un bloc de texte. Vous devrez faire cela aussi pour étendre
les textes "flottant". La plupart du temps le
texte doit bouger à l'intérieur des banks. Qu'est-ce
qu'une bank? hé bien... il est temps pour moi d'expliquer.
Une bank est une partie de la rom dans la quel les infos
sont stockées. Une bank dans une low-rom est de 32KB (8000
hex bytes) et dans une high-rom elle est de 64kb (10000
hex bytes). Dans une low-rom l'adresse de $000200 à $0081FF
est la 1ere bank et $008200 à $0101FF est la 2nd bank,
etc......pour une high-rom la 1ere bank c'est $000200 à
$0101FF et $020200 à $0301FF pour la 2nd, etc...ces
adresses ont le header de $200 compris! oh est-ce que je
n'ai pas oublié de vous dire que le $ devant une adresse
signifie que je parle de valeur hex! dans tout les cas.......la
plus part du temps le texte "flottant" de la
bank, ou autre chose peut seulement être bougé dans sa
bank originaire. Pour faire cela vous devez commencer par
convertir l'adresse en un pointer. Premièrement, allons
prendre un peu de texte de FF4 (il n'est pas dans un bloc
texte) à l'adresse 09DEC6. maintenant il faut soustraire
le header de cette adresse ($200 dans le header des roms
SNES, si le jeu possède un header). Donc $09DEC6-$200=$09DCC6.
le texte ne peut être bouger que dans sa bank donc entre
$098000 et $09FFFF (sans le header naturellement. Remarquez
aussi que FF4 est une low-rom) maintenant la prochaine étape
à effectuer est de se débarrasser du 09 donc 09DCC6
devient DCC6, maintenant inverser les 2 paires ce qui
donne : C6 DC, faite une recherche de ce nombre à l'intérieur
de la bank, et avec un peu de chance vous trouverez la
table des pointers! 5.1 bouger un large bloc de texte (ou autre chose) dans différentes banks Généralement des larges blocs de texte auront des pointers qui permettront de bouger le texte où vous le voulez dans la rom! c'est là où étendre physiquement une rom devient pratique! (expliqué dans la section 6) ce que vous aurez à faire est de bouger le texte là où il y a assez de place pour le mettre. Premièrement cherchez la place où votre texte commence (vous devrez bouger le texte et sa table des pointers séparément... cela ne peut s'appliquer qu'à du texte "flottant", mais ils utilisent généralement des pointers à l'intérieur des banks pour pointer vers eux.) Les bouger revient à faire la même chose qu'au-dessus, excepté que vous devez savoir de quelle bank il s'agit. La première chose à faire est de soustraire le header, et la charte qui suit montre la conversion entre l'adresse actuel et la façon dont la SNES lira cette adresse. la charte des low-roms :
Je suis
sûr que vous voyez le schéma maintenant. Donc disons que
vous avez un bloc de texte à l'adresse $080600.
Soustraire le header, donc cela devient $080400, puis
regardez dans la charte et trouvez sa nouvelle adresse.
donc $080400 est actuellement $108400. Maintenant coupez
les en paire => 10 84 00 et inverse les => 008410.
Maintenant vous devez chercher, et souvenez vous qu'il
apparaîtra plus d'un fois dans la rom, donc la meilleur
chose à faire est de changer toutes les adresses qui
apparaissent par la nouvelle. ======================================================================= Maintenant pour cette
partie assez simple! dans les roms SNES, tout ce que vous
aurez a faire pour rendre la rom plus grosse, est de lui
ajouter plus d'espace! naturellement l'espace que vous
ajouterez devra être un multiple de 32KB, ou $8000 hex
bytes ou 1 bank. (les adresses qui suivent comprennent l'header de $200)
yada yada yada.... je suis sur que vous voyez le schéma..... Hé bien, c'est tout pour cela! ne me demandez pas comment étendre les roms nes, parce que je ne sais pas comment, et j'ai entendu dire que c'était impossible! ======================================================================= Qourquoi devrais-je
parler de ceci? hé bien, sauf si vous êtes préparé à
faire quelques modifications en ASM. Ce que je veux dire
par là, si vous avez une low-rom et que vous étendez le
texte, vous ne pouvez pas dépasser les 32KB qui sont
allouer à la bank, ou 64 KB pour une high-rom. Ce qui va
arrivé si vous dépassez : le texte qui va dans la 2e
bank ne sera pas affiché. Maintenant je ne suis pas sûr
que ce soit le cas avec certaine roms, mais je suspect
que c'est la raison car c'est ce qui est arrive dans
notre traduction de FF4. Maintenant il y ======================================================================= Wow! j'ai écrit cela en une nuit!?! yep! maintenant je suis très fatigué! la plus part des choses dans ce documents couvre les roms SNES, si vous avez des problèmes avec les roms nes, SVP ne me contactez pas, parce que probablement je n'y connaîtrais rien! je connais juste comment trouver la table des pointers de la nes, mais la SNES c'est une autre histoire! Je suis constamment en train d'apprendre plus et encore plus, et donc un jour ce document sera encore mieux! mais pour l'instant il restera ainsi. je voudrais remercier les personnes suivante : P-funk : pour son aide
sur comment bouger les choses à l'intérieur d'une rom des question/commentaire?
: AnusP : AnusP@ihavepms.com ***Copyright*** Anus P.
(C) 1998 |
|||||||||||||||||||||||||