IMG архив
Материал из GTAModding.ru
Версия от 12:39, 16 июля 2013; Lego (обсуждение | вклад)
В *.img
архивах GTA, в основном, хранятся игровые модели, текстуры, файлы коллизий, бинарные ipl, транспортные и пешеходные пути, анимации, а так же внешние скрипты. IMG архив имеет расширение .img
. Эти архивы разделяются на версии и имеют схожий между собой формат (за исключением версии, используемой GTA 4).
Содержание |
Структура
Версия 1 - GTA III, GTA VC, GTA LCS, GTA VCS
Архивы первой версии включают в себя:
- IMG - файловый архив, содержащий непосредственно игровые ресурсы, обычно имеет разрешение
*.img
; - DIR - директория содержимого архива, в котором указана информация, о файлах, содержащихся в IMG. Как правило, имеет разрешение
*.dir
.
Формат *.img
разрабатывался для использования на DVD или CD (от сюда, скорее всего, и внутреннее название - CDIMAGE), поэтому размер и смещение файлов кратны сектору DVD (2048 байт). Даже если файл имеет размер менее 2-х КБ (например, 218 байт), то в архиве он будет занимать 2 КБ. Файлы в архиве, как правило, не сортированы, не сжаты и располагаются "друг за другом" (никакой древовидной иерархии).
Чтобы найти общее количество элементов (файлов) в *.img
архиве, необходимо разделить размер DIR- файла на 32.
Содержимое DIR представляет собой массив элементов по 32 байта на каждый:
Элемент (повторяется n-раз, где n - общее количество элементов): 4 байта - DWORD - смещение файла (в блоках) в *.img архиве, относительно его начала 4 байта - DWORD - размер файла (в блоках) в *.img архиве 24 байта - CHAR[24] - имя файла
В IMG-архиве файлы, как говорилось ранее, расположены в блоках по 2 КБ.
В GTA LCS и VCS к первой версии относятся только архивы CUTS.IMG, MOCAP.IMG, GTA3PS2.IMG, GTA3PSP.IMG и GTA3PSPHR.IMG
, все остальные относятся к версии 1А. Кроме того, такие игры используются, к примеру, в Bully: Schoolarship Edition.
У GTA3PS2.IMG, GTA3PSP.IMG и GTA3PSPHR.IMG есть своя особенность - отсутствие вышеописанного DIR-файла в открытом виде из-за того, что данные архивы загружаются игрой через несколько DIR - свой для объектов анимации, динамических объектов и свой для текстур.
Дополнительные архивы
При помощи gta_vc.dat или gta.dat можно подключать к игре свои IMG-архивы. Формат следующий:
CDIMAGE MODELS\FOO.IMG
При этом IMG и DIR должны иметь одинаковые имена и располагаться в директории ..\models\
Версия 1А - GTA:LCS и GTA:VCS
Единственная особенность данной версии *.img
-архивов - отсутствие DIR-файла. Общим с версией 1 осталось только то, что файлы выравнены по размеру сектора (2048 байт). Загрузка файлов из архива реализовано за счёт переходов (офсетов) из определённых точек ведущего (master WRLD) в ведомые (slave WRLD) файлы архивов. Для того, чтобы распаковать всё содержимое архивов, нужно распаковать master WRLD из архива с расширением LVZ (с помощью любого Zlib-распаковщика, например встроенного в Stories WRLD Tool) и найти там таблицы начал для slave WRLD и подчинённых к ним текстур радаров, по которым можно определить, к какой части карты относится содержимое slave WRLD. Каждая строка, состоящая из 32 байт, является глобальным заголовком slave WRLD и в конце содержит офсет на продолжение в одноимённом с LVZ *.img
-архиве. Автоматическую распаковку таких архивов производит утилита unimg. Извлечение WRLD из *.img
, а так же просмотр и извлечение ресурсов из WRLD реализовано в Stories WRLD Tool, просмотр и редактирование текстур в WRLD возможно с помощью GTA Stories Texture Explorer.
Однако, так как теоретически, DIR-файл для такого архива может быть построен. Для того чтобы создать такой архив, нужно либо извлечь таблицу файлов из game.dtz, либо составить "безымянный" DIR на основе поиска заголовков файлов, например, при по помощи программы YAIE.
Версия 2 - GTA SA
Архивы второй версии, используемые в GTA San Andreas, представляют собой комбинированный DIR и IMG в одном *.img
-файле. Таблица файлов имеет такую же структуру, как и в формате 1-ой версии, но располагается в начале *.img
файла. Файлы так же размещены в блоках по 2 КБ. Смещения файлов задаются от начала самого архива, а не от конца списка файлов.
Заголовок: 4 байта - CHAR[4] - сигнатура архива, всегда имеет значение "VER2" 4 байта - DWORD - общее количество элементов (файлов) Элемент: (повторяется n-раз, где n - общее количество элементов): 4 байта - DWORD - смещение файла (в блоках) в архиве 4 байта - DWORD - размер файла (в блоках) 24 байта - CHAR[24] - имя файла
Недостаток этого формата - неудобство его расширяемости. Если вы добавите слишком много файлов, директория начнёт записываться поверх первых файлов в архиве, поэтому вам нужно будет записывать первые файлы в конец архива.
Дополнительные архивы
При помощи gta.dat можно подключать к игре свои IMG-архивы. Формат следующий:
IMG MODELS\FOO.IMG
Изначально, GTA San Andreas поддерживает 8 IMG-архивов, 5 из которых можно подключить через gta.dat. Данный лимит можно поднять, воспользовавшись IMG Limit Adjuster.
Версия 3 - GTA IV
Данная версия архива имеет более сложную структуру. Общим со старыми версиями осталось только то, что файлы выравнены по размеру сектора (2048 байт). Каталог архива может быть зашифрован.
Заголовок
Заголовок файла всегда равен 20 байтам.
4 байта - DWORD - Идентификатор (0xA94E2A52) Если, это поле имеет другое значение, архив зашифрован 4 байта - DWORD - Версия (всегда 3) 4 байта - DWORD - Количество объектов 4 байта - DWORD - Размер каталога (в байтах) 2 байта - WORD - Размер элемента каталога (всегда должен быть равен 0x10) 2 байта - WORD - Неизвестно
Каталог архива
Каталог архива состоит из двух частей: описателей файлов, содержащих смещение и размер файла внутри архива и имен файлов. В зависимости от способа загрузки файла, формат полей описателя может отливаться. Для RSC, указывается размер и количество выделяемых блоков памяти (страниц), для обычных файлов, указывается общая длина.
Определить, какой из форматов описателя используется (RSC/не RSC), можно по старшему биту поля dwLength (для RSC он равен 1)
В начале идет массив описателей по 16 байт:
Размер | Имя поля | Назначение | RSC-файлы | Остальные файлы |
---|---|---|---|---|
4 byte - DWORD | dwLength | Размер объекта в памяти | Поле флагов из заголовка RSC | Размер объекта |
4 byte - DWORD | dwVersion | Версия ресурса | Поле версии из заголовка RCS | не используется |
4 byte - DWORD | dwOffset | Позиция в IMG | Смещение в блоках | Смещение в блоках |
2 byte - WORD | wSectorCount | Размер объекта на диске | Кол-во блоков | Кол-во блоков |
2 byte - WORD | wPaddingSize | Размер объекта на диске | PaddingSize+установлен бит 13 | PaddingSize |
PaddingSize - Размер неиспользуемого места в последнем блоке
За описателями следуют имена файлов, разделенные '\x0' (нулевым байтом), в том же порядке, что и описатели.
Чтение зашифрованных архивов
Если идентификатор архива не равен 0xA94E2A52
, архив считается зашифрованным.
Для чтения такого архива, следует прочитать заголовок (20 байт), но дешифровать только первые 16 байт.
После этого, следует снова проверить идентификатор. Если идентификатор корректный, следует считать каталог (размер берется из расшифрованного заголовка) и дешифровать его, округлив размер до числа кратного 16, вниз. (Например, если указан размер 259 байт, дешифруются только первые 256).
Шифрование - стандартное для IV - AES.
Ссылки
Компоненты для работы с IMG, RPF, WTD для Delphi