Русификатор Yakuza 5. Часть 10: Боевой интерфейс, тотальный рефакторинг и путь до демки
Привет всем! Девятая часть была посвящена прорыву в теории (байт длины) и первым успехам нового парсера. Десятую же часть я решил посвятить самому масштабному техническому обновлению за всё время существования проекта.
Последние дни я чувствую себя не лучшим образом из-за простуды, поэтому решил направить силы не на хардкорный перевод, а на наведение порядка в «доме». Я полностью переписал архитектуру Хаба, разделив его на независимые модули и плагины. Это сделало инструменты по-настоящему быстрыми и профессиональными.
Но главное — я наконец-то увидел результаты своей работы прямо в бою. Переведенный файл msg_replacer.bin оживил улицы Камурочо: теперь над головами врагов красуются их русские имена и титулы, а интерфейс «почты» и уведомлений перестал пугать английским текстом.
В этом посте я расскажу, как прошла «великая стройка» кода, почему некоторые строки всё еще сопротивляются переводу и когда ожидать первую публичную демо-версию русификатора.
Глава 31: Модульная революция и тотальный рефакторинг
Последние дни стали для проекта временем «большой стройки». Я решил, что пора перестать латать старые дыры костылями и нужно полностью перестроить фундамент Yakuza Translation Hub. Если раньше инструменты представляли собой разрозненные скрипты, которые часто дублировали функции друг друга, то теперь это единая, слаженная экосистема.
Я провел полный рефакторинг всех ключевых плагинов, и вот что изменилось «под капотом»:
1. Редактор Дракона и Навигатор Сузуки (Поумневший парсинг)
Главное достижение — полный отказ от «слепого» сканирования байтов. Теперь оба инструмента работают по принципу Pointer-First (сначала указатель).
- В Навигаторе я окончательно победил баг с «фантомными обрубками». Раньше программа могла найти одну и ту же строку несколько раз, нарезая её на куски и путаясь в адресах. Теперь она видит границы блоков так же четко, как оригинальный движок.
- В Редакторе Дракона исправлена досадная ошибка: раньше он просто игнорировал фразы, начинающиеся с многоточия (...). Теперь парсер вытаскивает абсолютно все нужные реплики. Кроме того, я разделил логику на модули — GUI отдельно, а работа с байтами отдельно. Но без ложки дегтя не обошлось: Редактор Дракона всё ещё периодически обрезает строки в игре, причем в абсолютно рандомных местах. Я долго ломал голову, почему идеальный код не работает, и, кажется, разгадал эту детективную загадку. Дело в связанных метаданных. Разработчики из SEGA жестко экономили память: если у нескольких реплик совпадают параметры вывода окна, они ссылаются на один и тот же блок с настройками длины. Мой скрипт честно пересчитывает длину для длинной русской фразы (например, 50 символов) и записывает её. Но если следом идет короткая фраза, использующая этот же блок метаданных, скрипт перезаписывает лимит на условные 15 символов. В итоге длинная фраза в игре жестоко обрезается. Пока я не научу парсер искать максимальную длину для общих блоков, придется вылавливать такие строки в игре и сокращать перевод вручную.
2. RGG DB Studio (Память настроек)
Работа с системными базами данных (.bin) стала в разы удобнее. Раньше при каждом открытии файла мне приходилось вручную вспоминать и проставлять галочки для нужных полей (NAME, EXPLANATION и т.д.). Теперь студия получила «память»: она запоминает выбранные категории для каждого конкретного файла. Один раз настроил — и забыл.
3. Text Utils и Фильтры (Иммунная система Хаба)
Самое незаметное, но важное обновление.
- Text Utils теперь работает как автоматический хирург: он научился распознавать и изолировать технические теги (<Color>, [WDR], %s). Если ИИ при переводе случайно ломает скобку или ставит лишний пробел, программа сама чинит тег перед сборкой.
- Фильтры доверия были серьезно ослаблены. Раньше они были слишком агрессивными и отправляли во «второй сорт» много хорошего английского текста. Теперь порог вхождения стал умнее, и полезные строки больше не теряются в мусоре.
4. Сценарист (Загадка пропавших катсцен)
А вот здесь меня ждало главное разочарование недели. Я пересмотрел логику сплиттера в плагине субтитров. Нашел, казалось бы, критическую ошибку в расчетах: при разделении очень коротких фраз время показа округлялось до нуля. Я добавил жесткую проверку таймингов, надеясь, что это вернет пропавший текст в катсценах... Но чуда не случилось.
Субтитры в проблемном ролике так и не появились. Видимо, проблема кроется гораздо глубже — возможно, это конфликты с другими файлами, как когда-то было с запчастями машин, или какие-то скрытые лимиты самого движка. Пока оставляю это как нерешенную задачу, так как впереди еще горы непереведенного текста в меню и барах.
Весь этот рефакторинг сделал Хаб по-настоящему профессиональным инструментом. База монолитна, и теперь я могу тратить основное время именно на перевод.
Глава 32: Ожившие улицы и боевой интерфейс
Вся эта модульная революция и переписывание парсеров затевались не ради красивого кода, а ради одного конкретного «монстра» — файла msg_replacer.bin.
Это огромная системная база данных (почти мегабайт весом), которая отвечает за динамический текст в игре. Имена врагов над полосками здоровья, названия предметов на земле, подсказки, вывески, локации на карте — всё это тянется оттуда. Проблема таких файлов в том, что малейшая ошибка в указателе или лишний байт приводят к моментальному вылету на рабочий стол при первой же уличной драке.
Благодаря новому Навигатору Сузуки я рискнул прогнать этот файл через полную пересборку. Итог: более 4000 обновленных указателей с ювелирной точностью. И игра это «съела» без единого краша!
Теперь уличные бои ощущаются совершенно иначе. Мелочь, а бьет прямо в атмосферу: ты дерешься не с безликими английскими болванчиками, а с конкретными «Михарой» и «Ишибаши». А вместо сухих стандартных названий банд на улицах теперь докапывается «Шпана».
Но боевым интерфейсом дело не ограничилось:
- Карта города: Локации вроде «Мост Осе» или «Улица Нагасугава» теперь отображаются на чистом русском.
- Интерактив: Журналы на полках в магазинах M-Store (вроде спортивных вестников или рождественских каталогов) переведены.
- Системная почта: Я также прогнал файл mail.bin. Входящие письма на телефон персонажа (реклама магазинов, спам, сюжетные сообщения) теперь полностью локализованы, включая правильные переносы строк и форматирование. (Но там свои заморочки: текст делится не по смыслу, а по нуль-терминаторам, потом могут быть проблемы, но пока нормально).
Именно из таких мелочей и складывается ощущение качественной локализации. Когда мир вокруг тебя разговаривает на твоем языке даже в системных уведомлениях, погружение возрастает многократно.
Глава 33: Ювелирная работа и «невидимые» префиксы
Когда технический фундамент был готов, я занялся удобством самого процесса перевода. В новой версии Редактора Дракона я реализовал несколько «фишек», которые экономят массу времени и нервов.
Самая большая проблема старой системы была в том, что в текст постоянно вклинивались системные символы. Например, иконки кнопок геймпада (△, ○, □) или служебные пробелы в начале строк. Раньше они попадали в словарь вместе с текстом, и если я переводил фразу без этого «мусора», игра её просто не узнавала.
Теперь всё иначе:
- Изоляция кнопок: Парсер научился «откусывать» иконки PlayStation и цветовые коды, пряча их в невидимый префикс. В редактор и нейросети уходит идеально чистый английский текст. При сборке программы Хаб сам приклеивает иконку обратно к русскому переводу.
- Битва за отступы: Я добавил автоматический перенос ведущих пробелов в префикс. Это критично для Yakuza 5, где разработчики часто используют пробелы для выравнивания текста в окне. Теперь я не боюсь их случайно стереть — Хаб держит их в безопасности «за кадром».
- Многоточия больше не помеха: Исправлен баг, из-за которого строки, начинающиеся с ..., считались мусором и просто не выводились в редакторе. Теперь я вижу абсолютно каждую реплику в файле.
- Редактирование «на лету»: Наконец-то исправлена ошибка при работе с Глобальным поиском. Теперь, если я нашел нужную фразу через поиск, я могу отредактировать её двойным кликом прямо в результатах, и перевод мгновенно сохранится в словаре. Раньше для этого приходилось вручную открывать конкретный файл.
Все эти микро-улучшения в сумме дали огромный прирост скорости. Теперь я не воюю с инструментом, а просто перевожу.
Глава 34: Дорога к версии 0.1 и технический перфекционизм
Подводя итог этой безумной неделе, я хочу обозначить финальную точку текущего этапа. Мой план — дойти в таком формате до 12-й части девлога, и именно она должна стать моментом выхода публичной демо-версии 0.1.
Почему 0.1? К этому моменту будет переведен огромный массив текста, но я буду честен: проверить всё в одиночку невозможно. Демка нужна не только для того, чтобы вы могли поиграть, но и для «полевых испытаний». Мне нужна помощь сообщества: вылавливать те самые обрезанные строки, которые не поддались автоматике, искать ошибки в родах (когда женщина говорит о себе в мужском лице) и просто находить «потеряшки».
Важный момент по формату постов.
Я чувствую, что писать такие гигантские отчеты по главам каждую неделю становится всё сложнее, и мне это уже неинтересно. Это превращается в рутину, которая отнимает время у самого перевода. Поэтому после выхода 12-й части и демки я планирую сменить формат. Мне не хочется просто дублировать короткие посты из Телеграма, поэтому рассматриваю такие варианты:
- Тематические «Внутрянки»: Редкие, но глубокие разборы конкретных аспектов (например: «Тайны мини-игр» или «Как устроена база данных предметов»).
- Интерактивные дневники: Посты-обсуждения спорных моментов перевода, где вы сможете влиять на результат голосованием.
- Блиц-апдейты: Лаконичные списки изменений в духе «Патчноутов» — только факты и цифры.
Кстати, о плагинах. Я говорил, что не хочу тратить на них время сейчас, но, зная себя — я всё равно сорвусь и буду их переделывать. Меня дико раздражает, когда инструменты работают неидеально. Например, сейчас мне предстоит большая работа по полной пересборке всех системных .bin файлов. Почему? Потому что я написал новый, крутой Text Utils, который правильно защищает теги, а старые файлы были собраны «криво». Чтобы в игре всё было чисто, нужно прогнать всё через обновленный Хаб заново.
Также на очереди большой поиск. Я до сих пор не нашел, где именно в файлах прячутся «бабблы» — те самые диалоги, что всплывают над головами прохожих. Если это не текстуры, то они зашиты где-то очень глубоко, и я намерен их вычислить.
📋 Текущий статус и ближайшие планы
В работе на следующую неделю:
- Локации и заведения: Полный перевод текстов для баров и ресторанов. Это огромный пласт «атмосферного» текста.
- Системные модули: Перевод файлов миссий (yukiyama_mission), меню Колизея (tougijyo_mode), профилей хостес и списков достижений.
- Пересборка: Глобальное обновление всех .bin из архива boot с учетом новых правил безопасности тегов.
Статус перевода:
- ✅ Интерфейс и системные базы: Большая часть переведена и стабильна.
- 🔄 Сюжет (Кирю): Активная фаза перевода.
- 🔄 Побочный контент: Начат перевод мини-игр и переписки в телефоне.
- ❌ Катсцены (Субтитры): В процессе отладки багов с исчезновением текста.
🗨 Заключение
Десятая часть подошла к концу. Это была неделя тотальной перестройки кода, и хотя я немного приболел, Хаб стал на порядок мощнее. Впереди — рутинный, но интересный перевод городских активностей.
Спасибо всем, кто ждет демку и поддерживает комментариями! Напоминаю, что в Telegram-канале теперь работает чат, где можно обсудить проект или помочь мне с тестами. И да, я знаю, что Телега сейчас капризничает — если у вас проблемы с доступом, пишите в комментариях здесь, я подскажу способ обхода, которым пользуюсь сам.
🔗 Мой канал и 💬 Чат для обсуждений: