Outpost 2 Formáty souborů · bei.pm

Tento text byl automaticky přeložen pomocí OpenAI GPT-4o Mini.

Formáty souborů popsané na této stránce vycházejí z technické analýzy duševního vlastnictví společnosti Dynamix, Inc. a Sierra Entertainment.
Duševní vlastnictví je dnes součástí majetku Activision Publishing, Inc. / Activision Blizzard, Inc. a v současnosti je ve vlastnictví Microsoft Corp..

Informace byly shromážděny pomocí Reverse Engineering a analýzy dat za účelem archivace a interoperability s historickými daty.
Nebyly použity žádné proprietární nebo důvěrné specifikace.

Hra je v současnosti dostupná ke koupi jako stahování na gog.com.

Artwork hry

Následující série článků dokumentuje mé poznatky o datových formátech ve hře v reálném čase "Outpost 2: Divided Destiny", kterou v roce 1997 vydala Sierra a vyvinula Dynamix.

Od 1. listopadu 2015 do 14. listopadu 2015 jsem se převážně věnoval analýze dat hry - a tomu, co s nimi lze dělat.

Podle informací, které jsem dosud získal, Dynamix - jako mnoho komerčních společností - nevyvinul některé datové formáty speciálně pro Outpost 2, ale použil je také v jiných projektech, jako je například série Mechwarrior (v upravené podobě).
Nezávisle na tom lze také konstatovat, že inovační schopnost datových formátů je prakticky omezena a často se zakládá na dlouho existujících konceptech běžných formátů, jako jsou JFIF a RIFF.

Pro interpretaci tabulek a datových formátů jsou k dispozici další informace na Co je co?.
Údaje uvedené zde jsou obecně chápány jako Little Endian.

Závěrem lze říci, že inženýrství zpětného inženýrství bylo velmi zábavné, i když není úplné.
Samozřejmě mohu také doporučit, abyste hru sami hráli, protože nabízí zajímavé herní mechanismy.

Úvod

Formáty dat používané v Outpost 2 mají strukturu připomínající JFIF / PNG - jednotlivé datové bloky vždy obsahují 8 bajtový header. Takže si ušetřím dokumentaci jednotlivých headerů na příslušných specifických místech a dokumentuji pouze odchylky.

Formát je vždy následující; skutečná uživatelská data jsou v něm pak vložena:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty

Obsahuje informace o tom, co lze očekávat v následujícím datovém bloku.

Známé hodnoty:

  • 0x204C4F56 ('VOL '):
    Objem
  • 0x686C6F76 ('VOLH'):
    Objemový header
  • 0x736C6F76 ('VOLS'):
    Objemové řetězce
  • 0x696C6F76 ('VOLI'):
    Objemové informace
  • 0x4B4C4256 ('BLCK'):
    Objemový blok
  • 0x504D4250 ('PBMP'):
    Grafická data
  • 0x4C415050 ('PPAL'):
    Paleta barev
  • 0x4C415043 ('CPAL'):
    Kontejner palet barev
  • 0x64616568 ('head'):
    Header
  • 0x61746164 ('data'):
    Uživatelská data
0x0004 uint(24) Délka bloku

Obsahuje informaci o velikosti (v bytech) následujícího datového bloku.

Jedná se přitom o čistá uživatelská data - 8 bytů hlavičky není zahrnuto.

0x0007 uint(8) Vlajky?

Je neznámé, k čemu tento blok přesně slouží.

V objemech je tato hodnota často 0x80, v jiných souborech často 0x00. To naznačuje, že se jedná o nastavení příznaku.

Objemy

Volumes jsou datové kontejnery pro hru, podobně jako archivní formát jako např. Tarball. Alespoň v Outpost 2 formát obsahuje pouze soubory - žádné složky. Pravděpodobně by se však daly simulovat pomocí odpovídajících názvů souborů.

Volume se skládá z hlavičky volume a několika bloků volume, které odpovídají konkrétním souborům.

"Volumes" jsou soubory s příponou 'vol' ve herním adresáři.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Hlava objemu

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Objemový hlavička sama o sobě neobsahuje žádná uživatelská data.
Slouží pouze jako kontejner.

