Как сделать перевод визуальной новеллы

Добавил пользователь Skiper
Обновлено: 04.10.2024

Разбираемся, как перевести новеллу на английский (или другой) язык. Смотрим на нюансы переводи и производим .

В данном туторе мы рассмотрим, как генерируются скрипты для перевода наших проектов Ссылка для поддержки проекта .

Привет. В данном видео уроке мы рассмотрим: как переводить игры на движке Ren'Py. Также, я кратко объясню, как .

Ролик про немного специфичный жанр компьютерный игор, который отлично подойдет тем, кто любит читать длинные .

Как загрузить новеллу из РенПай в Google Play? Все шаги по загрузке игры в Гугл Плей. Поддержать проект .

Предметно рассказываю, куда ушли деньги и сколько, а также некоторые моменты, которые нужно продумать до того, как .

Принимай участие в джеме визуальных новелл от Индикатора! Он пройдёт 26-28 февраля в онлайн формате на нашем .

Как сделать визуальную новеллу? Я НАУЧУ, ХАХА. Я потратила очень много времени на эту, поэтому буду рада, если ты .

Вы начинающая студия, которая хочет переводить аниме-продукты? В этом ролике я кратко расскажу кто чем должен .

Взять, к примеру, визуальные новеллы. В них ведь практически нет геймплея, и они больше похожи на интерактивную .

Не очень знакомы с визуальными новеллами? Ищете новые жанры игр, с которыми можно будет ознакомиться на .

. новеллы, сделать фон для визуальной новеллы, как рисовать фон, как рисовать фоны, как сделать визуальную новеллу, .

Что такое визуальные новеллы и с чего начать? Спасибо за просмотр. Подпишись. Поставь лайк и будет тебе счастье.

Многие не знают английского языка, и у них возникают трудности при переводе иностранного текста на русский язык.

В этом видео я попробую привлечь чуть больше людей к такому явлению как "Визуальные новеллы". Приятного просмотра.

Это не видео урок, а просто ускоренная демонстрация того как я рисую персонаж для своей будущей визуальной новеллы.

Описание❤▱▱▱▱▱▱▱▱ Как сделать визуальную новеллу. Краткий курс. ▱▱▱▱▱▱▱▱ ❤Музыка в конце видео❤▱▱▱▱▱▱▱▱ .


Любительский перевод визуальных новелл, если сравнивать с переводами других игр, имеет ряд особенностей и подразумевает работу с большим количеством текста. Пожалуй, подавляющее большинство всех визуальных новелл было выпущено на японском языке, лишь немногие были переведены на английский(официально или любителями) и еще меньше было переведено на другие языки.

Поэтому, при работе с переводом приходится сталкиваться с японскими движками, многие из которых оказываются не слишком дружелюбными к локализаторам. Из-за этого, довольно быстро приходит осознание, что наличие переводческих навыков, знания языка, большого энтузиазма и свободного времени, вовсе не означает, что переведенная версия игры скоро увидит свет.

Очень приближенно, процесс перевода любой игры(не только визуальных новелл), подразумевает:

  • Распаковку игровых ресурсов(если они не находятся в открытом доступе)
  • Перевод необходимых частей
  • Обратная запаковка перевода
  • Распаковка игровых ресурсов
  • Перевод текстовой части игры(игрового сценария)
  • Перевод графической части игры
  • Обратная запаковка перевода
  • Переделка движка, чтобы заставить его работать с переведенным контентом

В далеком 2013 году(а возможно и раньше) я задумал перевести с японского визуальную новеллу Bishoujo Mangekyou -Norowareshi Densetsu no Shoujo- (美少女万華鏡 -呪われし伝説の少女-). Опыт перевода игр у меня уже был, но раньше приходилось переводить только новеллы на относительно простых и известных движках вроде Kirikiri.

Здесь же нашей команде переводчиков предстояло вскрыть движок этой новеллы, еще до того, как добраться до собственно самого текста.

