GAME.PAK (Chinatown Wars) — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
м (PSP)
(Ресурсы)
Строка 78: Строка 78:
 
= Ресурсы =
 
= Ресурсы =
  
== Таблицы ресурсов ==
+
== Mobile (Android, iOS) ==
  
== Текстуры ==
+
=== Таблицы ресурсов ===
  
== Модели ==
+
=== Текстуры ===
  
== Блоки карты ==
+
2b - USHORT  - Ширина
 +
2b - USHORT  - Высота
 +
2b - USHORT  - Формат пиксельных данных
 +
1b - UCHAR    - Глубина цвета
 +
1b - BOOL    - Навявность альфа-канала
 +
4b - UINT    - Размер пиксельных данных (может быть неверным, если пиксельные данные хранятся в формате с компрессией)
 +
Xb - UCHAR[X] - Пиксельные данные
  
 +
Пиксельные данные могут храниться в таких форматах:
 +
{| {{Таблица}}
 +
|-
 +
! Формат !! Название !! Описание
 +
|-
 +
| 0x1906 || PIXEL_ALPHA || 8-битный A
 +
|-
 +
| 0x1907 || PIXEL_RGB || 32-битный или 16-битный XRGB
 +
|-
 +
| 0x1908 || PIXEL_RGBA || 32-битный или 16-битный ARGB
 +
|-
 +
| 0x1909 || PIXEL_LUMINANCE || 8-битный L
 +
|-
 +
| 0x190A || PIXEL_LUMINANCE_ALPHA || 16-битный AL
 +
|-
 +
| 0x8032 || PIXEL_PACKED_R3G3B2 || 16-битный RGB
 +
|-
 +
| 0x8033 || PIXEL_PACKED_A4R4G4B4 || 16-битный ARGB
 +
|-
 +
| 0x8034 || PIXEL_PACKED_A1R5G5B5|| 16-битный ARGB
 +
|-
 +
| 0x8035 || PIXEL_PACKED_A8R8G8B8 || 32-битный ARGB
 +
|-
 +
| 0x8036 || PIXEL_PACKED_A2R10G10B10 || 32-битный ARGB
 +
|-
 +
| 0x8363 || PIXEL_RGB || 32-битный или 16-битный XRGB
 +
|-
 +
| 0x83F0 || PIXEL_DXT1_RGB || Компрессия DXT1
 +
|-
 +
| 0x83F3 || PIXEL_DXT5_RGB || Компрессия DXT5
 +
|-
 +
| 0x87EE || PIXEL_ATC_RGBA || Компрессия ATC
 +
|-
 +
| 0x8C00 || PIXEL_PVRTC_RGBA || Компрессия PVRTC
 +
|-
 +
| 0x8C01 || PIXEL_PVRTC_RGBA || Компрессия PVRTC
 +
|-
 +
| 0x8C02 || PIXEL_PVRTC_RGBA || Компрессия PVRTC
 +
|-
 +
| 0xBEEF || PIXEL_PNG_RGBA || Пиксельные данные - это PNG-файл (включая заголовки)
 +
|}
 +
 +
=== Модели ===
 +
 +
=== Блоки карты ===
 +
 +
== PSP ==
  
 
[[Категория:Форматы файлов]]
 
[[Категория:Форматы файлов]]

Версия 16:19, 21 мая 2015

GAME.PAK - основной архив ресурсов GTA Chinatown Wars. Используется во всех версиях игры (Android, iOS, PSP, Nintendo DS). Формат архива и ресурсов одинаковый в Android и iOS версиях, в версии для PSP используется другой формат. GAME.PAK содержит такие ресурсы, как:

  • текстуры
  • модели
  • аналоги .dat файлов из других серий GTA (в бинарном виде)
  • таблицы ресурсов (ресурс, который ссылается на другие ресурсы)
  • блоки карты - ресурс, который одновременно содержит модели карты (здания, дороги и пр.) и информацию об их расположении

Содержание

Общая структура файла

Mobile (Android, iOS)

4b     - UINT          - Версия файла (обычно 1)
12b    - UINT[3]       - "Границы" запаковки ресурсов
4b     - UINT          - Количество ресурсов в архиве
4b     - UINT          - Число, используемое для расчёта офсета второй таблицы ресурсов (для получения офсета это число умножается на 4096)
4072b  - USHORT[2036]  - Первая таблица офсетов - числа, используемые для расчёта офсета ресурсов
Xb     - UCHAR[X]      - Ресурсы (каждый ресурс выравнен в размере в 4096 байт)
Xb     - USHORT[X]     - Вторая таблица офсетов - числа, используемые для расчёта офсета ресурсов