A jako první údaj v objemové hlavičce by měly být objemové řetězce; za nimi následují informace o objemu.

Objemové řetězce

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky
Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky
0x0008 uint(32) Délka payloadu

Uvede, kolik bytů z následujících dat je skutečně užitečných.

Ostatní zbývající data seznamu volume-strings jsou zjevně považována za garbage.

V souborech s pozdějším datem jsou tato 'zbývající data' 0x00, což by mohlo naznačovat nedostatky v nástrojích během vývoje hry, tedy že se až velmi pozdě začal vývojář zabývat správnou inicializací bufferů, protože na hru nemá vliv, zda jsou data inicializována či nikoli.

0x000c uint(8)[] Seznam názvů souborů

Toto je seznam názvů souborů ukončený 0 bajty, který - alespoň v rámci tohoto datového prvku - očekává pouze ASCII znaky.

Není nutné při analýze dat tento datový blok podrobněji vyhodnocovat, protože v informacích o svazku jsou stejně přímo odkazovány offsety názvů souborů.

V případě Volume Strings se jedná o seznam názvů souborů, které jsou obsaženy v daném volume.

Informace o objemu

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Informace o svazku obsahují podrobnější údaje o souborech. V určitých ohledech se jedná o jakýsi typ záznamu v adresáři FAT (FAT = Tabulka alokace souborů).

Počet souborů se vypočítá jako velikost bloku dělená délkou záznamů v adresáři - 14 bajtů.

Každý jednotlivý záznam v adresáři má přitom následující strukturu:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Offset názvu souboru

Uvedeno, na jakém offsetu (!) v seznamu názvů souborů (Volume-Strings) se nachází název souboru daného souboru.

Odkazuje se přitom na začátek bloku užitečných dat.

0x0004 uint(32) Offset souboru

Umožňuje určit, na jakém offsetu v rámci celé objemové souboru se soubor nachází.

0x0008 uint(32) Velikost souboru

Určuje, jak velký je soubor v bytech.

0x000c uint(16) Vlajky?

Zdá se, že obsahuje další informace o kódování souboru.

  • 0x03 je nastaveno, pokud je soubor komprimován. Zde se zřejmě používá Huffmanovo stromové kódování.
  • 0x80 je zřejmě vždy nastaveno.

Objemový blok

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Objemový blok je kontejner, který obsahuje soubory. Znovu, kvůli formátu bloku, obsahuje redundatně velikost souboru a následně přímo následují uživatelská data.

Dlaždice

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Tiles jsou specifickým bitmapovým grafickým formátem pro Outpost-2. Čítají 13 Tilesetů, nazývaných "wells" (well0000.bmpwell0012.bmp), které se nacházejí uvnitř objemu maps.vol.

Tilesety / Wells obsahují následující:

Název souboru Obsah
well0000.bmp Grafika o velikosti 32x32px, modrá - ideální jako test, zda funguje váš image-loader
well0001.bmp Obsahuje světlé skály, pohoří na světlých skalách a nespočet variant impaktových kráterů na světlých skalách
well0002.bmp Obsahuje 'Doodads' na světlých skalách - tedy prvky, které lze umístit na světlé skály pro rozptýlení (nebo vědomě jako strukturu, jako např. zdi), včetně vegetace
well0003.bmp Obsahuje krustovou strukturu na světlých skalách
well0004.bmp Obsahuje tmavé skály, pohoří na tmavých skalách a nespočet variant impaktových kráterů na tmavých skalách
well0005.bmp Obsahuje 'Doodads' na tmavých skalách - tedy prvky, které lze umístit na tmavé skály pro rozptýlení (nebo vědomě jako strukturu, jako např. zdi)
well0006.bmp Obsahuje krustovou strukturu na tmavých skalách a přechody mezi světlými a tmavými skálami
well0007.bmp Obsahuje lávu včetně 4-5 snímků animace
well0008.bmp Obsahuje písek a nespočet variant impaktových kráterů v písku
well0009.bmp Obsahuje 'Doodads' na písku - tedy prvky, které lze umístit na písek pro rozptýlení (nebo vědomě jako strukturu, jako např. zdi)
well0010.bmp Obsahuje 48 přechodů z písku na světlé a tmavé skály
well0011.bmp Obsahuje polární čepice mapy, s tmavými skalami jako podkladem
well0012.bmp Obsahuje polární čepice mapy, se světlými skalami jako podkladem