Начнем с описания .exe файла, где упомянуты слова QLIE и IMOSURUME. В самом файле встречается строка FastMM Borland Edition 2004, 2005 Pierre le Riche, значит движок, скорее всего, написан на Delphi.



Но нигде в свободном доступе нет ни официальных инструментов для работы с движком, ни документации к нему, что ожидаемо.

Поэтому разбираться с игрой приходится самостоятельно, опираясь на неофициальные утилиты. Для начала стоит найти все части игры, которые нужно будет переводить.

Игровые архивы находятся в файлах data0.pack, data1.pack и data7.pack в подпапке \GameData. Заставки лежат в папке \GameData\Movie, но их пока можно не трогать.


В hex-редакторе видно, что никаких узнаваемых заголовков у игровых архивов .pack нет, зато в конце файла есть кусок, похожий на оглавление и метка FilePackVer3.0


К счастью, для данного формата уже есть распаковщик и даже не один. Мы использовали консольный exfp3_v3 от asmodean.

Распаковка не так проста, как может показаться. Поскольку движок поддерживает несколько архивных форматов(FilePackVer1.0, FilePackVer1.0, FilePackVer3.0), и в данном случае используется FilePackVer3.0, для правильной распаковки потребуется еще и специальный файл-ключ key.fkey, которым зашифрован архив. Он находится в подпапке \Dll


Кроме того, exfp3_v3 должен уточнить, архив из какой именно игры он распаковывает.
Поэтому требуется еще и указать номер игры из предложенного распаковщиком списка(игры серии Bishoujo Mangekyou там под номером 15), либо указать исполняемый файл игры в качестве третьего параметра для распаковщика.


Уже после распаковки игровых файлов, появилась логичная мысль: а как в будущем запаковать обратно игру с готовым переводом? Ведь распаковщик не поддерживает обратную операцию.
По нашей просьбе w8m (большое ему за это спасибо) добавил в свою программу arc_conv.exe возможность запаковывать игровые архивы. Достаточно запаковать все измененные файлы в новый архив(например, data8.pack), поместить в папку GameData, и они автоматически подтянуться в игру.

Вернемся к распакованным ресурсам. Файлы игрового сценария из архива data0.pack можно найти в подпапке \scenario\ks_01\

Все файлы сценария с расширением .s закодированы в далеко не самой удобной кодировке Shift Jis, и никакие юникодные кодировки движок не поддерживает. Cтроки для перевода выглядят приблизительно как эти:


Можно заметить, что каждая фраза на японском предваряется именем героя в японских скобках. (【】), который эту фразу произносит(в игре она выводится в верхней части окна с текстом). Или же, если это слова автора, то имя не добавляется.


Но остаются еще служебные команды.

Команды движка в сценарии чем-то напоминают язык разметки TeX, но намного более не интуитивны и неудобны, по сравнению с командами Kirikiri или RenPy.

Вот некоторые из них:

@@@ — тройная собака. Часто файлы скрипта начинаются именно с этой команды. По видимому, загрузка определений из сторонних файлов.


@@ — двойная собака. Метка в файле скрипта. На нее позже можно будет выполнить переход.

^savedate, ^saveroute, ^savescene, — три команды, которые скорее всего используются в системе сохранений игры и должны заносить в сэйв информацию о месте и времени сохранения игрока.

^facewindow, – состояние текстбокса с выводимым на экран текстом. (Показан — 1 или нет — 0)

^sload, — проигрывание внутриигровых звуков из папки \sound\ на соответствующем канале.


Проигрывание звука цикад на канале Env1

У команды есть два необязательных параметра, первый отвечает за закольцовывание звука, а второй пока остается загадкой, но он используется в игре редко.


Проигрывание закольцованного звука на канале SE1.

^eeffect – вывод на экран спецэффекта на определенное количество секунд. Судя по всему, поддерживает последовательный вывод нескольких эффектов.


Эффект белой вспышки.

