История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

После того, как мы с Рейнджером определились с идентификацией всех основных форматов в главном архиве DAT и отсортировали их по папкам, мне нужно было решить, какие следующие форматы файлов заказать для разбора.

Так как у меня уже был небольшой опыт работы над переводом Tales of Symphonia, я понимал, что, скорее всего, не вся часть текста будет в 2-3 разных форматах. Это было бы слишком просто. Если так случается, что диалоги – в одном формате, другой особый тип диалогов или текстов описаний – во втором, а весь текст менюшной составляющей – в третьем, то это неимоверная удача. Примерно так было в следующих играх: Tales of Xillia 1-2 (весь текст в одном формате), Tales of Legendia (диалоги и сценки в одном формате, а тексты меню – во втором) и в Tales of Symphonia: Dawn of the New World (весь текст диалогов, как и в Легендии, в одном формате, а все тексты, относящиеся к меню, скомпилированы во втором формате). Но Сказания Перерождения не тот случай. Это одна из тех игр старой школы, где каждая мелочь находится в разных местах и форматах. И, к сожалению, я не сразу сообразил, где все они располагаются. В будущем из-за этого мне придётся разбираться долго и кропотливо в каждом из них, потому что по каким-то мистическим обстоятельствам привлекать сторонних людей для помощи со многими другими нашими проектами получалось хорошо, а вот с Tales of Rebirth постоянно не везло.

После долгих поисков и изучений файлов стало понятно, что основной текст с диалогами, сценками и прочим находится в файлах формата SCE. Однако они были сгруппированы по разным типам контейнеров. Основные диалоги находились в контейнерах SCPK, а сценки – в SKT (Рейнджер почему-то назвал этот тип контейнеров SCE, как и расширение текстового формата). В итоге вторая часть заказа для Рейнджера заключалась в разборе форматов SCPK и SCE. Я не стал заказывать разбор SKT, так как посчитал излишним работать с ещё одним уровнем распаковки и запаковки. Поэтому я попросил хакера сделать так, чтобы программа сразу извлекала файлы SCE из SKT и делала дампы текстов из них без вмешательства пользователя. Спустя несколько лет я об этом пожалею, потому что отдельную распаковку для SKT всё же нужно было заказать. Кроме того, как выяснится в будущем, в ресурсах будут контейнеры и других типов: PAK0, PAK1, PAK2 и PA3. Но об этом я расскажу позже в другой главе.

В итоге в первые месяцы работы над переводом я решил пойти по пути отсеивания. Запустил игру и начал искать остальные встречающиеся тексты на экране через просмотр оперативной памяти эмулятора. Здесь стоит отдать должное уважаемому ромхакеру Артёму Филатову (TTEMMA). Он первый посоветовал этот способ и тем самым облегчил страдания, чтобы мне не пришлось искать бесконечно иголку в стоге сена, перебирая все распакованные файлы из главных архивов. Выбор пал на hex-редактор HxD. Ниже я распишу метод поиска через оперативную память и заострю внимание на каждом этапе по отдельности. Так как данный метод позволяет очень точно найти нужный файл, а также очень сильно облегчает процесс различных манипуляций практически с любыми файлами.

Этап 1. Работа с таблицей кодов

а) Перед тем, как приступить к поиску текста в Tales of Rebirth, нужно настроить работу с таблицей кодов, так как в этой игре своя уникальная кодировка. Здесь стоит вспомнить помощь ромхакера StorMyu. В предыдущей главе я упоминал, что он предоставил таблицу кодов (TBL). Выглядит она примерно вот так:

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

б) Если кому-то интересно, как она выглядит полностью, то можете скачать таблицу по этой ссылке (https://disk.yandex.ru/d/5Wk3yHVYCIHpxw) и оценить масштаб работы программиста. В ней около 3,5 тысяч знаков и значений, которые ему пришлось идентифицировать. Это очень муторная и кропотливая работа. Знаю не понаслышке, потому что мы делали то же самое с таблицей кодов для Tales of Phantasia (PS1). Кстати, в некоторых местах таблица у него неточная. Это я заметил уже в процессе работы над проектом. Поэтому со временем эту таблицу пришлось подкорректировать в соответствии с правильными значениями. Для наглядности приведу несколько примеров с изменениями:

было > стало
E27B=洲 > E27B=秀
E27C=秀 > E27C=秋
E27D=完 > E27D=終
E27E=終 > E27E=繍
E27F=繍 > E27F=習

в) Затем я настраиваю преобразование кодов в приложении CODES (упоминал во 2-й главе), которое отдельно заказывал у RangerRus специально для таких вот манипуляций. Чтобы можно было сделать быстрое преобразование из обычной японской кодировки Shift-JIS в уникальные значения игры и обратно.

99 A3; 82 9f;
99 A4; 82 a0;
99 A5; 82 a1;
99 A6; 82 a2;
99 A7; 82 a3;
99 A8; 82 a4;
99 A9; 82 a5;
99 AA; 82 a6;
99 AB; 82 a7;
99 AC; 82 a8;

82 9f; 99 A3;
82 a0; 99 A4;
82 a1; 99 A5;
82 a2; 99 A6;
82 a3; 99 A7;
82 a4; 99 A8;
82 a5; 99 A9;
82 a6; 99 AA;
82 a7; 99 AB;
82 a8; 99 AC;

Этап 2. Преобразование кодировки текста