Doporučuje se pro přesnou realizaci nezobrazovat dlaždice předem, aby se mohly ukládat do cache, protože data pro cyklus den/noc musí být ještě zpracována - a vzniklo by tak velmi, velmi mnoho dat.

Dlaždice jsou 8bpp grafiky s indexovanou paletou o rozlišení 32x32 pixelů, které jsou uspořádány vedle sebe. V takto vytvořeném dlaždicovém souboru však může být mnohem více

Hlavní kontejner se skládá ze 2 sekcí: head a data.

Hlavička dlaždic

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky
0x0008 uint(32) Verze / Vlajky?

Toto by mohlo být označení verze formátu souboru; ve všech souborech, které mám k dispozici, byla uvedena hodnota 0x02

0x000c uint(32) Šířka (Horizontální rozlišení)

Udává, jak široký je obrazový soubor (v pixelech).

U všech studní z Outpost 2 se zde očekává hodnota 0x20 neboli 32.

0x0010 uint(32) Výška (Vertikální rozlišení)

Udává, jak vysoký je obrazový soubor (v pixelech).

U všech studní v Outpost 2 se zde očekává hodnota 0x20 neboli 32.

0x0014 uint(32) Hlubka barev?

Význam této hodnoty není znám.

Jelikož ve všech zkontrolovaných souborech obsahuje hodnotu 8, mohlo by se jednat o údaj o barevné hloubce.

0x0018 uint(32) Hlubka barev 2?

Význam této hodnoty je neznámý.

Možná se jedná o 'cílovou' barevnou hloubku.

Po těchto údajích následuje ještě soubor palety ve standardizovaném formátu RIFF. Přesná specifikace se nachází - protože se palety objevují i jinde - na stránce Palety.

Data dlaždic

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Nakonec následují čistá pixlová data, zleva nahoře řádkově směrem k pravému dolnímu rohu.
Hodnota dat u grafiky, která je obvykle ve formátu 8bpp bitmap, odpovídá indexu barvy v barevné paletě.

Pixlová data začínají v levém horním rohu a končí v pravém dolním rohu.

Herní engine pravděpodobně vykresluje dlaždice *na vyžádání*.
To je zřejmě částečně způsobeno cyklem dne a noci, který zná 32 odstínů jednotlivých dlaždic. Z hodnoty jasu se zřejmě 'trochu' odečítá. Přesné hodnoty zatím nebylo možné určit, pracuji na základě výpočtu

v *= (daylight / 48) + 0.25;

s HSV daty pixelů, přičemž daylight je hodnota od 0 do 31 a v je hodnota mezi 0 a 1. Dále je třeba vzít v úvahu, že na mapě existuje ještě okraj 16 dlaždic vlevo a vpravo (ten slouží k neviditelnému spawnování jednotek).

Kromě toho se zdá, že cyklus dne a noci aktualizuje každé herní kolo pouze jeden sloupec mapy.
Zrychlený cyklus dne a noci vypadá následovně:

Vizualizace cyklu dne a noci

PRT

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické byty
0x0004 uint(24) Délka palety

Uveďte, na rozdíl od běžného blokového formátu, počet palet, které se nacházejí v tomto souboru - nikoli délku bloku v bajtech.

0x0007 uint(8) Vlajky

Pravděpodobně, jak je obvyklé, flagy.

Ale žádné flagy mi nejsou známy; protože všechny mi známé hodnoty odpovídají 0x00, bylo by také potenciálně možné, že počet palet je prostě uint(32).

Co přesně znamená PRT mi není známo; mohlo by to například znamenat 'Palette and Resource Table' - protože se jedná o tento soubor - nalezený jako op2_art.prt v maps.vol - který skutečně takovou funkci má, nebo by to tuto funkci docela dobře popsalo.

