EXTRACTOR | .RU – версия 2.2 |
||
Что у нас есть? Это тоже интересно |
Статьи и описания форматов игровых файлов America — форматы RDA, SPR, PIC, FTB, SPXЭта статья относится к играм: Автор материала: Михаил Бесчетнов aka Terminus Описание форматов RDA, SPR, PIC, FTB, SPX Описание формата .RDA В начале заголовок: RDAHeader: record id: array[1..4]of char; //Идентификатор формата Junk: array[1..4]of char; //Хлам Files: LongInt; //Количество файлов end; Таблица размещения файлов располагается по адресу $0C Описание записи о файле: FATRecord: record Name: array[1..124]of char; //Имя файла Offset: LongInt; //Смещение до файла end; Размер файлов не указывается, так что прийдется Вам его вычислять как разницу смещений соседних файлов. Описание формата .SPR В начале заголовок: SPRHeader: record Id: array[1..4]of char; //Идентификатор формата. Значение - "RDDX" Width: LongInt; //Ширина изображения Height: LongInt; //Высота изображения Junk: array[1..4]of char; //Хлам Sub_Id: array[1..4]of char; //Идентификатор битности. Значение - "P16B" End; Далее идут непосредственно графические данные в 16-ти битном формате размером Width*Height*2. Теперь, для получения адекватный пикселов, надо перейти от 16-ти битной формы записи к 24-х битной. 16-ти битный цвет в данном случае раскладывается так: 0RRRRRGGGGGBBBBB. После получения цветовых составляющих умножайте каждую из них на восемь (а то яркость будет ... не удовлетворительная). В результате получаем три байта RGB, определяющих пиксел в 24-х битном формате. Эте же схема действует и по отношению к графическим данным в следующем формате - PIC
За данными лежит таблица расположения спрайтов (SAT). Здесь все спрайты записаны в виде одного изображения, надо только их в нужном месте "вырезать". В начале SAT лежит идентификатор области, обычно - STAB. После этого общее количество спрайтов в формате LongInt. А затем непосредственно Таблица записей о спрайтах. Вот формат каждой записи: SATRecord: record Id: LongInt; //Порядковый номер спрайта MarginLeft: LongInt; //Смещение спрайта от левого края MarginTop: LongInt; //Смещение спрайта от верхнего края Width: LongInt; //Ширина спрайта Height: LongInt; //Высота спрайта Junk: array[1..8]of char; //Хлам End; Описание формата .PIC В начале заголовок: PICHeader: record Id: array[1..4]of char; //Идентификатор формата. Значение - "RDIC" Width: LongInt; //Ширина изображения Height: LongInt; //Высота изображения Junk: array[1..4]of char; //Хлам Sub_Id: array[1..4]of char; //Идентификатор битности. End; Дальнейший разбор зависит от идентификатора битности. Если он равен P16B, то далее читаем данные в 16-ти битном формате. От том, как это делается, смотри описание формата SPR. Если же идентификатор равен COLS, то действуем следующим образом:
Описание формата .FTB Сравнительно простой формат для хранения палитры. Первые 4 байта - идентификатор, с постоянным значением - C256. Далее лежат определители 256-ти цветов в 16-ти битном формате (0RRRRRGGGGGBBBBB) Описание формата .SPX В отличии от SPR, где все спрайты скомпанованы в одном изображении, и, по мере необходимости, из него вырезаются, здесь каждый спрайт представляет из себя отдельную область данных внутри SPX.
В начале заголовок: SPXHeader: record Id: array[1..4]of char; //Идентификатор формата. Значение - "RDSX" TotalSprites: LongInt; //Количество спрайтов End; Далее последовательно идут все спрайты. Образно, структуру каждого спрайта можно представить следующим образом:
Заголовок имеет следующий формат: Header: record Id: LongInt; //Порядковый номер спрайта MarginLeft: LongInt; //Смещение спрайта слева (?) MarginTop: LongInt; //Смещение спрайта сверху (?) Width: LongInt; //Ширина спрайта Height: LongInt; //Высота спрайта End; Переменные MarginLeft и MarginTop используются, вероятно, для позиционирования спрайтов относительно некого общего центра. Практического применения этих переменных я искать не стал.
Далее идет таблица значений типа LongInt, определяющая смещение на начало данных каждой строки. Смещение отсчитывается от начала области данных. После этой таблицы лежит еще одно число LongInt - оно указывает на конечный+1 байт текущего спрайта (лично я его просто игнорирую). И вот только после этого располагается сама Область Данных. Формат записи здесь не самый простой, так что попробую его описать:
Каждая строка состоит из ряда сегментов. Типа сегментов всего два: блок пустых пикселов, и последовательность различных пикселов. Сегменты эти идут по строгой очередности: в начале каждой строки группа прозрачных (пустых) пикселов, затем обязательно группа из отдельных пикселов, затем снова прозрачные. Т.е. сегменты непрерывно чередуются. Дляна каждого сегмента определяется числом типа Byte. Попробую привести пример строки: 00 01 FF 05 03 FF FF F1 01
В результате получаем строку: FF 00 00 00 00 00 FF FF F1 00
Для того, чтобы знать, где остановиться при чтении данных, рекомендую считать, сколько пикселов уже составлено и сравнивать это значение с шириной спрайта. |
© | 2000—2010 «EXTRACTOR.ru» — игровые ресурсы: распаковка музыки и графики, конверторы форматов и многое другое… |