Outpost 2 formáty súborov · bei.pm

Tento text bol automaticky preložený pomocou OpenAI GPT-4o Mini.

Formáty súborov popísané na tejto stránke sú založené na technickej analýze duševného vlastníctva od Dynamix, Inc. a Sierra Entertainment.
Duševné vlastníctvo je dnes súčasťou majetku Activision Publishing, Inc. / Activision Blizzard, Inc. a aktuálne ho vlastní Microsoft Corp..

Informácie boli zhromaždené prostredníctvom analýzy spätnej inžinierie a analýzy dát za účelom archivácie a interoperability s historickými dátami.
Neboli použité žiadne proprietárne alebo dôverné špecifikácie.

Hra je momentálne dostupná na zakúpenie ako download na gog.com.

Obrázok zo hry

Následná séria článkov dokumentuje moje poznatky o dátových formátoch v reálnom čase strategickej hry "Outpost 2: Divided Destiny", ktorá bola vydaná v roku 1997 spoločnosťou Sierra a vyvinutá firmou Dynamix.

Od 1. novembra 2015 do 14. novembra 2015 som sa prevažne zaoberal analýzou dát hry - a tým, čo s nimi robiť.

Podľa informácií, ktoré som doteraz získal, Dynamix - ako mnohé komerčné spoločnosti - nevytvoril niektoré dátové formáty špeciálne pre Outpost 2, ale použil ich aj v iných projektoch, ako napríklad v sérii Mechwarrior (modifikované).
Nezávisle od toho sa dá tiež konštatovať, že inovačná sila dátových formátov je prakticky obmedzená a často sa zakladá na dlhodobo existujúcich konceptoch bežných formátov ako JFIF a RIFF.

Ďalšie informácie na interpretáciu tabuliek a dátových formátov sú dostupné na Čo je čo?.
Tu uvedené dáta sú vo všeobecnosti chápané ako Little Endian.

Na záver sa dá povedať, že reverzné inžinierstvo bolo veľmi zábavné, aj keď nie je úplné.
Samozrejme, odporúčam aj hrať samotnú hru, pretože ponúka zaujímavé herné mechaniky.

Úvod

Dáta formátov používaných v Outpost 2 majú štruktúru pripomínajúcu JFIF / PNG - jednotlivé dátové bloky vždy obsahujú 8-bajtový header. Z tohto dôvodu si ušetrím čas na dokumentovanie jednotlivých headerov na príslušných špecifických miestach a dokumentujem tam iba odchýlky.

Formát je vždy nasledujúci; skutočné užitočné dáta sú v ňom vložené:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty

Obsahuje informácie o tom, čo sa dá očakávať v nasledujúcom dátovom bloku.

Známé hodnoty:

  • 0x204C4F56 ('VOL '):
    Objem
  • 0x686C6F76 ('VOLH'):
    Header objemu
  • 0x736C6F76 ('VOLS'):
    Reťazce objemu
  • 0x696C6F76 ('VOLI'):
    Informácie o objeme
  • 0x4B4C4256 ('BLCK'):
    Blok objemu
  • 0x504D4250 ('PBMP'):
    Grafické dáta
  • 0x4C415050 ('PPAL'):
    Farebná paleta
  • 0x4C415043 ('CPAL'):
    Kontajner farebných paliet
  • 0x64616568 ('head'):
    Header
  • 0x61746164 ('data'):
    Údaje
0x0004 uint(24) Dĺžka bloku

Obsahuje informáciu o tom, aká veľká (v bajtoch) je nasledujúca dátová blok.

Pri tom sa myslí na čisté užívateľské údaje - 8 bajtov hlavičky nie je zahrnutých.

0x0007 uint(8) Zástavy?

Nie je známe, na čo presne tento blok slúži.

V objemoch je táto hodnota často 0x80, v iných súboroch často 0x00. To naznačuje, že ide o nastavenie príznakov.

Objemy

Volume sú dátové kontajnery pre hru, podobné archívovému formátu, ako napríklad Tarball. V Outpost 2 tento formát pozná iba súbory - žiadne priečinky. Zrejme by sa však dali simulovať pomocou príslušných názvov súborov.

Volume sa skladá z hlavičky volume a viacerých blokov volume, ktoré zodpovedajú konkrétnym súborom.

"Volumes" sú súbory s príponou 'vol' v hernom adresári.

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Hlavička 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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Objemový hlavička neobsahuje žiadne užitočné údaje.
Slúži iba ako kontajner.

