English version

.NET Sti Editor v 1.0

Программа для просмотра и редактирования файлов формата STI (Sir Tech Image).
Данный формат использован в ресурсах игры Jagged Alliance 2.

Содержание

  			1. Введение.
2. Главное окно.
3. Окно "Файлы".
4. Окно "Библиотека".
5. Окно "Рабочая область".
6. Окно "Проигрыватель".
Приложение. Описание формата STCI.
Appendix. STСI file format.

1. Введение.

Для работы программы необходим .NET Framework 2.0. Скачать можно здесь.
Системные требования для установки .NET Framework 2.0:

  • Поддерживаемые системы:
    • Windows ME;
    • Windows 98;
    • Windows 98 Second Edition;
    • Windows 2000 Service Pack 3;
    • Windows XP Service Pack 2
    • Windows Server 2003;
    • (На Vista предустановлен, ЕМНИП)
  • Требуемое ПО:
    • Windows Installer 3.0 (кроме Windows 98/ME, для которых сойдёт и 2.0).
      Windows Installer 3.1 рекомендуется.
    • IE 5.01.
  • Требуется дискового пространства: 280 MB (x86), 610 MB (x64)
Windows Installer 3.0, ЕМНИП, появился впервые в составе Service Pack 2 для XP.
Если у вас более старая система, Windows Installer 3.1 придётся скачать.

Исполняемый файл программы называется dotNetStiEditor.exe. Перед запуском
программы рекомендуется настроить конфигурационный файл dotNetStiEditor.EXE.config.

    Значения элементов конфигурационного файла.
  • "cultureInfo" - язык программы.
    • ru - русский
    • en - английский
    • de - немецкий
    По умолчанию - русский.
  • "RootDir" - корневая папка. Папка, в которой программа будет рекурсивно
    искать STI-файлы. Например: C:\ja2\Data.
  • "EditorPath" - путь к исполняемому файлу графического редактора, с помощью которого
    будут редактироватья кадры. Например: C:\WINDOWS\system32\mspaint.exe.
    Программа тестировалась с MS Paint и Adobe Fotoshop.
  • "EditorTempDir" - папка для временных файлов создаётся при старте и удаляется при
    закрытии .NET Sti Editor-а. По умолчанию: C:\WINDOWS\Temp\dotNetStiEditorTemp.

Другие файлы необходимые для работы программы:

  • WeifenLuo.WinFormsUI.Docking.dll, DockManager.dll - стыковка окон (докинг).
  • StiLib.dll - загрузка и конвертация STI в BMP, GIF, TIFF.
  • Localizer.dll - локализация.
  • de\Localizer.resources.dll - необходим для немецкой версии.
  • en\Localizer.resources.dll - необходим для английской версии.

2. Главное окно.

Главное окно является контейнером для всех остальных окон и содержит главное меню.
Остальные окна: окно "Файлы" (просмоторщик), окно "Библиотека" (библиотека),
окно "Рабочая область" (рабочая область), окно "Проигрыватель" (проигрыватель).
Окна можно располагать в произвольном порядке с помощью механизма докинга.
Конфигурация расположения окон сохраняется в файл Layout.user.config.

Главное меню программы:

  • "Файл"
    • "Открыть" - загружает STI или GIF файл в библиотеку.
  • "Справка"
    • "О программе"
    • "Помощь" - открывает файл help.htm. Если его нет в папке приложения,
      то загружает аналогичный файл из ресурсов программы.
  • "Окна"
    • "Бибилиотека", "Файлы", "Рабочая область", "Проигрыватель" - переключатели
      отображения/скрытия соответствующих окон.
    • "Показать все"
    • "Закрепить" - фиксирует расположение окон.
    • "Расположить по умолчанию" - располагает окна в соответствии с конфигурацией
      сохранённой в ресурсах программы.

3. Окно "Файлы".

Отображает дерево подпапок начиная с папки указанной в элементе "RootDir"
конфигурационного файла dotNetStiEditor.EXE.config. Если такого файла нет или указана
несуществующая папка, программа запрашивает корневую папку у пользователя и при закрытии
сохраняет её путь конфигурационный файл.