Tento soubor obsahuje seznam palet, tabulku všech použitých bitmap, všechny definice animací a také řadu neznámých dat. Volně se drží dosavadního formátu kontejneru, protože ne všechny záznamy tomuto schématu odpovídají.

CPAL sekce (pravděpodobně znamená kontejner palet) zahrnuje pouze data palet tím, že uvádí, kolik z obvykle 1052 bajtových 8-bitových palet je přítomno.

Uvedení 1052 bajtů není považováno za závazné, protože formát palet může potenciálně předpokládat různé velikosti palet. Platí pouze pro datový soubor, se kterým je Outpost 2 dodáván.

Za seznamem palet ihned a bez úvodního záhlaví následuje seznam bitmap; stejně bezprostředně za ním následují seznamy animací.
Oba jsou zahájeny uint(32) (nebo opět uint24+uint8 flagy?) tím, že obsahují počet záznamů.

Palety

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty
0x0004 uint(24) Délka palet

Uvádí počet palet, které lze nalézt v tomto souboru, na rozdíl od běžného blokového formátu - nikoli délku bloku v bytech.

0x0007 uint(8) Vlajky

Pravděpodobně, jak je obvyklé, se jedná o flagy.

Nicméně, žádné flagy mi nejsou známy; protože všechny mi známé hodnoty odpovídají 0x00, bylo by také potenciálně možné, že počet palet je prostě uint(32).

Informace o paletách se velmi snadno načítají.
Skládají se vždy z hlavičky a datového segmentu.

Hlavička palety

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty
0x0004 uint(24) Délka palet

Uvádí počet palet, které lze nalézt v tomto souboru, na rozdíl od běžného blokového formátu - nikoli délku bloku v bytech.

0x0007 uint(8) Vlajky

Pravděpodobně, jak je obvyklé, se jedná o flagy.

Nicméně, žádné flagy mi nejsou známy; protože všechny mi známé hodnoty odpovídají 0x00, bylo by také potenciálně možné, že počet palet je prostě uint(32).

0x0008 uint(32) Verze formátu palet?

Pravděpodobně definuje, které verzi formátu palet paleta odpovídá.

Všechny palety Outpost2 se zdají mít verzi 0x01.

Údaje o paletách

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Magické bajty
0x0004 uint(24) Délka bloku
0x0007 uint(8) Vlajky

Datová sekce zahrnuje jednotlivé záznamy palet. Počet záznamů palet se určuje jako délka bloku děleno 4.

Jednotlivé záznamy mají následující, jednoduchou strukturu;

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(8) Červená složka

Udává podíl červené barvy

0x0001 uint(8) Zelená složka

Udává podíl zelené barvy

0x0002 uint(8) Modrá složka

Udává podíl modré barvy

0x0003 uint(8) Neznámý - Vlajky?

Je nejasné, co tato hodnota znamená, protože se zdá, že je zásadně 0x04.

K paletám lze navíc říci, že pro palety používané v animacích platí následující pravidla:

  • První barva je VŽDY transparentní, bez ohledu na to, jaká hodnota je tam uvedena.
  • Položky palety 1-24 se v paletách 1-8 považují za barvy hráče.
    Odkud přesně pocházejí barvy mimo hráče 1, není mi známo.
    Předpokládám, že zbývající barvy jsou hardcoded.

Odkaz na paletu

Bitové mapy

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Zarovnaná šířka

Uvádí šířku řádků dat pixelů v bajtech - protože tyto jsou zarovnány na 4-bajtové hranice.

Díky tomu je rychle možné přeskočit na určitou řadu obrázku.

Proč je tato hodnota uložena samostatně, i když by mohla být vypočítána, není jasné.
Možná se jedná o optimalizaci pro renderovací kód.

0x0004 uint(32) Ofset

Určuje posun první řady v bitmapě

0x0008 uint(32) Výška

Udává výšku obrázku v pixelech

0x000c uint(32) Šířka

Uveďte šířku obrázku v pixelech

0x0010 uint(16) Typ

