Se connecter

The Legend of Heroes : Trails in the Sky - First Chapter

Sujet : Les outils et infos necessaires pour traduire ce jeu
1
Feunoir
Niveau 6
19 juin 2016 à 19:47:33

Bonjour,
je vais essayer ici de faire la liste de ce qu’il faut connaitre si on veut se lancer dans la traduction de ce jeu (et de sa suite).

Introduction ****************************************************

Alors oui la tâche est gigantesque, rien que pour les dialogues il faut compter entre 47 et 48 000 lignes à traduire (pour un peu plus de 2 800 000 de caractères)… Cela que pour First chapter, c’est même pire pour le « Second Chapter » (on dépasse les 50 000 lignes et 3 200 000 caractères… toujours que pour les dialogues)

C’est clairement une tache dans laquelle il ne vaut mieux pas se lancer seul (ou il faut vraiment aimer traduire)

A mon meilleur rythme, de mémoire, j’ai dû faire du 50 ou 60 lignes par jour sur Valkyria Chronicle je vous laisse imaginer le temps que cela me prendrait (en ne faisant plus que cela de ma vie, hors du boulot/dodo, sans mentionner le fait que les lignes faisaient 120 caractères max contrairement à celui-ci de jeu)

Bon je ne suis pas d’un bon niveau en anglais (beaucoup de blocage/recherche sur le net pour pas mal de truc) et je n’aime pas traduire (c’est la leçon que Valkyria m’a apprise à la dure), donc quelqu’un de balèze en anglais aura forcément un bien meilleur taux de lignes/jour.

Un regret : cette taille conséquente ne serait pas un problème si un vrai travail collaboratif pouvait fonctionner, 5lignes pour 10000 traducteurs, 50 lignes pour 1000, 500 pour 100, 2500 pour 20, 5000 pour 10, 50000 pour 1. Ce serait une chose triviale si on arrivait à faire une plateforme dédiée à la traduction des jeux ou un nombre conséquent de participants donneraient que qq minutes de leur temps et connaissance en anglais chaque semaine

Bref, je le dis tout net, traduire comme un loisir que qq lignes par semaines, je dis pourquoi pas, mais passer des jours et des jours à ne faire que cela, c’est fini je ne le ferais plus.

Par contre j’aime bien l’aspect technique, le « comment faire pour y arriver » donc, bref, entrons dans le sujet

Structure du jeu **************************************************** :

Le jeu se compose de fichier .dat et .dir.
Ces fichiers marchent par couple, chaque .dir contient seulement la liste du contenu du .dat (qui contient donc les données du jeu)

Ces .dat sont des archives compressées contenant les fichiers du jeu.
En ouvrant un .dir avec un éditeur hexadécimal on peut voir les type de fichier que contient le .dat (entre une masse de code définissant ces fichiers)

Par exemple :
ED6_DT00.dir contient des types de fichier comme « C_EMOTIO._CH » , « C_WIPE00._DS » et surtout « FONT30 ._DA »
ED6_DT01.dir , que des fichiers ._SN comme « T0311 ._SN »
ED6_DT02.dir , des fichiers ._DT comme « T_QUEST ._DT »
ED6_DT04.dir et Ed6_DT05.dir contiennent principalement des ._CH

Je ne cite bien évidemment pas ces .dir/dat par hasard :

  • Les FONTxxx ._DA sont les polices de caractères utilisées par le jeu.

Hors sur les jeux japonais pas prévu pour l’exportation en Europe la police utilise un codage « Shift.JS » ou la zone E0 a EF est interdite et sert uniquement pour faire une combinaison pour avoir un Kanji japonais, hors beaucoup de nos lettres accentuées sont dans les Ex.

Comme sur Valkyria il faut en passer par le sacrifice de caractère pas trop utilisé pour en faire nos accents, il faut donc modifier ces FONTxxx ._DA (j’en reparlerais plus loin)

  • Les fichiers ._SN contiennent les dialogues du jeu, dès qu’un perso ou un objet/truc parlent la ligne est prise dans un .SN, c’est donc ici que j’ai compté quasi 48000lignes de texte
  • Les fichiers ._CH sont des textures/images qui sont utilisées dans le jeu, ED6_DT04 contient des éléments des menus du jeu, ED6_DT05 contient toutes les « faces » des personnages qui parlent dans le jeu.

La face C_KAO291 est par exemple « Estelle Jeune heureuse » quand son papa arrive enfin (qq secondes après le début du jeu, quand elle dit son « Daddy ! », hors on retrouve aussi cela dans les fichiers ._SN)

  • Les fichiers ._DT contiennent pour certain du texte traduisible en plus , par exemple T_QUEST ._DT dont je vous laisse deviner le contenu.

Des outils nécessaires : ****************************************************

La liste suivante contient beaucoup d’outils asiatiques, Corée, Japon et surement Chine, ils sont peu clairs/peu documentés et pour ne rien arrangé pas parfaitement clean dans Virustotal.com pour certain (mais j’appelle cela l’enfer virustotal, si on compile un bout de programme y en a quasi toujours un pour râler si le compilateur est pas assez à jour, si on a pas coché la bonne option, si… plein de truc en fait, mais bon si moi je compile un truc je peux dire/assurer que la source est clean, là c’est pas trop possible)

CrystalTile2 : Je l’ai utilisé principalement pour modifier les polices d’écritures du jeu (dommage que je ne le connaissais pas pour valkyria il m’aurait surement fait gagner plusieurs heures)