^ffade – эффект перехода при смене экрана.
Имеет целую кучу дополнительных параметров, но реально полезны только несколько: название эффекта перехода, дополнительная картинка, если она требуется и время выполнения перехода.


Растворение одной картинки в другой, за 1 секунду.

^iload – загрузка фоновой картинки на экран. Изображению можно присвоить id для обращения к нему в будущем.


Вывод файла 0_black.jpg в качестве фона с id BG1

^we и ^wd — включение и выключение изображения в окне.

^facewindow,1 и ^facewindow,0 Включение и выключение изображения героя в окне диалога.

^mload — проигрывание музыки на определенном канале.


Проигрывание трека nbgm13 на канале BGM1

Одни из самых важных команд:
\jmp — переход к метке с указанным именем.

^select — вывод на экран окошка выбора, где игрок должен выбрать один из вариантов.


Здесь переход будет выполнен после ответа на вопрос, а номер ответа(0 или 1) возвращается из ResultBtnInt[0]. В итоге, \jmp переместит повествование на метку @@route01a + номер ответа. То есть, @@route01a0 или @@route01a1

Неприятная особенность в том, что обычная запятая в этих командах служит разделителем и не может быть использована в самих вариантах ответа. У японцев такой проблемы нет, они используют японскую запятую(、). Мы в данном случае можем заменить запятую на ‚ (U+201A SINGLE LOW-9 QUOTATION MARK).


Остальные команды не так важны в первом приближении.

Конечно, перед переводом сценарий стоит перекодировать во что-то более удобное, например в UTF-8, чтобы сочетать кириллические и японские символы.

После смены движка(об этом следующей части), игра воспринимает и русский текст, и японский. Но пока для совместимости требуется закодировать японские символы в Shift Jis, а кириллические – в кодировке cp1251.

Мы быстренько набросали программку на Питоне для перекодировки с учетом кириллицы:

Сначала я грешил на Питон, но в итоге выяснился довольно необычный нюанс. Существует неопределенность между методами соотношения юникодных и не юникодных японских кодировок в зависимости от конкретной реализации.

Для определения соответствий между символами Microsoft, видимо, решили использовать схемы из своей кодировки cp932, которая является расширенной версией Shift Jis.

Та же ситуация с символом с кодом 0x817C, который перекодируется в UTF8 как -(U+FF0D FULLWIDTH HYPHEN-MINUS) в Windows, или как − (U+2212 MINUS SIGN) в iconv.

Поскольку все файлы сценария были сначала переконвертированы из Shift Jis в UTF8 с помощью Notepad++(а он использует таблицу соответствия, принятую в Windows), то при обратной конвертации из UTF8 в Shift Jis через нашу питоновскую программу, появлялась пресловутая ошибка перекодировки.

Поэтому пришлось учитывать случаи появления ~ и -отдельными условиями.

Были и другие мелкие недочеты — например, многоточие … (U+2026 HORIZONTAL ELLIPSIS) заменялось кириллическим многоточием из cp1251, а не японским из Shift Jis.

После перевода текста можно переходить к работе с игровой графикой.

Графические файлы игры находятся в тех же pack архивах, но после распаковки над ними еще предстоит потрудиться. Например, почти все png картинки распаковываются в виде файлов типа sample+DPNG000+x32y0.jpg Иными словами, png изображения порезаны на горизонтальные полоски, толщиной 88 пикселей и каждая полоска записана в отдельный файл. В имени файла указан порядковый номер полоски(DPNG000. 009) и координаты x,y.


Я до сих пор теряюсь в догадках, зачем это было нужно. Если для затруднения рипанья ресурсов из игры, то это явно не самый лучший метод.

Чтобы склеить разрезанные png файлы, в свое время был создан маленький скрипт merge_dpng на Перле от asmodeus, который использует ImageMagick. К сожалению, и с ним возникли проблемы. Во-первых, нужен был Перл, которым я не пользовался и даже после его установки, выяснилось, что скрипт неправильно работает.

