Русификатор Yakuza 5: Взлом «Якудза-кода» и таксист под прикрытием
Всем привет. Продолжаю хронику разработки русификатора для Yakuza 5.
В первой части я описывал амбициозный план по автоматизации: извлечь текст, перевести его через нейросеть и вернуть в игру. Казалось бы, техническая база понятна, инструменты есть — остаётся только запустить процесс.
Но, как это часто бывает в реверс-инжиниринге, гладко было только на бумаге. Движок игры быстро дал понять, что простым копипастом здесь не отделаться. Текст в Yakuza 5 — это не просто строки в текстовом файле, а настоящая полоса препятствий. Он зашит в бинарный код, окружен техническим мусором и намертво привязан к указателям, которые ломают игру при малейшем сдвиге байтов.
Ирония ситуации в том, что я до сих пор не прошел Yakuza 5. Моё первое знакомство с сюжетом происходит прямо в Hex-редакторе. Пока герой в первой главе пытается начать тихую жизнь таксиста в Фукуоке и не привлекать внимания, я тоже планировал просто побыть «тихим переводчиком» — нажать пару кнопок и запустить нейросеть.
Но, как и Кирю, техническое прошлое этого движка быстро меня настигло. Спокойная работа «тихого таксиста» закончилась на первом же файле. Пришлось отложить словари и браться за полноценный взлом структуры — всё ради того, чтобы Дайго Доджима хотя бы просто смог доехать в такси до конца своей фразы и не обрушить игру.
И здесь моя «тихая прогулка» превратилась в настоящую уличную драку в самых темных переулках кода, где за каждым байтом прятался подвох.
ГЛАВА 3: Битва за байты и коварные указатели
Первой серьезной преградой стали файлы диалогов .msg. Выяснилось, что игра хранит текст не в чистом виде, а вперемешку с техническими «префиксами».
Я столкнулся с тремя проблемами, которые по отдельности кажутся решаемыми, но вместе превращают разработку в ад:
- Проблема длины. Русский текст почти всегда длиннее английского. Если просто записать его на место оригинала, он затрет следующие данные, и игра моментально вылетит.
- Скрытые маркеры. Перед фразами стоят байты вроде H или скобки ). Это не просто мусор, а команды движку: когда включить озвучку, каким цветом выделить имя или как отцентровать текст. Если их убрать — персонажи «немеют», если оставить не там — текст ломается.
- Адресная книга (Указатели). В начале каждого файла лежит таблица ссылок. Она говорит игре: «Первая фраза лежит по адресу 0x100, вторая — по 0x150». Как только я менял длину текста, все эти адреса «плыли», и игра переставала понимать, где что находится.
ГЛАВА 4: Решение «Safe Append» — пишем историю в хвост
Проблема указателей казалась неразрешимой без переписывания всего файла вручную. Но в итоге я реализовал технологию Safe Append.
Логика такая: мой софт не пытается втиснуть русский текст в узкие рамки оригинала. Вместо этого он:
- Оставляет оригинальный текст там, где он лежал.
- Берет русский перевод (в специальной кодировке).
- Дописывает его в самый конец файла, где нет никаких ограничений.
- Вычисляет новый адрес и автоматически исправляет все указатели в заголовке файла.
Теперь игра думает, что всё идет по плану, просто за текстом она обращается не в «начало комнаты», а на «склад за углом». Для игрока всё выглядит идеально, а для движка — технически грамотно.
ГЛАВА 5: Цифровые джунгли — Масштаб трагедии и «Универсальный Редактор»
Успех с одним файлом — это воодушевляет, но в Yakuza 5 таких файлов легион. В одной только папке с диалогами их больше 3000. Если открывать и сохранять каждый вручную, русификатор выйдет как раз к релизу PlayStation 8.
Поэтому я сосредоточился на разработке Универсального Редактора V2. Его главная задача — «проглотить» всю папку целиком, переварить бинарные данные и вычленить только те фразы, которые действительно нужно переводить.
Как вы можете видеть на скриншоте, в одном прогоне программа сейчас обрабатывает свыше 12 000 строк.
Но количество — это полбеды. Главный «босс» здесь — чистота данных. Движок у игры крайне грязный: текст намертво перемешан с именами функций, путями к системным файлам и бинарным мусором. Сейчас я активно дорабатываю умные фильтры. Если в строке только технические коды — она летит в корзину. Если это похоже на человеческую речь — она попадает к вам в редактор.
Пока логика еще шлифуется. Процесс поиска нужных строк в этом массиве напоминает то, как Маджима носится по Камурочо в поисках своего Кирю-чана — шумно, местами хаотично, но очень эффективно.
Представьте: тысячи файлов, в каждом свои ловушки, и мне нужно выудить каждое имя, каждую реплику и при этом не превратить игру в набор нечитаемого мусора. Чистое безумие в стиле Tojo Clan.
ИТОГИ И ПЛАНЫ
Сегодня 30 декабря, и я могу с уверенностью сказать: фундамент заложен. Технически «цикл жизни» перевода готов: Извлечение -> Обработка -> Наложение «шифра» -> Пересборка ссылок -> Инъекция в игру.
Мои цели на начало следующего года:
- Масштабный экспорт: Настроить «нарезку» строк на удобные пакеты по 500 строк для перевода нейросетью.
- Битва за шрифт: Текст уже в игре, но я планирую переделать, чтобы буквы не слипались и выглядели максимально эстетично.
- Автоматизация Хаба: Дописать внутренние инструменты «быстрого лечения» кода, чтобы инструменты не падали на редких типах файлов.
Уходящий год заканчивается важной победой: Дракон наконец-то начал понимать русский язык, не падая в обморок от критических ошибок.
СПИСОК ЗАВЕРШЕНИЯ (на конец года):
✅ 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