Utilisation :
L’icône pour ouvrir un fichier est pareil que d’habitude -> pour voir les fichiers il faut juste lui dire d’afficher « all files » au lieu de « supported files »
Il peut servir d’éditeur hexadécimal, c’est d’ailleurs dans ce mode que le fichier ouvert sera affiché au début, mais dans l’onglet view on peut voir les 3 usages que j’ai utilisé :
Hex Editor : touche F6 : si vous ouvrez un ._SN vous verrez le texte anglais dans ce mode, cela peut servir pour trouver des erreurs par comparaison si le jeu bug avec la traduction.
Pour la police de caractère les 2 écrans important sont Tile Viewer (touche F5) et Tile Editor (touche F8)
Tile viewer permet de voir les caractères contenus dans la Font, de faire des copier-coller entre case, d’essayer de mettre des lettres venant de font windows
Tile Editor permet de modifier à la main 1 caractère de la font
Dans Tile viewer il faut mettre pour ce jeu 3 paramètres dans property/Tile property et 1 dans palette/ bouton palette pour que cela s’affiche correctement.
property/Tile property , en height = la taille de la font : 30 si font30 ._DA, 50 si font50 ._DA
property/Tile property , en width = height/2 (+1 si division = chiffre impair) : 20 si font40 ._DA, 16 si font30 et 26 si font50
property/Tile property ,en Tile form : N64/MD 4bpp
dans Palette / Bouton Palette : mettre Combo
Mon usage :

  • Aller sur le « e » et faire ctrl + c pour le copier
  • Aller sur « < » et faire ctrl +v pour coller le « e », à noter qu’il faut faire touche entrée après ctrl + v pour « enregistrer » le collage ici

Ctrl+Z permet de faire un Undo

  • Passer en mode Tile editor sur le « < » qui contient mon « e » et en faire un « é » à la main
  • Pour faire cela, suffit de cliquer sur Char dans palette et de choisir la bonne couleur à mettre dans le haut de la palette, puis à cliquer sur les cases qui vont bien
  • Astuce : dans property/Tile property il y a un « Scale » faut trouver la valeur qui correspond à la taille d’affichage en jeu, cela permettra de voir comment rendra l’accent dessiné en jeu directement en mode tile viewer

Voilà une image guide qui reprend ce qui vient d’être dit :
https://www.noelshack.com/2016-24-1466349881-crystaltile2.jpg

voila qq taille de Font en fonction des options de lancement du jeu:
https://www.noelshack.com/2016-24-1466357298-fonttaille.jpg
en fait j'ai mis 2 lignes contenant ABCDEF, une normale et une autre en #3S (grosse voix)
et j'ai mis le numero de la font à la place de ABC (A = font > 100) si on a A60 c'est la FONT60 ._DA

A noter que les FONT sont normalement en ._DA, hors ici c’est en .dat, voir l’outil falcnvrt plus bas pour l’explication

Si CrystalTile2 peut servir d’éditeur hexadécimal il y en a plein d’autre :
Notepad++ via un plugin pour lire les fichiers en hexadécimal et le plugin compare pour comparer 2 fichiers m’ont un peu servi
Madedit qui support les codepage Shift-Js japonais peut servir
Frhed
Mon préféré reste Hexedit http://hexedit.com/ pour son interface, sa capacité de comparer à partir de point , recherche par zone…
Si qq choses est anormal dans l’affichage d’un texte en jeu, ouvrir le bon fichier ._sn avec un éditeur hexadécimal permettra éventuellement d’en voir la cause

Un outil majeur sans lequel rien est possible : Ed6Back.exe trouvable sur http://modding.tistory.com/3 sous la forme de ED6Back.7z ou sur https://github.com/Ouroboros/Arianrhod/tree/master/Source/Falcom/ED6Back directement en exécutable
C’est le seul outil que j’ai trouvé pour remettre les fichiers dans les .DAT après modification.

La version officielle est surement celle de Github, mais sous sa forme archive compressé .7z il contient un fichier batch _Ed6back.cmd qui permet de faire le traitement d’un répertoire entier avec une boucle for (pour chaque fichier du répertoire faire ed6back truc).

La ligne de commande de Ed6back est : ed6back nom_fichier_.dat nom_fichier_a_remettre [type compression]
nom_fichier_.dat le fichier .dat
nom_fichier_à_remettre = il y a pas photo, c’est le nom du fichier que l’on veut remettre dans le .dat, genre T0311 ._SN, avec son chemin
sachant qu’il y a 393 fichiers ._sn à remettre, le fichier batch est utile pour tous les faire d’un coup.

Exemple d’utilisation :
Ed6back.exe est dans le même répertoire que Ed6_DT00.DIR et ED6_DT00.DAT et un répertoire ED6_DT00 contient le fichier FONT50 ._DA modifié avec crystalTile2
Il faut taper ed6back ED6_DT00.DAT ".\ED6_DT00\FONT50 ._DA" en invite de commande (après s’être rendu dans le répertoire avec un cd nom_du_repertoire, les " " à cause des espace dans le nom de fichier )

Avec le fichier de commande _ed6back.cmd :
_Ed6back.cmd est dans le même répertoire que Ed6_DT00.DIR et ED6_DT00.DAT et un répertoire ED6_DT00 contient des fichiers modifiés (et un répertoire _exe contient ed6back.exe)
Il faut taper _ed6back ED6_DT00
Tous les fichiers dans le répertoire ED6_DT00 seront remis dans ED6_DT00.DAT

Son pendant c’est Ed6Unpacker trouvable dans cette page https://github.com/Ouroboros/Arianrhod/blob/master/Source/Falcom/ED6DatCreator

Suffit de lui glisser/déposer un fichier .dat dessus pour qu’il se lance dans sa décompression.
Pour Ed6_DT01 cela se passe assez bien.
Mais il a tendance à planter, il ne finit pas ED6_DT00.DAT par exemple, je le pense fait pour la version japonaise du jeu, hors je pense qu’il y a des fichiers en plus dans la US.
Avantage : il garde le même nom que le fichier d’origine lisible dans le .DIR (obligatoirement 8 caractères (cela met des espaces si moins de 8), même extensions de fichier ._DA pour les FONT)
Désavantage : il plante

A cause de ce plantage pour avoir accès au FONT > 30 j’ai dû en passer par le logiciel Falcnvrt

Falcnvrt trouvable sur http://modding.tistory.com/3 est fait pour décompresser les jeux Falcom, mais là encore j’ai dû deviner comment l’utiliser