V prvom dátume v objemovej hlavičke by sa mali nachádzať objemové reťazce; za nimi nasledujú objemové informácie.

Objemové reťazce

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy
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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy
0x0008 uint(32) Dĺžka payloadu

Uvedie, koľko bajtov z nasledujúcich údajov sú skutočne užitočné dáta.

Ostatné, zostávajúce údaje zo zoznamu Volume-Strings sú zjavne považované za garbage.

V súboroch s neskorším dátumom sú tieto 'zostávajúce dáta' 0x00, čo by mohlo naznačovať nedostatky v nástrojoch počas vývoja hry, inak povedané, že sa až veľmi neskoro vývojár začal zaoberať správnou inicializáciou bufferov, pretože nemá vplyv na hru, či sú dáta inicializované alebo nie.

0x000c uint(8)[] Zoznam názvov súborov

Ide o zoznam názvov súborov terminovaných na 0 bajtov, ktorý - aspoň v tomto súbore údajov - očakáva iba ASCII znaky.

Nie je potrebné podrobnejšie analyzovať tento blok údajov pri parsovaní, pretože v informáciách o zväzku sú aj tak priamo referencované ofsety názvov súborov.

Volume reťazce predstavujú zoznam názvov súborov, ktoré sú obsiahnuté v objeme.

Informácie o objeme

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Informácie o Volume obsahujú podrobnejšie údaje o súboroch. Ide v istom zmysle o akýsi záznam v adresári FAT (FAT = File Allocation Table)

Počet súborov sa určuje ako veľkosť bloku delená dlžkou záznamov v adresári - 14 bajtov.

Každý jednotlivý záznam v adresári má nasledujúcu štruktúru:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Offset názvu súboru

Uvádza, na akom offsete (!) v zozname názvov súborov (Volume-Strings) sa nachádza názov súboru.

Vzťahuje sa pritom na začiatok bloku užitočných dát.

0x0004 uint(32) Offset súboru

Uvedie, na akom offsete v celkovej objemovej súbore sa súbor nachádza.

0x0008 uint(32) Veľkosť súboru

Uvedie, aká veľká je súbor v bajtoch.

0x000c uint(16) Zástavy?

Zjavne poskytuje ďalšie informácie o kódovaní súborov.

  • 0x03 je nastavené, ak je súbor komprimovaný. Zjavne sa tu používa Huffmanov strom.
  • 0x80 je zrejme vždy nastavené.

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Objemový blok je kontajner, ktorý uchováva súbory. Obsahuje iba znova - z dôvodu bloku formátu - redundatne veľkosť súboru a po nej nasledujú priamo údaje.

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Tiles predstavujú špecifický formát bitmapovej grafiky pre Outpost-2. Tiahnu sa cez 13 Tilesetov, nazývaných "wells" (well0000.bmpwell0012.bmp), ktoré sa nachádzajú v objeme maps.vol.

Tilesety / Wells obsahujú nasledujúce:

Názov súboru Obsah
well0000.bmp Modrá grafika veľkosti 32x32px - ideálna na testovanie, či váš vlastný načítač obrázkov funguje
well0001.bmp Obsahuje svetlý kameň, pohoria na svetlom kameni a nespočetné varianty kráterov na svetlom kameni
well0002.bmp Obsahuje 'Doodads' zo svetlého kameňa - teda prvky, ktoré môžu byť umiestnené na svetlom kameni na rozptýlenie (alebo úmyselne ako štruktúra, ako napr. múry), vrátane vegetácie
well0003.bmp Obsahuje štruktúru podobnú kôrke na svetlom kameni
well0004.bmp Obsahuje tmavý kameň, pohoria na tmavom kameni a nespočetné varianty kráterov na tmavom kameni
well0005.bmp Obsahuje 'Doodads' z tmavého kameňa - teda prvky, ktoré môžu byť umiestnené na tmavom kameni na rozptýlenie (alebo úmyselne ako štruktúra, ako napr. múry)
well0006.bmp Obsahuje štruktúru podobnú kôrke na tmavom kameni, ako aj prechody medzi svetlým a tmavým kameňom
well0007.bmp Obsahuje lávu vrátane 4-5 snímok animácie
well0008.bmp Obsahuje piesok a nespočetné varianty kráterov v piesku
well0009.bmp Obsahuje 'Doodads' z piesku - teda prvky, ktoré môžu byť umiestnené na piesku na rozptýlenie (alebo úmyselne ako štruktúra, ako napr. múry)
well0010.bmp Obsahuje 48 prechodov medzi pieskom a svetlým a tmavým kameňom
well0011.bmp Obsahuje pólové čiapky mapy, s tmavým kameňom ako základom
well0012.bmp Obsahuje pólové čiapky mapy, so svetlým kameňom ako základom

