Приложение 4: ResourceType THUM, SNAP, ICON, TWNI

Приложение 4: ResourceType THUM, SNAP, ICON, TWNI
Автор: AnriRS

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

  • типы ресурсов, которые могут храниться в файле Package – Sims3: File Types, на английском языке;
  • википедия – PNG, на русском языке;

Краткий обзор

Типы данных THUM, SNAP, ICON, TWNI используются для хранения изображений в формате PNG (Portable Network Graphics) – растровом формате хранения графической информации, использующем сжатие без потерь. В The Sims 3 применяется формат RGBA (красный-зеленый-синий-альфа) с глубиной цвета 8 бит на канал (если есть другие варианты, то я не встречал)

Идентификация данных

Версия игры
The Sims 3 (DBPF v.2.0)

ResourceType

component_library_9

ResourceGroup
ResourceGroup = $xxxxxxxx
Группа ресурса, по-видимому, является набором флагов

Instance
Instance = $yyyyyyyyyyyyyyyy
Экземпляр любой

Реализация на Pascal

Типы данных и функции для работы с форматом PNG в файлах DBPF2 содержится в файле siS3DBPF2PNG.pas

type
TDBPF2PNGType = (TS3ResByePNG, TS3ResBldPNG, TS3ResSimPNG, TS3ResFamPNG,
TS3ResCASPNG, TS3ResLotPNG, TS3ResWrdPNG, TS3ResPatPNG, TS3ResGrdPNG,
TS3ResPntPNG, TS3ResIntPNG);
TDBPF2PNGTypes = set of TDBPF2PNGType;

component_library_10

function IsPNG(AResourceType: DWORD): boolean; overload; – возвращает true, если AResourceType – PNG;

function IsPNG(AResourceType: DWORD; PNGTypes: TDBPF2PNGTypes): boolean; overload – возвращает true, если AResourceType – PNG входящий во множество PNGTypes;

function IsBestPNG(const Decoder: TDBPF2Decoder; Index: integer): boolean – возвращает true, если запись содержит PNG с наилучшим разрешением;

В Delphi 2009 работа с форматом PNG поддерживается практически не документированным классом TPNGImage, наследником класса TGraphic.

Использование примерно такое:

uses PNGImage, siDBPF2Decoder;
...
var
DBPF2Decoder: TDBPF2Decoder;
img: TPNGImage;
...
DBPF2Decoder.Create(nil);
DBPF2Decoder.Decode(...
...
with DBPF2Decoder.Items[i] do begin
img:= TPNGImage.Create;
Decode(TMemoryStream.Create);
Stream.Seek(0, soBeginning); // обязательно встали на начало потока
try
img.LoadFromStream(Stream);
// здесь можно чего-нибудь сделать с рисунком PNG
except
on E: Exception do Error(E.Message); // ошибочка вышла
end;
FreeStream;
img.Free
end;
...
DBPF2Decoder.Free;
...

The Sims 3

The Sims 2

The Sims

MySims

Sims-игры

Даты релизов

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