RuneTranslate теперь переводит визуальные новеллы NScripter / ONScripter
RuneTranslate теперь переводит визуальные новеллы NScripter и ONScripter на английский и более 30 языков — расшифровывая обфусцированный XOR-0x84 файл nscript.dat, обрабатывая текст Shift-JIS / CP932 и ловушку парсера со строками, начинающимися с латиницы, и переводя японский, впечатанный в заставки, меню и кнопки. Укажите на папку игры, автоопределение, перевод, экспорт готовой к запуску копии. Только что добавлено — сообщайте о любой игре, которая не запускается.
RuneTranslate теперь говорит на одном из старейших диалектов японских визуальных новелл: NScripter и его двойнике с открытым исходным кодом ONScripter. Если вам когда-нибудь хотелось перевести классическую додзин-новеллу — из тех, что поставляются папкой загадочных файлов .dat и скриптов Shift-JIS, — это как раз то семейство движков, которое исторически было мучительнее всего вскрывать вручную и которое инструменты машинного перевода обычно пропускают. Теперь RuneTranslate распознаёт его, читает текст скрипта и даже переводит японский, нарисованный на заставке и кнопках меню.
Это только что добавленный движок, поэтому прежде всего: если вы укажете RuneTranslate на игру NScripter / ONScripter, а она не загрузится или не определится, сообщите нам. Подробнее об этом в конце.
Что на самом деле такое NScripter и ONScripter
NScripter — это движок скриптинга визуальных новелл для Windows, написанный Наоки Такахаси и разрабатывавшийся примерно с 1999 по 2018 год (его последний выпуск, 3.10.102, датирован февралём 2018 года, хотя серьёзная работа над функциями резко замедлилась уже после начала 2000-х). Он никогда не был с открытым исходным кодом, но его лицензия разрешала бесплатное личное и коммерческое использование, и это — вкупе со встроенным упаковщиком архивов и мощным, славящимся своей низкоуровневостью языком скриптинга — сделало его одним из самых используемых движков VN в Японии на пике его популярности. Коммерческие студии вроде Nekonekosoft полагались на него почти исключительно, а додзин-сцена его обожала.
ONScripter — это отдельный, независимый проект: реализация рантайма NScripter с открытым исходным кодом (GPL), начатая в 2002 году программистом, известным как Ogapee. Он построен на SDL и стремится к совместимости с играми NScripter «из коробки», но работает там, где NScripter никогда не мог — Linux, macOS, BSD, Android и не только. Поскольку он открыт и поддаётся модификации, англоязычное сообщество локализаторов приняло его как де-факто движок для выпуска переведённых игр NScripter, и целая линейка форков добавила поддержку западных языков: однобайтовый патч символов Chendo 2004 года, ONScripter-EN (ONS-EN) и Ponscripter* от Haeleth для пропорциональных Unicode-шрифтов, последующая поддержка от Uncle Mion и возрождённая ветка insani для современных сборок.
Если коротко: NScripter — это исходный закрытый движок для Windows, на котором создавались игры; ONScripter (и ONS-EN / Ponscripter) — открытый кроссплатформенный рантайм, на котором фан-переводчики на деле запускают свои переведённые сборки. RuneTranslate работает со скриптами и ассетами игры, поэтому охватывает тайтлы из обоих лагерей.
Почему эти игры так трудно было переводить
По сравнению с современным движком вроде Ren'Py или Kirikiri, NScripter / ONScripter — это минное поле причуд своей эпохи. Четыре из них особенно превратили его в стену как для ручных переводчиков, так и для наивных инструментов машинного перевода:
- Кодировка Shift-JIS / CP932. Старые скрипты и файлы данных закодированы в Shift-JIS (вариант Microsoft, CP932) — старой японской двухбайтовой кодировке. Раскодируете неправильно — получите мозибакэ; беспечно перекодируете — некоторые старые рантаймы повреждают память и падают. Переводчик обязан правильно определять и без потерь прогонять CP932 туда-обратно — современные родные скрипты могут быть в UTF-8, но старый каталог — это CP932.
- Обфусцированный XOR-0x84 файл `nscript.dat`. Скомпилированный скрипт обычно лежит в
nscript.dat(илиpscript.datв Ponscripter), где каждый байт проксорен с константным байтом0x84. Это не шифрование — в документации прямо сказано, что оно не даёт никакой защиты, лишь ограждает от случайных спойлеров, — но и просто открыть его в текстовом редакторе нельзя. Нужно снять XOR, отредактировать текст Shift-JIS внутри и снова наложить XOR на выходе. (В качестве альтернативы игры могут поставлять скрипты в открытом виде0.txt/.uили скрипты внутри архивов.nsa/.sar.) - Текст, впечатанный в графику. Заставки, меню и кнопки часто представляют собой заранее отрисованные растровые изображения — NScripter даже требует, чтобы часть графики была в BMP, — так что японский на них это пиксели, а не строки. Экстрактор строк до них не дотянется.
- Тонкий момент: строки, начинающиеся с латиницы, заново разбираются как команды. Парсер NScripter начинает каждую строку в режиме команды. Исторически это было безопасно, потому что движок принимал только двухбайтовый японский, так что любая отображаемая строка однозначно была текстом. Стоит ввести однобайтовый английский — и строка, начинающаяся с латинской буквы, выглядит в точности как команда скрипта, и движок пытается её выполнить, ломая игру. Решение сообщества — зарезервированный маркер текста (обратный апостроф `
`в классическом ONScripter; Ponscripter позже перешёл на^`), который принудительно включает текстовый режим до конца строки. Наивная замена «найти и заменить» японского на английский порождает строки, которые движок ошибочно читает как команды.
Именно из-за этой последней ловушки ранние фанатские проекты (Gin'iro, Mizuiro) прибегали к двухбайтовым латинским символам — оригинальный NScripter вообще не принимал однобайтовый ввод — и именно поэтому обобщённый переводчик, не понимающий движок, попросту убивает скрипт.
Что RuneTranslate делает теперь
RuneTranslate относится к NScripter / ONScripter как к полноценному движку и решает обе половины задачи:
- Текст скрипта. Он читает скрипт игры — отдельный файл в открытом виде (
0.txtи подобные) илиnscript.dat, обфусцированный XOR0x84, — раскодирует диалоги Shift-JIS / CP932, выводит каждую переводимую строку в редакторе, а при экспорте записывает скрипт обратно в том виде, какой ожидает движок, снова накладывая обфускацию XOR0x84, если исходный.datеё использовал. Он также автоматически проставляет однобайтовый маркер текста, чтобы ваш переведённый английский не был прочитан как команда. (Скрипт, который лежит только внутри архива.nsa/.sar, без отдельной копии в корне игры, пока не читается — см. ограничения ниже.) - Текст, впечатанный в изображения. Японский на заставках, в меню и на кнопках — пиксели, а не строки — обрабатывается функцией перевода текста на изображениях в RuneTranslate: обведите слова рамкой, распознайте их, переведите своим провайдером и впечатайте результат обратно, чтобы игра загружала вместо оригинала вашу переведённую графику.
Японский → английский — это оптимальный сценарий — именно вокруг него строилась вся история фан-перевода этого движка, и на старых скриптах Shift-JIS нелатинский целевой язык ограничен тем, что способны отрисовать шрифты движка, — но вы можете выбрать любой из более чем 30 языков.
Что вам понадобится
- RuneTranslate для Windows — бесплатно, все движки и провайдеры разблокированы.
- Папка игры NScripter или ONScripter. Это каталог, содержащий
.exeигры (или бинарник ONScripter) вместе со скриптом и ассетами — обычноnscript.dat, отдельный0.txtи один или несколько архивов.nsa/.sar. - Целевой язык — английский, испанский, французский, немецкий, португальский, русский, китайский, итальянский, турецкий, вьетнамский и ещё более 20.
- Один провайдер перевода. Бесплатный Google Translate работает сразу; у DeepL есть бесплатный тариф; OpenAI, Anthropic, локальная модель (Ollama / LM Studio) и любой OpenAI-совместимый API — со своим ключом. Эти игры насыщены диалогами и чувствительны к тону, поэтому LLM (OpenAI / Anthropic) или DeepL обычно читаются лучше всего.
Шаг 1: Откройте папку игры
Запустите RuneTranslate, нажмите Новый проект и укажите на каталог игры NScripter / ONScripter. Определение движка выполняется автоматически — увидев nscript.dat, отдельный скрипт 0.txt или архивы .nsa движка, оно распознаёт проект как NScripter / ONScripter. Ваша исходная папка игры никогда не изменяется.
Шаг 2: Как читается скрипт
RuneTranslate читает скрипт, который игра поставляет в открытом виде в своём корне, и раскодирует его за вас:
- Обфусцированный `nscript.dat` — с него снимается XOR по
0x84и он читается как Shift-JIS, так что вы никогда не запускаете отдельный шагnsdec. - Отдельные скрипты в открытом виде (
0.txtи подобные) — читаются напрямую. - Архивированные изображения — извлекаются из архивов
.nsa/.sarигры для шага с текстом на изображениях ниже. (Сам скрипт читается из отдельных файлов в корне, указанных выше; скрипт, упакованный только внутри архива, пока не читается.)
Диалоги и отображаемый текст выводятся в редакторе, сгруппированные по файлам. Разметка движка и командные токены маскируются числовыми плейсхолдерами, прежде чем что-либо попадёт к провайдеру, а затем восстанавливаются на выходе — и однобайтовый маркер текста проставляется там, где нужно, чтобы движок не принял вашу переведённую английскую строку за команду.
Шаг 3: Переведите
Выберите провайдера и запустите. Для визуальной новеллы LLM (OpenAI / Anthropic) лучше всего передаёт голос и тон персонажей, DeepL быстр и аккуратен для повествования, а бесплатный Google Translate годится для коротких строк меню. Заранее составьте глоссарий из состава персонажей и повторяющихся терминов, чтобы имена отображались одинаково во всей игре — см. Глоссарий 101. По завершении необязательный проход ИИ-редактором заново перечитывает каждую строку в контексте и подтягивает те деревянные, буквальные формулировки, которые машинный перевод обычно оставляет.
Шаг 4: Переведите текст на изображениях
Поскольку значительная часть интерфейса NScripter — это заранее отрисованная графика, этот шаг здесь важнее, чем на большинстве движков. Откройте изображение заставки или меню в проекте, обведите рамкой каждый кусочек японского, распознайте его, переведите тем же провайдером, что и диалоги, и при экспорте RuneTranslate впечатает перевод обратно в изображение и запишет его отдельным файлом в экспортированную копию, чтобы движок загружал вашу переведённую графику поверх архивного оригинала. (Ваша исходная папка игры остаётся нетронутой; графика, сжатая SPB, и несколько экзотических вариантов изображений ещё дорабатываются — сообщайте обо всём, что выглядит не так.) Полное руководство: перевод текста на изображениях.
Шаг 5: Экспортируйте готовую к запуску копию
Нажмите Экспорт. RuneTranslate запишет переведённую копию игры — скрипт, перекодированный в Shift-JIS / CP932 и заново обфусцированный XOR 0x84, если исходный .dat его использовал, записанный как отдельный скрипт, который движок загружает поверх любой архивной копии, плюс любые переведённые изображения, записанные отдельными файлами рядом. Запустите игру — и она пойдёт на вашем целевом языке, запускаете ли вы её на оригинальном рантайме NScripter или на ONScripter / ONScripter-EN.
Известные ограничения
- Обфускация XOR-0x84 поддерживается, но игра, защищённая настоящим, нестандартным шифрованием (а не стандартной обфускацией), может не открыться.
- Скрипт, упакованный только внутри архива
.nsa/.sar, без отдельногоnscript.dat/0.txtв корне игры, пока не извлекается — большинство игр поставляют скрипт отдельным файлом, но некоторые нет. - Перевод текста на изображениях добирается до японского, нарисованного в меню, заголовках и на кнопках, но графика, сжатая SPB, и сильно стилизованные логотипы всё ещё могут потребовать ручной доводки.
- Точный движок может различаться от релиза к релизу — некоторые тайтлы, обычно ассоциируемые с NScripter (например, части линейки When They Cry), были созданы на NScripter и обычно запускаются через ONScripter, но отдельные переиздания для Steam / консолей иногда переделывались на другом движке. Всегда проверяйте на своей конкретной копии.
Он совсем новый — расскажите, что ломается
Этот движок — свежее дополнение, а не обкатанный в боях. У NScripter / ONScripter десятилетия вариаций, форков и особенностей отдельных студий, и мы видели далеко не все. Поэтому если вы укажете RuneTranslate на игру NScripter или ONScripter, а она не определится, не загрузится или экспортирует то, что рантайм отказывается открывать, пожалуйста, сообщите — название игры и то, как она упакована (отдельный 0.txt, nscript.dat, архивы .nsa), — это ровно то, что помогает нам укрепить поддержку быстрее всего.
Скачайте RuneTranslate, укажите на ту классическую VN, которую вы давно хотели прочитать, и попробуйте. Чтобы взглянуть на более современный движок VN, прочитайте затем руководство по Ren'Py.
Готовы попробовать RuneTranslate?
Бесплатный тариф открывает все движки и всех провайдеров перевода. Supporter ($3/mo) открывает полную скорость.
Скачать для Windows