Служит для просмотра и загрузки интересующих файлов в библиотеку. Загрузка осуществляется
с помощью команды "Добавить в библиотеку" контекстного меню, или по двойному щелчку
ЛКМ. Поддерживается выделение и загрузка нескольких файлов или папок одновременно.

Фильтр "Ракурс" позволяет загружать при необходимости только какое-то одно направление.
Можно использовать для ускорения загрузки большого колличества файлов.
В правом верхнем углу просмоторщика находится кнопка "Обновить".

Если одна из подпапок корневой папки содержит очень много STI файлов (например это может
быть папка ANIMS), то при отображении в просмоторщике её можно разбить на виртуальные
подпапки. Для этого нужно поместить в папку программы XML файл, название которого
должно совпадать с названием разбиваемой папки. Пример структуры XML файла:

  <Название физической папки> 
   <Виртуальная подпапка 1> 
    <Виртуальная подпапка 1.1> 
      <Виртуальная подпапка 1.1.1> 
        <File> 
          <FileName>Имя файла 1.1.1.1</FileName> 
        </File> 
        <File> 
          <FileName>Имя файла 1.1.1.2</FileName> 
        </File> 
	...
        <File> 
          <FileName>Имя файла  1.1.1.n</FileName> 
        </File> 
      </Виртуальная подпапка 1.1.1> 
      <Виртуальная подпапка 1.1.2> 
        <File> 
          <FileName>Имя файла 1.1.2.1</FileName> 
        </File> 
        <File> 
          <FileName>Имя файла 1.1.2.2</FileName> 
        </File> 
	...
        <File> 
          <FileName>Имя файла 1.1.2.m</FileName> 
        </File>
      </Виртуальная подпапка 1.1.2> 
    </Виртуальная подпапка 1.1> 
    <File>
      <FileName>Имя файла 1.1</FileName> 
    </File> 
    <File> 
      <FileName>Имя файла 1.2</FileName> 
    </File> 
     ...
    <File> 
      <FileName>Имя файла  1.k</FileName> 
    </File> 
   </Виртуальная подпапка 1> 
  </Название физической папки> 

4. Окно "Библиотека".

Библиотека содержит файлы загруженные из просмоторщика.
Удалить файл из библиотеки можно выделив соответствующую строку и нажав кнопку Del
Все остальные команды библиотеки вызываются из контетстного меню и применяются к
выделенным ячейкам.
Контекстное меню:

  • "Просмотреть" - выделенные ячейки сортируются по номеру колонки и загружаются
    в левый спрайт проигрывателя.
  • "Копировать в буфер" - выделенные ячейки сортируются по номеру колонки и
    копируются в буфер.
  • "Просмотреть синхронно" - выделенные ячейки сортируются по номеру колонки и
    загружаются в правый спрайт проигрывателя, ячейки из буфера загружаются в левый
    спрайт проигрывателя.
  • "Добавить в рабочую область" - выделенные ячейки сортируются по номеру колонки
    и загружаются в рабочую область

5. Окно "Рабочая область".

Служит для создания новых и редактирования существующих STI файлов.
Меню окна "Рабочая область":

  • "Палитра"
    • "Волосы", "Штаны", "Кожа", "Фуфайка", "Тень" - установливает цвета
      соответствующих элементов анимации. Набор цветов загружается из файла палитры
      JA2PAL.DAT, если такого файла нет в папке программы, то из ресурсов программы.
    • "Сохранить..." - сохраняет текущую палитру как пользовательскую.
    • "Удалить..." - удаляет палитру выбранную пользователем.
    • "Исходная палитра" - установливает для анимации первоначальные цвета.
    • "Army", "Elit", "White John" ... - поьзовательские палитры
      загружаются из файла palettes.xml если его нет, то загружаются эти три из ресурсов.
      При закрытии программы пользовательские палитры сохраняются в palettes.xml.
  • "Редактирование"
    • "Автообновление" - включает/выключает автоматическую синхронизацию
      отредактированных кадров рабочей области и временных файлов из папки
      определённой элементом "EditorTempDir" конфигурационного файла
      dotNetStiEditor.EXE.config. Синхронизовать принудительно можно с помощью
      кнопки "Обновить" в правом верхнем углу окна.