По этому поводу мы написали аналогичную программу на питоне:

Казалось бы, теперь мы получили весь набор картинок, который появляется в игре? Отнюдь — если просмотреть все соединенные картинки из всех архивов, то все равно окажется, что каких-то не хватает, хотя в игре они есть. Дело в том, что в движке имеется еще один тип файлов — с расширением .b. Это что-то вроде анимации с записанными внутри изображениями и звуками.

Хранящиеся внутри ресурсы достать довольно легко, но, увы, ни один из готовых распаковщиков .b файлов в нашем случае не отработал как надо. Либо некоторые файлы оставались нераспакованными, либо случались ошибки из-за японских имен, а загружаться с японской локалью не хотелось.

Тут пригодился еще один наш скрипт. Поскольку тогда мы не были знакомы с чем-то вроде Kaitai Struct, пришлось действовать почти с нуля.

Формат .b файлов оказался простым и, к тому же, от нашего распаковщика требовалась возможность распаковывать ресурсы только из этой игры. В других играх на движке Qlie появлялись дополнительные виды ресурсов внутри .b файлов, но мы на них подробно останавливаться не будем.

Итак, открываем любой .b файл в шестнадцатиричном редакторе и смотрим в начало. Перед оценкой следует учесть, что порядок байтов всех числовых значений будет Little-endian.

  • Заголовок файла abmp12
  • Десять байт 0x00
  • Заголовок первой секции abdata12 со служебной информацией.
  • Восемь байт 0x00
  • Размер секции abdata12, четырехбайтовое целое. Можно смело ее пропустить.
  • Заголовок секции abimage10
  • Семь байт 0x00
  • Количество файлов в секции, однобайтовое целое. В данном случае – в секции один файл.
  • Заголовок секции abgimgdat13
  • Шесть байт 0x00
  • Длина имени файла внутри секции, двухбайтовое целое. В данном случае длина – 4 байта.
  • Имя файла в кодировке Shift Jis
  • Длина записи контрольной суммы файла, двухбайтовое целое.
  • Сама контрольная сумма файла.
  • Неизвестный байт, судя по всему, всегда равен 0x03 или 0x02
  • Двенадцать неизвестных байтов, возможно, связаны с анимацией
  • Размер png файла внутри секции, четырехбайтовое целое.


Секция absound аналогична по строению abimage.

Скрипт должен автоматически распаковывать найденные файлы png, jpg, bmp, ogg и wav. Но помимо этого, внутри попадаются еще и неизвестные файлы imoavi.

Суть в том, что в игре все анимации сделаны либо как полноценное видео в ogv формате, либо как анимированные движком изображения, которые записаны в .b файлы, либо как анимированные последовательности jpg файлов в формате imoavi.

В данном случае, нас интересовали и jpg изображения, поэтому пришлось разбираться с ними также.

В imoavi существуют две секции: SOUND и MOVIE. В секции MOVIE через 47 байтов после заголовка, находятся четыре байта размера jpg файла. Файлы записаны друг за другом в исходном виде, разделенные последовательностью в 19 байт, где записан размер следующего файла.

Озвученные imoavi в игре не попадались, поэтому секция SOUND всегда пустая.

Ну и раз уж мы начали заниматься вытаскиванием всех ресурсов игры, заодно был написан и маленький скрипт для вытаскивания jpg из imoavi.

После распаковки, можно убедиться, что анимация из заставки в меню хранится как раз в файле 1_タイトル画面ムービー.b в формате imoavi.


На этом с игровыми ресурсами все.

К сожалению, в процессе перевода выяснилось еще несколько неприятных нюансов, которые преодолеть так и не удалось. Игра, как я уже писал, не поддерживает юникодных кодировок. Поэтому, весь переведенный текст выводится с неправильным межбуквенным интервалом. Было еще несколько проблем с обратной запаковкой файлов и с запуском игры без смены системной кодировки на японскую.

