IMG архив — различия между версиями
Материал из GTAModding.ru
Dageron (обсуждение | вклад) (Про Stories img/lvz и прочие архивы разговор отдельный должен быть.) |
Dageron (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | В '''IMG архивах''' GTA в основном хранятся игровые модели, текстуры, транспортные и пешеходные пути, анимации, а так же [[Внешние скрипты|внешние скрипты]]. IMG архив имеет расширение <code>.img</code>. Эти архивы разделяются на версии и имеют схожий между собой формат (за исключением версии, используемой GTA 4). | + | В '''<code>[[IMG|*.img]]</code> архивах''' GTA в основном хранятся игровые модели, текстуры, транспортные и пешеходные пути, анимации, а так же [[Внешние скрипты|внешние скрипты]]. IMG архив имеет расширение <code>.img</code>. Эти архивы разделяются на версии и имеют схожий между собой формат (за исключением версии, используемой GTA 4). |
== Структура == | == Структура == | ||
=== Версия 1 - GTA III & VC === | === Версия 1 - GTA III & VC === | ||
− | Архивы первой версии, используемые в GTA III и Vice City, разделены на два файла: директория содержимого архива <code>.dir</code> и сам архив, содержащий файлы <code>.img</code>. | + | Архивы первой версии, используемые в [[GTA III]] и [[Vice City]], разделены на два файла: директория содержимого архива <code>*.dir</code> и сам архив, содержащий файлы <code>[[IMG|*.img]]</code>. |
− | Директория содержит список файлов, их имена, смещение и размер. Изначально формат IMG оптимизировался для использования на DVD или CD, поэтому размер и смещение файлов кратны сектору DVD (2048 байт). Даже если файл имеет размер менее 2-х КБ (например, 218 байт), то в архиве он будет занимать 2 КБ. Файлы (обычно) не сортированы, не сжаты и располагаются "друг за другом" (никакой древовидной иерархии). | + | Директория содержит список файлов, их имена, смещение и размер. Изначально формат <code>[[IMG|*.img]]</code> оптимизировался для использования на DVD или CD, поэтому размер и смещение файлов кратны сектору DVD (2048 байт). Даже если файл имеет размер менее 2-х КБ (например, 218 байт), то в архиве он будет занимать 2 КБ. Файлы (обычно) не сортированы, не сжаты и располагаются "друг за другом" (никакой древовидной иерархии). |
− | Чтобы найти общее количество элементов (файлов) в IMG архиве, необходимо разделить размер .dir файла на 32. | + | Чтобы найти общее количество элементов (файлов) в <code>[[IMG|*.img]]</code> архиве, необходимо разделить размер *.dir файла на 32. |
Файл директории не имеет заголовка, просто массив элементов по 32 байта на каждый: | Файл директории не имеет заголовка, просто массив элементов по 32 байта на каждый: | ||
Строка 14: | Строка 14: | ||
Элемент (повторяется n-раз, где n - общее количество элементов): | Элемент (повторяется n-раз, где n - общее количество элементов): | ||
− | 4 байта - DWORD - смещение файла (в блоках) в .img архиве, относительно его начала | + | 4 байта - DWORD - смещение файла (в блоках) в *.img архиве, относительно его начала |
− | 4 байта - DWORD - размер файла (в блоках) в .img архиве | + | 4 байта - DWORD - размер файла (в блоках) в *.img архиве |
24 байта - CHAR[24] - имя файла | 24 байта - CHAR[24] - имя файла | ||
Сам IMG архив не имеет заголовка, просто файлы, как говорилось ранее, расположенные в блоках по 2 КБ. | Сам IMG архив не имеет заголовка, просто файлы, как говорилось ранее, расположенные в блоках по 2 КБ. | ||
− | [[Изображение:IMG_file_alloc.png|center|Схема распределения файлов в IMG архиве]] | + | [[Изображение:IMG_file_alloc.png|center|Схема распределения файлов в <code>[[IMG|*.img]]</code> архиве]] |
===Версия 1А - GTA:LCS и GTA:VCS=== | ===Версия 1А - GTA:LCS и GTA:VCS=== | ||
− | Структура [[IMG]]-архива Stories не отличается от структуры версии 1 | + | Структура <code>[[IMG|*.img]]</code>-архива Stories не отличается от структуры версии 1, однако отсутствует <code>.dir</code> файл в открытом виде (исключение - <code>CUTS.IMG</code> [[GTA:LCS]] и <code>MOCAP.IMG</code> [[GTA:VCS]]). Для того чтобы открыть такой архив нужно либо извлечь данные директории из [[DTZ|game.dtz]] (имена файлов, их смещение и размер находятся именно там), либо составить <code>.dir</code> таблицу файлов (причем второй вариант оказался гораздо более простым и данная функция есть в [[YAIE]] - таблица директории формируется исходя из заголовков самих файлов). |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | Для того чтобы открыть такой архив нужно либо извлечь данные директории из [[DTZ|game.dtz]], либо составить <code>.dir</code> таблицу файлов (причем второй вариант оказался гораздо более простым и данная функция есть в [[YAIE]] - таблица директории формируется исходя из заголовков самих файлов). | + | |
=== Версия 2 - GTA SA === | === Версия 2 - GTA SA === | ||
− | Архивы второй версии, используемые в GTA San Andreas, содержат <code>.dir</code> и <code>.img</code> файлы в одном IMG файле. Директория имеет такой же формат, как и в формате 1-ой версии, но располагается в начале IMG файла. Файлы так же размещены в блоках по 2 КБ. Смещения файлов задаются ''от начала самого архива'', а не от конца списка файлов. | + | Архивы второй версии, используемые в GTA San Andreas, содержат <code>.dir</code> и <code>.img</code> файлы в одном <code>[[IMG|*.img]]</code> файле. Директория имеет такой же формат, как и в формате 1-ой версии, но располагается в начале <code>[[IMG|*.img]]</code> файла. Файлы так же размещены в блоках по 2 КБ. Смещения файлов задаются ''от начала самого архива'', а не от конца списка файлов. |
Заголовок: | Заголовок: |
Версия 14:05, 4 июля 2010
В *.img
архивах GTA в основном хранятся игровые модели, текстуры, транспортные и пешеходные пути, анимации, а так же внешние скрипты. IMG архив имеет расширение .img
. Эти архивы разделяются на версии и имеют схожий между собой формат (за исключением версии, используемой GTA 4).
Содержание |
Структура
Версия 1 - GTA III & VC
Архивы первой версии, используемые в GTA III и Vice City, разделены на два файла: директория содержимого архива *.dir
и сам архив, содержащий файлы *.img
.
Директория содержит список файлов, их имена, смещение и размер. Изначально формат *.img
оптимизировался для использования на DVD или CD, поэтому размер и смещение файлов кратны сектору DVD (2048 байт). Даже если файл имеет размер менее 2-х КБ (например, 218 байт), то в архиве он будет занимать 2 КБ. Файлы (обычно) не сортированы, не сжаты и располагаются "друг за другом" (никакой древовидной иерархии).
Чтобы найти общее количество элементов (файлов) в *.img
архиве, необходимо разделить размер *.dir файла на 32.
Файл директории не имеет заголовка, просто массив элементов по 32 байта на каждый:
Элемент (повторяется n-раз, где n - общее количество элементов): 4 байта - DWORD - смещение файла (в блоках) в *.img архиве, относительно его начала 4 байта - DWORD - размер файла (в блоках) в *.img архиве 24 байта - CHAR[24] - имя файла
Сам IMG архив не имеет заголовка, просто файлы, как говорилось ранее, расположенные в блоках по 2 КБ.
Версия 1А - GTA:LCS и GTA:VCS
Структура *.img
-архива Stories не отличается от структуры версии 1, однако отсутствует .dir
файл в открытом виде (исключение - CUTS.IMG
GTA:LCS и MOCAP.IMG
GTA:VCS). Для того чтобы открыть такой архив нужно либо извлечь данные директории из 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] - имя файла
Недостаток этого формата - неудобство его расширяемости. Если вы добавите слишком много файлов, директория начнёт записываться поверх первых файлов в архиве, поэтому вам нужно будет записывать первые файлы в конец архива.
Версия 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.
GTA IV | .dat • .gxt • .ide • .img • .ipl • .nod • .sco • .rpf • .rrr • .wad • .wbd/.wbn • .wdd • .wdr • .wft • .whm • .wpl • .wtd |
VCS/LCS | .anim • .at3 • .chk • .xtx • .dtz • .img • .lvz • .wrld • .mdl • .raw • .scm |
GTA SA | .dat • .dff • .gxt • .ide • .img • .ipl • .scm • .rrr • .txd |
GTA VC | .anm • .adf • .dat • .dir • .dff • .gxt • .ide • .img • .ipl • .scm • .txd |