Русификатор Yakuza 5. Часть 8: 150 перерисованных текстур, меню Кирю и запуск Telegram-канала
Работа над русификатором Yakuza 5 Remastered не останавливается ни на день. После того как удалось укротить базы данных и заставить игру выводить русский текст в инвентаре, я вплотную занялся визуальной частью и полировкой того, что уже работает.
Но перед тем как перейти к техническим итогам — важное объявление.
Я запустил Telegram-канал проекта
Больше контента в Telegram
Если вам интересен процесс разработки, скриншоты с "черновиками" и оперативные обновления по исправлению багов — заходите на канал проекта. Там я показываю то, что не попадает в итоговые статьи. Здесь на DTF останутся только крупные отчеты о проделанной работе.
Глава 22. Визуальный триумф: 150 перерисованных текстур и меню Кирю
Одной из самых объемных задач стала папка picture/caption. Это не просто файлы, это визуальное повествование — те самые эпичные всплывающие надписи, которые сопровождают нас на протяжении всей игры: представления боссов, названия кланов, цели миссий и оповещения о рангах.
Просто заменить текст внутри файлов нельзя — это текстуры. Пришлось вручную перерисовать около 150 изображений. Чтобы не сломать атмосферу (Yakuza Eiga), я подобрал стилизованный рваный «кистевой» шрифт (Edo SZ), который идеально ложится в оригинальные пропорции.
Теперь надписи вроде «Клан Тоджо» или «Семья Ватасе» появляются на экране по-русски и выглядят как родные. Отдельная история с прозвищем Моросавы. В оригинале его называют «Одобуру» (транслитерация французского «Hors d'oeuvre»). Если бы я оставил это как «Орд-овер Моросава», это звучало бы как нелепая ошибка или набор звуков. Поэтому в русификаторе он стал Моросава «Деликатес». Это звучит как полноценное бандитское прозвище, а не как перечисление блюда из меню ресторана.
Технические детали: В процессе обнаружилась неприятная мелочь — в первой главе, на надписи «Часть 1 / Глава 1», края букв постоянно срезало. Хотя я не менял размер файла, движок при отрисовке накладывает маску (safe zone), которая обрезает всё, что выходит за жестко заданный прямоугольник. Пришлось перерисовывать шаблон, смещая текст буквально на пару пикселей, чтобы он «дышал» внутри границ.
Попутно привел в порядок главное меню Кирю. Раньше из-за разницы длин слов (русские фразы почти всегда длиннее английских) элементы меню «плясали» или обрезались. Пересчитал отступы и подогнал шрифты под единый размер. Теперь профиль персонажа выглядит аккуратно и "по-заводски".
Глава 23. Битва за память: почему игра «режет» фразы
Пока визуальная часть радует глаз, текстовый движок продолжает сопротивляться. Я доработал свой сканер (Universal Editor Scanner), научив его лучше отделять системный мусор и префиксы от реального текста. Это позволило корректно обработать еще одну порцию данных, которые раньше сканер просто игнорировал.
Но главная проблема никуда не делась — фиксированные буферы памяти в файлах .msg.
Внутри этих файлов для каждого конкретного диалогового окна жестко зарезервировано определенное количество байт. Если русский перевод превышает этот лимит, движок отсекает лишнее, чтобы не затереть соседние данные в оперативной памяти и не вызвать критический вылет.
Из-за этого некоторые фразы в игре сейчас выглядят странно или обрезаются. Например, безобидная фраза «Добро пожаловать. Вы готовы заказать?» могла превратиться в «Добро пожаловать. Вы готовы зак...».
Идеального технического решения, как расширить эти буферы без пересборки всей структуры файла (а это огромный риск крашей), я пока не придумал. Сейчас приходится либо сокращать фразы до сути, либо оставлять как есть. Это костыльный метод, он далек от совершенства, но пока я оставлю всё как есть — приоритет сейчас в том, чтобы сделать доступным контент, а не доводить каждую строку до идеала ценой стабильности. Буду дальше ковырять сканер, чтобы он точнее фильтровал текст перед вставкой, это единственное, что пока можно сделать без риска "положить" движок.
Глава 24. Изнанка разработки: инструменты трещат по швам
Инструментарий, который я написал для автоматизации графического перевода («Студия Сайджо»), начал подводить. Когда файлов было немного, всё работало гладко, но сейчас, когда их накопилась критическая масса, вылезли архитектурные ошибки.
Проблема пресетов. Сейчас настройки отрисовки сохраняются глобально. Применил стиль шрифта для одной кнопки, перешел к другому файлу — настройки подтянулись «криво». Инструмент не понимает, что для разных файлов нужны разные настройки прозрачности или отступов. Как итог: изменение шрифта в одном месте ломает верстку в другом, и приходится каждый раз вручную поправлять параметры.
Проблема навигации. Стало банально неудобно работать со списком файлов. Сейчас при каждом выборе файла список сбрасывается в самое начало. Если работаешь с длинным списком текстур (например, в меню), после каждого сохранения приходится снова скроллить вниз, чтобы найти, на чем остановился. Мелочь, но при работе с десятками файлов в час это съедает кучу времени и нервов.
Очистка фона.
По факту, сейчас алгоритм корректно стирает старый текст только в режиме «прозрачной заливки». Во всех остальных методах он пока просто... ничего не делает, оставляя оригинальный английский текст на месте.
Это моя главная техническая «боль» на текущий момент. Я пытаюсь заставить работать нормальный inpaint (умное заполнение фона), но пока упираюсь в то, что либо алгоритм «мылит» всю текстуру, либо вообще отказывается обрабатывать маску. Так что сейчас я в процессе переписывания логики обработки масок — нужно сделать так, чтобы «умная» очистка наконец-то начала работать, а не просто висела в интерфейсе для галочки. Это следующий приоритет, так как без нормальной очистки перерисовывать сложные текстуры — занятие неблагодарное.
Вывод: Инструмент перерос свои возможности. Впереди масштабный рефакторинг: буду разбивать «Студию Сайджо» на независимые модули и делать умную привязку пресетов к конкретным файлам, а не к глобальному конфигу.
Глава 25. Мастер Патчей и итоги
Параллельно со «Студией Сайджо» я занимаюсь «Мастером Патчей». Его задача — вносить изменения в исполняемые файлы и скрипты, не ломая их структуру. Патчер стал работать стабильнее, но интерфейс пока оставляет желать лучшего. Сейчас там довольно спартанская среда, где нужно чётко понимать, какой байт за что отвечает.
Итог: Ручная работа по перерисовке графики и правке бинарников — это сейчас 80% времени. Игра внешне всё больше становится русской, но "под капотом" предстоит большая перестройка хаба. Нужно оптимизировать процесс, чтобы масштабировать перевод на остальные части игры (рестораны, магазины, мини-игры).
Работы еще много, но темп хороший. Спасибо всем, кто поддерживает проект — каждый ваш отзыв помогает не бросать это дело на полпути!
📋 СПИСОК ЗАВЕРШЕНИЯ
ОСНОВНОЕ:
✅ picture/caption: Полностью переведено и перерисовано около 150 текстур (представления боссов, локации, цели).
✅ Меню Кирю: Исправлена верстка, отступы и размеры шрифтов, теперь всё выглядит «по-заводски».
✅ Сканер (Universal Editor Scanner): Доработан парсинг, отсекаются лишние префиксы, позволяя переводить ранее "невидимый" текст.
ИНСТРУМЕНТАРИЙ:
✅ Мастер Патчей: Доработан функционал внесения изменений в бинарные файлы с поддержкой бэкапов.
✅ Студия Сайджо: Внедрена система «горячих» пресетов (пусть пока и требующая рефакторинга).
🧭 Навигатор Сузуки: Эксперименты и грабли
С «Навигатором Сузуки» история вышла поучительнее. Попробовал полностью переделать логику чтения строк (парсинг бинарных данных), чтобы избавиться от старых болячек с указателями. В итоге: всё ожидаемо сломалось. Строки читаются криво, часть данных теряется, и навигатор временно превратился в тыкву.
С другой стороны — я хотя бы попробовал. Этот экспериментальный метод наглядно показал, где именно движок обрабатывает указатели не так, как я предполагал в теории. Это был болезненный, но очень полезный урок. Сейчас откатываюсь на стабильную версию, чтобы не стопорить остальную разработку, но теперь у меня есть больше понимания, в какую сторону нужно «допиливать» парсер, чтобы он переваривал даже самые капризные файлы.
ПЛАНЫ И ВЫЗОВЫ:
🛠 Рефакторинг инструментов: Решить проблему с пресетами и навигацией в «Студии Сайджо».
🛠 Борьба с буферами: Поиск способа обхода лимитов в .msg файлах без риска поломки движка.
🛠 Графика: Перерисовка оставшихся вывесок и текстур в магазинах.