Общее кол-во офсетов в таблицах равно кол-ву ресурсов. Для расчёта офсета ресурса применяется такой алгоритм:

// resourceId - Id ресурса
// pResourceOffsets - указатель на массив/массив чисел из двух таблиц ресурсов (числа из второй таблицы следуют за числами из первой)
// ranges - массив чисел, "границы" запаковки ресурсов
unsigned int getResourceOffset(unsigned int resourceId)
{
    unsigned int offset = pResourceOffsets[resourceId] * 4096;
    if(resourceId >= ranges[0])
    {
        if(resourceId >= ranges[1])
        {
            if(resourceId >= ranges[2])
                offset += 0x30000000;
            else
                offset += 0x20000000;
        }
        else
            offset += 0x10000000;
    }
    return offset;
}

PSP

4b     - UINT          - Версия файла ('PK01' или 'PK02')
# Если версия файла - 'PK01'
8b     - UINT[2]       - "Границы" запаковки ресурсов.
# Если версия файла - 'PK02'
32b    - UINT[8]       - "Границы" запаковки ресурсов.
#
4b     - UINT          - Количество ресурсов в архиве
4b     - UINT          - Офсет на ресурсы (офсет на первый ресурс)
Xb     - USHORT[X]     - Таблица офсетов - числа, используемые для расчёта офсета ресурсов (кол-во офсетов равно кол-ву ресурсов)
Xb     - UCHAR[X]      - Выравнивание (в 2048 байт)
Xb     - UCHAR[X]      - Ресурсы (каждый ресурс выравнен в размере в 2048 байт)

Для расчёта офсета ресурса применяется такой алгоритм:

// resourceId - Id ресурса
// pResourceOffsets - указатель на массив/массив чисел таблицы ресурсов
// ranges - массив чисел, "границы" запаковки ресурсов
// resourcesOffset - офсет на ресурсы
unsigned int getResourceOffset(unsigned int resourceId)
{
    unsigned int offset = pResourceOffsets[resourceId] * 2048;
    for(int i = 0; i < 8; i++) // 2 итерации вместо 8, если версия файла - 'PK01'
    {
        if(resourceId >= ranges[i])
            offset += 0x8000000;
        else
            break;
    }
    return offset + resourcesOffset;
}

Ресурсы

Mobile (Android, iOS)

Таблицы ресурсов

Текстуры

2b - USHORT   - Ширина
2b - USHORT   - Высота
2b - USHORT   - Формат пиксельных данных
1b - UCHAR    - Глубина цвета
1b - BOOL     - Навявность альфа-канала
4b - UINT     - Размер пиксельных данных (может быть неверным, если пиксельные данные хранятся в формате с компрессией)
Xb - UCHAR[X] - Пиксельные данные

Пиксельные данные могут храниться в таких форматах:

Формат Название Описание
0x1906 PIXEL_ALPHA 8-битный A
0x1907 PIXEL_RGB 32-битный или 16-битный XRGB
0x1908 PIXEL_RGBA 32-битный или 16-битный ARGB
0x1909 PIXEL_LUMINANCE 8-битный L
0x190A PIXEL_LUMINANCE_ALPHA 16-битный AL
0x8032 PIXEL_PACKED_R3G3B2 16-битный RGB
0x8033 PIXEL_PACKED_A4R4G4B4 16-битный ARGB
0x8034 PIXEL_PACKED_A1R5G5B5 16-битный ARGB
0x8035 PIXEL_PACKED_A8R8G8B8 32-битный ARGB
0x8036 PIXEL_PACKED_A2R10G10B10 32-битный ARGB
0x8363 PIXEL_RGB 32-битный или 16-битный XRGB
0x83F0 PIXEL_DXT1_RGB Компрессия DXT1
0x83F3 PIXEL_DXT5_RGB Компрессия DXT5
0x87EE PIXEL_ATC_RGBA Компрессия ATC
0x8C00 PIXEL_PVRTC_RGBA Компрессия PVRTC
0x8C01 PIXEL_PVRTC_RGBA Компрессия PVRTC
0x8C02 PIXEL_PVRTC_RGBA Компрессия PVRTC
0xBEEF PIXEL_PNG_RGBA Пиксельные данные - это PNG-файл (включая заголовки)

Модели

Блоки карты

PSP