Ce jeu fait partie des jeux d'aventure graphique réalisés par Legends Entertainment :
Companions of Xanth (1993)
Death Gate (1994)
Superhero League of Hoboken (1994)
Shannara (1995)
Mission Critical (1995)
Callahan's Crosstime Saloon((1997)
Ces jeux sont peu ou prou réalisés avec le même moteur à quelques variantes près.
J'envisageais de traduire Mission Critical après avoir trouvé sur Oldgame.ru des outils permettant d'extraire les textes des fichiers dat contenant les dialogues et les noms d'objets.
J'en avais parlé dans Liste des jeux à traduire.
Par contre, il n'y avait rien pour les réinsérer.
Plus important, une certaine partie des textes ainsi que les verbes d'action se trouve dans les exe.
Dernièrement, j'ai vu que Muermo sur Abandocios avait engagé la traduction de Callahan's Crosstime Saloon le plus récent de ces jeux.
Je lui ai demandé comment il avait procédé et, sans surprise, il m'a répondu qu'il réalisait cela à l'aide d'outils créés avec ChatGPT.
Comme je lui ai dit que j'envisageais de traduire Mission Critical, il a regardé de son côté en partant de son projet ce qu'il était possible de faire.
Sans doute envisage-t-il de le traduire lui aussi.
Si certains des travaux qu'il a réalisés fonctionnent avec Mission Critical, ce jeu a malgré tout des spécificités à traiter, dont la gestion des caractères accentués.
En effet, Callahan's Crosstime Saloon semble être le seul jeu de cette série qui avait des polices FNT avec des caractères accentués.
En tout cas, ce que je peux dire, c'est que l'outil d'extraction de Muermo fonctionne pour extraire les textes des dialogues de Death Gate, tout comme l'outil que j'avais trouvé sur oldgame.ru, bien que le texte soit structuré un peu différemment.
J'ai regardé pour une éventuelle réinsertion après avoir traduit quelques lignes, et comme je le supposais, il y a le même problème que pour Mission Critical avec les caractères accentués.
J'ai demandé à Claude, l'IA d'Anthropic de me dire ce qui n'allait pas et, outre mes propres erreurs car je n'avais pas traduit correctement dans le csv, voici la réponse :
Les accents ne passent pas. L’arbre de Huffman du jeu ne contient que de l’ASCII, car les octets à partir de 0x80 sont réservés au dictionnaire. Aucun é, è, à, ê, ù, ’ ni … ne peut donc être écrit tel quel. Par défaut, le script les remplace par leur équivalent ASCII (é devient e, ’ devient ‘, … devient ...) et affiche le décompte des remplacements. Le résultat donne par exemple « Bon sang ! Mais qui etes-vous donc ? ». Avec --accents=error, il s’arrête au premier caractère non supporté. Pour de vrais accents, il faudrait savoir quelle police le jeu utilise, puis étendre le dictionnaire ou l’arbre
Point d’étape : les polices 1 bit sont lues et réécrites à l’identique. Mon générateur d’accents fonctionne sur 4 d’entre elles. Pour les deux petites polices 5 px (DGATE010 et 013), il n’y a pas de place au-dessus des minuscules : j’adapte le dessin des accents. Ensuite je reconstruis l’arbre de Huffman dans le script de réinsertion et je vérifie le rendu.
J’ai les accents français sur le papier : une version du script de réinsertion qui les encode et 8 polices patchées. Rien n’a été testé dans le jeu, car je n’ai pas l’exécutable. Les 8 polices patchées et le DAT de test sont dans l’archive ; l’image jointe montre le rendu des accents.
Ce que contiennent vos polices. Elles ne couvrent que les caractères 0x21 à 0x7F, donc aucun accent. Étendre le dictionnaire ne sert à rien : ses jetons ne font que produire des octets que la police doit pouvoir afficher.
La solution que j’ai retenue.
- Emplacements réutilisés : le texte anglais n’utilise jamais # & * + = @ ^ \ { | } ~, qui n'ont même pas de code dans l'arbre de Huffman. J'ai remplacé leurs glyphes par é è ê à â ç ù û î ô ë ï dans les polices (table dans fr_charmap.py`).
- Arbre de Huffman étendu : le script reconstruit l’arbre avec ces 12 octets et recode tous les enregistrements. L’arbre passe de 214 à 226 symboles, avec la même profondeur maximale de 18.
- Vérification : chaque chaîne est relue après encodage. Les 5 444 enregistrements non traduits se redécodent à l’identique, et les 6 premiers contiennent bien les accents.
- Polices : patch_fonts.py dessine les accents dans les 8 polices 1 bit. Le rendu est correct sur les 8, y compris les deux petites polices 5 px, où l’accent tient sur un seul pixel.
Limites à connaître.
- Polices 8 bits : DGATE015, 016 et 017 sont des polices couleur dont je n’ai pas déchiffré le format ; je les ai laissées intactes. Si l’une d’elles sert aux dialogues, les accents y seront faux.
- Majuscules et ligatures : les majuscules accentuées perdent leur accent (É devient E), faute de place au-dessus. œ devient oe, « » deviennent “, ’ devient ‘ et … devient ...
- Caractères réservés : un # & * + = @ ^ \ { | } ~` tapé tel quel dans le CSV déclenche une erreur, puisque ces octets affichent désormais des accents.
- Extraction : si vous réextrayez le DAT avec extraer_DGATESTR.py, les accents apparaissent sous forme de ces symboles (par exemple } pour ê), pas de lettres accentuées.
- Risque moteur : l’arbre fait désormais 12 mots de plus. Je n’ai pas pu vérifier que le moteur du jeu l’accepte.

Reste à voir si l'exe accepte tout ça.
Il y a également à gérer l'extraction et la réinsertion des textes dans le fichier Object.dat et surtout les textes dans l'exe.
Voilà pour l'instant où nous en sommes pour une éventuelle traduction de Death Gate et de Mission Critical.
Euh... j'ai pas dit que j'irai plus loin que ça pour le moment...





Commentaire