Je vhodné pre presnú realizáciu, aby sa dlaždice nevykresľovali vopred na účely cacheovania, pretože údaje pre cyklus deň/noc ešte musia byť spracované - a bolo by potrebné veľmi veľa údajov.

Dlaždice sú 8bpp grafiky s indexovanou paletou o rozlíšení 32x32 pixelov, ktoré sú usporiadané vedľa seba. V takto vytvorenom setu dlaždíc však môže byť omnoho viac

Hlavný kontajner pozostáva z 2 sekcií: head a data.

Hlavička dlaždíc

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 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy
0x0008 uint(32) Verzia / Vlajky?

Tu by mohlo ísť o verziu formátu súboru; vo všetkých súboroch, ktoré mám k dispozícii, bola hodnota 0x02

0x000c uint(32) Šírka (horizontálne rozlíšenie)

Uvádza, aká široká je obrázková súbor (v pixeloch).

Pri všetkých studniach z Outpost 2 sa tu očakáva hodnota 0x20 alebo 32.

0x0010 uint(32) Výška (Vertikálne rozlíšenie)

Uvedie, aká vysoká je obrazová súbor (v pixeloch).

Pri všetkých studniach z Outpost 2 sa tu očakáva hodnota 0x20 alebo 32.

0x0014 uint(32) Hĺbka farieb?

Význam tejto hodnoty je neznámy.

Keďže sa vo všetkých skontrolovaných súboroch nachádza hodnota 8, mohlo by ísť o údaj o hĺbke farby.

0x0018 uint(32) Hĺbka farby 2?

Význam tejto hodnoty je neznámy.

Možno ide o 'cieľovú' hĺbku farieb.

Na základe týchto údajov bude k dispozícii aj súbor paliet vo štandardizovanom formáte RIFF. Presná špecifikácia sa nachádza - keďže palety sa objavujú aj inde - na Palety.

Údaje dlaždíc

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Nakoniec nasledujú prázdne pixeldáta, ktoré sú usporiadané zľava nahor po riadkoch smerom doprava a nadol.
Hodnota dát v grafike, ktorá je zvyčajne vo forme 8bpp bitmapy, zodpovedá indexu farby v farebnej palete.

Pixeldáta začínajú v ľavom hornom rohu a končia v pravom dolnom rohu.

Herný engine pravdepodobne vykresľuje dlaždice *na požiadanie*.
Toto sa zdá byť čiastočne spôsobené cyklom dňa a noci, ktorý pozná 32 odstupňovaní jednotlivých dlaždíc. Pri tom sa zjavne od hodnoty jasu 'trochu' odpočítava. Presné hodnoty sa zatiaľ nepodarilo zistiť, pracujem na výpočtovom základe

v *= (daylight / 48) + 0.25;

s HSV údajmi pixelov, pričom daylight je hodnota od 0 do 31 a v je hodnota medzi 0 a 1. Navyše je potrebné zohľadniť, že na mape existuje okraj 16 dlaždíc naľavo a napravo (ten slúži na neviditeľné spawnovanie jednotiek).

Ďalej sa zdá, že cyklus dňa a noci aktualizuje každú hernú cyklu iba jeden stĺpec mapy.
Urýchlený cyklus dňa a noci vyzerá preto takto:

Vizualizácia cyklu dňa 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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka palety

Uveďte počet paliet, ktoré sa nachádzajú v tomto súbore, na rozdiel od normálneho blokového formátu - nie dĺžku bloku v bajtoch.

0x0007 uint(8) Zástavy

Pravdepodobne, ako obvykle, vlajky.

Avšak nie sú mi známe žiadne vlajky; keďže všetky mi známe hodnoty zodpovedajú 0x00, mohlo by byť potenciálne možné, že počet paliet je jednoducho uint(32).

Čo presne znamená PRT, neviem; možné by bolo napríklad 'Tabuľka paliet a zdrojov' - keďže ide o tento súbor - nachádzajúci sa ako op2_art.prt v maps.vol - ktorý presne takýto súbor predstavuje, alebo by to veľmi dobre vystihovalo jeho funkciu.

