.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.spb.ru.
Кажись всё.

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.