Отправлено 19 July 2010 - 10:03
Несколько слов по поводу локализации VCS. Текст все еще в стадии исправления и вычитки ошибок. Кроме того практически завершена работа над инсталлятором, в который была добавлена функция выбора компонентов локализации. Таким образом пользователь сам сможет выбрать устанавливать ему или нет русификацию текстур и загрузочных экранов (просто некоторым игрокам локализация графического контента может быть не совсем по душе).
Начал делать шрифты для LCS. Судя по всему теперь удастся задействовать всю раскладку символов, чего не удалось сделать в VCS. Таким образом появляется возможность оставить некоторые элементы текста на английском (хотя на деле это явно не за чем). Вообще, по ходу работы со шрифтами нашлось несколько интересных файлов по поводу game.dtz.
Как известно, я уже давно частично разбирал этот файл и находил в нем сжатые текстурные директории (текстуры шрифта, меню и много текстур радара). Все, что я публиковал по этому поводу, на самом деле не совсем так. Текущая публичная версия моей программы DTZ editor работает с этими сжатыми файлами не совсем правильно и если говорить точнее - некорректна процедура импортирования. Наглядно проверить это просто - взять оригинальный game.dtz, извлечь из него текстуры, изменить их и снова собрать. В подавляющем числе случаев размер измененного файла в сжатом виде превысит размер оригинального и игра зависнет при запуске (поскольку в памяти отводится меньшее число байт). Исправить ситуацию можно либо путем добавления ряда проверок в саму программу, либо путем коренного изменения dtz и пересчета всех указателей (что достаточно затруднительно). При создании game.dtz Rockstar использовали достаточно продвинутый С++ - с многоуровневыми шаблонами. Именно это и затрудняет выведение четкой структуры, поскольку на деле в файле получилось очень много перекликающихся массивов. Полную структуру без реверсинга ps2 executable не вывести (у меня с asm проблемы).
Текущая версия моей программы для работы с текстурами в ресурсах LCS/VCS поддерживает просмотр и редактирование PS2-текстур в обычных директориях с сигнатурой "xet" в заголовке полностью (*.xtx, *.chk) и частично - game.dtz. Из-за тех нюансов со сжатыми файлами внутри dtz стоит ограничиться просмотром/редактированием только для несжатых директорий, а для сжатых реализовать только просмотр.
И немного по поводу скриптов - именно они, по идее, могут стать приоритетным направлением моддинга LCS/VCS. Типичный scm GTA-скриптинг основывался не на декомпилировании, а на дизассембелировании. Это значит, что при чтении scm-файла выводился текст не с высокоуровневыми конструкциями циклов, а с безусловными переходами. Все это различные вариации goto - jump, jmpf, jmpt, а так же gosub, который подразумевает return.
После декомпиляторов кода IV такого рода скриптинг является немного непривычным для меня (да и для других людей тоже в перспективе может стать неудобным) и поэтому возникает идея сделать более сложный декомпилятор с идиомным анализом. Вся проблема в том, что теория декомпилирования с построением абстрактного синтаксического дерева и всеми соответствующими общепринятыми стадиями, достаточно не проста (еще в IV у меня возникали с этим проблемы и вопросы, из-за чего пришлось ограничиться дизассемблером). Единственный известный мне труд по теории - книга "Reverse Compilation Techniques" ("Теория обратной компиляции"), которую мне давал listener.
Однако при том беспорядке безусловных переходов в скриптах LCS/VCS читать код "с листа" и ориентироваться в нем достаточно сложно (ведь в оригинале все это были вложенные циклы и условия).
Преобразование опкодов в команды бессмысленно, зато может иметь смысл преобразование безусловных переходов в конструкции. Все это, однако, на уровне идеи (пока что). Поэтому и хочу спросить ваше, читатели, мнение.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012