| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Get control of your email attachments. Connect all your Gmail accounts and in less than 2 minutes, Dokkio will automatically organize your file attachments. You can also connect Dokkio to Drive, Dropbox, and Slack. Sign up for free.

View
 

Описание формата STI

Page history last edited by Little Alien 11 years, 3 months ago

EN RU


 

STСI (Sir-Tech's Crazy Image) формат

by pipetz

 

Формат STСI используется для хранения графических объектов в игре Jagged Alliance 2. Каждый STСI файл может содержать одно или несколько изображений. Изображения кодируются с помощью 16-битного (16bppRGB565) или 8-битного (8bppIndexed) алгоритмов. 16-битные файлы содержат всегда только одно изображение, большая часть их находится в папке LOADSCREENS.

 

 

Заголовок (64 байта, структура STCIHeader)

 

Структура STCIHeader описана в Standard Gaming Platform\imgfmt.h.

 

1-4 байты – буквы “STCI” идентификатор формата.

5-8 байты – исходный размер изображений в байтах. Для файлов содержащих несколько изображений здесь хранится бессмысленное большое число.

9-12 байты – размер изображений в байтах после сжатия.  

13-16 байты – номер прозрачного цвета в палитре, всегда равно 0. Имеет смысл только для 8-битных файлов.

17-20 байты – флаги.

  1 бит – всегда равен 0, назначение неясно (STCI_TRANSPARENT).

  2 бит – всегда равен 0, назначение неясно (STCI_ALPHA).

  3 бит – 1 если файл 16-битный (STCI_RGB).

  4 бит – 1 если файл 8-битный (STCI_INDEXED).

  5 бит – 1 если алгоритм сжатия ZLIB (STCI_ZLIB_COMPRESSED).

  6 бит – 1 если алгоритм сжатия ETRLE (STCI_ETRLE_COMPRESSED).

  7-32 биты – всегда равны 0, не используются.

Повидимому, флаги всегда равны 4, 40 или 41.

  4 – для 16-битных файлов.

  40 – для 8-битных неанимированных файлов.

  41 – для 8-битных анимированных файлов.

21-22 байты – высота изображения в пикселях. Имеет смысл только для 16-битных файлов.

23-24 байты – ширина изображения в пикселях. Имеет смысл только для 16-битных файлов.

 

Значение следующих 20 байт разнится в зависимости от алгоритма кодирования.

 

25-44 байты для 16-битных файлов:

 

25-28 байты – маска красного цвета. Повидимому, всегда равна 63488

(00000000 00000000 11111000 00000000) .

29-32 байты – маска зелёного цвета. Повидимому, всегда равна 2016

(00000000 00000000 00000111 11100000) .

33-36 байты – маска синего цвета. Повидимому, всегда равна 31

(00000000 00000000 00000000 00011111) .

37-40 байты – маска альфа канала. Повидимому, всегда равна 0.

41  байт – глубина красного цвета. Повидимому, всегда равна 5.  

42  байт – глубина зелёного цвета. Повидимому, всегда равна 6.

43 байт – глубина синего цвета. Повидимому, всегда равна 5.

44 байт – глубина альфа канала. Повидимому, всегда равна 0.

Значения масок и глубин цветов соответствует алгоритму кодирования 16bppRGB565.

 

25-44 байты для 8-битных файлов:

 

25-28 байты – число цветов в палитре, повидимому всегда равно 256.

29-30 байты – число изображений в файле.

31 байт – глубина красного цвета. Повидимому, всегда равна 8.

32 байт – глубина зелёного цвета. Повидимому, всегда равна 8.

33 байт – глубина синего цвета. Повидимому, всегда равна 8.

34-44 байты – не используются.

Алгоритм кодирования 8-битных файлов – 8bppIndexed c 24-битной палитрой на 256 цветов.

 

45 байт – глубина цвета. Число бит на пиксель. Равен 8 для  8-битных файлов, и 16 для 16-битных.

46-49 байты – размер данных приложения (Application Data) в байтах. Не равно нулю только для анимированных файлов. Повидимому, всегда равно колличеству изображений умноженное на 16.  

49-64 байты – не используются.

 

Повидимому, существует тип STCI файлов, в которых 46-48 байты не используются размер данных приложения при этом сдвигается на три байта. Возможно это зависит от локализации. В .NET StiEditore используется именно такой порядок байт.

 

 

Изображения

 

В 16-битных файлах после заголовка и до конца файла идут данные изображения закодированые в формате 16bppRGB565.

 

В 8-битных файлах после заголовка файла идут  256 * 3 = 768 байт палитры.

После палитры идут заголовки изображений, которые занимают (кол-во изображений) * 16 байт.

 

 

 

Заголовок изображения(16 байт, структура STCISubImage)

 

Структура STCISubImage описана в Standard Gaming Platform\imgfmt.h.

 

1-4 байты – сдвиг в байтах от начала данных изображений до начала данных данного изображения. Для первого изображения равен 0. Для второго – размер первого и т. д.

5-8 байты – размер данных изображения в байтах.

9-10 байты – смещение левого верхнего угла изображения по горизонтали в пикселях.

11-12 байты – смещение левого верхнего угла  изображения по вертикали в пикселях.

Для анимированных файлов смещения отсчитываются от центра изображения тайла, для неанимироанных от левого верхнего угла изображения тайла.  

13-14 байты – высота изображения в пикселях.

15-16 байты – ширина изображения в пикселях.

 

После заголовков изображений идут данные изображений. Каждый байт соответствует порядковому номеру цвета пикселя в палитре. Данные изображений сжаты алгоритмом сжатия ETRLE, о котором ниже. Алгоритмом сжатия ZLIB, повидимому, не использется.

Неанимированные 8-битные файлы на этом заканчиваются

 

У анимированных файлов есть ещё данные приложения (Application Data). Размер – (кол-во изображений) * 16.  

Данные приложения хранятся в структурах AuxObjectData. Aux - повидимому сокращение от "auxiliary" - вспомогательный.

 

Структура AuxObjectData описана в Standard Gaming Platform\imgfmt.h.

 

Для изображений являющихся началом нового ракурса (направления)

1 байт - ориентация стены (ubWallOrientation). Всегда равен 0.

2 байт - количество тайлов (ubNumberOfTiles). Всегда равен 0.

3-4 байт - координаты объекта в тайлах (usTileLocIndex). Всегда равен 0.

5-7 байты - не используются.

8 байт – текущий кадр (ubCurrentFrame). Всегда равен 0.

9 байт – равен числу изображений в данном ракурсе.

10 байт – флаги.

  1 бит - (AUX_FULL_TILE)

  2 бит - 1 если файл анимироанный (AUX_ANIMATED_TILE)

  3 бит - (AUX_DYNAMIC_TILE)

  4 бит - (AUX_INTERACTIVE_TILE)

  5 бит - (AUX_IGNORES_HEIGHT)

  6 бит - (AUX_USES_LAND_Z )

  7-8 бит - не используются.

Данные приложения есть только у анимированных файлов, флаги всегда равны 2.

11-16 байты – не используются.

 

Для изображений не являющихся началом нового ракурса (направления) все значения равны нулю.

 

 

 

Алгоритм сжатия ETRLE

 

Расшифровка аббривиатуры ETRLE не известна. Последние три буквы вероятно означают Run-Length Encoding.

 

Сжимаемая последовательность разбивается на подпоследовательности нулевых и ненулевых байт.  

Каждая последовательность нулевых байт заменяется на один байт, старший бит которого равен 1. А значение равно 128 плюс число нулей в подпоследовательности.  

Перед каждой последовательностью ненулевых байт ставится служебный байт, старший бит которого равен 0. А значение равно числу байт в подпоследовательности.

Если длина нулевой подпоследовательности более 127, то для её кодирования аналогичным образом используется несколько байт, тоже самое можно сказать и о ненулевых последовательностях.  

В конце каждой строки ставится нулевой байт (признак конца строки).  

 

 

Comments (0)

You don't have permission to comment on this page.