Určuje typ obrázku. Zde se zdá, že se jedná o bitovou masku:

  • 0x04 je nastaveno, pokud se jedná o 1bpp grafiku.
  • 0x40 je nastaveno, pokud se jedná o grafiku, která musí implementovat okna.
0x0012 uint(16) Paleta

Definuje, která paleta z PRT souboru má být použita

Tato datová struktura souboru PRT udává, jak jsou strukturovány bitmapy používané pro sprity. Tyto bitmapy slouží jako jednotlivé části, z nichž je několik složeno do animačního snímku spritu.

Konkrétní obrazová data se však skrývají v op2_art.BMP v herním adresáři.
Proč tento bitmapový soubor obsahuje (většinou správný) RIFF bitmapový header, není jasné. Pravděpodobně Outpost 2 používá systémové API pro načítání grafik, přičemž tento header je dočasně převzat a příslušná, variabilní pole jsou přepsána.

Pixelová data se nacházejí v BMP souboru na pozici Offset + uint32-Offset, který lze najít v BMP souboru na adrese 0x000A (RIFF bitmapový datový offset) a znovu odpovídají řádkovému uspořádání zleva doprava a shora dolů.

Monochromatické grafiky 1bpp mohou být vykresleny tak, že barva 0 představuje úplnou průhlednost, zatímco barva 1 je poloprůhledná černá/šedá, protože monochromatické grafiky se obvykle používají pro stíny vozidel a budov v animacích.

Tímto způsobem lze již sestavit mnoho grafik.

Ochranný obytný modul (Plymouth)

Animace

Nyní se dostáváme k vrcholné disciplíně v rámci datových formátů Outpost 2:
k animacím.

Seznamy animací začínají globální hlavičkou, která slouží primárně pro verifikaci dat. Následují konkrétní definice animací, které jsou rozděleny do 3 úrovní:

  1. Animace
    Animace je nejvyšší instancí; představuje animaci jednotky, budovy nebo 'partiklové animace' (náraz komety, počasí, exploze) v určité výchozí situaci.
  2. Frame
    Frame je jednotlivý snímek v rámci animace. Animace může obsahovat jeden nebo více snímků.
  3. Subframe
    Subframe je informace o tom, že určité bitmapě má být pod určitými kritérii vykresleno na určité pozici snímku. Snímek může obsahovat jeden nebo více subframe.

Následně již přímo následují jednotlivé definice animací.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Počet animací

Kolik animačních datových sad je k dispozici

0x0004 uint(32) Počet snímků

Kolik rámců by celkem mělo být přítomno

0x0008 uint(32) Počet subrámců

Kolik subframů by mělo být celkem k dispozici

0x000c uint(32) Počet volitelných položek

Kolik "volitelných položek" je k dispozici.

Animace

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(32) Neznámý 1

Neznámé informace

0x0004 uint(32) Ohraničující rámeček: Vlevo

Určuje levý začátek (v pixelech) Bounding Box.

0x0008 uint(32) Ohraničující rámeček: Nahoru

Určuje horní začátek (v pixelech) Bounding Box.

0x000c uint(32) Ohraničující rámeček: Šířka

Udává šířku (v pixelech) ohraničujícího rámečku.

0x0010 uint(32) Ohraničující box: výška

Udává výšku (v pixelech) Bounding Box.

0x0014 uint(32) Offset: X

Určuje horizontální střed animace

0x0018 uint(32) Offset: Y

Určuje vertikální střed animace

0x001c uint(32) Neznámý 2

Neznámé informace

0x0020 uint(32) Počet snímků

Uvede, kolik animačních snímků je obsaženo v této animaci

0x0024 uint(32) Počet oken

Určuje, kolik oken má být použito při kreslení

Údaje nejvyšší vrstvy, animace, jsou především administrativními daty - Boundingbox označuje souřadnice značky kolem vozidla/budovy, když je vybráno, a zároveň také určuje, která oblast by měla být klikací.

Offset primárně určuje "nulový bod"; bod, který je třeba připočítat nebo odečíst od herních souřadnic. Mohli bychom také říci matematicky: offset zde označuje počátek souřadnic.

