Как перевести Chronicles of the Wolf, не вскрывая архивы?
(пост без картинок, но видео игрового процесса внизу)
Иногда желание поиграть в игру на родном языке разбивается о суровую реальность: разработчики упаковали текст в архивы, зашифровали их алгоритмами, от которых плачут даже криптографы, и намертво вшили в движок.
Распаковать такое это адский труд. А запаковать обратно так, чтобы игра не вылетела - занятие для людей со стальными нервами.
Но что, если скажем вам, что игру вообще не нужно распаковывать? Что если можно написать «шпиона», который будет сидеть в оперативной памяти, ловить тексты за миллисекунду до его появления на экране и незаметно подсовывать вместо него русский?
Именно такой путь мы прошел недавно. Делимся историей о том, как пара строк на ассемблере, борьба с «призраками» в памяти и магия C++ превратились в полноценный мод-перевод.
Шаг 1. Детективная работа (Ищем, где прячется текст)
Любая игра, какой бы сложной она ни была, перед отрисовкой текста должна положить его в оперативную память. Вооружившись отладчиком, начал искать.
Но проблема в том, что тут текст не лежит в памяти статично. Движок игры постоянно выделяет под него новые, случайные кусочки памяти. Но удалось поймать момент, когда текст только-только формируется. Все дороги вели к одной функции в машинном коде:
``
push ebx
push esi
push edi
mov edi, edx ; <--- Вот тут в EDX наш текст!
mov ebx, ecx
chronicles of the wolf
разбор
Владимир Комарович
Спасибо, нравятся такие бэкстэйджи они же "за кадром".
Apr 11 10:53