Tento súbor obsahuje zoznam paliet, tabuľku všetkých použitých bitmap, všetky definície animácií a množstvo neznámych dát. Voľne nasleduje doterajší formát kontajnerov, pretože nie všetky záznamy sa riadia týmto schémom.

Časť CPAL (pravdepodobne znamená kontajner paliet) obsahuje iba dáta paliet, pričom uvádza, koľko z obvykle 1052 bajtových 8-bitových paliet je k dispozícii.

Uvedenie 1052 bajtov sa nepovažuje za záväzné, pretože formát paliet by mohol potenciálne predpokladať rôzne veľkosti paliet. Platí len pre súbor dát, s ktorým sa Outpost 2 dodáva.

Za zoznamom paliet nasleduje bezprostredne a bez úvodného záhlavia už zoznam bitmap; takisto bezprostredne za tým nasledujú zoznamy animácií.
Oba sa začínajú s uint(32) (alebo opäť uint24+uint8 vlajky?), ktorý obsahuje počet záznamov.

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka palety

Uvádza počet paliet, ktoré sa nachádzajú v tomto súbore, na rozdiel od normálneho blokového formátu - nie dĺžku bloku v bajtoch.

0x0007 uint(8) Zástavy

Pravdepodobne, ako zvyčajne, vlajky.

Ale nie sú mi známe žiadne vlajky; keďže všetky mne známe hodnoty zodpovedajú 0x00, mohlo by byť tiež potenciálne možné, že počet paliet je jednoducho uint(32).

Informácie o paletách sa veľmi jednoducho čítajú.
Skladajú sa vždy z hlavičky a dátového segmentu.

Hlavička paliet

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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka palety

Uvádza počet paliet, ktoré sa nachádzajú v tomto súbore, na rozdiel od normálneho blokového formátu - nie dĺžku bloku v bajtoch.

0x0007 uint(8) Zástavy

Pravdepodobne, ako zvyčajne, vlajky.

Ale nie sú mi známe žiadne vlajky; keďže všetky mne známe hodnoty zodpovedajú 0x00, mohlo by byť tiež potenciálne možné, že počet paliet je jednoducho uint(32).

0x0008 uint(32) Verzia formátu paliet?

Definuje pravdepodobne, ktorej verzii formátu paliet paleta vyhovuje.

Všetky Outpost2 palety sa zdajú mať verziu 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 . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Magické bajty
0x0004 uint(24) Dĺžka bloku
0x0007 uint(8) Zástavy

Úsek dát obsahuje jednotlivé záznamy paliet. Počet záznamov paliet sa určuje na základe dĺžky bloku / 4.

Jednotlivé záznamy majú pritom nasledujúcu, jednoduchú štruktúru;

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(8) Červená komponenta

Určuje podiel červenej farby

0x0001 uint(8) Zelená zložka

Udáva podiel zelenej farby

0x0002 uint(8) Modrá zložka

Určuje podiel modrej farby

0x0003 uint(8) Neznáme - Vlajky?

Nie je jasné, čo tento hodnot znamená, pretože sa zdá, že je v podstate 0x04.

K paletám sa inak dá povedať len to, že pre palety používané v animáciách platia nasledujúce pravidlá:

  • Prvá farba je VŽDY transparentná, bez ohľadu na to, aká hodnota je tam uvedená.
  • Počiatočné položky palety 1-24 sú v paletách 1-8 považované za farbu hráča.
    Odkiaľ presne farby pochádzajú mimo hráča 1, mi nie je jasné.
    Predpokladám, že ostatné farby sú hardcoded.

Odkaz na palety

Bitmapy

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Zarovnaná šírka

Udáva šírku riadkov pixelových údajov v bytoch - keďže sú zarovnané na 4-bajtové hranice.

Takže je rýchlo možné preskočiť na konkrétny riadok obrázka.

Prečo sa táto hodnota uchováva samostatne, hoci by mohla byť vypočítaná, je nejasné.
Možno ide o optimalizáciu pre renderovací kód.

0x0004 uint(32) Offset

Udáva posun prvej riadku v bitmape

0x0008 uint(32) Výška

Uvedie výšku obrázku v pixeloch

0x000c uint(32) Šírka

Uvedie šírku obrázka v pixeloch

0x0010 uint(16) Typ

