🛠 Как мы переносили перевод «The Path» на новый билд (и чуть не сошли с ума)
Представьте задачу: есть классная старая игра The Path, есть её официальный перевод на русский... который в актуальной версии Steam просто не работает корректно. Нас попросили взять русификатор из древних файлов .cgr и аккуратно пересадить в свежий билд.
Звучит как работа на полчаса, правда? Ха-ха. Добро пожаловать в ад реверс-инжиниринга! 🐍✨
🕵️♂️ Этап 1: «Оно живое, но ему больно»
Сначала мы попытались накатить старые файлы нахрапом. Игра даже запустилась! Правда, в меню выбора персонажей у героинь поехали модельки, а текстуры начали жить своей жизнью.
Пошли гуглить, что это за файлы такие. Выяснилось: игра сделана на Quest3D - древнем и крайне специфичном нодовом движке. Инструментов для работы с ним в сети примерно ноль. Нашлась только одна инструкция для другой игры, но нам она не подошла. Пришлось лезть в дебри самостоятельно.
🚪 Этап 2: Босс «Лицензия» и его брат «64 бита»
Чтобы отредактировать файлы движка, нужен сам редактор Quest3D. И тут началась комедия в трех актах:
- Проблема с версией: В файлах игры нашли плашку Quest3D 420. Качнули версию 4.21, запускаем, а она просит лицензию. Серверы проверки давно мертвы, компании-разработчика не существует, демо-версия ничего открывать не дает.Решение: Объединились с нейросетью и шаг за шагом написали патч, обходящий проверку. Программа запустилась! 🎉
- Проблема с разрядностью: Запустилась, но файлы игры не открывает. Выдает ошибку. Мы уже думали бросать, но заметили файл HighPoly.dll и осознали: игра-то 64-битная! А мы пытаемся открыть её в 32-битной 4.21. 64-битный Quest3D появился только в 5-й версии.
- Опять лицензия: В 5-й версии разработчики движка обновили защиту. Пришлось снова лезть во внутренности программы и делать уже четыре патча в разных местах кода, чтобы редактор просто соизволил завестись.
🔒 Этап 3: Защита от взлома внутри защиты
Ура, редактор запустился! Открываем файл локализации и получаем по шапке:
«This file is not editable because it was protected by its author.»
(Этот файл нельзя редактировать, так как он защищен автором).
(Этот файл нельзя редактировать, так как он защищен автором).
Парадокс: раз мы увидели это сообщение внутри программы, значит, расшифровка файла сработала, но автор игры повесил поверх запрет на редактирование.
Мы засунули библиотеки программы в IDA Pro (инструмент для анализа кода), нашли функцию блокировки и успешно её вырезали. Файлы наконец-то открылись! Казалось бы - победа?
Не тут-то было.
✂️ Этап 4: «Не копируется!»
Мы нашли ноды (своеобразные блоки логики в движке), отвечающие за русский язык. Решили просто скопировать их из русской версии и вставить в стимовскую.
Жмем «Копировать», вылетает ошибка: DirectoryInformation::ClipboardCopy() : couldn't load clipboard interface.
Оказалась, внутри движка была еще одна скрытая проверка.
Мы пошли ломать функцию копирования. Сначала хотели красиво подменить логику, но программа падала. В итоге решили не мудрить: просто зашили в код жесткий ответ «0» (что означает «копировать можно всегда»).
Мы пошли ломать функцию копирования. Сначала хотели красиво подменить логику, но программа падала. В итоге решили не мудрить: просто зашили в код жесткий ответ «0» (что означает «копировать можно всегда»).
Забавный момент: В процессе патчинга мы случайно задели соседний байт и сломали инструкцию. Сами даже не заметили, почему ничего не работает, но ИИ-помощник вовремя ткнул нас носом: «Параллельно ты там байт зацепил, поправь». Исправили и буфер обмена ожил! Заодно сделали так, чтобы при пересохранении защита с файлов снималась автоматически.
🤦♂️ Этап 5: Финал, или Почему разработчики - гении
Все ноды перенесены, патчи стоят, в редакторе всё работает идеально. Запускаем игру... русского нет.
Начали копать дальше и просто выпали в осадок. Оказывается, разработчики в каком-то из обновлений просто сломали предзагрузку сторонних языковых файлов.
- Европейские языки работали только потому, что им не нужны были отдельные шрифты (латиница и так есть).
- Японскую версию они вообще вынесли в отдельный билд игры, потому что видимо не смогли починить эту ошибку!
- А в Steam-версии русский язык ВСЁ ЭТО ВРЕМЯ ЛЕЖАЛ В ФАЙЛАХ, но игра его просто не грузила!
Изучив структуру загрузки, мы нашли в движке заветную тумблер-кнопку: «Загружать этот файл всегда при запуске».
Включаем, пересобираем... И ВСЁ ЗАРАБОТАЛО! Русский язык на месте, шрифты ровные, модельки персонажей больше не ломаются и стоят на своих местах.
🏁 Итог
Пройдя через кучу упавших библиотек, 6 разных патчей защиты и костыли самих разработчиков, мы наконец-то сделали нормальный, рабочий русификатор для актуальной версии The Path.
Скачать можно тут https://boosty.to/gamehacking/posts/172d3f50-8405-4a38-afb3-c85229d00bf4 ! 🎮
разбор