а) Теперь переходим непосредственно к описанию поиска текстов через оперативную память с последующим нахождением этого блока данных среди распакованных файлов игры. В первую очередь выбираем нужный текст на экране и делаем скриншот.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

б) Затем через программу для работы со скриншотами HprSnap выбираем нужную область текста, которую нужно распознать.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

в) После этого выбранную область вставляем в рабочее окно онлайн-сервиса Google Keep и дожидаемся обработки изображения. А потом жмём кнопку "Распознать текст".

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

г) Далее копируем распознанный текст в один из рабочих файлов программы CODES, а потом запускаем обработку файла для преобразования символов из кодировки Shift-JIS в кодировку игры.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

д) И после, имея на руках преобразованный файл, открываем текстовый файл с преобразованными кодами в любом удобном hex-редакторе и выбираем область текста, которую нужно будет искать в оперативной памяти.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

Этап 3. Поиск текстов через оперативную память

а) Открываем hex-редактор HxD, нажимаем в верхней строке "Инструменты", а потом выбираем пункт "Открыть основную память". Из представленного списка процессов выбираем эмулятор PCSX2 и нажимаем "ОК".

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

б) После того, как hex-редактор загрузит все значения эмулятора из оперативной памяти, открываем поиск с помощью горячих клавиш CTRL+F, затем выбираем вкладку "Hex-значения" и вставляем тот набор значений или текст, который я отметил в пункте "д": e8 93 9d 64 99 cd e8 fc 99 ba 99 b5 99 e3 99 c8. А теперь нажимаем "Найти всё" и ждём, когда редактор найдёт все адреса, в которых встречается данный текст.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

в) В появившемся списке найденных адресов просматриваем несколько совпадений, выбираем для проверки первый из них и сверяем его с нашим преобразованным текстовым файлом. Если всё совпадает, то это значит, что мы нашли область того самого файла, в котором находится данный текст.

Внимание!!! Бывает так, что некоторые найденные данные могут не находиться в том файле, который необходимо найти. Если в следующем шаге поиски не увенчались успехом, то нужно проверять остальные найденные совпадения до тех пор, пока не найдёте нужный файл. По большей части это происходит потому, что разработчики организовали скрипт игры таким образом, чтобы данные из определённых мест дополнительно копировались в отдельные области оперативной памяти. Поэтому во время поиска вы можете наткнуться на дубликаты этих данных. Ещё бывают случаи, когда текст в оперативной памяти конструируется из отдельных блоков разных строк, но при просмотре оперативной памяти это может выглядеть так, будто это одна целая строка.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

г) Теперь, когда в оперативной памяти найден файл с нужным нам текстом, можно приступить к поиску самого этого файла в распакованном архиве. Для этого мы открываем приложение Total Commander и находим директорию с распакованными файлами из архива DAT.BIN, а потом нажимаем в верхней строке на кнопку "Инструменты" и выбираем пункт "Поиск файлов". В открывшемся окне настраиваем поиск файлов в соответствии с тем, как указано на скриншоте ниже. Нужно обязательно поставить галочку в пункте "HEX-код", если мы будем искать текст из шестнадцатеричных значений. В поле с текстом вводим набор значений, который я отметил в пункте "д": e8 93 9d 64 99 cd e8 fc 99 ba 99 b5 99 e3 99 c8. После этого жмём на кнопку "Начать поиск" и ждём завершения. Как я показал на примере ниже, данный текст находится в файле 11190.bin. Это своеобразный текстовый файл, в котором находится весь текст хроники.

Внимание!!! На последнем этапе вам может показаться, что можно было пропустить поиск текста через оперативную память и после пункта "д" (выбор преобразованного текста) сразу приступить к пункту "и" (поиск с помощью Total Commander). Да, так сделать можно, и в какой-то момент вам будет сопутствовать удача, но рано или поздно вы столкнётесь с тем, что таким способом найти можно не все тексты. Потому что часто бывает, что текст находится совсем не там, где вы ищете с помощью Total Commander. Допустим, если какой-то из распакованных файлов – матрёшка, а в нём находится нужный нам текст, но он сжат или зашифрован, то поиск не увенчается успехом. Поиск текста через оперативную память позволяет убедиться в том, что текст действительно находится в оперативной памяти, и код игры его обрабатывает. Разумеется, при условии, что текст представлен в обычном виде, а не в виде глифов (бывают и такие случаи). Кроме того, поиск через оперативную память позволяет выбрать из найденной области любой диапазон значений и использовать их для дальнейшего поиска с помощью Total Commander. Также найденный текст можно попробовать изменить и посмотреть, как отобразятся изменения в реальном времени во время игрового процесса. Это очень удобно для проверки различных значений кодировки текста. А ещё данным методом можно искать в оперативной памяти не только текст, но и любые другие данные, если вы понимаете, как это нужно делать.

История русской локализации Tales of Rebirth (PS2). Глава 4. Разбор основных форматов и поиск данных в оперативной памяти

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Страница русской локализации Tales of Rebirth:
https://temple-tales.ru/translations_torps2.html

Наше основное сообщество по переводам ВКонтакте:
https://vk.com/temple_of_tales_translations

Наше сообщество по конкурсам ВКонтакте:
https://vk.com/temple_of_tales_quiz

🎵 Наше музыкальное сообщество ВКонтакте:
https://vk.com/temple_of_tales_music

Наш телеграм-канал:
https://t.me/temple_tales

Наш YouTube канал:
https://www.youtube.com/@temple-tales

16
1
1
4 комментария