Supported engine · NScripter / ONScripter
NScripter (by Naoki Takahashi) is the closed-source Windows engine a huge slice of Japanese doujin and commercial visual novels were authored on; ONScripter is the open-source (GPL) cross-platform runtime — Linux, macOS, Android, ONScripter-EN, Ponscripter — that fan translators actually ship their translated builds on. RuneTranslate covers both. It reads the game's loose script — an nscript.dat where every byte is XOR'd against 0x84, or a plaintext 0.txt — decodes the Shift-JIS / CP932 dialogue, lists every translatable line, and on export re-encodes and re-obfuscates it (XOR 0x84) when the original .dat used it, writing a loose script the engine loads over any archive. It automatically applies the one-byte text marker so a translated English line isn't mis-parsed as a command (the classic NScripter trap), and it translates the Japanese baked into title screens, menus, and buttons via image-text OCR. This is a newly added, best-effort engine: most games ship the script loose (which is fully supported), a script packed only inside an .nsa / .sar archive isn't read yet, and SPB-compressed image art is still being hardened. Verify on a real game before redistributing.
Visual novels lean on a fixed cast and recurring terminology across thousands of lines, and machine translation will spell a heroine's name three different ways across three chapters. Glossary your characters, place names, and recurring terms up front so every line of dialogue and every menu renders them identically. Glossary 101 →
Point RuneTranslate at the game directory — the folder with the game's .exe (or an ONScripter binary), the script (nscript.dat or a loose 0.txt), and the .nsa / .sar archives. Engine detection recognises it automatically; your original folder is never modified.
RuneTranslate un-XORs the nscript.dat against 0x84 (or reads a loose 0.txt directly), decodes the Shift-JIS / CP932 text, and lists every translatable line in the editor grouped by file. Engine markup and command tokens are masked behind numeric placeholders so the provider never mangles them.
These games are dialogue-heavy and tone-sensitive, so an LLM (OpenAI GPT-4o / Anthropic Claude) or DeepL usually reads best; free Google Translate or a local model (Ollama / LM Studio) covers short menu strings, and you can point the OpenAI-compatible provider at OpenRouter or NanoGPT. An optional AI-refiner second pass tightens the literal phrasing.
Much of the NScripter UI is pre-rendered art, so the Japanese on title screens and buttons is pixels, not strings. Box each piece of text on an image, recognize it, translate it, and on export the translated image is written loose into the export so the engine loads it over the .nsa archive.
On export, RuneTranslate copies the game and writes the translated script back as a loose file — re-encoded to Shift-JIS / CP932 and re-obfuscated with XOR 0x84 if the original .dat used it, with the one-byte text marker applied — plus any translated images loose alongside it. Run the exported copy on NScripter or ONScripter and it plays in your language.