Udáva typ obrázka. Zdá sa, že ide o bitovú masku:

  • 0x04 je nastavené, ak ide o 1bpp grafiku.
  • 0x40 je nastavené, ak ide o grafiku, ktorá musí realizovať okná.
0x0012 uint(16) Paleta

Definuje, ktorá paleta z PRT súboru sa má použiť

Táto dátová štruktúra súboru PRT uvádza, ako sú zostavené bitmapy použité pre sprity. Tieto bitmapy slúžia ako jednotlivý prvok, z ktorého sa niekoľko skladá do animačného rámca spritu.

Konkrétne obrazové dáta sa nachádzajú v op2_art.BMP v hernom adresári.
Prečo táto bitmapová súbor má (väčšinou správny) RIFF bitmapový hlavičku, nie je jasné. Pravdepodobne Outpost 2 používa systémové API na načítanie grafiky, keďže táto hlavička je dočasne prebraná a príslušné, variabilné polia sú prepísané.

Pixelové dáta sa nachádzajú v BMP súbore na polohe Offset + uint32-Offset, ktoré nájdete v BMP súbore na adrese 0x000A (RIFF bitmapové dátové offset), a opäť zodpovedajú radenie po riadkoch zľava hore doprava dole.

Monochromatické 1bpp grafiky môžu byť nakreslené tak, že farba 0 je úplná transparentnosť, a farba 1 je polotransparentná čierna/sivá, pretože monochromatické grafiky sú zvyčajne používané pre tiene vozidiel a budov v animáciách.

Týmto spôsobom je možné zostaviť už veľa grafík.

Ochranný obytný modul (Plymouth)

Animácie

Teraz prechádzame na kráľovskú triedu disciplín v rámci formátov dát Outpost 2:
Na animácie.

Zoznamy animácií začínajú globálnym hlavičkovým riadkom, ktorý primárne slúži na overenie dát. Následne nasledujú konkrétne definície animácií, ktoré sú rozdelené do 3 úrovní:

  1. Animácia
    Animácia je najvyššia inštancia; predstavuje animáciu jednotky, budovy alebo 'časticovej animácie' (náraz kométy, počasie, výbuch) v určitej počiatočnej situácii.
  2. Frame
    Frame je jednotlivý obrázok v rámci animácie. Animácia môže obsahovať jeden alebo viac frame-ov.
  3. Subframe
    Subframe je informácia o tom, že určité bitmapy by sa mali za určitých kritérií nakresliť na konkrétne miesto frame-u. Frame môže obsahovať jeden alebo viac subframe-ov.

Následne už nasledujú jednotlivé definície animácií.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Počet animácií

Koľko animačných záznamov je k dispozícii

0x0004 uint(32) Počet snímok

Koľko rámcov by malo byť celkovo prítomných

0x0008 uint(32) Počet subrámcov

Koľko subrámcov by malo byť celkovo prítomných

0x000c uint(32) Počet voliteľných položiek

Koľko "voliteľných položiek" je k dispozícii.

Animácia

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(32) Neznáme 1

Neznáme informácie

0x0004 uint(32) Ohraničujúci rám: Vľavo

Určuje ľavý začiatok (v pixeloch) Bounding Box.

0x0008 uint(32) Ohraničujúci rámec: Hore

Určuje horný začiatok (v pixeloch) Bounding Box.

0x000c uint(32) Ohraničujúci rám: Šírka

Uvádza šírku (v pixeloch) obmedzujúcej oblasti.

0x0010 uint(32) Ohraničujúci rám: výška

Udáva výšku (v pixeloch) obdĺžnikovej oblasti.

0x0014 uint(32) Posun: X

Určuje horizontálne stredisko animácie

0x0018 uint(32) Offset: Y

Určuje vertikálny stred animácie

0x001c uint(32) Neznáme 2

Neznáme informácie

0x0020 uint(32) Počet snímok

Uveďte, koľko animačných snímok je obsiahnutých v tejto animácii

0x0024 uint(32) Počet okien

Uvedie, koľko okien sa má použiť pri kreslení

Údaje najvyššej vrstvy, animácie, sú predovšetkým administratívne údaje - Boundingbox označuje súradnice značky okolo vozidla/budovy, kedy je vybrané a zároveň udáva, ktorá oblasť by mala byť klikateľná.

Offset primárne určuje "nulový bod"; bod, na ktorý sa majú vypočítať či odpočítať herné interné súradnice. Mohli by sme to tiež povedať matematicky: offset tu označuje súradnicový pôvod.