В какой-то момент мы(вернее, тот, кто отвечал за техническую часть перевода в нашей команде) задумались: а может, не стоит таскаться со старым движком, а портировать новеллу на движок Renpy, заодно получив и кроссплатформерность?
Возможно, мы поторопились, но в какой-то момент, бросать начатое стало жалко и ничего не оставалось, кроме как закончить перевод.

С чем же нам пришлось столкнуться во время портирования?
Об этом во второй части.


Переведу тексты разной тематики с английского на русский. Также перевожу новеллы.

НЕ работаю со сложными, требующими соответствующей специализации техническими текстами, спецификациями, юридическими и финансовыми документами, медицинской тематикой.

Опыт работы переводчиком новелл с английского на русский около 1 года. Углубленное изучение английского с детства, репетиторы, курсы.

Оглашайте тематику и требования. Перевод с фотографий с плохим качеством нежелателен. Присылайте заказы.

Круто,конечно,как открыть новеллу для вшитого перевода?

Далее далее, start, далее, ошибка ( Does not find this game from the online database ) классный гайд, спасибо!

я все сделал по инструкции но когда я выделяю рамкой текст ничего не появляется ,что делать в таком случае? Я просто не понимаю вообще ничего нет

Работает в полноэкранном режиме?

Покажи лучше как сделать полную локализацию. Как блин эти байты в слова перевестииии?

у меня пишет "Does not find this game from the online database" после того как прога определила игру и нажал далее

А что делать если игра на телефоне?

А то есть это просто приложение за тебя переводит? Есть приложение с помощью, которого я сам бы мог переводить?

SUBARU SENPAI,а возможно перевести визуальную новеллу из псп .

Если ты используешь эмулятор то да

а и кстать давно я не писал и мне стало интересно он сможет danganronpa перевести а то сыграть хотеть но онли инглишь 1 част 70% перевода а 2 ещё и не начинали

можеш добавить ссылку с хрома, у меня не работают русские браузеры

Брат, братан, братишка, у тебя тоже Rewrite)))

при переходе на сайт открывает страницу с надписью похожие ссылки
как с этим бороться

что делать если пишет не удалось синхранизироваться с игрой

Как установить OCR?

Maverik OCR Helper попробуй. Он как раз под новеллы заточен.

У мня захватывает текст, но не переводит на русский. Как настроить русский перевод с английского?
И не все новые игры видит, даже 2015 вроде Gal Gun

MONOKUMA А как ускорить перевод текста ?

Да, только проверил, после выделения ocr он выводит тот же текст из игры на глийском в окно ocr. И только 1 фразу, как настроить ему перевод на русский?

А ты в настройках текста поставил английский и UTF 8

Да, он просто показывает тот же текст из игры, как его заставить переводить на русский? (с английского)

Херня. Пробовал с Just Desert. Вроде простенькая, но думал поможет. Ни стандартно, ни с OCR. Весь гайд прошерстил у них на странице, все перепробовал. Гавнище, а не прога.

И зачем я свой Maverik OCR Helper делал, ведь о нём никто не знает. А ведь он может многое) Ну попробуйте, авось что и получится. Программа специально для распознавания и перевода визуальных новелл и игр и большим количеством текста в разных местах экрана. А VNR хорош, сам пользуюсь, да только захватывает не все потоки, да иногда удобнее просто с экрана текст захватывать.

Сразу хочу сказать, какие цели преследует эта статья. Во-первых, она должна рассказать о том, как я делал свою игру (с целью какого-никакого пиара, разумеется)). А во-вторых, я хочу спросить совета у пользователей — как можно её попиарить? Сама игра скоро выходит в стиме, а у меня закончились идеи, как это делать(


Вот что получилось в итоге.

Но давайте по порядку. История создания визуальной новеллы в одно лицо.

Песнь первая: с какого фига я вообще за это взялся?

Откровенно говоря, я стал инди-разрабом очень неожиданно. Я всегда хотел быть сценаристом, но как-то не сложилось. Вернее, сложилось, но не очень.


Классная вещь, кстати. Рекомендую.

В общем, с этого и началась история моего падения)

