Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием

Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием

Всем привет. Продолжаю хронику разработки русификатора для Yakuza 5.

В первой части я описывал амбициозный план по автоматизации: извлечь текст, перевести его через нейросеть и вернуть в игру. Казалось бы, техническая база понятна, инструменты есть — остаётся только запустить процесс.

Но, как это часто бывает в реверс-инжиниринге, гладко было только на бумаге. Движок игры быстро дал понять, что простым копипастом здесь не отделаться. Текст в Yakuza 5 — это не просто строки в текстовом файле, а настоящая полоса препятствий. Он зашит в бинарный код, окружен техническим мусором и намертво привязан к указателям, которые ломают игру при малейшем сдвиге байтов.

Ирония ситуации в том, что я до сих пор не прошел Yakuza 5. Моё первое знакомство с сюжетом происходит прямо в Hex-редакторе. Пока герой в первой главе пытается начать тихую жизнь таксиста в Фукуоке и не привлекать внимания, я тоже планировал просто побыть «тихим переводчиком» — нажать пару кнопок и запустить нейросеть.

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

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

ГЛАВА 3: Битва за байты и коварные указатели

Первой серьезной преградой стали файлы диалогов .msg. Выяснилось, что игра хранит текст не в чистом виде, а вперемешку с техническими «префиксами».

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

  1. Проблема длины. Русский текст почти всегда длиннее английского. Если просто записать его на место оригинала, он затрет следующие данные, и игра моментально вылетит.
  2. Скрытые маркеры. Перед фразами стоят байты вроде H или скобки ). Это не просто мусор, а команды движку: когда включить озвучку, каким цветом выделить имя или как отцентровать текст. Если их убрать — персонажи «немеют», если оставить не там — текст ломается.
  3. Адресная книга (Указатели). В начале каждого файла лежит таблица ссылок. Она говорит игре: «Первая фраза лежит по адресу 0x100, вторая — по 0x150». Как только я менял длину текста, все эти адреса «плыли», и игра переставала понимать, где что находится.

ГЛАВА 4: Решение «Safe Append» — пишем историю в хвост

Проблема указателей казалась неразрешимой без переписывания всего файла вручную. Но в итоге я реализовал технологию Safe Append.

Логика такая: мой софт не пытается втиснуть русский текст в узкие рамки оригинала. Вместо этого он:

  1. Оставляет оригинальный текст там, где он лежал.
  2. Берет русский перевод (в специальной кодировке).
  3. Дописывает его в самый конец файла, где нет никаких ограничений.
  4. Вычисляет новый адрес и автоматически исправляет все указатели в заголовке файла.

Теперь игра думает, что всё идет по плану, просто за текстом она обращается не в «начало комнаты», а на «склад за углом». Для игрока всё выглядит идеально, а для движка — технически грамотно.

Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием
Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием

ГЛАВА 5: Цифровые джунгли — Масштаб трагедии и «Универсальный Редактор»

Успех с одним файлом — это воодушевляет, но в Yakuza 5 таких файлов легион. В одной только папке с диалогами их больше 3000. Если открывать и сохранять каждый вручную, русификатор выйдет как раз к релизу PlayStation 8.

Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием

Поэтому я сосредоточился на разработке Универсального Редактора V2. Его главная задача — «проглотить» всю папку целиком, переварить бинарные данные и вычленить только те фразы, которые действительно нужно переводить.

Как вы можете видеть на скриншоте, в одном прогоне программа сейчас обрабатывает свыше 12 000 строк.

Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием

Но количество — это полбеды. Главный «босс» здесь — чистота данных. Движок у игры крайне грязный: текст намертво перемешан с именами функций, путями к системным файлам и бинарным мусором. Сейчас я активно дорабатываю умные фильтры. Если в строке только технические коды — она летит в корзину. Если это похоже на человеческую речь — она попадает к вам в редактор.

Пока логика еще шлифуется. Процесс поиска нужных строк в этом массиве напоминает то, как Маджима носится по Камурочо в поисках своего Кирю-чана — шумно, местами хаотично, но очень эффективно.

Представьте: тысячи файлов, в каждом свои ловушки, и мне нужно выудить каждое имя, каждую реплику и при этом не превратить игру в набор нечитаемого мусора. Чистое безумие в стиле Tojo Clan.

ИТОГИ И ПЛАНЫ

Сегодня 30 декабря, и я могу с уверенностью сказать: фундамент заложен. Технически «цикл жизни» перевода готов: Извлечение -> Обработка -> Наложение «шифра» -> Пересборка ссылок -> Инъекция в игру.

Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием

Мои цели на начало следующего года:

  1. Масштабный экспорт: Настроить «нарезку» строк на удобные пакеты по 500 строк для перевода нейросетью.
  2. Битва за шрифт: Текст уже в игре, но я планирую переделать, чтобы буквы не слипались и выглядели максимально эстетично.
  3. Автоматизация Хаба: Дописать внутренние инструменты «быстрого лечения» кода, чтобы инструменты не падали на редких типах файлов.

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

СПИСОК ЗАВЕРШЕНИЯ (на конец года):

✅ Safe Append Engine — Технология записи перевода в хвост файла. Гарантирует 100% стабильность игры без повреждения оригинальных байтов.

✅ Omni-Pointer Search — Поиск и автоматическая замена ссылок во всех форматах (Little Endian, Big Endian и 16-битные указатели).

✅ Direct Byte-Mapping — Система кодирования кириллицы напрямую через HEX-шифр, обходящая врожденную неприязнь движка к UTF-8.

✅ Smart Heuristic Scanner — Хирургическое отделение технических префиксов (цвета, звуки, иконки) от чистого текста при чтении.

⏳ Mass Scaling — Массовый экспорт строк и автоматическая нарезка на пакеты по 500 штук для перевода через AI.

⏳ VWF Research — Охота за таблицами ширины символов (Variable Width Font). Нужно найти, где в коде запрятаны отступы для каждой буквы, чтобы победить слипание кириллицы и сделать текст «по заводу».

Прошлые записи дневника:

С наступающим Новым годом! Драконьей удачи вам в 2026-м!

Sungoro

40
5
3
1
1
30 комментариев