RuneTranslate ahora traduce novelas visuales NScripter / ONScripter
RuneTranslate ahora traduce novelas visuales NScripter y ONScripter al inglés y más de 30 idiomas: decodifica el nscript.dat ofuscado con XOR-0x84, gestiona el texto Shift-JIS / CP932 y la trampa del analizador con líneas que empiezan en latín, y traduce el japonés incrustado en pantallas de título, menús y botones. Apúntalo a la carpeta del juego, autodetecta, traduce y exporta una copia lista para jugar. Recién añadido: informa de cualquier juego que no cargue.
RuneTranslate ahora habla uno de los dialectos más antiguos de las novelas visuales japonesas: NScripter y su gemelo de código abierto ONScripter. Si alguna vez quisiste traducir una VN doujin clásica —de esas que vienen como una carpeta de crípticos archivos .dat y scripts Shift-JIS— esta es la familia de motores que históricamente ha sido la más dolorosa de abrir a mano, y la que las herramientas de traducción automática suelen ignorar. RuneTranslate ahora la detecta, lee el texto del script e incluso traduce el japonés pintado en la pantalla de título y los botones de menú.
Este es un motor recién añadido, así que antes de nada: si apuntas RuneTranslate a un juego NScripter / ONScripter y no carga o no se detecta, dínoslo. Más sobre esto al final.
Qué son realmente NScripter y ONScripter
NScripter es un motor de scripting de novelas visuales para Windows escrito por Naoki Takahashi, desarrollado desde aproximadamente 1999 hasta 2018 (su última versión de mantenimiento, 3.10.102, está fechada en febrero de 2018, aunque el trabajo real en nuevas funciones se ralentizó drásticamente después de principios de los 2000). Nunca fue de código abierto, pero su licencia permitía el uso personal y comercial libre de regalías, y eso —combinado con un empaquetador de archivos integrado y un lenguaje de scripting potente y célebre por su bajo nivel— lo convirtió en uno de los motores de VN más usados en Japón durante su apogeo. Estudios comerciales como Nekonekosoft dependían de él casi en exclusiva, y la escena doujin lo adoraba.
ONScripter es un proyecto aparte e independiente: una reimplementación de código abierto (GPL) del runtime de NScripter, iniciada en 2002 por un programador conocido como Ogapee. Está construida sobre SDL y busca ser compatible sin cambios con los juegos de NScripter, pero funciona donde NScripter nunca pudo: Linux, macOS, BSD, Android y más. Al ser abierto y modificable, la comunidad de localización angloparlante lo adoptó como el motor de facto para distribuir juegos de NScripter traducidos, y un linaje de forks añadió soporte para idiomas occidentales: el parche de caracteres de 1 byte de Chendo de 2004, ONScripter-EN (ONS-EN) y Ponscripter* de Haeleth para fuentes Unicode proporcionales, el mantenimiento posterior de Uncle Mion y la rama reactivada de insani para builds modernas.
Así que, en resumen: NScripter es el motor cerrado original de Windows sobre el que se crearon los juegos; ONScripter (y ONS-EN / Ponscripter) es el runtime abierto y multiplataforma sobre el que los fantraductores realmente ejecutan sus builds traducidas. RuneTranslate trabaja a partir de los scripts y assets del juego, así que cubre títulos de cualquiera de los dos bandos.
Por qué estos juegos han sido tan difíciles de traducir
Comparado con un motor moderno como Ren'Py o Kirikiri, NScripter / ONScripter es un campo de minas de peculiaridades de su época. Cuatro en particular lo han convertido en un muro tanto para los traductores manuales como para las herramientas ingenuas de traducción automática:
- Codificación Shift-JIS / CP932. Los scripts y archivos de datos heredados están codificados en Shift-JIS (la variante de Microsoft, CP932), la vieja codificación japonesa de doble byte. Decodifícala mal y obtienes mojibake; recodifícala sin cuidado y algunos runtimes antiguos corrompen la memoria y se cierran. Un traductor tiene que detectar y hacer el ida y vuelta de CP932 correctamente: los scripts nativos modernos pueden ser UTF-8, pero el catálogo antiguo es CP932.
- El `nscript.dat` ofuscado con XOR-0x84. El script compilado suele residir en
nscript.dat(opscript.daten Ponscripter), donde cada byte está XOR'd contra el byte constante0x84. No es cifrado —la documentación deja claro que no aporta ninguna seguridad, solo protege contra spoilers accidentales— pero tampoco puedes simplemente abrirlo en un editor de texto. Tienes que deshacer el XOR, editar el texto Shift-JIS de dentro y volver a aplicar el XOR al salir. (Los juegos también pueden distribuir scripts en texto plano0.txt/.u, o scripts dentro de archivos.nsa/.sar.) - Texto incrustado en las imágenes. Las pantallas de título, menús y botones suelen ser mapas de bits prerrenderizados —NScripter incluso exige que algunos gráficos sean BMP— así que el japonés que aparece en ellos son píxeles, no cadenas. Un extractor de cadenas no puede tocarlos.
- La sutil: las líneas que empiezan en latín se reinterpretan como comandos. El analizador de NScripter inicia cada línea en modo comando. Históricamente eso era seguro porque el motor solo aceptaba japonés de dos bytes, así que cualquier línea mostrada era inequívocamente texto. En cuanto introduces inglés de un byte, una línea que comienza con una letra latina se parece exactamente a un comando de script y el motor intenta ejecutarla, rompiendo el juego. La solución de la comunidad es un marcador de texto reservado (la comilla invertida `
`en el ONScripter clásico; Ponscripter pasó luego a^`) que fuerza el modo texto para el resto de la línea. Un buscar-y-reemplazar ingenuo de japonés por inglés produce líneas que el motor malinterpreta como comandos.
Esa última trampa es exactamente la razón por la que los primeros proyectos de fans (Gin'iro, Mizuiro) recurrieron a caracteres latinos de dos bytes —el NScripter original no aceptaba entrada de un byte en absoluto— y por la que un traductor genérico que no entiende el motor simplemente inutiliza el script.
Qué hace RuneTranslate ahora
RuneTranslate trata NScripter / ONScripter como un motor de primera clase y gestiona las dos mitades del problema:
- El texto del script. Lee el script del juego —un archivo suelto de texto plano (
0.txty afines) o unnscript.datofuscado con XOR0x84— decodifica el diálogo Shift-JIS / CP932, lista cada línea traducible en el editor y, al exportar, reescribe el script en la forma que el motor espera, volviendo a aplicar la ofuscación XOR0x84cuando el.datoriginal la usaba. También aplica automáticamente el marcador de texto de un byte para que tu inglés traducido no se malinterprete como un comando. (Un script que reside solo dentro de un archivo.nsa/.sar, sin copia suelta en la raíz del juego, aún no se lee; consulta las limitaciones más abajo.) - El texto incrustado en las imágenes. El japonés de las pantallas de título, menús y botones —píxeles, no cadenas— lo gestiona la traducción de texto en imágenes de RuneTranslate: encuadra las palabras, reconócelas, tradúcelas con tu propio proveedor y vuelve a incrustar el resultado para que el juego cargue tu arte traducido en su lugar.
El japonés → inglés es el punto óptimo —es de lo que ha tratado toda la historia de fantraducción de este motor, y en los scripts Shift-JIS heredados un idioma de destino no latino está limitado por lo que las fuentes del motor puedan renderizar— pero puedes apuntar a cualquiera de más de 30 idiomas.
Qué necesitas
- RuneTranslate para Windows: gratis, con todos los motores y proveedores desbloqueados.
- Una carpeta de juego NScripter u ONScripter. Es el directorio que contiene el
.exedel juego (o un binario de ONScripter) junto con su script y sus assets: normalmentenscript.dat, un0.txtsuelto y uno o más archivos.nsa/.sar. - Un idioma de destino: inglés, español, francés, alemán, portugués, ruso, chino, italiano, turco, vietnamita y más de 20 más.
- Un proveedor de traducción. El Google Translate gratuito funciona de fábrica; DeepL tiene una capa gratuita; OpenAI, Anthropic, un modelo local (Ollama / LM Studio) y cualquier API compatible con OpenAI requieren tu propia clave. Estos juegos tienen mucho diálogo y son sensibles al tono, así que un LLM (OpenAI / Anthropic) o DeepL suelen leerse mejor.
Paso 1: Abre la carpeta del juego
Inicia RuneTranslate, haz clic en Nuevo proyecto y apúntalo al directorio del juego NScripter / ONScripter. La detección de motor se ejecuta automáticamente: cuando ve un nscript.dat, un script suelto 0.txt o los archivos .nsa del motor, reconoce el proyecto como NScripter / ONScripter. Tu carpeta de juego original nunca se modifica.
Paso 2: Cómo se lee el script
RuneTranslate lee el script que el juego trae suelto en su raíz y lo decodifica por ti:
- `nscript.dat` ofuscado: se le deshace el XOR contra
0x84y se lee como Shift-JIS, así nunca ejecutas un pasonsdecaparte. - Scripts sueltos en texto plano (
0.txty afines): se leen directamente. - Imágenes archivadas: se extraen de los archivos
.nsa/.sardel juego para el paso de texto en imágenes de más abajo. (El script en sí se lee de los archivos sueltos de la raíz de arriba; un script empaquetado solo dentro de un archivo aún no se lee.)
El diálogo y el texto mostrado se listan en el editor, agrupados por archivo. El marcado del motor y los tokens de comando se enmascaran tras marcadores numéricos antes de que nada llegue al proveedor, y luego se restauran a la salida; además, el marcador de texto de un byte se aplica donde hace falta, para que el motor no confunda tu línea de inglés traducido con un comando.
Paso 3: Traduce
Elige un proveedor y ejecútalo. Para una novela visual, un LLM (OpenAI / Anthropic) es lo mejor para la voz y el tono de los personajes, DeepL es rápido y limpio para la narración, y el Google Translate gratuito vale para cadenas cortas de menú. Prepara un glosario con tu reparto y los términos recurrentes de antemano para que los nombres se rendericen de forma idéntica en todo el juego; consulta Glosario 101. Cuando termines, una pasada opcional con el refinador de IA relee cada línea en contexto y pule el fraseo rígido y literal que la traducción automática suele dejar.
Paso 4: Traduce el texto de las imágenes
Como gran parte de la interfaz de NScripter es arte prerrenderizado, este paso importa más aquí que en la mayoría de motores. Abre una imagen de título o de menú en el proyecto, arrastra un recuadro alrededor de cada fragmento de japonés, reconócelo, tradúcelo con el mismo proveedor que usas para el diálogo y, al exportar, RuneTranslate vuelve a incrustar la traducción en la imagen y la escribe suelta en la copia exportada, para que el motor cargue tu arte traducido por encima del original archivado. (Tu carpeta de juego original queda intacta; el arte comprimido con SPB y algunas variantes de imagen exóticas todavía se están reforzando: informa de cualquier cosa que se vea rara.) Guía completa: traducción de texto en imágenes.
Paso 5: Exporta una copia lista para jugar
Haz clic en Exportar. RuneTranslate escribe una copia traducida del juego —el script recodificado a Shift-JIS / CP932 y vuelto a ofuscar con XOR 0x84 si el .dat original lo usaba, escrito como un script suelto que el motor carga por encima de cualquier copia archivada, más las imágenes traducidas escritas sueltas junto a él. Ejecuta el juego y se reproduce en tu idioma de destino, tanto si lo lanzas sobre el runtime original de NScripter como sobre ONScripter / ONScripter-EN.
Limitaciones conocidas
- La ofuscación XOR-0x84 está cubierta, pero un juego protegido con cifrado genuino y personalizado (en lugar de la ofuscación estándar) puede que no se abra.
- Un script empaquetado solo dentro de un archivo
.nsa/.sar, sinnscript.dat/0.txtsuelto en la raíz del juego, aún no se extrae: la mayoría de los juegos traen el script suelto, pero algunos no. - La traducción de texto en imágenes alcanza el japonés pintado en menús, títulos y botones, pero el arte comprimido con SPB y los logos muy estilizados aún pueden necesitar un retoque manual.
- El motor exacto puede variar según la edición: algunos títulos comúnmente asociados con NScripter (por ejemplo, partes de la saga When They Cry) se construyeron sobre NScripter y suelen ejecutarse vía ONScripter, pero ciertos relanzamientos de Steam / consola se rediseñaron a veces con otro motor. Verifica siempre en tu copia concreta.
Es totalmente nuevo: dinos qué se rompe
Este motor es una incorporación reciente, no uno probado en mil batallas. NScripter / ONScripter tiene décadas de variantes, forks y peculiaridades por estudio, y no las hemos visto todas. Así que si apuntas RuneTranslate a un juego NScripter u ONScripter y no lo detecta, no carga o exporta algo que el runtime no quiere abrir, infórmanos: el nombre del juego y cómo está empaquetado (0.txt suelto, nscript.dat, archivos .nsa) es justo lo que nos ayuda a reforzarlo más rápido.
Descarga RuneTranslate, apúntalo a esa VN clásica que llevas tiempo queriendo leer y pruébalo. Para echar un vistazo a un motor de VN más moderno, lee después la guía de Ren'Py.
¿Listo para probar RuneTranslate?
El plan gratuito desbloquea todos los motores y todos los proveedores de traducción. Supporter ($3/mo) desbloquea la velocidad completa.
Descargar para Windows