Dragon Quest Fan Les Dragon Quest Old School Dragon Quest I Traduction DQ1 - TutorielDQI
 

hyuunkel
Membre

Avatar de hyuunkel

Membre
Etoile

Messages : 49
Membre n° : 25227
Inscrit le : 8 Février 2012
Écrit le Vendredi 30 Décembre 2016 à 02:31 
Bonjour à tous,

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...

¸,ø¤°`~Hyuunkel~°¤ø,¸
  voir sur le site  Retourner en haut de page Retourner en bas de page 

hyuunkel
Membre

Avatar de hyuunkel

Membre
Etoile

Messages : 49
Membre n° : 25227
Inscrit le : 8 Février 2012
Écrit le Vendredi 30 Décembre 2016 à 02:32 
1) Table des caractères
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=:

¸,ø¤°`~Hyuunkel~°¤ø,¸
  voir sur le site  Retourner en haut de page Retourner en bas de page 

hyuunkel
Membre

Avatar de hyuunkel

Membre
Etoile

Messages : 49
Membre n° : 25227
Inscrit le : 8 Février 2012
Écrit le Vendredi 30 Décembre 2016 à 02:32 
2) les Bank de la rom :

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

¸,ø¤°`~Hyuunkel~°¤ø,¸
  voir sur le site  Retourner en haut de page Retourner en bas de page 

hyuunkel
Membre

Avatar de hyuunkel

Membre
Etoile

Messages : 49
Membre n° : 25227
Inscrit le : 8 Février 2012
Écrit le Vendredi 30 Décembre 2016 à 02:35 
3) Fonctionnement des textes

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).

¸,ø¤°`~Hyuunkel~°¤ø,¸
  voir sur le site  Retourner en haut de page Retourner en bas de page 

hyuunkel
Membre

Avatar de hyuunkel

Membre
Etoile

Messages : 49
Membre n° : 25227
Inscrit le : 8 Février 2012
Écrit le Vendredi 30 Décembre 2016 à 02:38 

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  ÿ...............
 

 

 


¸,ø¤°`~Hyuunkel~°¤ø,¸
  voir sur le site  Retourner en haut de page Retourner en bas de page 

hyuunkel
Membre

Avatar de hyuunkel

Membre
Etoile

Messages : 49
Membre n° : 25227
Inscrit le : 8 Février 2012
Écrit le Vendredi 30 Décembre 2016 à 02:42 

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.


¸,ø¤°`~Hyuunkel~°¤ø,¸
  voir sur le site  Retourner en haut de page Retourner en bas de page 

CHAOMATiK
Membre

Avatar de CHAOMATiK

Membre
EtoileEtoile

Messages : 107
Membre n° : 76343
Inscrit le : 9 Août 2016
Écrit le Vendredi 30 Décembre 2016 à 11:31 
Les bank ne s'utilise peut-être pas de la même manière entre le I et le II.
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 ?

La saga Dragon Quest > ALL.
  https://soundcloud.com/djchaomatik voir sur le site  Retourner en haut de page Retourner en bas de page 

killvan
Membre

Avatar de killvan

Membre
EtoileEtoileEtoile

Messages : 493
Membre n° : 20153
Inscrit le : 9 Septembre 2011
Écrit le Vendredi 30 Décembre 2016 à 13:19 
Demande de l'aide sur le forum de la TRAF : http://traf.romhack.org/
Ils seront le plus à même de t'aider dans ton projet Smileys Dragon Quest Fan

  http://mugiwaranoichimi.forumactif.org/ voir sur le site  Retourner en haut de page Retourner en bas de page 

K2R Nolween
Modérateur

Avatar de K2R Nolween

Membre
EtoileEtoileEtoileEtoileEtoile

Messages : 1585
Membre n° : 3988
Inscrit le : 10 Février 2009
Écrit le Mercredi 11 Janvier 2017 à 00:47 
Demande de l'aide sur les forum internationaux, il y aura surement des espagnols, portugais italiens ou allemands pour t'aider afin d'avoir eux aussi le jeu dans leurs langues (plus probable que des américains qui n'ont pas forcément d'intérêt vu qu'ils ont déjà une trad).

Episode 1 rocks.
  http://sites.google.com/site/lejeuneaurelien/ voir sur le site  Retourner en haut de page Retourner en bas de page 

red fiid
Membre

Avatar de red fiid

Membre
EtoileEtoileEtoileEtoile

Messages : 540
Membre n° : 26015
Inscrit le : 2 Mars 2012
Écrit le Mercredi 11 Janvier 2017 à 08:22 
Bon courage Smileys Dragon Quest Fan Etant moi même dans la programation, mais apprentit, je regarderais de loin tout en essayant de faire joujou avec ma Rom de mon coté Smileys Dragon Quest Fan

Pourquoi ne pas prendre le temps de vivre, le temps d’écouter le monde et nous même.
  voir sur le site  Retourner en haut de page Retourner en bas de page 

Dragon Quest Fan Les Dragon Quest Old School Dragon Quest I Traduction DQ1 - TutorielDQI
 
2 Membre(s) connectée(s) : Soho, Eldrick 




Valid XHTML 1.1!  Valid CSS!  Php
MySQL  Get Firefox 

Forum développé et designé par Poppu