Avantage, il fait bien le taf, il sait même transformer automatiquement les textures en image éditable (.bmp)
Désavantage : il renomme les fichiers à sa sauce : FONT30 ._DA il le nommera FONT30.DAT, en gros non seulement il fait sauter les espaces (règle d’avoir toujours 8 caractères sur chaque nom de fichiers) mais en plus il met du .DAT à la place de ._DA

Ed6back n’acceptera pas les noms de fichiers dans cet état il faudra les renommer, FONT8.DAT il faudra remettre FONT8 ._DA (3 espaces) et FONT192.DAT redeviendra FONT192 ._DA (1 espace), quand on est pas sûr, voir le contenu du fichier ED6_DT00.DIR qui indique le bon nom de fichier

Voilà une image qui résume comment l’utiliser :
https://www.noelshack.com/2016-24-1466349944-falcnvrt.png

Pour remettre les image .bmp sous forme de texture ._CH il faudra surement en passer par ED6-PNG2CH (ED6-PNG2CH.7z sur sur http://modding.tistory.com/3 ) ou TGA2CH (https://github.com/Ouroboros/Arianrhod/tree/master/Source/Falcom/tga2_ch ) mais j’avoue ne pas m'être penché dessus, pas beaucoup de texture en ont besoin a priori.

Feunoir
Niveau 6
19 juin 2016 à 19:50:19

Contenu du fichier ED6_DT01.DAT: ****************************************************
Une fois décompressé ED6_DT01.DAT (ou ED6_DT21.DAT pour Second chapter) on se retrouve avec un grand nombre de fichier ._SN.

Par exemple le début du jeu de First Chapter se trouve dans le fichier T0311 ._SN (le fichier T0310 ._SN contient le même texte mais serait utilisé quand on commence dans un autre mode de jeu, qq face change par exemple (Estelle un peu plus habillé dans la case dans le 310?))

Ce qu’il faut savoir pour comprendre la suite :

  • Les fichiers ont un certain rythme qui se reproduit entre fichier de même type (venant du même programmeur/studio).
  • Quand on parle d’offset faut lire « nombre d’octet par rapport au début du fichier », dans un fichier lu dans un éditeur hexadécimal c’est le seul moyen pour se repérer
  • Un octet est représenté sous forme hexadécimal 00(0)-> FF(255) , même le texte est codé sous forme hexadecimal (A = 65, espace = 20 ...)
  • Une adresse/offset peut être indiqué sous forme Big-endian ou little-endian, bien souvent une adresse a un sens de lecture inversé dans un fichier, ici, c’est le cas, si on lit une adresse FF 01 il faut aller en 01 FF
  • Les adresses sont indiquées ici sous forme de 2 octets, la taille maxi d’un fichier est donc proche de FF FF (soit 65 535 octets)

Après ces petites infos, parlons du contenu des fichiers _sn, du début en allant vers la fin on trouve :

  • Ils commencent toujours par le nom de la zone du jeu
  • En offset 5A on trouve une adresse menant vers la fin du fichier, elle mène exactement au mot @FileName, le probleme avec ce type d’adresse c’est que forcement si on ajoute 1 caractère dans une phrase elle va se retrouver 1 octet plus loin -> il faut la mettre à jour
  • En offset 60 on trouve une adresse menant à une zone un peu avant @FileName, la taille de la zone est même indiquée en offset 62 (61 étant le deuxième octet de l’adresse), même sanction, faut la mettre à jour si on ajoute un caractère
  • Après une zone de traitement/d’info présente probablement pour indiquer au jeu ce qui est dans ce fichier on trouve enfin le début du texte lisible

La plupart des blocs de texte commence par un octet 5B (5B que l’on voit comme un crochet [ car c’est le code de [ en ascii)
Ces blocs de texte sont entre des octets 00, en gros on voit le plus souvent [0800Je suis du texte.00X , un octet divers après le [ puis le texte jusqu’à un 00
Parfois les blocs de texte ne commencent pas par un [ ou par 00, mais ils finissent systématiquement par 00

  • Les textes sont entrecoupés de code que le jeu sait interpréter (je pense que c’est genre des actions comme ->Montrer Estelle qui récupère des sous en allant à côté de son père » <- (c’est la scène en début de jeu )
  • Finalement on arrive à l’adresse donnée en offset 60, j’ai longtemps hésité au sujet de cette zone, contenant des adresses ou pas des adresses ?

J’ai testé d’ajouter des caractères dans le texte sans rien modifier ici : cela marche à priori sans problème (un reste de code pour psp ??)
Comme je reste persuadé que c’est des adresses je pense qu’il faut les modifier.

  • Après cette zone on arrive à @FileName
  • @FileName est suivi de la zone finale, une liste de nom séparé par des 0, probablement le nom des intervenants (mais on y trouve aussi des objets qui ne parlent pas habituellement)

Quand on a compris cela on peut déjà traduire le jeu intégralement dans les éditeurs hexadécimaux, suffit de changer le texte contre ce que l’on veut et d’incrémenter les adresses aux offsets 5A , 60 si on ajoute ne serait-ce qu’un caractère .

Faisable mais pas super pratique. C’est là que j’ai un truc à proposer :
Un script python pour extraire le texte dans les fichiers ._sn et le mettre dans un fichier .csv (ouvrable par exemple dans calc d’open office ou excel de microsoft office )
Un script pour refaire le chemin inverse : .csv -> ._sn
Vu que c’est un script python il faut que l’environnement Python soit installé sur le pc, et il faut une version 3 (3.5.1 actuellement) trouvable ici https://www.python.org/downloads/windows/

Script _sn to csv : ed6sn2csv.py
Méthode d’utilisation :
La plus simple consiste à glisser déposer dessus ce script un répertoire contenant des fichiers _sn : tous les fichiers _sn seront lus et mis en .csv
On peut aussi lui glisser déposer qu’un seul fichier ._sn , il y a que lui qui sera lu
On peut le lancer directement, mais faudra lui donner le chemin vers le répertoire ou le chemin + nom du fichier _sn à la main
On peut exécuter cela en ligne de commande,
py.exe ed6sn2csv.py "J:\translate ed6\ED6_DT01"
ou
py.exe ed6sn2csv.py "J:\translate ed6\ED6_DT01\T0311 ._sn"
par exemple je me suis fait un fichier cmd pour le lancer ainsi :
py.exe ed6sn2csv.py "J:\translate ed6\ED6_DT01" >_rapport.txt
start _rapport.txt
py.exe est l’interpréteur python, les connaisseurs verront >_rapport.txt qui envoie le log de l’execution dans un fichier, avant de l’ouvrir en ligne suivante (dans ce cas il faut faire 2 fois entrée au lancement car cela n’affichera pas « Appuyer sur une touche pour quitter » à la fin de l’exécution)
Si vous faites bouton droit dessus le script, puis Edit with Idle (Idle est l’IDE de base fourni avec Python) vous aurez acces au contenu du script.
Il commence avec qq options modifiable (suffit de la changer et de faire Save pour changer le comportement du script) :
filter_for_not_readable_char=True #C’est un filtre pour les lignes ou il y a trop d’hexadecimal detecté hors texte genre 0x82 0xbc 0x82 0xed 0x82 0xed 0x82 0xc1 0x81, faut mettre False pour désactiver ce filtre

filter_for_map_file=False #la plupart des fichiers de type map n’ont pas de texte (sauf T0001 ._SN pour FC) , j’avais carrement filtrer tous ces fichiers, mais finalement le filtre au-dessus fait bien son taf et cela sert plus trop de mettre True
several_output_file=1 #0= cela sort qu’un fichier _output.csv qui contient tous les dialogues du jeu, avec un 1 cela sort aussi ce fichier mais cela en fait aussi 1 par fichier _sn , ainsi le contenu de T0311 ._sn sera dans _output.csv et T0311 .csv
output_text_column = 6 #5 = texte d’origine anglais mis en colonne 5, c’est tout, avec un 6 c’est pareil mais l’anglais est recopié en colonne 6 ou la traduction aura lieu , avec 7 c’est pareil que 6 mais en colonne 7 il y a le texte anglais recopié mais sans les 0xyy (pour le passer plus facilement dans un traducteur du net pour prémâcher le boulot, sachant qu’il faudra tout reprendre vu le résultat)

scan_for_character=4
celle-ci d’option est un poil plus complexe , j’ai dit plus haut que quasi tout le texte est entre des [ 00texte00, bah il faut bien détecter le reste qui ne respecte pas ce principe, c’est le rôle de cette recherche.
Le 4 veut dire qu’on utilise en plus des [ 00texte00 la méthode de recherche suivante : « recherche 4 lettres lisibles consécutives, si tu trouves cela c’est que tu as trouvé du texte : enregistre jusqu’au 00 qui suit »
Si on met un 3 cela ajoute à la méthode du 4 « recherche ensuite 3 lettres lisibles consécutives, si tu trouves cela c’est que tu as trouvé du texte : enregistre jusqu’au 00 qui suit »
Si on met un 2 cela ajoute aux 2 méthodes d’avant « recherche ensuite 2 lettres lisibles consécutives, si tu trouves cela c’est que tu as trouvé du texte : enregistre jusqu’au 00 qui suit »
Si on met 0, on se passe de cette recherche, mais il manquera tout le texte qui ne respecte pas le format [ 00texte00
Le 4 fait du boulot correct, le 2 détecte tout et n’importe quoi, il est trop sensible, j’ai laissé cela pour ceux qui pense qu’il leur manque du texte, un test avec 2 donnera quasi tout le texte possible et surtout même bien plus qu’on en voudrait ;))

Dans le .csv resultat on obtient ces différentes lignes :
*********************************************************************************************** Start file _sn: Filename :J:/translate ed6/ED6_DT01/T0311 ._SN *********************************************************************************************** area in game :Rolent Names at end of file : Cassius 0x00 Joshua 0x00 Estelle 0x00 Estelle 0x00 Boy 0x00 Cassius 0x00 Dish 0x00 Dish 0x00 Dish 0x00 Coffee 0x00 Coffee 0x00 Coffee 0x00 French Bread 0x00 Frying Pan 0x00 Bed 0x00 *******************************************************************************************
Nom de fichier, zone du jeu (donné par le debut du fichier), les noms qu’il y a en fin de fichier (on voit la séparation des noms avec le 0x00 j’en reparle juste apres)
Le gros morceau c’est le texte du jeu :

17327 17431 0 #295F Mmm... 0x02 0x03 Daddy's really late. 0x02 0x03 I even got a message from the 0x01 guild saying he'd be home today, 0x01 too...
17551 17718 0 #295F#5P ...and Schera's gone traveling around the 0x01 kingdom on some kinda training... 0x02 0x03 I'm sooooo bored! Maybe I'll just practice 0x01 with my staff a bit more before dinner.
17761 17772 4 Man's Voice
17773 17787 4 Hey! I'm home!
17828 17842 0 #291F#5P Daddy!
18914 18950 0 #294F#3S#3P Why is my present a BOY?!

Une ligne se décompose ainsi :

  • Première colonne = offset décimal du début de ce texte dans le fichier
  • Deuxième colonne = offset décimal de la fin de ce texte dans le fichier
  • Troisième colonne = méthode de détection du texte : 0 = méthodes via [ 00texte00 , 4 = 4 lettres lisibles , on en a 2 exemple ici (si on active scan_for_character=2 on aura aussi des 3 et des 2 )
  • Quatrième colonne = Quand le texte commence normalement par #294F#3S#3P je le décale dans cette colonne juste pour une meilleur visibilité , normalement on aurait dû avoir « #291F#5PDaddy! » comme texte par exemple

Truc intéressant avec ces codes justement : pour #xP je ne sais pas trop, peut-être la vitesse d’affichage ? (vitesse des bip quand cela affiche le texte??)

  1. xS, comme #3S, ou x = 3, 4 ou 5 , plus le chiffre est élevé plus le texte est écrit gros, sans rien = normal, en #3S c’est un ton qui a bien monté, en #5S c’est un hurlement de fou en gros, et chaque taille change la police d’écriture, le fichier FONT utilisé, j’en ai mis un exemple en dernière ligne
  2. xF comme #291F, ou x est entre 0 et 857 (avec des trous), j’en ai parlé plus haut, c’est quasiment le nom du fichier qui va être affiché, #291F appelle le fichier C_KAO291._CH qui correspond à la tête de « Estelle petiote toute heureuse » pour l’afficher dans la case ou le texte va apparaitre

J’en ai fait une compilation la (faut plusieurs clics pour zoomer au max):
https://www.noelshack.com/2016-24-1466355932-persos.jpg

  • Cinquième colonne = le texte d’origine

On voit des 0xyy , c’est eux qui indique au jeu de changer de ligne et de passer à une case suivante et d’autre effet, normalement c’est de l’hexadécimal et donc 01, 02, 00, hors c’est aussi des caractères que l’on qualifie de « caractère de contrôle », impossible à afficher dans un éditeur de texte normal, j’ai donc transformé tout le non lisible en 0xyy ou yy est l’octet d’origine, il faut absolument conserver l’espace avant le 0x et après le chiffre pour que ce soit remis dans script suivant (si on a pas celui d’avant 0x, le script détectant l’espace via une détection de ‘ 0x’ il ne sera pas vu, s’il n’y a pas celui d’après cela enlèvera juste la première lettre du mot collé au chiffre)
Dans le script suivant on peut lui dire dans quelle colonne on a traduit, je pars plutôt sur la 6ieme colonne pour garder l’anglais à coté
Dans cette optique, si l’option est laissée sur output_text_column = 6 on a une sixième colonne avec le même texte qu’en 5

Phase traduction, qq règles :

  • On garde les ‘ 0xyy ’ à peu près au même endroit avec leurs espaces avant et après
  • La limite en taille semble vers les 100 caractères en mode texte normal, vers 90 avec la font d’une taille au-dessus, et bien bien plus bas quand cela crie, mais cela depend en fait des options cochés dans les options du jeu et de sa définition d’ecran

Attention la ligne peut être bien plus longue que 100 caractère, faut juste comprendre par là qu’il doit pas y avoir de pavé de 90 caractères entre 2 0xyy, faut sauter à la prochaine ligne avec un 0x01 ou changer de case (avec un ‘ 0x02 0x03 ‘ ?)

  • Les lignes illisibles/intraduisible : on efface complètement la ligne car cela risque de poser problème quand je change les caractères accentués contre leur version non accentuée pour ceux que l’on ne gère pas (éèàêù sont gérées)

par exemple dans le fichier C2210 il faut virer 11551 11556 4 #-&- 0xb4 #-&- 0xb4

  • Les lignes détecté par 4 caractères lisibles commence parfois avec un T ou un X en trop -> laissez bien votre ligne traduite commencé par la même lettre (c'est en fait probablement la fin d'une ligne vu par la détection normale, il y a un léger chevauchement)
  • On remplace ^><_+ contre autre chose si on en voit (j’ai pris ces trucs car ils ne sont presque pas dans le fichier) sinon ils seront une lettre accentuée en jeu car c’est les lettres sacrifiées pour avoir qq accents
  • Si on doit écrire un ‘;’ il faut mettre un ‘|’ à la place, en effet le ; sert a définir les colonnes dans un fichiers .csv, mettre un ‘;’ puis sauver le fichier et le rouvrir c’est avoir une colonne en plus avec le texte à droite du ; dans cette colonne (le script suivant change les ‘|‘ contre un ‘ ;’ donc en jeu ce sera bien un ; , en fait le script d’avant a fait l’inverse : si on voit un ‘|’ c’est que normalement il y a un ; à cette endroit)
  • Si les fichiers T0300 et T0301 ont quasi le même texte, il y a qq variations donc attention
  • De même pour les T0310 et T0311, c’est a priori les seuls cas de fichier quasi doublon
Feunoir
Niveau 6
19 juin 2016 à 19:51:38

Finalement le script pour remettre le texte dans les _sn ed6text2sn.py:

Je vais ici plutôt commencer par les options dispos dans le fichier :

  • copy_file_if_no_text = False # un truc que j’ai fait pensant qu’il fallait remettre tous les fichiers d’un coup, mais en fait non donc elle sert a rien en fait ;)) son but c’était de copier directement les fichiers _sn quand ils n’ont pas de texte lisible
  • scan_only_for_outputcsv = True #Quand on lui donne un répertoire a mangé, le script va, avec un False ici, scanner que les fichiers nom_du_fichier_du_jeu.csv genre T0311 .csv et pas _output.csv, avec True c’est l’inverse que _output.csv
  • columntranslation=5 #La colonne ou est la traduction , ATTENTION ici faut compter le 0 comme une colonne, donc le 5 mis par defaut veut dire que la traduction sera dans la colonne 6 en fait, faut mettre 4 si vous voulez ecraser le texte d’origine par la traduction
  • content_adress_hex60_is_adress = True #ca c’est pour mon hésitation a définir si le contenu dans la zone juste avant @FileName est une zone d’adresses dans le fichier ou des trucs n’ayant rien à voir , avec True j’incrémente les adresses s’il le faut, avec False je n’y touche pas

Donc par défaut, le script scanne que _output.csv si on lui donne un répertoire, mais fait le .csv qu’on lui donne si on lui donne un fichier .csv et cherche le texte en colonne 6 (et incrémente les adresses avant @FileName)

Comment on l’utilise :
Un peu pareil que pour l’extraction mais il y a des trucs à savoir :
Dans le même répertoire que le .csv, il doit y avoir tous les ._sn d’origine nécessaire car en fait tout le contenu hors texte doit être repris dans le fichier original.
Le résultat sera mis dans un répertoire crée pour cela par le script, cela reprend la dernière partie de celui contenant le fichier csv
si _output.csv et les _sn originaux sont dans J:\translate ed6\ED6_DT01, les nouveaux fichiers _sn seront dans J:\translate ed6\ED6_DT01\ED6_DT01
* La plus simple consiste à glisser déposer dessus ce script un répertoire contenant des fichiers _csv : suivant l’option scan_only_for_outputcsv tous les fichiers _csv seront lus ou seulement _output.csv et remis en ._sn

  • On peut aussi lui glisser déposer qu’un seul fichier ._csv , il y a que lui qui sera lu
  • On peut le lancer directement, mais faudra lui donner le chemin vers le répertoire ou le chemin + nom du fichier .csv à la main
  • On peut exécuter cela en ligne de commande,

py.exe ed6text2sn.py "J:\translate ed6\ED6_DT01"
ou
py.exe ed6text2sn.py "J:\translate ed6\ED6_DT01\T0311 .csv"

Récapitulons :
Pour commencer la traduction des dialogues :

  • 1/ Optionnel : Faut aller dans le répertoire du jeu et y faire un répertoire Original puis copier dedans les fichiers ED6_DT00.dir, ED6_DT00.dat, ED6_DT01.dir et ED6_DT01.dir

C’est une copie de sauvegarde des originaux

  • 2/ Ensuite, créer un répertoire de travail genre c:\ed6 ou ailleurs (je pars du principe que c’est c:\ed6 pour la suite)
  • 3/ copier dans c:\ed6 :

Ed6Unpacker.exe, les 2 scripts python ed6text2sn.py et ed6sn2csv.py (renommable autrement sans problème)
Ed6Back dans sa version avec fichier batch .cmd (faut avoir _ed6back.cmd et un répertoire _exe contenant ed6back.exe (dans c:\ed6\_exe\ )
Les fichiers ED6_DT00.dir, ED6_DT00.dat, ED6_DT01.dir et ED6_DT01.dir

  • 4/ installer python 3.5 si pas encore fait
  • 5/ faire un répertoire c:\ed6\ED6_DT00 et mettre dedans les FONTxxx ._DA
  • 6/ pour cette étape on va mettre les font qui sont dans c:\ed6\ED6_DT00 dans ed6_dt00.dat grâce a _ed6back.cmd

La méthode la plus douce je pense: clic droit sur _ed6back.cmd puis ‘Créer un raccourci’
Bouton droit sur le raccourci, puis propriétés, et modifier la ligne ‘cible :’ pour avoir "C:\ed6\_ED6Back.cmd" ED6_DT00 (les "" sont nécessaires si la ligne contient un espace ou autre truc, ici cela fonctionnerait surement sans)
Puis on exécute le raccourci
Une méthode plus manuelle :
On remonte d’un cran dans le chemin (ici on va dans c: )
On fait SHIFT + bouton droit sur le répertoire ed6 et on choisit ‘Ouvrir une fenêtre de commande ici’
L’invite de commande s’ouvre sur c:\d6 , on tape _ed6back ED6_DT00 pour lancer l’importation des Font dans ED6_DT00 .dat
Normalement quelque soit la méthode utilisée voila vous avez un fichier de jeu modifié qui supporte des accents éèàêù grâce au sacrifice de <>^_+
Suffit de le remettre dans le repertoire du jeu et d’ecraser l’original avec celui-ci

  • 7/ dans cette etape : on sort les ._sn de ED6_DT01.dat

On clic gauche sur ED _DT01.dat, et sans relâcher le bouton on va sur Ed6Unpacker.exe pour le déposer (ce que j’appelle glisser déposer un fichier)
La décompression de tous les ._sn dans ED6_DT01 est faite quand c’est fini

  • 8/ dans cette etape : on convertit les ._sn en .csv éditable

On clic gauche sur le repertoire ED6_DT01 que l’étape 7 a fait, et sans relâcher le bouton on va sur ed6sn2csv.py pour le déposer
Par défaut several_output_file=1 donc on aura 1 .csv par fichier _sn et un _output.csv contenant tous les fichiers, à vous de virer ceux ou celui que vous n’utiliserez par (et de modifier l’option scan_only_for_outputcsv a false dans ed6csv2sn.py si vous utilisez pas _output.csv )

  • 9/ etape importante : faut déplacer ou copier ED6_DT01.dat, ED _DT01.dir , ed6csv2sn.py, _ED6Back.cmd et le répertoire _exe dans c:\ed6\ED6_DT01

Pourquoi car les fichiers que l’on veut mettre dans ED6_DT01.dat seront dans c:\ed6\ED6_DT01\ED6_DT01 après l’usage de ed6csv2sn.py , si on execute _ED6Back.cmd dans c:\ed6\ on aurait remis les originaux en place.

Ces 9 étapes ne sont à faire qu’une fois, une fois faite on passe en mode traduction et test
Ici on est prêt à traduire
Le début du jeu est en ligne 18066 normalement, dans le fichier _output.csv, ( Mmm... 0x02 0x03 Daddy's really late. 0x02 0x03 I even got a message from the 0x01 guild saying he'd be home today, 0x01 too... )
Quand on a traduit un bout du jeu il faut le tester :

  • Dans c:\ed6\ED6_DT01 on fait glisser le .csv sur ed6csv2sn.py -> cela met tous les ._sn listé dans ce .csv avec nos modifs dans c:\ed6\ED6_DT01\ ED6_DT01
  • On fait pareil que pour l’étape 6 au-dessus, via un raccourci avec cible "C:\ed6\ ED6_DT01\_ED6Back.cmd" ED6_DT01 ou un lancement en ligne de commande _ed6back ED6_DT01 (en étant dans C:\ed6\ED6_DT01\ (via un cd ED6_DT01 si on est dans c:\ed6))
  • On a alors nos ED6_DT01.dat, ED _DT01.dir modifié avec notre texte, reste plus qu’a les remettre dans le répertoire du jeu et à tester

Si jamais ED6Back déconne, remettez des ED6_DT01.dat, ED _DT01.dir qui n’ont jamais été modifiés (des originaux) puis retentez la manip

Je crois que l’on est au bout
A si un dernier detail : SAUVEGARDEZ SOUVENT VOTRE TRAVAIL SUR LES .CSV (votre hdd qui les contient va crasher après 47000 traduites c’est obligé)
Si quelqu’un se lance dans la traduction je me pencherais sur le cas des ._DT, mais dans le pire des cas ils sont surement traduisibles via un éditeur hexadécimal ; et si on se contente de faire juste T_QUEST ._DT c’est encore plus faisable
Anecdote : ce pavé fait un peu plus de 461 lignes et quasi 31000 caractères soit environ 1% des dialogues ;)) (entre le code python et divers message j’ai dû approcher voir depasser les 2%)

ha si, un dernier truc, manque un truc ;)), ce lien cjoint http://www.cjoint.com/c/FFtrBicZydQ contient les 2 scripts python et les FONT bricolées pour avoir nos qq lettres accentuées (c'est perfectible mais utilisable, il y aurait encore du boulot pour que les accents soient similaire entre chaque taille, et de la bonne inclinaison)

Celuiquiestfor
Niveau 22
19 juin 2016 à 23:22:51

J'aimerais ajouter qu'avant de se lancer dans une fantrad, il faut bien étudier avant si la traduction elle-même vaut le coup d'être faite, notamment avec un rapport (demande)/(effort) suffisamment élevé (par exemple ça serait con de traduire Trails in the Sky en français si c'est pour qu'il y ait juste deux idiots qui trouvent le patch par hasard, qui essaient le jeu et finissent par le laisser tomber une fois arrivé dans les égouts de Rolent).

L'autre chose qu'il faut, c'est avoir la bonne mentalité. Je veux dire par là qu'il faut toujours avoir en tête de vouloir rendre justice au jeu et donc de fournir le meilleur boulot possible dans la traduction. Ne traduisez pas en vous disant que "c'est toujours mieux que rien, contentez-vous de ce qu'on vous propose même si on a fait ça à l'arrach' " ou encore "mais c'est qu'une fantrad, vous espériez quoi? du bon boulot?" (et si je m'aperçois que quelqu'un fait une trad de merde pour Trails in the Sky, je m'engage personnellement à le lui faire regretter).

Enfin, dans la même veine de vouloir produire le meilleur boulot possible et de rendre justice au jeu, il faut absolument traduire à partir de la langue source, à savoir ici le japonais. Vous avez déjà essayé de faire une photocopie d'une photocopie? Bah c'est moche. Et traduire à partir d'une traduction produit un phénomène analogue, et vous ne voulez pas de ça, vous voulez éviter ça. Et si vous connaissiez les déboires qu'ont rencontrés le staff d'XSeed lors de la traduction anglaise de Trails in the Sky en 2010-2011, vous ne voudriez pas l'utiliser comme base.

Donc. Si vous pouvez me fournir:
- des preuves qu'il y a une demande réelle pour une version française de Trails in the Sky (parce qu'à l'heure actuelle, je suis entièrement convaincu qu'elle est insuffisante voire nulle compte-tenu de l'effort à fournir)

- des gens motivés et perfectionnistes

- une équipe compétente (qui connaissent le jeu et la série au préalable), avec un BON traducteur JP>FR, et un ou des superviseurs qui connaissent la série sur le bout des doigts (au moins les jeux déjà parus en anglais, au mieux ceux en japonais) qui seront intransigeants sur la cohérence de la terminologie et de la cohérence avec les jeux suivants, en plus d'être des grammar nazi de la langue française

Bah vous aurez toute ma bénédiction, et je me proposerai volontiers pour la supervision, et m'auto-promouvrai comme chef de projet par la même occasion pour virer toute gangrène :hap:

Le meilleur sinon rien. J'aime trop cette série pour qu'une bande d'abrutis la pourrisse en faisant une fantrad FR de merde, donc à bon entendeur :hap:

Feunoir
Niveau 6
23 juin 2016 à 14:55:21

J'ai oublié de mentionner au moins 2 trucs dans mes posts au dessus :
- En fait je ne suis pas sur qu'une traduction de la version steam fonctionne sur la version Gog, et, si un patch sort pour ce jeu, il risque d'y avoir aussi de la casse si les fichiers changent (mais je suppose que la période patch est finie pour ce jeu)
Faudra faire un test assez tôt , trouver quelqu'un avec la version de l'autre plateforme et comparer les fichiers csv pour voir s'il y a des différences sur les offset des 2 premières colonnes et le texte.
Il y aura peut être possibilité de faire un script de conversion si c'est le cas et si c'est juste un problème d'offset un peu différent ou que le texte est assez similaire (genre les différences entre T0310 et T0311, qq lignes sont suffisamment problématiques pour empêcher de faire un copier coller ou un script de conversion efficace a 100%)
- Je n'ai pas testé le script text to sn dans le cas peu probable ou le texte traduit en français est plus court que l'anglais original. (si ce cas survient et que cela pose un problème faut tenter de mettre des espaces en fin de phrases pour grossir le texte français)

Sinon , mes scripts ne sont pas taillés pour une traduction du japonais, en particulier la seconde détection de texte est basée sur les caractères alphanumériques, faudrait probablement une adaptation du code dans ce cas mais j'ai pas la moindre idée de comment sont gaulés les fichiers japonais.

Trouver des traducteurs anglais français va être difficile, japonais français c'est surement une mission impossible.
Puis vu la vitalité du forum j'ai aussi un doute sur la pertinence d'une traduction.
Mais ceux qui ne peuvent y jouer à cause de l'anglais achèteraient ils le jeu tot ou tard si une traduction existé?, je ne saurais le dire, peut être à l'occasion de la sortie d'un autre épisode?

Sans avoir fait la moindre pub j'ai eu pas mal de download de la traduction de valkyria chronicle
Si j'ai fait une traduction de valkyria , aussi bien que je l'ai pu, c'est parce que j’étais fan (mon premier jeu PS3, achat d'une psp juste avant sa mort pour jouer au 2, achat sur pc du 1 et nouvelle partie) et que je trouvais dommage que certains (dont un de mes collègues) soient bloqués à cause de l'anglais.

Alors effectivement si j'avais pu j'aurais traduit du japonais (suffit de mettre les voix japonaises et on entend déjà des différences avec les sous titres anglais), mais c'était juste pas possible pour moi.
Un bon traducteur te dirais qu'il faut adapter le texte au public cible (c'est l'explication retenue de la différence entre japonais et anglais de valkyria). Bon étant fan d'anime je suis assez d'accord que cela devrait rester proche de l'original plutôt qu’être adapér,je préfère même avoir un senpai, sensei et des san chan... plutôt qu'un professeur, ainé,monsieur, mais la cela n'engage que moi (et je ne l'ai pas du tout appliqué par esprit de cohérence)

J'ai été un peu déçu de n'avoir pas d'aide au moins pour corriger mon texte (genre fautes et problème, mais je m'y attendais un peu en faisant le sujet (une version beta définitive)), j'ai eu qu'un retour sur les fautes quasi 1 ans après la sortie du patch trop tard pour que je remette le pied a l’étrier.

Pour moi être fan d'un jeu c'est que le plus grand nombre puisse aussi y jouer donc une traduction anglais-> français est bien mieux que pas de traduction du tout. Une equipe qui donne son maximum et qui reste a l’écoute pour corriger les problèmes remontés me suffirait, même si je vais probablement y jouer avant qu'il soit traduit vu comme j'ai été titillé par ce jeu pendant mes recherches car oui pour ce jeu je ne peux pas encore être fan car j'y ai même pas encore jouer (par contre le début je le connais par cœur avec mes tests ;)) )

Pour aider à traduire a plusieurs j'ai lorgné sur ce genre de solution https://framacalc.org/ , ou sur celle de microsoft ou google, mais le problème c'est qu'il était et est toujours hors de question de me heurter à un ayant droit enragé en le diffusant en pleine lumière (je doute d'avoir leur autorisation de faire comme cela si j'osais leur demander).
mais c'est surement une solution pour un petit comité de traducteurs.

Celuiquiestfor
Niveau 22
23 juin 2016 à 16:39:50

Pour moi être fan d'un jeu c'est que le plus grand nombre puisse aussi y jouer donc une traduction anglais-> français est bien mieux que pas de traduction du tout.

S'il s'agissait seulement de traduire le jeu depuis l'anglais je l'aurais fait volontiers. Mais c'est justement parce que je l'adore que j'ai des scrupules à fournir une fantrad. Il faut que ça soit BIEN fait.
Toi tu as l'air motivé, mais pour l'heure, t'as l'air de l'être beaucoup plus pour la science que pour le bien du jeu lui-même (enfin c'est normal, tu connais pas encore le jeu).

L'écueil à éviter à tout prix, c'est de faire une trad "juste pour l'expérience". Il y a eu une fantrad JP>EN de Nayuta no Kiseki (PSP) sortie l'année dernière, elle a été faite juste pour l'expérience et le résultat final est une catastrophe, et n'a été l'oeuvre que d'une seule personne. Le gars est peut-être un très bon hackeur, mais la trad il l'a fait au traducteur automatique. C'est pas un "scandale" non plus puisque le jeu en question mise beaucoup plus sur le gameplay que sur l'histoire ou ses personnages, mais sur le principe ça reste hyper-moisi.

Et en ce moment-même il y a une fantrad JP>EN de Zero no Kiseki en cours, et bien que cette fois on ait affaire à une équipe un peu plus compétente (enfin, à peine, ça reste le même groupe), encore une fois c'est juste pour l'expérience et la plupart des fans de longue date de la série ou même de Falcom en général qui ont voulu s'y impliquer (qui compris une personne en particulier qui est consultante pour XSeed sur le sujet) ce sont vus refusés d'y participer parce que le chef du projet n'en avait rien à cirer de la cohérence entre les différents jeux de la série et des terminologies employées au travers les traduction d'XSeed des précédents jeu de la série, à savoir Trails in the Sky, Trails in the Sky SC et Trails of Cold Steel (alors que l'importance de la cohérence de Zero no Kiseki avec ces jeux est capitale). Je connais un insider du projet, un fan de la série, qui a fini par l'abandonner à cause l'absence de volonté de rendre justice au jeu, et avec preuve à l'appui la traduction était tristement bancale.

Enfin voilà, faire une fantrad "juste pour l'expérience", ou qui n'aurait de mérite que dans le fait qu'elle puisse exister pour ceux qui ne connaissent pas la langue source, juste par pseudo-altruisme, c'est le meilleur moyen de faire du mauvais boulot, et si tu es fan, ce n'est pas quelque chose que tu veux laisser passer. Il faut que les gens impliqués dans la fantrad soit fans eux-mêmes. J'aurai été RAVI de pouvoir jouer à Nayuta no Kiseki en anglais. Je serais RAVI de jouer à Zero no Kiseki en anglais. Sauf que je sais que ces fantrad sont/seront merdique, et juste par principe je n'y toucherais pas même avec des gants.

Ainsi donc je t'invite à finir le jeu (voire les jeux, vu que cette série représente un tout, c'est une chronique, où chaque jeu s'inscrit dans la continuité du précédent), et si ça te plaît bah tant mieux, en espérant que tu te motives POUR le jeu :o))

Mais encore une fois, une fantrad de ce jeu n'a que très peu d'intérêt. Les seuls gens francophones que je connaisse qui s'intéressent aux jeux de niche japonais obscurs connaissent déjà l'anglais et n'ont aucune utilité de jouer à leurs jeux en français si une version anglaise est déjà dispo.

foubou
Niveau 2
27 février 2017 à 13:18:05

J'ai réussi à faire marcher les scripts, mais il y a des problèmes in-game à résoudre après traduction comme par exemple des plantages lorsque certains textes traduits doivent être affichés et je sais pas comment m'y prendre pour éviter ces plantages.

1
Sujet : Les outils et infos necessaires pour traduire ce jeu
   Retour haut de page
Consulter la version web de cette page