Программа для просмотра и редактирования файлов формата STI (Sir Tech Image).
Данный формат использован в ресурсах игры Jagged Alliance 2.
1. Введение.
2. Главное окно.
3. Окно "Файлы".
4. Окно "Библиотека".
5. Окно "Рабочая область".
6. Окно "Проигрыватель".
Приложение. Описание формата STCI.
Appendix. STСI file format.
Для работы программы необходим .NET Framework 2.0. Скачать можно здесь. Системные требования для установки .NET Framework 2.0:
Исполняемый файл программы называется dotNetStiEditor.exe. Перед запуском программы рекомендуется настроить конфигурационный файл dotNetStiEditor.EXE.config.
Другие файлы необходимые для работы программы:
Главное окно является контейнером для всех остальных окон и содержит главное меню. Остальные окна: окно "Файлы" (просмоторщик), окно "Библиотека" (библиотека), окно "Рабочая область" (рабочая область), окно "Проигрыватель" (проигрыватель). Окна можно располагать в произвольном порядке с помощью механизма докинга. Конфигурация расположения окон сохраняется в файл Layout.user.config. Главное меню программы:
Отображает дерево подпапок начиная с папки указанной в элементе "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> </Название физической папки>
Библиотека содержит файлы загруженные из просмоторщика. Удалить файл из библиотеки можно выделив соответствующую строку и нажав кнопку Del Все остальные команды библиотеки вызываются из контетстного меню и применяются к выделенным ячейкам. Контекстное меню:
Служит для создания новых и редактирования существующих STI файлов. Меню окна "Рабочая область":
Служит для просмотра последовательности кадров в режиме анимаций или в режиме покадрового просмотра и редактирования смещений кадров. Спомощью меню "Фон" можно загрузить в качестве фона произвольную картинку через стандартный диалог или одним щелчком ЛКМ загрузить картинку из папки "Background". Для редактирования смещений надо загрузить последовательность кадров из рабочей области отредактировать смещения и нажать кнопку "Сохранить смещения".
Вопросы отсылайте на egorov_av@mail.ru или спрашивайте на www.ja2.su. Кажись всё.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, то для её кодирования аналогичным образом используется несколько байт, тоже самое можно сказать и о ненулевых последовательностях. В конце каждой строки ставится нулевой байт (признак конца строки).
Viewer/editor for STI (Sir Tech Image) files.
This format is used in resources for the game Jagged Alliance 2.
1. Introduction.
2. Main window.
3. "Files" window.
4. "Library" window.
5. "Working area" window.
6. "Player" window.
Appendix. STСI file format.
The program needs .NET Framework 2.0 to run. You can download it here. System requirements for .NET Framework 2.0:
The execution file is dotNetStiEditor.exe. Before program launch configuration file dotNetStiEditor.EXE.config setup is recommended.
Other files required for the program to work:
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:
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>
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:
In this window you can create new and edit existing STI files. Menu of "Working area" 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...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.