Контекстное меню:
  • "Просмотреть" - выделенные ячейки сортируются по номеру колонки и загружаются
    в левый спрайт проигрывателя.
  • "Просмотреть синхронно" - выделенные ячейки сортируются по номеру колонки и
    загружаются в правый спрайт проигрывателя, ячейки из буфера загружаются в левый
    спрайт проигрывателя.
  • "Копировать в буфер" - выделенные ячейки сортируются по номеру колонки и
    копируются в буфер.
  • "Вставить из буфера" - ячейки из буфера вставляются перед первой выделенной
    не пустой ячейкой рабочей области.
  • "Редактировать" - сохраняет выделенные ячейки во временные BMP файлы в папку
    определённую элементом "EditorTempDir" конфигурационного файла
    dotNetStiEditor.EXE.config и загружает их в графический редактор.
  • "Удалить" - удаляет выделенные ячейки.
  • "Сохранить в..." - сохраняют выделенные ячейки в соответствующий формат. При сохранении в STI открывается форма "Разбивка по ракурсам". С помощью неё можно
    определить количество кадров в каждом направлении. Если сумма кадров по ракурсам
    не совпадает с общим количестом кадров сохранение становится невозможным.

6. Окно "Проигрыватель".

Служит для просмотра последовательности кадров в режиме анимаций или в режиме
покадрового просмотра и редактирования смещений кадров. Спомощью меню "Фон" можно
загрузить в качестве фона произвольную картинку через стандартный диалог или одним
щелчком ЛКМ загрузить картинку из папки "Background".
Для редактирования смещений надо загрузить последовательность кадров из рабочей
области отредактировать смещения и нажать кнопку "Сохранить смещения".

Вопросы отсылайте на egorov_av@mail.ru или спрашивайте на
www.ja2.su.
Кажись всё.

Приложение. Описание формата STCI.

