RuneTranslate traduit désormais les visual novels NScripter / ONScripter
RuneTranslate traduit désormais les visual novels NScripter et ONScripter en anglais et plus de 30 langues — en décodant le nscript.dat obfusqué en XOR-0x84, en gérant le texte Shift-JIS / CP932 et le piège de l'analyseur avec les lignes commençant par du latin, et en traduisant le japonais incrusté dans les écrans-titres, les menus et les boutons. Pointez-le vers le dossier du jeu, détection automatique, traduction, export d'une copie prête à jouer. Tout juste ajouté — signalez tout jeu qui ne se charge pas.
RuneTranslate parle désormais l'un des plus anciens dialectes des visual novels japonais : NScripter et son jumeau open source ONScripter. Si vous avez toujours voulu traduire une VN doujin classique — du genre livré sous forme d'un dossier de cryptiques fichiers .dat et de scripts Shift-JIS — c'est la famille de moteurs qui a historiquement été la plus pénible à ouvrir à la main, et celle que les outils de traduction automatique ignorent le plus souvent. RuneTranslate la détecte désormais, lit le texte du script et traduit même le japonais peint sur l'écran-titre et les boutons de menu.
Il s'agit d'un moteur tout juste ajouté, alors avant toute chose : si vous pointez RuneTranslate vers un jeu NScripter / ONScripter et qu'il ne se charge pas ou n'est pas détecté, dites-le-nous. Plus de détails à la fin.
Ce que sont vraiment NScripter et ONScripter
NScripter est un moteur de scripting de visual novels pour Windows écrit par Naoki Takahashi, développé d'environ 1999 à 2018 (sa dernière version de maintenance, 3.10.102, date de février 2018, même si le vrai travail sur les fonctionnalités a fortement ralenti après le début des années 2000). Il n'a jamais été open source, mais sa licence autorisait un usage personnel et commercial libre de redevances, et cela — combiné à un empaqueteur d'archives intégré et à un langage de scripting puissant et réputé pour son bas niveau — en a fait l'un des moteurs de VN les plus utilisés au Japon à son apogée. Des studios commerciaux comme Nekonekosoft s'appuyaient dessus presque exclusivement, et la scène doujin l'adorait.
ONScripter est un projet distinct et indépendant : une réimplémentation open source (GPL) du runtime de NScripter, lancée en 2002 par un programmeur connu sous le nom d'Ogapee. Bâti sur SDL, il vise une compatibilité directe avec les jeux NScripter, mais il tourne là où NScripter n'a jamais pu — Linux, macOS, BSD, Android et plus encore. Parce qu'il est ouvert et modifiable, la communauté de localisation anglophone l'a adopté comme moteur de fait pour distribuer des jeux NScripter traduits, et une lignée de forks a ajouté la prise en charge des langues occidentales : le patch de caractères 1 octet de Chendo en 2004, ONScripter-EN (ONS-EN) et Ponscripter* de Haeleth pour les polices Unicode proportionnelles, la maintenance ultérieure d'Uncle Mion et la branche réactivée d'insani pour les builds modernes.
En bref : NScripter est le moteur Windows fermé d'origine sur lequel les jeux ont été créés ; ONScripter (et ONS-EN / Ponscripter) est le runtime ouvert et multiplateforme sur lequel les fan-traducteurs exécutent réellement leurs builds traduites. RuneTranslate travaille à partir des scripts et des assets du jeu, il couvre donc les titres des deux camps.
Pourquoi ces jeux ont été si difficiles à traduire
Comparé à un moteur moderne comme Ren'Py ou Kirikiri, NScripter / ONScripter est un champ de mines de bizarreries d'époque. Quatre en particulier en ont fait un mur aussi bien pour les traducteurs manuels que pour les outils de traduction automatique naïfs :
- Encodage Shift-JIS / CP932. Les scripts et fichiers de données hérités sont encodés en Shift-JIS (la variante de Microsoft, CP932), l'ancien encodage japonais sur deux octets. Décodez-le mal et vous obtenez du mojibake ; réencodez-le sans précaution et certains anciens runtimes corrompent la mémoire et plantent. Un traducteur doit détecter et faire l'aller-retour du CP932 correctement — les scripts natifs modernes peuvent être en UTF-8, mais le catalogue ancien est en CP932.
- Le `nscript.dat` obfusqué en XOR-0x84. Le script compilé se trouve généralement dans
nscript.dat(oupscript.datdans Ponscripter), où chaque octet est XOR'é contre l'octet constant0x84. Ce n'est pas du chiffrement — la documentation est explicite : cela n'offre aucune sécurité, juste une protection contre les spoilers accidentels — mais on ne peut pas non plus l'ouvrir tel quel dans un éditeur de texte. Il faut annuler le XOR, éditer le texte Shift-JIS à l'intérieur, puis réappliquer le XOR à la sortie. (Les jeux peuvent aussi livrer des scripts en texte brut0.txt/.u, ou des scripts à l'intérieur d'archives.nsa/.sar.) - Du texte incrusté dans les images. Les écrans-titres, menus et boutons sont souvent des bitmaps pré-rendus — NScripter exige même que certains visuels soient en BMP — donc le japonais qui s'y trouve, ce sont des pixels, pas des chaînes. Un extracteur de chaînes ne peut pas y toucher.
- La subtile : les lignes commençant par du latin sont réinterprétées comme des commandes. L'analyseur de NScripter démarre chaque ligne en mode commande. Historiquement, c'était sûr parce que le moteur n'acceptait que du japonais sur deux octets, donc toute ligne affichée était sans ambiguïté du texte. Dès que vous introduisez de l'anglais sur un octet, une ligne qui commence par une lettre latine ressemble exactement à une commande de script et le moteur tente de l'exécuter — cassant le jeu. Le correctif de la communauté est un marqueur de texte réservé (l'accent grave `
`dans l'ancien ONScripter ; Ponscripter est ensuite passé à^`) qui force le mode texte pour le reste de la ligne. Un rechercher-remplacer naïf du japonais par de l'anglais produit des lignes que le moteur lit à tort comme des commandes.
Ce dernier piège est précisément la raison pour laquelle les premiers projets de fans (Gin'iro, Mizuiro) ont eu recours à des caractères latins sur deux octets — le NScripter d'origine n'acceptait pas du tout la saisie sur un octet — et pourquoi un traducteur générique qui ne comprend pas le moteur ne fait que briser le script.
Ce que fait RuneTranslate désormais
RuneTranslate traite NScripter / ONScripter comme un moteur de premier plan et gère les deux moitiés du problème :
- Le texte du script. Il lit le script du jeu — un fichier en texte brut libre (
0.txtet consorts) ou unnscript.datobfusqué en XOR0x84— décode les dialogues Shift-JIS / CP932, liste chaque ligne traduisible dans l'éditeur et, à l'export, réécrit le script dans la forme attendue par le moteur, en réappliquant l'obfuscation XOR0x84lorsque le.datd'origine l'utilisait. Il applique aussi automatiquement le marqueur de texte sur un octet pour que votre anglais traduit ne soit pas lu à tort comme une commande. (Un script qui réside uniquement dans une archive.nsa/.sar, sans copie libre à la racine du jeu, n'est pas encore lu — voir les limitations ci-dessous.) - Le texte incrusté dans les images. Le japonais des écrans-titres, menus et boutons — des pixels, pas des chaînes — est pris en charge par la traduction de texte dans les images de RuneTranslate : encadrez les mots, reconnaissez-les, traduisez-les avec votre propre fournisseur, et réincrustez le résultat pour que le jeu charge votre visuel traduit à la place.
Le japonais → anglais est le point idéal — c'est ce autour de quoi toute l'histoire de la fan-traduction de ce moteur a tourné, et sur les scripts Shift-JIS hérités une langue cible non latine est limitée par ce que les polices du moteur peuvent afficher — mais vous pouvez viser n'importe laquelle de plus de 30 langues.
Ce qu'il vous faut
- RuneTranslate pour Windows — gratuit, tous les moteurs et fournisseurs débloqués.
- Un dossier de jeu NScripter ou ONScripter. C'est le répertoire contenant le
.exedu jeu (ou un binaire ONScripter) ainsi que son script et ses assets — typiquementnscript.dat, un0.txtlibre et une ou plusieurs archives.nsa/.sar. - Une langue cible — anglais, espagnol, français, allemand, portugais, russe, chinois, italien, turc, vietnamien, et plus de 20 autres.
- Un fournisseur de traduction. Le Google Translate gratuit fonctionne d'emblée ; DeepL a une offre gratuite ; OpenAI, Anthropic, un modèle local (Ollama / LM Studio) et toute API compatible OpenAI nécessitent votre propre clé. Ces jeux regorgent de dialogues et sont sensibles au ton, donc un LLM (OpenAI / Anthropic) ou DeepL rendent généralement le mieux.
Étape 1 : Ouvrez le dossier du jeu
Lancez RuneTranslate, cliquez sur Nouveau projet et pointez-le vers le répertoire du jeu NScripter / ONScripter. La détection du moteur s'exécute automatiquement — lorsqu'il voit un nscript.dat, un script 0.txt libre ou les archives .nsa du moteur, il reconnaît le projet comme NScripter / ONScripter. Votre dossier de jeu d'origine n'est jamais modifié.
Étape 2 : Comment le script est lu
RuneTranslate lit le script que le jeu livre en clair à sa racine et le décode pour vous :
- `nscript.dat` obfusqué — le XOR contre
0x84est annulé et il est lu en Shift-JIS, si bien que vous n'exécutez jamais d'étapensdecséparée. - Scripts libres en texte brut (
0.txtet consorts) — lus directement. - Images archivées — extraites des archives
.nsa/.sardu jeu pour l'étape de texte dans les images ci-dessous. (Le script lui-même est lu à partir des fichiers libres de la racine ci-dessus ; un script empaqueté uniquement dans une archive n'est pas encore lu.)
Les dialogues et le texte affiché sont listés dans l'éditeur, regroupés par fichier. Le balisage du moteur et les jetons de commande sont masqués derrière des marqueurs numériques avant que quoi que ce soit n'atteigne le fournisseur, puis restaurés à la sortie — et le marqueur de texte sur un octet est appliqué là où c'est nécessaire, pour que le moteur ne prenne pas votre ligne d'anglais traduit pour une commande.
Étape 3 : Traduisez
Choisissez un fournisseur et lancez. Pour une visual novel, un LLM (OpenAI / Anthropic) est le meilleur pour la voix et le ton des personnages, DeepL est rapide et net pour la narration, et le Google Translate gratuit convient aux courtes chaînes de menu. Constituez d'emblée un glossaire de votre distribution et des termes récurrents pour que les noms s'affichent de façon identique dans tout le jeu — voir Glossaire 101. Une fois terminé, une passe facultative avec le raffineur IA relit chaque ligne en contexte et resserre la formulation rigide et littérale que la traduction automatique a tendance à laisser.
Étape 4 : Traduisez le texte dans les images
Comme une grande partie de l'interface de NScripter est du visuel pré-rendu, cette étape compte davantage ici que sur la plupart des moteurs. Ouvrez une image de titre ou de menu dans le projet, tracez un cadre autour de chaque bout de japonais, reconnaissez-le, traduisez-le avec le même fournisseur que pour les dialogues, et à l'export RuneTranslate réincruste la traduction dans l'image et l'écrit en clair dans la copie exportée, pour que le moteur charge votre visuel traduit par-dessus l'original archivé. (Votre dossier de jeu d'origine reste intact ; les visuels compressés en SPB et quelques variantes d'image exotiques sont encore en cours de consolidation — signalez tout ce qui semble anormal.) Guide complet : traduction de texte dans les images.
Étape 5 : Exportez une copie prête à jouer
Cliquez sur Exporter. RuneTranslate écrit une copie traduite du jeu — le script réencodé en Shift-JIS / CP932 et réobfusqué en XOR 0x84 si le .dat d'origine l'utilisait, écrit comme un script libre que le moteur charge par-dessus toute copie archivée, plus les éventuelles images traduites écrites en clair à côté. Lancez le jeu et il se joue dans votre langue cible, que vous le démarriez sur le runtime NScripter d'origine ou sur ONScripter / ONScripter-EN.
Limitations connues
- L'obfuscation XOR-0x84 est prise en charge, mais un jeu protégé par un chiffrement authentique et personnalisé (plutôt que l'obfuscation standard) peut ne pas s'ouvrir.
- Un script empaqueté uniquement dans une archive
.nsa/.sar, sansnscript.dat/0.txtlibre à la racine du jeu, n'est pas encore extrait — la plupart des jeux livrent le script en clair, mais quelques-uns non. - La traduction de texte dans les images atteint le japonais peint dans les menus, les titres et les boutons, mais les visuels compressés en SPB et les logos très stylisés peuvent encore réclamer une retouche manuelle.
- Le moteur exact peut varier selon la sortie — certains titres couramment associés à NScripter (par exemple, des parties de la lignée When They Cry) ont été bâtis sur NScripter et sont couramment exécutés via ONScripter, mais certaines rééditions Steam / console ont parfois été refondues. Vérifiez toujours sur votre exemplaire précis.
C'est tout neuf — dites-nous ce qui casse
Ce moteur est un ajout récent, pas un moteur éprouvé. NScripter / ONScripter compte des décennies de variantes, de forks et de particularités propres à chaque studio, et nous ne les avons pas toutes vues. Alors si vous pointez RuneTranslate vers un jeu NScripter ou ONScripter et qu'il ne le détecte pas, ne se charge pas, ou exporte quelque chose que le runtime refuse d'ouvrir, merci de le signaler — le nom du jeu et sa façon d'être empaqueté (0.txt libre, nscript.dat, archives .nsa) est exactement ce qui nous aide à le consolider le plus vite.
Téléchargez RuneTranslate, pointez-le vers cette VN classique que vous voulez lire depuis longtemps, et essayez. Pour un aperçu d'un moteur de VN plus moderne, lisez ensuite le guide Ren'Py.
Prêt à essayer RuneTranslate ?
L'offre gratuite débloque tous les moteurs et tous les fournisseurs de traduction. Supporter (3 $/mois) débloque la vitesse maximale.
Télécharger pour Windows