Traduction DQ1 - Tutoriel
A l'instar du travail de recherche que j'avais effectué sur le codage de dragon quest 8 :
http://www.dragonquest-fan.com/forum/index.php?showtopic=13107&page=1
J'ai travaillé ces derniers mois sur la tentative de traduction de la rom "Dragon Quest I & II".
Le sujet est évoqué dans de nombreux forum sur le web, avec il semblerai des personnes motivés, mais sans rien de concret d'effectué...
En effet la plupart des sujets finisses par aboutir (en gros) sur le RIP de ChrisRPG et que soit disant rien n'est faisable sans lui -_-...
J'ai voulu vérifier par moi même ces dires, ainsi que la véracité de ces soi-disant motivés.
La rom en question est quelque chose qui rapproche de cela : "Dragon Quest I & II (US) RPGOne v2.0.sfc"
La plus grosse difficulté à été de partir de 0 et de comprendre comment RPGOne (et donc ChrisRPG) avait codé la version US...
- Dans un 1er temps il à fallut réussir à remplir la table de caractère.
Cette table établie une correspondance hexadécimale avec des caractères affichés dans le jeu.
Par exemple : un "a" affiché dans un texte du jeu sera codé "30" dans le code source. (Attention j'ai bien parlé d'Hexadécimale, donc il s'agit bien de "trois et zéro", et non pas "trente" comme on utiliserai en décimale).
Voir post suivant :
1) Table des caractères
- Ensuite il faut comprendre les bases du fonctionnement du jeu.
En version simple : La console (ou émulateur) fonctionne ainsi : chaque jeux est chargé non pas dans son intégralité mais par "petite" partie appelé : bank (qui ne communique pas entre elle on va dire...).
Dès que l'on passe dans une nouvelle bank de nouveau contenus sont chargés et le contenu précédent "oublié" (toujours pour simplifier).
Ce qu'il faut retenir c'est qu'on travaille (ou joue) toujours que sur une partie du jeu.
Voir post suivant :
2) les Bank de la rom
- Une fois que la découpe du jeu est connu ainsi que les principaux caractères, il a fallut comprendre le fonctionnement des textes...
Voir post suivant :
3) Fonctionnement des textes
- Puis enfin :
4) Traduction
5) Conclusion
En espérant que tout ceci pourra être utile...
Cette table peut-être enregistré en copier/collé dans un bloc note sous le nom DQ.tbl par exemple.
00= (espace)
01=0
02=1
03=2
04=3
05=4
06=5
07=6
08=7
09=8
10=A
11=B
12=C
13=D
14=E
15=F
16=G
17=H
18=I
19=J
1A=K
1B=L
1C=M
1D=N
1E=O
1F=P
20=Q
21=R
22=S
23=T
24=U
25=V
26=W
27=X
28=Y
29=Z
30=a
31=b
32=c
33=d
34=e
35=f
36=g
37=h
38=i
39=j
3A=k
3B=l
3C=m
3D=n
3E=o
3F=p
40=q
41=r
42=s
43=t
44=u
45=v
46=w
47=x
48=y
49=z
50=.
51=,
52=:
53=;
55='
56="
57="
58=!
59=?
60=...
84=:
0000 - 7FFF
8000 - FFFF
10000 - 17FFF
18000 - 1FFFF
20000 - 27FFF
28000 - 2FFFF
30000 - 37FFF
38000 - 3FFFF
40000 - 47FFF
48000 - 4FFFF
50000 - 57FFF
58000 - 5FFFF
60000 - 67FFF
68000 - 6FFFF
70000 - 77FFF
78000 - 7FFFF
80000 - 87FFF
88000 - 8FFFF
90000 - 97FFF
98000 - 9FFFF
A0000 - A7FFF
A8000 - AFFFF
B0000 - B7FFF
B8000 - BFFFF
C0000 - C7FFF
C8000 - CFFFF
D0000 - D7FFF
D8000 - DFFFF
E0000 - E7FFF
E8000 - EFFFF
F0000 - F7FFF
F8000 - FFFFF
100000 - 107FFF
108000 - 10FFFF
110000 - 117FFF
118000 - 11FFFF
120000 - 127FFF
128000 - 12FFFF
130000 - 137FFF
138000 - 13FFFF
140000 - 147FFF
148000 - 14FFFF
150000 - 157FFF
158000 - 15FFFF
160000 - 167FFF
168000 - 16FFFF
170000 - 177FFF
178000 - 17FFFF
180000 - 187FFF
188000 - 18FFFF
190000 - 197FFF
198000 - 19FFFF
1A0000 - 1A7FFF
1A8000 - 1AFFFF
1B0000 - 1B7FFF
1B8000 - 1BFFFF
1C0000 - 1C7FFF
1C8000 - 1CFFFF
1D0000 - 1D7FFF
1D8000 - 1DFFFF
1E0000 - 1E7FFF
1E8000 - 1EFFFF
1F0000 - 1F7FFF
1F8000 - 1FFFFF
Après de nombreuses heures supplémentaires j'ai fini par réussir à déterminer un codage qui est valable pour toute la rom :
FD = Message Start (Début d'un texte)
FE = Line Break (retour à la ligne)
F0 = Section Break (Flèche vers bas marquant une pause avant le texte suivant)
FF = Message Break (Fin du texte ou fin de la redirection)
9D = Début d'un menu
F4 = Nom du héros (que l'on choisi au départ)
F1 = Redirection (à une adresse 16 bits inversé) / ex : F1 B0 DF pour aller à l'adresse DFB0.
Pointer simple (adresse du prochain FD) = D8 03 (pointer) 01 (nombre) XX XX (adresse inversé)
Ex : D8 03 01 51 B7 = Prochain FD à l'offset (l'adresse) B7 51
Pointer multiple = D8 03 (pointer) 02 (nombre) X1 X1 (adresse inversé FD suivant 1) X2 X2 (adresse inversé FD suivant 2)
ex : D8 03 02 72 B6 51 B7 = Prochain FD n°1 à l'offset B6 72 + Prochain FD n°2 à l'offset B7 51
Note : Je ne détaillerai pas l'utilité ni le fonctionnement exacte des pointeurs, ceci étant plutôt complexe d'après ce que j'ai pu trouvé sur le sujet.
De plus ça n'a d'une part pas grand intérêt pour cette traduction et d'autre part ne résout pas le problème principale de la traduction (voir plus bas). (car les pointeurs utilisés lors de la programmation de ce jeu sont en 16bits et non en 24bits).
4) Traduction
Je n'évoquerai volontairement pas tous les logiciels qui existent concernant la traduction, ni la complexité de tout cela, mais ceux qui veulent passer des heures à essayer de tout comprendre : je vous met un pack trié et classé uniquement ce qui est le plus utile :
https://mega.nz/#!Nw5kAZJA!J9sCvMQWt-jDKcm3Txy5cU0GB6G0NwF-4rFxxtUrkmg
Mais à présent que le travail est dégrossi et la plupart du codage trouvé, il suffit de vous munir uniquement d'un logiciel permettant le remplacement manuel "simple" du texte :
SearchR3 : http://traf.romhack.org/get.php?dt=3&ob=7
Ouvrir SearchR3 et charger la Table que j'ai établi en post 1 (onglet Table => open), puis la rom (file => open).
Note : on peux éventuellement lancer l'émulateur en même temps (notamment pour verifier au fur a mesure les trad menu).
Ensuite (toujours dans SearchR3) on active le bouton "Relative", puis "New Search", et on cherche un mot ou une phrase du jeu.
-----
A) Historique v1 (sans explication) :
Dans cette partie figure le début des tests que j'ai effectué, en l'occurrence la modification des menus.
Plusieurs mot revienne à plusieurs reprise dans le jeu donc ce n'est pas toujours facile de trouver celui que l'on veux...
Je ne détaillerai pas la procédure ici mais laisse les références si quelqu'un veux y revenir après avoir compris le tuto qui suis.
Menu Titre :
a) Vitesse du texte : 4B3FF
F1 (redirection) : FED0
t e x t e
004334474334F30005A7FF
F3 : fin du titre
05 : nombre d'espace après titre
A7 : bordure fermé
FF : Message Break
Sous menu : 18820F
F1 (redirection) : FEDB
t e x t e
004334474334F30001A7FF
b) Nouvelle : 4B413
c) Aventure : DFB0
d) "Niveau" (des sauvegardes) : DFC0
e) Ref à faire :
Continue : 4B3EC
une : 4FBD6
Copy : 48D84
Delete : 48D97
-----
B) Historique V2 (expliqué) :
Effacer un journal de sauvegarde (dans le menu) :
You're about to erase Imperial Scroll
Comme vu précédemment : SearchR => Edit => Search => Relative Search
De préférence il faut éviter les ponctuations, on va donc rechercher "about to erase Imperial Scroll"
Une fois le bon mot / phrase trouvé (et sa bonne adresse - offset) on la note pour ne pas se perdre et recommencer plusieurs fois le travail.
Offset : 158078
You're about to erase Imperial Scroll 1. Is that all right?
Fin : 001580c0
00158070 00 d8 50 00 d8 50 00 ff e5 28 3e 44 55 41 34 00 .ØP.ØP.ÿå(>DUA4.
00158080 30 31 3e 44 43 00 43 3e 00 34 41 30 42 34 fe fd 01>DC.C>.4A0B4þý
00158090 18 3c 3f 34 41 38 30 3b 00 22 32 41 3e 3b 3b 00 .<?4A80;."2A>;;.
001580a0 f6 89 00 50 fe fd 18 42 00 43 37 30 43 00 30 3b ö..Pþý.B.C70C.0;
001580b0 3b 00 41 38 36 37 43 59 fe d8 0d 02 c1 80 e2 80 ;.A867CYþØ..Á.â.
001580c0 ff e5 28 3e 44 00 34 41 30 42 34 33 00 18 3c 3f ÿå(>D.4A0B43..<?
A présent que l'on connais les adresses de début et de fin de ce que l'on veux traduire on cherche la bank dans laquelle on se trouve (voir post 2).
Les adresses de ce menu se trouve donc dans la bank : 158000 - 15FFFF
Maintenant que l'on à toutes les informations en main, on peux commencer le "décryptage" à l'aide des codes que j'ai trouvé dans le post 3 et de la table en post 1.
8078 : E5 = Début de ce sous-menu
You're about to erase
28 3e 44 55 41 34 00 30 31 3e 44 43 00 43 3e 00 34 41 30 42 34
808E : FE = Line Break
808F : FD = Message Start
Imperial Scroll 1.
809F : 00 = "espace"
80A3 : 50 = .
80A4 : FE = Line Break
Donc on déduit que 80A0 à 80A2 : F6 89 00 = "numéro de la sauvegarde"
80A5 : FD = Message Start
Is that all right?
80B8 : FE = Line Break
80B9 : D8 = Section Break
80BA-80BF : 0d 02 c1 80 e2 80 = ??? (inconnu)
80C0 : FF = Message Break
Note : pour les parties que l'on ignore à quoi ça sert le mieux c'est de ne pas y toucher (risque de crasher la rom).
Ensuite on code à l'aide de la table (toujours post 1), le texte que l'on souhaite en français :).
Vous êtes sur le point d'effacer
25 3E 44 42 00 34 43 34 42 00 42 44 41 00 3B 34 00 3F 3E 38 3D 43 00 33 55 34 35 35 30 32 34 41
le manuscrit impérial
3B 34 00 3C 30 3D 44 42 32 41 38 43 00 38 3C 3F 34 41 38 30 3B
Note : vous remarquerez que je n'ai volontairement pas traduit "Is that all right?", d'une part parce que cette phrase n'a pas grand intérêt et d'autre part, surtout parce c'est très complexe "d'allonger du texte" dans un menu sans le crasher.
allonger du texte ? me direz vous, je m'expliquerai plus tard dans la dernière partie du tuto.
Après modification le code départ est donc devenu :
00158070 00 d8 50 00 d8 50 00 ff e5 25 3e 44 42 00 34 43 .ØP.ØP.ÿå%>DB.4C
00158080 34 42 00 42 44 41 00 3b 34 00 3f 3e 38 3d 43 00 4B.BDA.;4.?>8=C.
00158090 33 55 34 35 35 30 32 34 41 fe fd 3b 34 00 3c 30 3U455024Aþý;4.<0
001580a0 3d 44 42 32 41 38 43 00 38 3c 3f 34 41 38 30 3b =DB2A8C.8<?4A80;
001580b0 00 f6 89 00 50 fe 00 00 00 d8 0d 02 c1 80 e2 80 .ö..Pþ...Ø..Á.â.
001580c0 ff e5 28 3e 44 00 34 41 30 42 34 33 00 18 3c 3f ÿå(>D.4A0B43..<?
Et nous avons notre nouveau menu de traduit :).
-----
C) Historique V3 (expliqué) :
A présent on va "attaquer" la traduction de texte. Et pour commencer la travail va porter sur le tout 1er dialogue du roi de dragon quest I.
a) Idem que précédemment, on cherche les adresse début-fin du texte complet :
Descendant of the legendary warrior Roto
B41E-B773
b) Puis la bank (8000 - FFFF)
B41E-B773 (8000 - FFFF)
0000b410 36 52 8b 1d 3e 46 60 f0 d8 03 01 0e b8 ff fd 1a 6R..>F`ðØ...¸ÿý.
0000b420 38 3d 36 52 8b 10 37 60 00 f4 58 fe 00 13 34 42 8=6R..7`.ôXþ..4B
0000b430 32 34 3d 33 30 3d 43 00 3e 35 00 43 37 34 fe 00 24=30=C.>5.C74þ.
0000b440 3b 34 36 34 3d 33 30 41 48 00 46 30 41 41 38 3e ;464=30AH.F0AA8>
0000b450 41 00 21 3e 43 3e 58 f0 fd 1a 38 3d 36 52 8b 26 A.!>C>Xðý.8=6R.&
0000b460 34 55 45 34 00 31 34 34 3d fe 00 30 46 30 38 43 4UE4.144=þ.0F08C
0000b470 38 3d 36 00 48 3e 44 41 00 30 41 41 38 45 30 3b 8=6.H>DA.0AA8E0;
0000b480 50 f0 fd 1a 38 3d 36 52 8b 1b 3e 3d 36 00 30 36 Pðý.8=6R..>=6.06
0000b490 3e 51 00 43 37 34 00 3b 34 36 34 3d 33 30 41 48 >Q.C74.;464=30AH
0000b4a0 fe 00 46 30 41 41 38 3e 41 00 21 3e 43 3e 00 46 þ.F0AA8>A.!>C>.F
0000b4b0 30 42 00 36 38 45 34 3d 00 43 37 34 fe 00 11 30 0B.68E4=.C74þ..0
0000b4c0 3b 3b 00 3e 35 00 1b 38 36 37 43 00 31 48 00 43 ;;.>5..867C.1H.C
0000b4d0 37 34 00 36 3e 33 42 60 f0 d8 03 01 de b4 fd 1a 74.6>3B`ðØ..Þ´ý.
0000b4e0 38 3d 36 52 8b 26 38 43 37 00 38 43 42 00 3f 3e 8=6R.&8C7.8CB.?>
0000b4f0 46 34 41 42 51 00 37 34 fe 00 33 34 35 34 30 43 F4ABQ.74þ.34540C
0000b500 34 33 00 43 37 34 00 33 34 3c 3e 3d 42 00 43 37 43.C74.34<>=B.C7
0000b510 30 43 fe 00 37 30 33 00 32 3e 45 34 41 34 33 00 0Cþ.703.2>E4A43.
0000b520 43 37 38 42 00 46 3e 41 3b 33 50 f0 d8 03 01 31 C78B.F>A;3PðØ..1
0000b530 b5 fd 1a 38 3d 36 52 8b 23 37 34 3d 00 43 37 34 µý.8=6R.#74=.C74
0000b540 00 34 45 38 3b 00 1a 38 3d 36 00 13 41 30 36 3e .4E8;..8=6..A06>
0000b550 3d fe 00 30 3f 3f 34 30 41 34 33 60 f0 d8 03 01 =þ.0??40A43`ðØ..
0000b560 62 b5 fd 1a 38 3d 36 52 8b 17 34 00 42 43 3e 3b bµý.8=6R..4.BC>;
0000b570 34 00 43 37 34 fe 00 11 30 3b 3b 00 3e 35 00 1b 4.C74þ..0;;.>5..
0000b580 38 36 37 43 51 00 30 3d 33 00 42 34 30 3b 34 33 867CQ.0=3.B40;43
0000b590 fe 00 38 43 00 30 46 30 48 00 38 3d 00 33 30 41 þ.8C.0F0H.8=.30A
0000b5a0 3a 3d 34 42 42 50 f0 d8 03 01 ad b5 ff fd 1a 38 :=4BBPðØ..µÿý.8
0000b5b0 3d 36 52 8b 11 34 35 3e 41 34 00 3b 3e 3d 36 51 =6R..45>A4.;>=6Q
0000b5c0 00 43 37 38 42 00 46 3e 41 3b 33 fe 00 3c 30 48 .C78B.F>A;3þ.<0H
0000b5d0 00 31 34 00 43 3e 43 30 3b 3b 48 00 34 3d 45 34 .14.C>C0;;H.4=E4
0000b5e0 3b 3e 3f 34 33 fe 00 30 3d 33 00 33 34 42 43 41 ;>?43þ.0=3.34BCA
0000b5f0 3e 48 34 33 00 31 48 00 43 37 38 42 fe 00 33 30 >H43.1H.C78Bþ.30
0000b600 41 3a 3d 34 42 42 60 f0 fd 1a 38 3d 36 52 8b 17 A:=4BB`ðý.8=6R..
0000b610 34 41 3e 00 f4 58 fe 00 1f 3b 34 30 42 34 51 00 4A>.ôXþ..;40B4Q.
0000b620 33 34 35 34 30 43 00 1a 38 3d 36 00 13 41 30 36 34540C..8=6..A06
0000b630 3e 3d 51 fe 00 30 3d 33 00 41 34 43 44 41 3d 00 >=Qþ.0=3.A4CDA=.
0000b640 43 37 34 00 11 30 3b 3b 00 3e 35 00 1b 38 36 37 C74..0;;.>5..867
0000b650 43 fe 00 31 48 00 30 3d 48 00 3c 34 30 3d 42 00 Cþ.1H.0=H.<40=B.
0000b660 3f 3e 42 42 38 31 3b 34 58 f0 d8 03 02 72 b6 51 ?>BB81;4XðØ..r¶Q
0000b670 b7 ff fd 1a 38 3d 36 52 8b 18 35 00 48 3e 44 00 ·ÿý.8=6R..5.H>D.
0000b680 3e 3f 34 3d 00 43 37 34 00 43 41 34 30 42 44 41 >?4=.C74.CA40BDA
0000b690 34 fe 00 32 37 34 42 43 42 00 3e 45 34 41 00 43 4þ.274BCB.>E4A.C
0000b6a0 37 34 41 34 51 fe 00 43 37 34 00 32 3e 3d 43 34 74A4Qþ.C74.2>=C4
0000b6b0 3d 43 42 00 42 37 3e 44 3b 33 00 30 38 33 fe 00 =CB.B7>D;3.083þ.
0000b6c0 48 3e 44 00 38 3d 00 48 3e 44 41 00 39 3e 44 41 H>D.8=.H>DA.9>DA
0000b6d0 3d 34 48 50 f0 fd 1a 38 3d 36 52 8b 10 3b 42 3e =4HPðý.8=6R..;B>
0000b6e0 51 00 38 35 00 48 3e 44 00 42 3f 34 30 3a fe 00 Q.85.H>D.B?40:þ.
0000b6f0 43 3e 00 43 37 34 00 42 3e 3b 33 38 34 41 42 00 C>.C74.B>;384AB.
0000b700 38 3d 00 43 37 38 42 00 41 3e 3e 3c 51 fe 00 43 8=.C78B.A>><Qþ.C
0000b710 37 34 48 00 32 30 3d 00 36 38 45 34 00 48 3e 44 74H.20=.68E4.H>D
0000b720 00 38 3c 3f 3e 41 43 30 3d 43 fe 00 38 3d 35 3e .8<?>AC0=Cþ.8=5>
0000b730 41 3c 30 43 38 3e 3d 00 30 31 3e 44 43 00 48 3e A<0C8>=.01>DC.H>
0000b740 44 41 00 39 3e 44 41 3d 34 48 50 f0 d8 03 01 51 DA.9>DA=4HPðØ..Q
0000b750 b7 fd 1a 38 3d 36 52 8b 26 34 3b 3b 00 43 37 34 ·ý.8=6R.&4;;.C74
0000b760 3d 60 fe 00 11 34 00 3e 35 35 51 00 17 34 41 3e =`þ..4.>55Q..4A>
0000b770 00 f4 58 ff fd 1a 38 3d 36 52 8b 26 37 34 3d 00 .ôXÿý.8=6R.&74=.
c) on décrypt (comme dans le tuto B) :
B41E : FD(Message Start)
King: Ah... F4(nom héros)! FE(Line Break) Descendant of the legendary warrior Roto! F0(Section Break)
FD King: We've been FE awaiting your arrival. F0
FD King: Long ago the legendary FE warrior roto was given the FE Ball of light by the gods... F0
D8 03 01 DE B4 (pointer, on n'y touche pas non plus lors de la trad)
FD King: With its powers, he FE defeated the demons that FE had covered this world. F0
D8 03 01 31 B5
FD King: Then the Evil King Dragon FE appeared... F0
D8 03 01 62 B5
FD King: He stole the FE Ball of Light, and sealed FE it away in darkness. F0
D8 03 01 AD B5
FF
FD King: Before long this world FE may be totally enveloped FE and destroyed by this FE darkness... F0
FD King: Hero F4! FE Please defeat king dragon, FE and return the Ball of Light FE by any means possible! F0
D8 03 02 72 B6 51 B7
FF
FD King: If you open the treasure FE chests over there, FE the contents should aid FE you in your journey. F0
FD King: Also, if you speak FE to the soldiers in this room, FE they can give you important FE information about your journey. F0
D8 03 01 51 B7
FD King: Well then... FE Be off, Hero F4!
B773: FF
d) On commence la traduction :
Note : vous remarquerez que je ne conserve pas le même emplacement des retours à la ligne "FE".
Le texte ne faisant pas la même taille qu'en US on le place au mieux pour remplir les lignes en FR, on peux même en rajouter et faire une ligne supplémentaire en cas de besoin (ça ne pose aucun problème dans le jeu).
B41E : FD(Message Start)
Roi : Ah... F4(nom héros) ! FE(Line Break) Descendant du légendaire guerrier Roto ! F0(Section Break)
FD Roi : Nous attendions FE votre arrivée. F0
FD Roi : Il y a longtemps, le FE légendaire guerrier roto a reçu FE la sphère de la lumière F0 par FE les dieux... FF
FD King: Long ago the legendary FE warrior roto was given the FE Ball of light by the gods... F0
e) Redirection :
Ha ! plus de place !!! la VF ne passe pas dans l'espace imparti, un grand classique...
C'est la que ça se complique, il va falloir déplacer la fin du texte ailleurs dans la rom !!!
Et le jeu étant chargé par tronçon, il va falloir plus précisément le déplacer dans la même bank !
On note donc l'adresse (offset) ou l'on c'est arrêté en conservant 24 bit (ou 3 x 8bit ou 3 caractères ou encore XX XX XX si vous préférez).
Ici les mieux est de couper après lumière : "lumière" s'arrête à B4D5 et il y a bien XX XX XX avant le prochain F0 donc c'est bon.
Dans le cas contraire il aurait fallut déplacer également "lumiere", soit le dernier mot "la" XX XX XX puis on met à la suite des 00 jusqu'au prochain F0 (Section Break).
A présent qu'on a bien noté l'offset de la partie qu'on est en train de traduire, on pourra y revenir facilement.
On par donc à l'exploration de place dans la bank dans laquelle on travaille.
Comme on l'a été étudié au départ ici notre bank est de 8000 à FFFF.
On cherche donc dans la fin de la bank ou il y a de la place (00)...
On trouve alors l'espace libre dispo de FF31 à FFFF.
On va donc écrire la fin de notre texte (qui ne rentrait pas) à partir de FF31.
" par FE les dieux..." FF (pour terminer la redirection)
Soit : 00 3F 30 41 FE 3B 34 42 00 33 38 34 44 47 60 FF
Ensuite on revient à l'offset ou l'on c'était arrêté (avant redirection) soit B4D5.
et à la suite de notre mot "lumiere" : F1 31 FF (qui est suivi normalement de F0 ou de 00).
Pourquoi F1 31 FF ?
Je m'explique : F1 c'est pour démarrer la redirection (d'après ce que j'ai pu en déduire du code) et 31 FF c'est notre offset inversé FF31 auquel nous avons mis la suite du texte.
Note : les adresses suivant les redirections F1 sont toujours inversé et dans la même bank !
Une fois en jeu tout ceci est transparent, la console (ou emulateur) charge les phrases précédentes, arrive à la redirection, lit le texte en fin de bank (jusqu'a la fin de la redirection), puis reviens lire la suite (comme ci il n'y avait pas eu de redirection).
Pour ces premières phrases traduites on obtient ainsi la modification suivante dans la rom :
0000b410 36 52 8b 1d 3e 46 60 f0 d8 03 01 0e b8 ff fd 21 6R..>F`ðØ...¸ÿý!
0000b420 3e 38 00 52 8b 10 37 60 00 f4 00 58 fe 00 13 34 >8.R..7`.ô.Xþ..4
0000b430 42 32 34 3d 33 30 3d 43 00 33 44 00 3b 34 36 34 B24=30=C.3D.;464
0000b440 3d 33 30 38 41 34 00 fe 36 44 34 41 41 38 34 41 =308A4.þ6D4AA84A
0000b450 00 21 3e 43 3e 00 58 f0 fd 21 3e 38 00 52 8b 1d .!>C>.Xðý!>8.R..
0000b460 3e 44 42 00 30 43 43 34 3d 33 38 3e 3d 42 fe 45 >DB.0CC4=38>=BþE
0000b470 3e 43 41 34 00 30 41 41 38 45 34 34 60 00 00 00 >CA4.0AA8E44`...
0000b480 00 f0 fd 21 3e 38 00 52 8b 18 3b 00 48 00 30 00 .ðý!>8.R..;.H.0.
0000b490 3b 3e 3d 36 43 34 3c 3f 42 51 00 3b 34 fe 3b 34 ;>=6C4<?BQ.;4þ;4
0000b4a0 36 34 3d 33 30 38 41 34 00 36 44 34 41 41 38 34 64=308A4.6D4AA84
0000b4b0 41 00 41 3e 43 3e 00 30 00 41 34 32 44 fe 3b 30 A.A>C>.0.A42Dþ;0
0000b4c0 00 42 3f 37 34 41 34 00 33 34 00 3b 30 00 3b 44 .B?74A4.34.;0.;D
0000b4d0 3c 38 34 41 34 f1 31 ff f0 d8 03 01 de b4 fd 1a <84A4ñ1ÿðØ..Þ´ý.
0000ff30 ff 00 3f 30 41 fe 3b 34 42 00 33 38 34 44 47 60 ÿ.?0Aþ;4B.384DG`
0000ff40 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ÿ...............
5) Conclusion :
On pourrais me dire "super on peux traduire tout le jeu alors !", malheureusement non cette technique ne résout pas tout...
Même si vous avez réussi à assimiler tout ce travail, qui permet de traduire une bonne partie du jeu, il reste un problème de taille : les "bank" !
Nous avons vu précédemment que nous pouvions travailler que dans la même bank ou la phrase ce trouve. Or cette fin de bank (dans laquelle nous redirigeons le texte) est variable et rarement suffisante pour pouvoir tout rediriger...
A cette étape il reste par exemple que de FF41 à FFFF d'espace disponible pour tout le texte de la banque 8000 à FFFF soit 191 caractère (sans compter les FF de fin de redirection).
Autrement dit une fois la fin de bank rempli de redirection de traduction, il n'est plus possible d'en ajouter de nouvelle.
Cela nécessite donc de trouver des phrases approchant la signification faisant au maximum la taille du texte anglais... et perdant par la même occasion le sens original du jeu...
Il semblerais qu'il existe néanmoins une méthode en re-programmant le jeux en ASM (assembleur), méthode sur laquelle travaillais ChrisRPG d'après ce que j'en ai compris. N'ayant pas le temps d'apprendre l'assembleur ceci est or de porté pour ma part.
Autre point :
Afin de ne pas être ennuyé avec les histoires de législation et de partage de rom, il est parfaitement possible de créer et diffuser qu'un patch qui se chargera d'appliquer les modifications (traduction) à la rom en question.
Voila, j'espère que tout ce travail et cette explication, vous aura permis de comprendre la complexité de la tache et également pourquoi ceci n'a encore jamais été réalisé en totalité.
Néanmoins, à présent que le travail est dégrossi, et que les clés sont distribué : ce travail est désormais à la porter de tout motivés.
J'ose ainsi espérer que quelqu'un aura la motivation de nous proposer un beau jour un patch de traduction aussi fidèle possible :).
@ bientôt les amis.
Comme c'est une compilation de deux jeux, il utiliserait peut-être une commande qui modifierait l'organisation d'une bank.
Après je n'y connais rien mais serait-il plus simple de traduire séparément les deux jeux plutot que la compilation des deux ?
Ils seront le plus à même de t'aider dans ton projet ^^