O RuneTranslate agora traduz visual novels NScripter / ONScripter
O RuneTranslate agora traduz visual novels NScripter e ONScripter para o inglês e mais de 30 idiomas — decodificando o nscript.dat ofuscado com XOR-0x84, lidando com o texto Shift-JIS / CP932 e a armadilha do parser com linhas iniciadas em latim, e traduzindo o japonês estampado em telas de título, menus e botões. Aponte para a pasta do jogo, detecte automaticamente, traduza e exporte uma cópia pronta para rodar. Recém-adicionado — relate qualquer jogo que não carregar.
O RuneTranslate agora fala um dos dialetos mais antigos das visual novels japonesas: NScripter e seu gêmeo de código aberto ONScripter. Se você já quis traduzir uma VN doujin clássica — daquelas que vêm como uma pasta de crípticos arquivos .dat e scripts Shift-JIS — esta é a família de engines que historicamente foi a mais dolorosa de abrir na mão, e a que as ferramentas de tradução automática costumam pular. O RuneTranslate agora a detecta, lê o texto do script e até traduz o japonês pintado na tela de título e nos botões de menu.
Esta é uma engine recém-adicionada, então antes de tudo: se você apontar o RuneTranslate para um jogo NScripter / ONScripter e ele não carregar ou não for detectado, avise-nos. Mais sobre isso no final.
O que NScripter e ONScripter realmente são
O NScripter é uma engine de scripting de visual novels para Windows escrita por Naoki Takahashi, desenvolvida de aproximadamente 1999 a 2018 (sua última versão de manutenção, 3.10.102, é de fevereiro de 2018, embora o trabalho real em novos recursos tenha desacelerado drasticamente depois do início dos anos 2000). Nunca foi de código aberto, mas sua licença permitia uso pessoal e comercial livre de royalties, e isso — combinado com um empacotador de arquivos embutido e uma linguagem de scripting poderosa e famosamente de baixo nível — fez dela uma das engines de VN mais usadas no Japão em seu auge. Estúdios comerciais como a Nekonekosoft dependiam dela quase exclusivamente, e a cena doujin a adorava.
O ONScripter é um projeto separado e independente: uma reimplementação de código aberto (GPL) do runtime do NScripter, iniciada em 2002 por um programador conhecido como Ogapee. É construído sobre o SDL e busca ser compatível sem alterações com os jogos do NScripter, mas roda onde o NScripter nunca conseguiu — Linux, macOS, BSD, Android e mais. Por ser aberto e modificável, a comunidade de localização de língua inglesa o adotou como a engine de fato para distribuir jogos NScripter traduzidos, e uma linhagem de forks acrescentou suporte a idiomas ocidentais: o patch de caractere de 1 byte do Chendo de 2004, o ONScripter-EN (ONS-EN) e o Ponscripter* do Haeleth para fontes Unicode proporcionais, a manutenção posterior do Uncle Mion e o ramo reativado da insani para builds modernas.
Então, em resumo: o NScripter é a engine fechada original de Windows na qual os jogos foram criados; o ONScripter (e ONS-EN / Ponscripter) é o runtime aberto e multiplataforma no qual os fãs-tradutores de fato rodam suas builds traduzidas. O RuneTranslate trabalha a partir dos scripts e assets do jogo, então cobre títulos de qualquer um dos lados.
Por que esses jogos têm sido tão difíceis de traduzir
Comparado a uma engine moderna como Ren'Py ou Kirikiri, o NScripter / ONScripter é um campo minado de peculiaridades daquela época. Quatro em particular fizeram dele uma barreira tanto para tradutores manuais quanto para ferramentas ingênuas de tradução automática:
- Codificação Shift-JIS / CP932. Scripts e arquivos de dados legados são codificados em Shift-JIS (a variante da Microsoft, CP932), a antiga codificação japonesa de dois bytes. Decodifique errado e você obtém mojibake; recodifique sem cuidado e alguns runtimes antigos corrompem a memória e travam. Um tradutor precisa detectar e fazer o ida-e-volta do CP932 corretamente — scripts nativos modernos podem ser UTF-8, mas o catálogo antigo é CP932.
- O `nscript.dat` ofuscado com XOR-0x84. O script compilado geralmente fica em
nscript.dat(oupscript.datno Ponscripter), onde cada byte passa por XOR contra o byte constante0x84. Não é criptografia — a documentação é explícita ao dizer que não oferece nenhuma segurança, apenas uma proteção contra spoilers acidentais — mas também não dá para simplesmente abri-lo num editor de texto. Você precisa desfazer o XOR, editar o texto Shift-JIS de dentro e reaplicar o XOR na saída. (Alternativamente, os jogos podem distribuir scripts em texto puro0.txt/.u, ou scripts dentro de arquivos.nsa/.sar.) - Texto embutido na arte das imagens. Telas de título, menus e botões são frequentemente bitmaps pré-renderizados — o NScripter até exige que parte da arte seja BMP — então o japonês neles é pixel, não string. Um extrator de strings não consegue tocá-los.
- A sutil: linhas iniciadas em latim são reinterpretadas como comandos. O parser do NScripter começa cada linha no modo comando. Historicamente isso era seguro porque a engine só aceitava japonês de dois bytes, então qualquer linha exibida era, sem ambiguidade, texto. No instante em que você introduz inglês de um byte, uma linha que começa com uma letra latina parece exatamente um comando de script e a engine tenta executá-la — quebrando o jogo. A correção da comunidade é um marcador de texto reservado (a crase `
`no ONScripter clássico; o Ponscripter depois mudou para^`) que força o modo texto no restante da linha. Um buscar-e-substituir ingênuo de japonês por inglês produz linhas que a engine lê errado como comandos.
Essa última armadilha é exatamente o motivo pelo qual os primeiros projetos de fãs (Gin'iro, Mizuiro) recorreram a caracteres latinos de dois bytes — o NScripter puro não aceitava entrada de um byte de jeito nenhum — e por que um tradutor genérico que não entende a engine simplesmente inutiliza o script.
O que o RuneTranslate faz agora
O RuneTranslate trata o NScripter / ONScripter como uma engine de primeira classe e lida com as duas metades do problema:
- O texto do script. Ele lê o script do jogo — um arquivo solto em texto puro (
0.txte afins) ou umnscript.datofuscado com XOR0x84— decodifica o diálogo Shift-JIS / CP932, lista cada linha traduzível no editor e, na exportação, reescreve o script no formato que a engine espera, reaplicando a ofuscação XOR0x84quando o.datoriginal a usava. Ele também aplica o marcador de texto de um byte automaticamente para que seu inglês traduzido não seja lido errado como comando. (Um script que existe apenas dentro de um arquivo.nsa/.sar, sem cópia solta na raiz do jogo, ainda não é lido — veja as limitações abaixo.) - O texto embutido nas imagens. O japonês nas telas de título, menus e botões — pixels, não strings — é tratado pela tradução de texto em imagens do RuneTranslate: enquadre as palavras, reconheça-as, traduza-as com seu próprio provedor e reembuta o resultado para que o jogo carregue sua arte traduzida no lugar.
Japonês → inglês é o ponto ideal — é sobre isso que gira toda a história de fã-tradução dessa engine, e nos scripts Shift-JIS legados um idioma de destino não latino fica limitado pelo que as fontes da engine conseguem renderizar — mas você pode mirar em qualquer um de mais de 30 idiomas.
O que você precisa
- RuneTranslate para Windows — grátis, com todas as engines e provedores liberados.
- Uma pasta de jogo NScripter ou ONScripter. É o diretório que contém o
.exedo jogo (ou um binário do ONScripter) mais o script e os assets — tipicamentenscript.dat, um0.txtsolto e um ou mais arquivos.nsa/.sar. - Um idioma de destino — inglês, espanhol, francês, alemão, português, russo, chinês, italiano, turco, vietnamita e mais de 20 outros.
- Um provedor de tradução. O Google Translate gratuito funciona de imediato; o DeepL tem uma camada grátis; OpenAI, Anthropic, um modelo local (Ollama / LM Studio) e qualquer API compatível com OpenAI exigem sua própria chave. Esses jogos são cheios de diálogo e sensíveis ao tom, então um LLM (OpenAI / Anthropic) ou o DeepL normalmente ficam melhores.
Passo 1: Abra a pasta do jogo
Abra o RuneTranslate, clique em Novo projeto e aponte para o diretório do jogo NScripter / ONScripter. A detecção de engine roda automaticamente — quando vê um nscript.dat, um script solto 0.txt ou os arquivos .nsa da engine, reconhece o projeto como NScripter / ONScripter. Sua pasta de jogo original nunca é modificada.
Passo 2: Como o script é lido
O RuneTranslate lê o script que o jogo traz solto na raiz e o decodifica para você:
- `nscript.dat` ofuscado — tem o XOR contra
0x84desfeito e é lido como Shift-JIS, então você nunca roda um passonsdecseparado. - Scripts soltos em texto puro (
0.txte afins) — lidos diretamente. - Imagens arquivadas — extraídas dos arquivos
.nsa/.sardo jogo para o passo de texto em imagens abaixo. (O script em si é lido dos arquivos soltos da raiz acima; um script empacotado apenas dentro de um arquivo ainda não é lido.)
O diálogo e o texto exibido são listados no editor, agrupados por arquivo. A marcação da engine e os tokens de comando são mascarados atrás de marcadores numéricos antes de qualquer coisa chegar ao provedor, e depois restaurados na saída — e o marcador de texto de um byte é aplicado onde é necessário, para que a engine não confunda sua linha de inglês traduzido com um comando.
Passo 3: Traduza
Escolha um provedor e rode. Para uma visual novel, um LLM (OpenAI / Anthropic) é o melhor para a voz e o tom dos personagens, o DeepL é rápido e limpo para a narração, e o Google Translate gratuito serve para strings curtas de menu. Monte um glossário com seu elenco e os termos recorrentes de antemão para que os nomes sejam renderizados de forma idêntica no jogo inteiro — veja o Glossário 101. Quando terminar, uma passagem opcional com o refinador de IA relê cada linha no contexto e aperta o fraseado rígido e literal que a tradução automática costuma deixar para trás.
Passo 4: Traduza o texto das imagens
Como boa parte da interface do NScripter é arte pré-renderizada, este passo importa mais aqui do que na maioria das engines. Abra uma imagem de título ou de menu no projeto, arraste um retângulo em volta de cada trecho de japonês, reconheça-o, traduza-o com o mesmo provedor que você usa para o diálogo e, na exportação, o RuneTranslate reembute a tradução na imagem e a grava solta na cópia exportada, para que a engine carregue sua arte traduzida por cima do original arquivado. (Sua pasta de jogo original fica intacta; a arte comprimida com SPB e algumas variantes de imagem exóticas ainda estão sendo reforçadas — relate qualquer coisa que pareça errada.) Guia completo: tradução de texto em imagens.
Passo 5: Exporte uma cópia pronta para rodar
Clique em Exportar. O RuneTranslate grava uma cópia traduzida do jogo — o script recodificado para Shift-JIS / CP932 e reofuscado com XOR 0x84 se o .dat original o usava, gravado como um script solto que a engine carrega por cima de qualquer cópia arquivada, mais quaisquer imagens traduzidas gravadas soltas ao lado dele. Rode o jogo e ele roda no seu idioma de destino, seja você iniciando-o no runtime original do NScripter ou no ONScripter / ONScripter-EN.
Limitações conhecidas
- A ofuscação XOR-0x84 é tratada, mas um jogo protegido com criptografia genuína e personalizada (em vez da ofuscação padrão) pode não abrir.
- Um script empacotado apenas dentro de um arquivo
.nsa/.sar, semnscript.dat/0.txtsolto na raiz do jogo, ainda não é extraído — a maioria dos jogos traz o script solto, mas alguns não. - A tradução de texto em imagens alcança o japonês pintado em menus, títulos e botões, mas a arte comprimida com SPB e logos muito estilizados ainda podem pedir um retoque manual.
- A engine exata pode variar de acordo com o lançamento — alguns títulos comumente associados ao NScripter (por exemplo, partes da linhagem When They Cry) foram construídos sobre o NScripter e costumam ser rodados via ONScripter, mas certos relançamentos de Steam / console foram às vezes reprojetados. Sempre verifique na sua cópia específica.
É novinho em folha — conte-nos o que quebrar
Esta engine é uma adição recente, não uma testada em batalha. O NScripter / ONScripter tem décadas de variantes, forks e peculiaridades por estúdio, e não vimos todas. Então, se você apontar o RuneTranslate para um jogo NScripter ou ONScripter e ele não detectar, não carregar ou exportar algo que o runtime não abre, por favor relate — o nome do jogo e como ele está empacotado (0.txt solto, nscript.dat, arquivos .nsa) é exatamente o que nos ajuda a reforçá-lo mais rápido.
Baixe o RuneTranslate, aponte para aquela VN clássica que você vem querendo ler e experimente. Para dar uma olhada em uma engine de VN mais moderna, leia em seguida o guia do Ren'Py.
Pronto para experimentar o RuneTranslate?
O plano gratuito libera todos os motores + todos os provedores de tradução. O plano Supporter ($3/mo) libera velocidade total.
Baixar para Windows