Песнь вторая: сюжет и сценарий.

Сюжет в моей голове рождался медленно и размеренно. Как я уже сказал — я был очень вдохновлён другой визуалкой. Настолько там закрученный сюжет, персонажи. Прям ух! Соответственно, из щенячьего восторга и выросла идея сделать что-то похожее.

Песнь третья: ресурсы.

Какое-то время всё шло достаточно гладко. Потихоньку рисовалась графика, на форуме любителей визуалок один энтузиаст предложил написать музыку.


Так герои выглядели первоначально.

А потом в моём мире наступил экономический кризис и я ушёл с работы. И заказывать графику стало не на что. А раз так — прощай, детектив Виктор, увидимся в следующей жизни. Графики нет, да и у композитора начались какие-то свои проблемы, потому он отказался сотрудничать дальше. (Тем не менее, пару мелодий он написал и они мне понравились — эти треки вошли в финальную версию.)


Так герой стал выглядеть в итоге.

Песнь четвертая: код.

Тут надо оговориться. Я — человек не командный, стремлюсь держать всё под контролем, а потому мне гораздо легче сделать всё самому, чем поручить кому-то и в дальнейшем ходить проверять, сделал он или нет.Потому кодить я тоже стал сам.

Но, методом проб, ошибок и какой-то матери, за пару недель я всё это закодил. И, как ни странно, мне понравилось. Видимо, есть во мне какие-то мазохистские черты.Ты что-то делаешь и тут же видишь, как твоя работа воплощается в программе. Прикольно.Также в процессе кода рождалось много интересных идей. А что если персонаж в одном акте спросит имя человека, а в следующем назовёт его по этому имени? А если не спросит — то имени знать не будет? А таких персонажей 7. Здравствуйте, новые переменные.А что, если в ряде сцен экран будет с помехами? Это как раз логично выглядит с учётом сценария. Здравствуйте, эффекты глича и видеошума. А что, если в главное меню запилить ещё кнопку с выводом концовок и сделать одну из них скрытой, доступной только после первого прохождения? А что, если… И всё это реализовывается, и делает игру всё круче и круче.


Спецдеффекты со старой оригинальной графикой.

Песнь пятая: провал.


Анимированная сцена.

Во-вторых, он всё-таки выпустил игру на андроид, где она продавалась за 35 рублей.

Но потом этот разраб-издатель отвалился из-за ряда личных обстоятельств.

Отчаяние охватило меня. Денег у меня не было, всё шло наперекосяк, пошёл ты к чёрту, детективчик. Не судьба мне стать сценаристом. Тем более в геймдев студии меня тоже не брали. Проект был послан нахрен. Залита версия на рутрекер, андроид сделан бесплатным.

Песнь шестая: возрождение из пепла?

Но время шло, я случайно наткнулся на студента-переводчика (вернее, я думаю, что он студент, доказательств у меня нет) и тот согласился перевести проект. Качество, судя по всему, вышло более-менее читабельным. По крайней мере текст понятен. У меня появились некоторые сбережения и я смог оплатить взнос в стиме. Саму игру немного дополнил и подшлифовал, так что версия отличается от торрент-эдишна.

Но что делать ещё? Везде советуют разное. Отправлять кураторам или нет? Искать стримеров или надеяться на бусты стима? Я запутался.

Игроки, разработчики, помогите советом, пожалуйста.

Ну и, конечно же, прошу заценить страницу в стиме — и, если понравится, добавить игру в вишлист.

А вот тут, кстати, сделанный на коленке трейлер. Его я тоже делал сам и это отдельная головная боль.

В общем, моя игра получилась очень многострадальной. Но из-за этого ещё сильнее хочется, чтобы хоть где-то она поимела успех)

На этом пока всё. Надеюсь, вам было интересно читать. И надеюсь, что коллективный разум подкинет клёвых идей.

Читайте также: