Формат Sims3Pack и его декодирование: Часть практическая, типы данных

Формат Sims3Pack и его декодирование: Часть практическая, типы данных
Автор: AnriRS

Реализация декодирования формата Sims3Pack содержится в файле siS3PackDecoder.pas

Статьи по теме

Заголовок файла

type
TS3PackHeader = packed record // заголовок файла
SigLength: DWORD; // длина сигнатуры ???
Sig: packed array[0..6] of BYTE; // "TS3Pack"
Version: WORD; // версия ???
Shift: DWORD; // относительное смещение секции данных после заголовка
end; // TS3PackHeader record

Сделав ему sizeof несложно убедиться, что его размер те самые17 байт.

Для декодирования файла важны два поля:

Sig: packed array[0..6] of BYTE; – содержит текст "TS3Pack"

Shift: DWORD – задает относительное смещение секции данных после заголовка, для получения абсолютного смещения к нему нужно прибавить 17 байт заголовка.

Для обычного использования заголовок не нужен, так «чисто посмотреть» и для отладки.

Индексная запись

Класс записи содержит информацию об одной записи (файла) данных и механизм ее декодирования (работы с вторичным потоком);

type
TS3PackItem = class
...
public
constructor Create(AOwner: TS3PackDecoder); // конструктор класса
destructor Destroy; override; // деструктор класса
procedure FreeStream; // освобождает вторичный поток
procedure UnlinkStream; // удаляет ссылку на вторичный поток
procedure Decode(AStream: TStream); // декодирует данные записи
function Decoded: boolean; // проверяет запись на декодированность
property FileName: string read; // имя файла
property Length: cardinal read; // размер файла
property Offset: cardinal read; // относительное смещение начала файла
property CRC: string read; // контрольная сумма
property GUID: string read; // глобальный идентификатор
property ContentType: string read; // тип данных
property Stream: TStream read write;
end;

Свойства

  • FileName: string – имя файла, только чтение;
  • Length: cardinal –длина файла, только чтение;
  • Offset: cardinal – относительное смещение от начала секции данных, только чтение;
  • Crc: string –контрольная сумма, только чтение;
  • Guid: string – GUID, только чтение;
  • ContentType: string – тип данных, только чтение;
  • Stream: TStream – ссылка на вторичный поток, чтение/запись;

Методы

  • constructor Create(AOwner: TS3PackDecoder) – конструктор класса, как аргумент получает декодер, индексной таблице которого принадлежит запись;
  • destructor Destroy; override – виртуальный деструктор освобождает вторичный поток и запись, вместо него нужно использовать Free;
  • procedure FreeStream – освобождает вторичный поток (вызывает его Free), то же что и Stream:= nil, но работает быстрее;
  • procedure UnlinkStream – удаляет ссылку на вторичный поток, но не удаляет его, необходимо вызывать ее, а не FreeStream, если поток использовался в TDBPF2Decoder как первичный;
  • procedure Decode(AStream: TStream) – декодирует запись, то же что и Stream:= AStream, но работает быстрее, если запись уже декодирована, то вначале освобождает старый вторичный поток;
  • function Decoded: boolean – возвращает true, если запись уже декодирована;

Прочие типы


Исключения

type
ES3PackDecoderError = class (Exception); // базовый класс ошибки декодера
ES3PackHeaderError = class (ES3PackDecoderError); // ошибка заголовка

The Sims 3

The Sims 2

The Sims

MySims

Sims-игры

Даты релизов

the_sims_3_store_saleshymn_bunnersimovod_3simovod2Журнал «Симовод»Prosims - магазин сувениров