STСI (Sir-Tech's Crazy Image) формат.
Формат 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. Содержание следующее: Для изображений являющихся началом нового ракурса (направления) 1-8 байты – равны нулю, назначение не ясно. 9 байт – равен числу изображений в данном ракурсе. 10 байт – равен 2, назначение не ясно. 11-16 байты – равны нулю, назначение не ясно. Для изображений неявляющихся началом нового ракурса (направления) 1-16 байты – равны нулю, назначение не ясно.
Алгоритм сжатия ETRLE.
Расшифровка аббривиатуры ETRLE не известна. Последние три буквы вероятно означают Run-Length Encoding. Сжимаемая последовательность разбивается на подпоследовательности нулевых и ненулевых байт. Каждая последовательность нулевых байт заменяется на один байт, старший бит которого равен 1. А значение равно 128 плюс число нулей в подпоследовательности. Перед каждой последовательностью ненулевых байт ставится служебный байт, старший бит которого равен 0. А значение равно числу байт в подпоследовательности. Если длина нулевой подпоследовательности более 127, то для её кодирования аналогичным образом используется несколько байт, тоже самое можно сказать и о ненулевых последовательностях. В конце каждой строки ставится нулевой байт (признак конца строки).

.NET Sti Editor v 1.0

Viewer/editor for STI (Sir Tech Image) files.
This format is used in resources for the game Jagged Alliance 2.

Contents

  			1. Introduction.
2. Main window.
3. "Files" window.
4. "Library" window.
5. "Working area" window.
6. "Player" window.
Appendix. STСI file format.

1. Introduction.

The program needs .NET Framework 2.0 to run. You can download it here.
System requirements for .NET Framework 2.0:

  • OS supported:
    • Windows ME;
    • Windows 98;
    • Windows 98 Second Edition;
    • Windows 2000 Service Pack 3;
    • Windows XP Service Pack 2
    • Windows Server 2003;
    • Windows Vista (pre-installed, AFAIR)
  • Software required:
    • Windows Installer 3.0 (except Windows 98/ME, for these 2.0 is enough).
      Windows Installer 3.1 recommended.
    • IE 5.01.
  • Disk space required: 280 MB (x86), 610 MB (x64)
Windows Installer 3.0 AFAIR was included in WinXP Service Pack 2 for the first time.
If your OS is older, you need to download Windows Installer 3.1.

The execution file is dotNetStiEditor.exe. Before program launch
configuration file dotNetStiEditor.EXE.config setup is recommended.

    The elements in config file:.
  • "cultureInfo" - program language.
    • ru - Russian
    • en - English
    • de - German
    The default language is Russian.
  • "RootDir" - root folder. The program will search for STI files in this folder and its subfolders.
    For example: C:\ja2\Data.
  • "EditorPath" - the path to the execution file of graphics editor which you will use
    for frames editing. For example: C:\WINDOWS\system32\mspaint.exe.
    The program was tested with MS Paint and Adobe Fotoshop.
  • "EditorTempDir" - temporary files folder is created at program startup and erased
    at exit. Default is C:\WINDOWS\Temp\dotNetStiEditorTemp.

Other files required for the program to work:

  • WeifenLuo.WinFormsUI.Docking.dll, DockManager.dll - window docking.
  • StiLib.dll - STI loading and conversion into BMP, GIF, TIFF.
  • Localizer.dll - localization.
  • de\Localizer.resources.dll - required for German version.
  • en\Localizer.resources.dll - required for English version.

2. Main window.

The main window contains all other windows and main menu.
The other windows: "Files" (viewer), "Library" (library),
"Working area" (working area), "Player" (player).
Docking allows you to place the windows in any order you want.
Windows configuration is saved in the file Layout.user.config.

Main menu:

  • "File"
    • "Open" - adds STI or GIF file to the library.
  • "Information"
    • "About"
    • "Help" - opens file help.htm. If this file is missing in the application folder
      help is loaded from program resources.
  • "Windows"
    • "Library", "Files", "Working area", "Player" - switches
      show/hide respective windows.
    • "Show all"
    • "Lock" - locks all windows' positions.
    • "Default position" - places all windows according to the saved config.

3. "Files" window.

Shows subfolder tree beginning from the folder in "RootDir" element
in config file dotNetStiEditor.EXE.config. If config file or the folder does not exist
the application will ask you for the root folder and will save its name in the config file
at exit.

The purpose of this window is to view files and add them to the library. The file is added
with "Add to library" context menu command or with double click of left mouse button.
You can highlight and add several files or folders at the same time.

"Foreshortening" filter allows you to add only one direction. This filter can be used
to speed up loading of big numbers of files.
The upper right corner of the viewer contains the "Refresh" button.

If some of the subfolders within the root folder contains very big number of STI files (e.g. this
could beб ANIMS folder), for more convenient view you can split it to several virtual
subfolders. To do this you should place the XML file with the same name as the name of the folder being
splitted to the application folder. The example of XML file structure:

  <Name of real folder>
   <Virtual subfolder 1>
    <Virtual subfolder 1.1>
      <Virtual subfolder 1.1.1>
        <File>
          <FileName>File name 1.1.1.1</FileName>
        </File>
        <File>
          <FileName>File name 1.1.1.2</FileName>
        </File>
	...
        <File>
          <FileName>File nameа  1.1.1.n</FileName>
        </File>
      </Virtual subfolder 1.1.1>
      <Virtual subfolder 1.1.2>
        <File>
          <FileName>File name 1.1.2.1</FileName>
        </File>
        <File>
          <FileName>File name 1.1.2.2</FileName>
        </File>
	...
        <File>
          <FileName>File name 1.1.2.m</FileName>
        </File>
      </Virtual subfolder 1.1.2>
    </Virtual subfolder 1.1>
    <File>
      <FileName>File name 1.1</FileName>
    </File>
    <File>
      <FileName>File name 1.2</FileName>
    </File>
     ...
    <File>
      <FileName>File name  1.k</FileName>
    </File>
   </Virtual subfolder 1>
  </Name of real folder>

4. "Library" window.

The library contains files loaded from the viewer.
To remove the file from the library, highlight it and press Delete on keyboard.
Other library commands are run from the context menu and applicated to
higlighted cells.
Context menu:

  • "Play" - highlighted cells are sorted by the column number and loaded
    to the left sprite of the player.
  • "Copy to the buffer" - highlighted cells are sorted by the column number and
    copied to the buffer.
  • "Play synchronously" - highlighted cells are sorted by the column number and
    loaded to the right sprite of the player, all cells from the buffer are loaded to
    the left sprite of the player.
  • "Add to working area" - highlighted cells are sorted by the column number and
    added to the working area.

5. "Working area" window.

In this window you can create new and edit existing STI files.
Menu of "Working area" window:

  • "Palette"
    • "Hair", "Trousers", "Skin", "Jersey", "Shadow" - sets the colors for
      the corresponding animation elements. Color palette is loaded from the palette file
      JA2PAL.DAT or (if the file is missing) from program resources.
    • "Save" - saves the currant palette as user palette.
    • "Remove..." - removes the palette chosen by user.
    • "Initial palette" - sets the initial colors for animations.
    • "Army", "Elit", "White John" ... - user palettes are loaded from the
      file palettes.xml; if this file is missing, they (just these three) are loaded from resources.
      At exit all user palettes are saved in palettes.xml.
  • "Editing"
    • "Autoupdating" - turns the automatic synchronization
      between edited frames from working area and temporary files from the folder stated in
      "EditorTempDir" in config file dotNetStiEditor.EXE.config on or off.
      Forced sychronization can be done with the Refresh button in the upper right corner of the window.
Context menu:
  • "Play" - highlighted cells are sorted by the column number and loaded
    to the left sprite of the player.
  • "Play synchronously" - highlighted cells are sorted by the column number and
    loaded to the right sprite of the player, all cells from the buffer are loaded to
    the left sprite of the player.
  • "Copy to the buffer" - highlighted cells are sorted by the column number and
    copied to the buffer.
  • "Insert from buffer" - cells from the buffer are inserted before the first
    highlighted non-empty cell of the working area.
  • "Edit" - copies the highlighted cells to the temporary BMP files in the folder
    stated in "EditorTempDir" in config file
    dotNetStiEditor.EXE.config and loads them to the graphics editor.
  • "Remove" - removes the highlighted cells.
  • "Save as..." - saves the highlighted cells in chosen file type. If STI is chosen, window "Breakdown on foreshortenings" is opened. This window allows
    to chose number of frames for each direction. The sum of frame numbers for all directions
    must be equal to the total number of frames, otherwise save would be impossible.

6. "Player" window.

In this window you can view set of frames as an animation or frame-by-frame,
as well as edit frame displacements. "Background" menu allows to load
a background picture in a standard Windows way or load a picture from "Background" folder
by a single click of left mouse button.
To edit displacements you should load set of frames from the working area, change displacements
and press "Save displacements" button.

Please send your questions to egorov_av@mail.ru or ask at
www.ja2.su.
Looks like it's all...

Appendix. STСI file format

STСI (Sir-Tech's Crazy Image) file format.
STСI format is used to store graphical objects of Jagged Alliance 2 game. Every STCI file can hold one or more images. Images are stored using either 16-bit (16bppRGB565) or 8-bit (8bppIndexed) format. 16-bit file holds just one noncompressed image. The most of them are in LOADSCREENS folder.
Header (64 bytes, STCIHeader structure).
STCIHeader structure is described in Standard Gaming Platform\imgfmt.h. 1-4 bytes – character string “STCI”, the format identifier. 5-8 bytes – initial size of the image in bytes. For files with multiple images there is large senseless number. 9-12 bytes – image size in bytes after compression. 13-16 bytes – number of the transparent color in the palette, always 0. Used only for 8-bit files. 17-20 bytes – flags. 1 bit – always 0, unknown purpose (STCI_TRANSPARENT). 2 bit – always 0, unknown purpose (STCI_ALPHA). 3 bit – 1 tells if file is the 16-bit file (STCI_RGB). 4 bit – 1 tells if file is the 8-bit file (STCI_INDEXED). 5 bit – 1 if ZLIB compression algorithm used (STCI_ZLIB_COMPRESSED). 6 bit – 1 if ETRLE compression algorithm used (STCI_ETRLE_COMPRESSED). 7-32 bits – 0, not used. It seems to be that flags always equals to 4, 40 or 41. 4 – for 16-bit files. 40 – for 8-bit non-animated files (single image). 41 – for 8-bit animated files (multiple images). 21-22 bytes – height of the image in pixels. Used in 16-bit files only. 23-24 bytes – width of the image in pixels. Used in 16-bit files only. Values of the next 20 bytes depend on encoding algorithm. 25-44 bytes for 16-bit files: 25-28 bytes – red color mask. Seems to always equal to 63488 (00000000 00000000 11111000 00000000). 29-32 bytes – green color mask. Seems to always equal to 2016 (00000000 00000000 00000111 11100000). 33-36 bytes – blue color mask. Seems to always equal to 31 (00000000 00000000 00000000 00011111). 37-40 bytes – alpha-channel mask. Seems to always equal to 0. 41 byte – red color depth. Seems to always equal to 5. 42 byte – green color depth. Seems to always equal to 6. 43 byte – blue color depth. Seems to always equal to 5. 44 byte – alpha-channel depth. Seems to always equal to 0. Colors depth and mask values correspond to 16bppRGB565 encoding algorithm. 25-44 bytes for 8-bit files: 25-28 bytes – number of colors in a palette, seems to be always 256. 29-30 bytes – number of images in the file. 31 byte – red color depth. It seems to be always 8. 32 byte – green color depth. It seems to be always 8. 33 byte – blue color depth. It seems to be always 8. 34-44 bytes – not used. Algorithm used for encoding 8-bit files – 8bppIndexed with 24-bit palette for 256 colors. 45 byte – color depth. Number of bits for one pixel. 8 for 8-bit files and 16 for 16-bit files. 46-49 bytes – size of Application Data in bytes. Other than 0 only for animated files. It seems to be equaled to number of images multiplied on 16. 49-64 bytes – not used. There is a possibility that such type of STCI file exists where 46-48 bytes are not used, os the size of the application data shifts 3 bytes. Maybe it depends on localization. In .NET StiEditor such byte order is used.
Images.
In 16-bit files after header and to the end of file there are image data encoded in 16bppRGB565 format. In 8-bit files after header there are 256*3 = 768 bytes of palette. After palette there are image headers of total size (number of images) x 16 bytes.
Image header (16 bytes, STCISubImage structure).
STCISubImage structure is described in Standard Gaming Platform\imgfmt.h. 1-4 bytes – shift in bytes from the beginning of images data to beginning of the current image data. 0 for the first image. Size of the first image for the second and so on. 5-8 bytes – image data size in bytes. 9-10 bytes – horizontal image shift in pixels. 11-12 bytes – vertical image shift in pixels. 13-14 bytes – image height in pixels. 15-16 bytes – image width in pixels. There are images data after image headers. Every byte corresponds to ordinal number (index) of pixel’s color in palette. Image data are compressed using ETRLE compression algorithm (see below). It seems to be that ZLIB compression is not used. Non-animated 8-bit files are finished here. Animated files have additional Application Data. Size – (number of images) x 16. Content follows: For images which are the beginning of new foreshortening (direction): 1-8 bytes – 0, unknown purpose. 9 byte – equals to number of images in current direction. 10 byte – 2, unknown purpose. 11-16 bytes – 0, unknown purpose. For images which are not the beginning of new direction: 1-16 bytes – 0, unknown purpose.
ETRLE compression algorithm.
ETRLE abbreviation meaning is unknown. Last three letters most likely mean Run-Length Encoding. Compressed sequence consist of multiple subsequences of transparent and non- -transparent bytes (SirTech have transparent color as zero). Every subsequence on transparent bytes is replaced by one byte with highest bit set to 1. Lower 7 bits hold number of transparent bytes. If sequence of transparent bytes is longer than 127, then new byte for transparent bytes encoding used and so on. One service byte used before subsequence of non-transparent bytes. Its highest bit is set to 0. Lower 7 bits hold number of non-transparent byte in subsequence. If non- -transparent bytes subsequence exceeds 127, new service byte is used and so on. Every row has zero byte on its end.