V oknech se, stejně jako u offsetu, jedná o 4 uint(32) hodnoty pro každé okno, které určují oblast, která je považována za použitelnou pro jednotlivé subrámce. Mimo okna se, pokud to není pro bitmapu příslušně určeno, nesmí kreslit.

Rám

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(8) Počet sub rámů a přepínač pro Volitelný 1, 2

Tato hodnota obsahuje:

  • 0x7F (Bitová maska): Počet subframe, které jsou v tomto rámci použity
  • 0x80: Informace o tom, zda jsou k dispozici volitelné 1 a 2
0x0001 uint(8) Neznámý 1 a přepínač pro volitelné 3, 4

Tato hodnota obsahuje:

  • 0x7F (Bitmask): Neznámé - Silně se domnívám, že se jedná o počet herních ticků, které uplynou, než se zobrazí další snímek
  • 0x80: Informace o tom, zda jsou volitelné 3 a 4 přítomny
0x0002 uint(8) Volitelné 1

Neznámý

0x0003 uint(8) Volitelné 2

Neznámý

0x0004 uint(8) Volitelné 3

Neznámý

0x0005 uint(8) Volitelné 4

Neznámý

Podrámeček

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Typ dat Označení Vysvětlení
0x0000 uint(16) Bitmap-ID

Určuje, která bitmapa má být použita pro tento subframe

0x0002 uint(8) Neznámý 1

Je neznámé - silně se domnívám, že se jedná o prioritu renderování (Z-Layer).

0x0003 uint(8) Subframe-Id

Uveďte, v jakém subrámu se nacházíme

0x0004 sint(16) Offset - Horizontální

Určuje, kde uvnitř rámce má být subrámec umístěn, nebo o kolik pixelů má být bitmapa horizontálně posunuta.

0x0006 sint(16) Offset - Vertikální

Určuje, kde uvnitř rámce má být subrámec umístěn, nebo o kolik pixelů má být bitmapa vertikálně posunuta.

Tímto můžeme nyní jednotlivé snímky i kompletní animace sestavovat podle potřeby, zde je to ukázáno na komplexnější animaci s indexem 500.

Animace 500

Animace 500 ukazuje, jak je vykládán Plymouth Transporter naložený běžným rudným materiálem. Jedná se o jednu z mála animací, které využívají funkčnost okna.

A tak lze celou animaci spojit dohromady.
Omlouváme se, ale stále existuje problém s horním nakládacím otvorem, protože zde není nastavený odpovídající bit v informacích o typu grafiky.

Zde je ještě několik dalších nádherně animovaných spriteů ze hry:

Vykreslení animace 500 ilustrováno

Animace 500 úspěšně spojena

Plymouth Továrna na budovy

Eden Hvězdný přístav

Eden Zdravotní středisko

SCAT

Plymouth Hvězdný přístav

Easteregg:
Vánoční muž

Easteregg:
Dans Pes

Uživatelské rozhraní

Nyní zbývá ještě uživatelské rozhraní hry, které je ve stylu kartáčovaného kovu.

Ale i zde je patrné, že Dynamix nemusel vynalézat kolo znovu; zde se nejen jednoduše využívají API User32 a GDI32 poskytované Windows - zejména se zde také využívá správa zdrojů z User32.

Tyto zdroje lze například extrahovat pomocí programů, jako je Resource Hacker, který vyvinul Angus Johnson jako freeware, nebo - pokud se někdo pod Linuxem / Mac OS vyhýbá použití Wine - pomocí wrestool obsaženého v icoutils.

Název souboru Obsah
Outpost2.exe Obsahuje pouze ikonu hry, která zobrazuje vesmírnou stanici před New Terra
op2shres.dll Obsahuje kromě grafiky pro ovládací prvky jako jsou rámečky, tlačítka, radio tlačítka a zaškrtávací políčka také pozadí dialogů, obrázky pro příběhové mise a pozadí hlavního menu
out2res.dll Obsahuje dekoraci oken ve hře, ikony pro běžný a speciální kov, načítací obrazovku, grafiku pro dialogy a další grafiky kurzorů, kromě animovaných v herním adresáři