Windows sa, rovnako ako offset, skladajú z 4 uint(32) hodnôt pre každé okno, ktoré určujú oblasť, ktorá je považovaná za použiteľnú pre jednotlivé subrámce. Mimo windows sa nesmie, pokým to nie je vhodne určené pre bitmapu, kresliť.

Rám

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(8) Počet subrámov a prepínač pre voliteľné 1, 2

Táto hodnota obsahuje:

  • 0x7F (Bitmask): Počet subrámov, ktoré sa používajú v tomto ráme
  • 0x80: Informácia o tom, či sú prítomné voliteľné 1 a 2
0x0001 uint(8) Neznáme 1 a prepínač pre voliteľné 3, 4

Táto hodnota obsahuje:

  • 0x7F (Bitmask): Neznáme - Silne predpokladám, že ide o počet herných tickov, ktoré uplynú, kým sa zobrazí nasledujúci snímok
  • 0x80: Informácia o tom, či sú prítomné voliteľné 3 a 4
0x0002 uint(8) Voliteľné 1

Neznáme

0x0003 uint(8) Voliteľné 2

Neznáme

0x0004 uint(8) Voliteľné 3

Neznáme

0x0005 uint(8) Voliteľné 4

Neznáme

Subrám

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znaky
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Posun Typ dát Názov Vysvetlenie
0x0000 uint(16) Bitmap-ID

Určuje, ktorá bitmapa má byť použitá pre tento subframe

0x0002 uint(8) Neznáme 1

Je neznáme - avšak silne predpokladám, že ide o prioritu renderovania (Z-layer).

0x0003 uint(8) Subframe-Id

Určuje, v akom subrámci sa nachádzame

0x0004 sint(16) Offset - Horizontálny

Určuje, kde v rámci rámca by sa malo umiestniť subrámec, respektíve o koľko pixelov by sa mala bitmapa horizontálne posunúť.

0x0006 sint(16) Offset - Vertikálne

Určuje, kde v rámci rámca má byť subrámec umiestnený, resp. o koľko pixelov má byť bitmapa vertikálne posunutá.

Týmto môžeme teraz jednotlivé rámce, ako aj kompletné animácie, zodpovedajúcim spôsobom skombinovať, čo je demonštrované na príklade zložitejšej animácie s indexom 500.

Animácia 500

Animácia 500 ukazuje, ako sa vykladá Plymouth-transportér naložený bežným orechom. Ide o jednu z mála animácií, ktoré využívajú funkciu okien.

Takto je možné zložiť celú animáciu.
Žiaľ, stále existuje problém s horným nakladacím otvorom, pretože v informáciách o type grafiky nie je nastavený príslušný bit.

Tu je niekoľko ďalších nádherne animovaných spriteov zo hry:

Rendrovanie animácie 500 ilustrované

Animácia 500 je hotová a zložená

Plymouth továreň na budovy

Eden vesmírny prístav

Eden zdravotné centrum

SCAT

Plymouth vesmírny prístav

Easteregg:
Vianočný muž

Easteregg:
Dans pes

Používateľské rozhranie

Teraz chýba už len používateľské rozhranie hry, ktoré je spracované v brúsenom kovovom vzhľade.

Ale aj tu je jasné, že Dynamix nemusel vynájsť koleso; tu sa nielen využívajú jednoduché API User32 a GDI32 poskytované Windows, ale najmä sa tu využíva aj správa zdrojov od User32.

Tie sa dajú napríklad extrahovať pomocou programov ako Resource Hacker, ktorý bol vyvinutý ako freeware od Angus Johnson, alebo - ak sa bojíte použiť Wine na Linuxe / Mac OS - s pomocou wrestool, ktorý je súčasťou icoutils.

Názov súboru Obsah
Outpost2.exe Obsahuje iba ikonu hry, ktorá zobrazuje vesmírnu stanicu pred New Terra
op2shres.dll Obsahuje grafiku pre ovládacie prvky ako sú okraje, tlačidlá, rádiové tlačidlá a zaškrtávacie políčka, ako aj pozadia dialógov, sprievodné obrázky pre texty príbehových misií a pozadievú grafiku hlavného menu
out2res.dll Obsahuje dekoráciu okien v hre, ikony pre bežný a špeciálny kov, obrazovku načítania, grafiku pre dialógy a ďalšie grafiky kurzora, okrem animovaných v hernom adresári