Пулемётный поцелуй для Yakuza 5: Как я переводил караоке, викторины и ломал тайминги
Всем привет! Давно ничего не писал на DTF, но работа над русификатором Yakuza 5 идёт полным ходом. Решил немного рассказать о том, что происходит под капотом проекта. Сегодня будет смесь из трудностей перевода и чисто технических заморочек игры, потому что в модинге одно постоянно цепляется за другое.
Лимиты памяти и Студия Караоке
Изначально я собирался заняться текстами в караоке где-нибудь ближе к концу проекта. Но побочные задания Харуки заставили передумать. Дело в том, что в игре довольно жёсткие лимиты по длине текста (in-place), и длинные английские названия песен просто не влезали в память. Плюс, мой плагин для сборки пока не всегда идеально обновляет допустимую длину строки, из-за чего получались некрасивые обрезки текста. Перевод и сокращение названий песен стали технической необходимостью.
Но как только я перевёл треки в диалогах, в самой мини-игре они остались на английском. Пришлось садиться и писать для своего софта (Yakuza Hub) отдельный плагин. Суть в том, что текст в караоке — это не шрифты, а набор прозрачных DDS-текстур. Плагин позволил мне вытаскивать оригинальные кадры, вбивать перевод, на лету накладывать нужный шрифт с обводкой и автоматически запекать это обратно в формат DDS прямо в архив мода.
Кстати, для любителей оригинала: мой перевод заменяет только английский архив караоке. Если кому-то не понравятся русские песни, достаточно просто выключить в настройках игры пункт «Русские тексты караоке», и игра вернёт оригинальные японские иероглифы с транскрипцией внизу.
Трудности перевода: Ищу смысл на текстурах
В процессе выяснилась забавная деталь. Английские локализаторы перевели песни очень вольно. Я японского особо не знаю, но даже мне при распаковке оригинальных японских текстур и их сверке с ромадзи стало понятно, что они нагородили отсебятины.
Например, когда я вытаскивал кадры для Loneliness Loop, то увидел, что на одной текстуре чётко написано «кизу» (рана), а слово «тори» (птица) появляется вообще на другом кадре. В английской же версии эти строчки тупо поменяли местами, да ещё и приплели какую-то «извращённую любовь», которой там и не пахло. А культовую Baka Mitai перевели так, будто герой винит в расставании девушку, хотя в оригинале он корит только себя (само название я, кстати, оставил в транслите с переводом в скобках, как и было в английской версии). В общем, я постарался адаптировать тексты и подогнать их максимально близко к японскому смыслу, насколько смог.
Адские концерты Лиги Принцесс
Перевести текстуры — это полбеды. Настоящий геморрой начался с живыми концертами Харуки в Лиге Принцесс. Там те же самые песни выводятся уже не картинками, а обычными субтитрами из отдельного .bin файла. И тут всплыли два прикола.
Во-первых, количество строк на концерте и в караоке не совпадает! Англичане зачем-то склеили часть фраз. Пришлось прописывать скрытые переносы, чтобы русский текст красиво ложился в две строчки.
Во-вторых, при экспорте текста в JSON для перевода сбилась сортировка. Из-за разницы в именах файлов и алфавитного порядка строки перемешались. Загружаю текст в игру, а у меня первая строчка улетела куда-то в середину припева. Пришлось повозиться с выгрузкой, чтобы всё шло строго по порядку. Вроде всё поправил, текст теперь связный.
Горы сейвов, викторины и песня «Не пердел!»
Отдельный вид пыток — это тестирование работы Харуки в агентстве «Дайна Чейр». Если текст вылез за экран или крашнул игру, ты не можешь просто нажать «переиграть». Работа уже считается выполненной. Приходится рыться в огромной куче сейвов, пытаясь вспомнить, какой из них был сделан прямо перед нужным триггером, загружаться и молиться, чтобы в этот раз пересобранные байты влезли в память.
Немного отвлёкся на викторину «Проверка любви» (Love Check) в Сотенбори. Вопросы пришлось серьёзно адаптировать. Шутки про английский алфавит заменил на классическое «Съешь ещё этих мягких французских булок...», а английские идиомы перевёл на наши аналоги (например, сделал вопрос про выражение «Сухой как порох»).
Но моя любимая адаптация — это вопрос про песню Харуки «So Much More!». Чтобы название попадало и в японский смысл, и в английский, я перевёл его как «Не предел!». А вот для неправильного варианта ответа (в оригинале было Much, Much More!) я решил использовать созвучную опечатку и написал «Не пердел!». Выглядит максимально абсурдно: сидит милая Харука на серьёзных щах и выбирает, как называется её хит — «Не предел!» или «Не пердел!». Типичный юмор в духе Yakuza.
Но и тут не обошлось без технической дичи. Мой софт наотрез отказывался подхватывать перевод викторины. Оказалось, японцы вшили прямо внутрь текста невидимый тег (改行) (перенос строки). В моём софте фильтры настроены отсеивать японский текст, чтобы случайно не перевести и не сломать системные данные — ведь в английских файлах переводить иероглифы по идее не нужно. Поэтому парсер просто не пропускал эти строки. Плюс игра ломалась из-за кавычек в названиях баров. Пришлось дописывать логику плагинов, чтобы обходить эти ловушки.
Визуал и планы
Пока я ковыряюсь с кодом и текстами, огромную помощь с визуалом оказывает Алексей. Он делает просто невероятные вещи: перерисовал логотипы викторины, заставки мини-игр («Не проиграю!», автомат-клешня, рыбалка), элементы работы в «Дайна Чейр». В игре это выглядит безумно сочно и органично.
Сейчас потихоньку готовлю сам Yakuza Hub к тому, чтобы собрать его в стабильный билд — возможно, начну заливать сборки утилиты на свой Boosty.
Работы впереди ещё море, но проект движется. Спасибо всем, кто следит и поддерживает!
📢 Телеграм-канал: https://t.me/yakuza5hub — Главный хаб новостей и обновлений перевода.
💬 Группа обсуждения (Чат): https://t.me/Yakuza_5_Rus_Project_Chat — Общение, обсуждение перевода и серии Якудза.
🧡 Поддержка на Boosty: https://boosty.to/sungoro — Подписка, ранний доступ к билдам и эксклюзивные материалы.
💸 Разовые донаты: https://pay.cloudtips.ru/p/6096c166 — Прямая поддержка автора через CloudTips.
🤖 Бот обратной связи: https://t.me/Cyber_Purgatory_bot — Бот для баг-репортов, логов и связи с разработчиком.
📝 Блог на DTF: https://dtf.ru/id3235977 — Технические статьи, отчеты и лонгриды по разбору игры.