Outpost 2 Obrazci datotek · bei.pm

Ta besedilo je bilo avtomatizirano prevedeno s strani OpenAI GPT-4o Mini.

Na tej strani opisani formati datotek temeljijo na tehnični analizi intelektualne lastnine podjetja Dynamix, Inc. in Sierra Entertainment.
Intelektualna lastnina je danes del mase Activision Publishing, Inc. / Activision Blizzard, Inc. in je trenutno v lasti Microsoft Corp..

Informacije so bile zbrane z obratnim inženiringom in analizo podatkov z namenom arhiviranja in interoperabilnosti s zgodovinskimi podatki.
Niso bile uporabljene nobene lastniške ali zaupne specifikacije.

Igro je trenutno mogoče kupiti v obliki prenosa na gog.com.

Umetniško delo igre

Naslednja serija člankov dokumentira moje ugotovitve glede podatkovnih formatov v realnočasovni strateški igri "Outpost 2: Divided Destiny", ki jo je leta 1997 izdal Sierra in jo je razvila Dynamix.

Z analizo podatkov igre - in kako jih uporabiti - sem se ukvarjal od 1. novembra 2015 do 14. novembra 2015.

Informacije, ki sem jih doslej pridobil, kažejo, da je Dynamix - tako kot številna komercialna podjetja - nekaterih podatkovnih formatov ni razvila posebej za Outpost 2, temveč so jih uporabili tudi v drugih projektih, kot je serija Mechwarrior (prilagojeno).
Ne glede na to pa lahko opazimo, da inovativnost podatkovnih formatov v večini primerov ostaja omejena in se pogosto opira na že obstoječe koncepte iz običajnih formatov, kot sta JFIF in RIFF.

Za razlago tabel in podatkovnih formatov so na voljo dodatne informacije na Kaj je kaj?.
Tu navedeni podatki so na splošno razumljeni kot Little Endian.

Na koncu lahko rečem, da je bilo obratno inženirstvo zelo zabavno, čeprav ni popolno.
Naravno lahko priporočam tudi, da igrate igro sami, saj ponuja zanimive igralne mehanike.

Uvod

Podatkovni formati, ki jih uporablja Outpost 2, imajo strukturo, ki spominja na JFIF / PNG - posamezni podatkovni bloki vedno vsebujejo 8-bajtni glavo. Zato se odločim, da ne bom dokumentiral posameznih glav na ustreznih specifičnih mestih, temveč bom tam dokumentiral le odstopanja.

Format je vedno naslednji; dejanski uporabni podatki so nato v njem vgrajeni:

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti

Vsebuje informacije o tem, kaj je mogoče pričakovati v naslednjem podatkovnem bloku.

Znane vrednosti:

  • 0x204C4F56 ('VOL '):
    Glasnost
  • 0x686C6F76 ('VOLH'):
    Header glasnosti
  • 0x736C6F76 ('VOLS'):
    Glasnost-nizi
  • 0x696C6F76 ('VOLI'):
    Informacije o glasnosti
  • 0x4B4C4256 ('BLCK'):
    Glasnost-blok
  • 0x504D4250 ('PBMP'):
    Grafični podatki
  • 0x4C415050 ('PPAL'):
    Barvna paleta
  • 0x4C415043 ('CPAL'):
    Kontejner barvnih palet
  • 0x64616568 ('head'):
    Header
  • 0x61746164 ('data'):
    Uporabniški podatki
0x0004 uint(24) Dolžina bloka

Vsebuje informacijo o tem, kako velika (v bajtih) je naslednja podatkovna enota.

Pri tem so mišljeni samo čisti uporabni podatki - 8 bajtov glave ni vključenih.

0x0007 uint(8) Zastave?

Ni znano, čemu ta blok natančno služi.

V volumnih je ta vrednost pogosto 0x80, v drugih datotekah pa pogosto 0x00. To nakazuje, da gre za nastavljeno oznako.

Obsegi

Volumi so podatkovni kontejner za igro, podoben arhivskemu formatu, kot je na primer Tarball. V Outpost 2 to format pozna le datoteke - brez map. Vendar bi jih verjetno lahko simulirali s ustreznimi imeni datotek.

Volumen je sestavljen iz volumske glave in več volumski blokov, ki ustrezajo konkretnim datotekam.

"Volumi" so datoteke z končnico 'vol' v imeniku igre.

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Glava volumna

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Glava volumna ne vsebuje nobenih uporabnih podatkov.
Uporablja se le kot kontejner.

Prvi podatki v glavi volumna bi morali biti nizi volumna; za njimi sledijo informacije o volumnu.

Obsegni Nizi

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave
Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave
0x0008 uint(32) Dolžina payloada

Navaja, koliko bajtov naslednjih podatkov je dejansko uporabnih podatkov.

Preostali, ostali podatki seznama niza volumnov so očitno obravnavani kot odpadki.

V datotekah z novejšimi datumi so ti 'preostali podatki' 0x00, kar bi lahko nakazovalo na pomanjkljivosti orodnih verig med razvojem igre, torej, da se je razvijalec za pravilno inicializacijo pomnilnika poskrbel šele zelo pozno, saj nima vpliva na igro, ali so podatki inicializirani ali ne.

0x000c uint(8)[] Seznam datotečnih imen

Gre za seznam imen datotek, ki je zaključen z 0-byte, in ki - vsaj v tem danem sklopu podatkov - pričakuje le ASCII znake.

Pri razčlenjevanju podatkov ni potrebno natančneje obravnavati tega podatkovnega bloka, saj so v informacijah o volumnu neposredno referencirani premiki imen datotek.

Volume Strings so seznam imen datotek, ki so vključene v volumen.

Informacije o volumnu

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Informacije o volumnu zajemajo podrobnejše informacije o datotekah. Gre nekako za vrsto vnosa v FAT imeniku (FAT = tabela dodelitve datotek).

Število datotek izhaja iz velikosti bloka, deljene z dolžino vnosov v imeniku - 14 bajtov.

Posamezni vnosi v imeniku imajo naslednjo strukturo:

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Offset imena datoteke

Navede, na katerem offsetu (!) znotraj seznama imen datotek (Volume-Strings) se nahaja ime datoteke.

To se nanaša na začetek bloka uporabniških podatkov.

0x0004 uint(32) Datotečni odklon

Označuje, na katerem odklonu znotraj celotne datoteke volumna se nahaja datoteka.

0x0008 uint(32) Velikost datoteke

Označuje, koliko je velika datoteka v bajtih.

0x000c uint(16) Zastave?

Očitno daje dodatne informacije o kodiranju datotek.

  • 0x03 je nastavljen, ko je datoteka stisnjena. Očitno se tukaj uporablja Huffmanovo drevo.
  • 0x80 je očitno vedno nastavljen.

Volumski blok

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Volume blok je kontejner, ki shranjuje datoteke. Vsebuje še enkrat - zaradi bloka formata - odvečno velikost datoteke, nato pa sledijo neposredno uporabniški podatki.

Ploščice

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magicalni bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Tiles predstavljajo specifičen format bitmap grafike za Outpost-2. Raztezajo se čez 13 Tilesetov, imenovanih "wells" (well0000.bmp do well0012.bmp), ki se nahajajo znotraj volumna maps.vol.

Tileseti / Wells vsebujejo naslednje:

Ime datoteke Vsebina
well0000.bmp Modra grafika velikosti 32x32px - idealna za testiranje delovanja svojega nalagača slik
well0001.bmp Vsebuje svetle kamnine, gorske verige na svetlih kamninah in številne različice kraterjev v svetlih kamninah
well0002.bmp Vsebuje 'Doodads' svetlih kamnin - torej elemente, ki jih je mogoče postaviti za popestritev (ali zavestno kot strukturo, npr. zidove) na svetlih kamninah, vključno z vegetacijo
well0003.bmp Vsebuje skorjasto strukturo na svetlih kamninah
well0004.bmp Vsebuje temne kamnine, gorske verige na temnih kamninah in številne različice kraterjev v temnih kamninah
well0005.bmp Vsebuje 'Doodads' temnih kamnin - torej elemente, ki jih je mogoče postaviti za popestritev (ali zavestno kot strukturo, npr. zidove) na temnih kamninah
well0006.bmp Vsebuje skorjasto strukturo na temnih kamninah ter prehode med svetlimi in temnimi kamninami
well0007.bmp Vsebuje lavo, vključno s 4-5 kadri animacije
well0008.bmp Vsebuje pesek in številne različice kraterjev v pesku
well0009.bmp Vsebuje 'Doodads' peska - torej elemente, ki jih je mogoče postaviti za popestritev (ali zavestno kot strukturo, npr. zidove) na pesku
well0010.bmp Vsebuje po 48 prehodov od peska do svetlih in temnih kamnin
well0011.bmp Vsebuje polarne kapice mape, z temnimi kamninami kot podlago
well0012.bmp Vsebuje polarne kapice mape, s svetlimi kamninami kot podlago

Priporočljivo je, da se ploščice ne upodabljajo vnaprej za shranjevanje v predpomnilnik, saj je potrebno še obdelati podatke za dan/noč ciklus – in bi nastalo zelo, zelo veliko podatkov.

Ploščice so 8bpp grafike z indeksirano paleto, vsaka z ločljivostjo 32x32 pikslov, ki so razporejene med seboj. V tako nastalem nizu ploščic pa je lahko še veliko več.

Glavni vsebinski blok je sestavljen iz dveh sekcij: head in data.

Naslov ploščic

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magicalni bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave
0x0008 uint(32) Različica / Zastave?

To bi lahko bila različica datotečnega formata; v vseh datotekah, ki jih imam, je bil tukaj vrednost 0x02

0x000c uint(32) Širina (horizontalna ločljivost)

Označuje, koliko široka je slikovna datoteka (v pikselih).

Pri vseh vodnjakih iz Outpost 2 bo tukaj vrednost 0x20 oziroma 32 pričakovana.

0x0010 uint(32) Višina (vertikalna ločljivost)

Navede, kako visoka je slikovna datoteka (v pikselih).

Pri vseh vodnjakih iz Outpost 2 bo tukaj pričakovana vrednost 0x20 oziroma 32.

0x0014 uint(32) Globina barve?

Pomembnost te vrednosti ni znana.

Ker v vseh preverjenih datotekah vsebuje vrednost 8, bi lahko šlo za določitev barvne globine.

0x0018 uint(32) Globina barve 2?

Pomen te vrednosti je neznan.

Verjetno gre za 'ciljno' barvno globino.

Na podlagi teh podatkov sledi še datoteka palete v standardiziranem formatu RIFF. Natančna specifikacija se nahaja - saj se palete pojavljajo tudi drugje - pod Palete.

Podatki o ploščicah

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magicalni bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Nakonec sledijo še surove podatke o pikselih, ki so razporejeni od zgoraj levo do spodaj desno, vrstično.
Vrednost podatka pri grafiki, ki je ponavadi predstavljena kot 8bpp-bitmapi, ustreza indeksu barve v barvni paleti.

Podatki o pikselih se začnejo zgoraj levo in končajo spodaj desno.

Igračna enačba verjetno *na zahtevo* nariše ploščice.
Zdi se, da je to deloma posledica cikla dneva in noči, ki pozna 32 stopenj posameznih ploščic. Pri tem se očitno od vrednosti svetlosti 'malo' odšteje. Natančne vrednosti še niso bile določene, delam na osnovi izračuna

v *= (daylight / 48) + 0.25;

s podacimi HSV pik, pri čemer je daylight vrednost od 0 do 31, v pa vrednost med 0 in 1. Dodatno je treba upoštevati, da na zemljevidu obstaja še rob 16 ploščic levo in desno (to služi za nevidno pojavljanje enot).

Dodatno se zdi, da cikel dneva in noči na vsakem ciklu igre posodobi le en stolpec zemljevida.
Pospešen cikel dneva in noči je zato videti takole:

Visualizacija cikla dneva in noči

PRT

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina palet

Navidezno, v nasprotju s običajnim blokovnim formatom, prikazuje število palet, ki jih najdemo v tej datoteki - ne dolžino bloka v bajtih.

0x0007 uint(8) Zastave

Verjetno, kot običajno, zastavice.

Vendar mi niso znane nobene zastavice; ker vsi meni znani vrednosti ustrezajo 0x00, bi bilo tudi potencialno mogoče, da je število palet preprosto uint(32).

Za kaj točno PRT stoji, mi ni znano; mogoče bi lahko pomenilo 'Tabela palet in virov' - saj ta datoteka, ki jo najdemo kot op2_art.prt v maps.vol, dejansko predstavlja takšno, oziroma bi to funkcijo dobro opisalo.

Ta datoteka vsebuje seznam palet, tabelo vseh uporabljenih bitmapov, vse definicije animacij in še vrsto neznanih podatkov. Sledi do sedaj uporabljeni obliki kontejnerja le ohlapno, saj vsi zapisi ne sledijo temu shemi.

Odsek CPAL (verjetno pomeni kontejner palet) zajema le podatke o paletah, tako da navaja, koliko običajno 1052 bajtov velikih 8-bitnih palet je prisotnih.

Davčna oznaka 1052 bajtov ni obvezna, saj bi oblikovanje palet potencialno predvidevalo različne velikosti palet. Velja le za podatkovni sklop, s katerim je Outpost 2 dostavljen.

Po seznamu palet sledi takoj, brez uvodnega glave, seznam bitmapov; takoj za tem sledijo še seznami animacij.
Oba se začenjata z uint(32) (ali spet uint24+uint8 zastavice?), ki vsebuje število zapisov.

Palete

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina palete

Namesto običajnega blokovnega formata navaja število palet, ki jih je mogoče najti v tej datoteki - ne dolžino bloka v bajtih.

0x0007 uint(8) Zastave

Verjetno, kot običajno, zastavice.

Vendar mi niso znane nobene zastavice; saj vsi znani vrednosti ustrezajo 0x00, bi bilo tudi teoretično mogoče, da je število palet preprosto uint(32).

Informacije o paletah so zelo enostavne za branje.
Sestavljene so iz naslova in podatkovnega segmenta.

Glava Palete

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina palete

Namesto običajnega blokovnega formata navaja število palet, ki jih je mogoče najti v tej datoteki - ne dolžino bloka v bajtih.

0x0007 uint(8) Zastave

Verjetno, kot običajno, zastavice.

Vendar mi niso znane nobene zastavice; saj vsi znani vrednosti ustrezajo 0x00, bi bilo tudi teoretično mogoče, da je število palet preprosto uint(32).

0x0008 uint(32) Različica formata palet?

Verjetno opredeljuje, kateri različici formata palet ta paleta sledi.

Vse palete Outpost2 se zdi, da imajo različico 0x01.

Podatki o paletah

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Magični bajti
0x0004 uint(24) Dolžina bloka
0x0007 uint(8) Zastave

Podatkovni odsek zajema posamezne vnose palet. Število vnosov palet se izračuna iz dolžine bloka / 4.

Posamezni vnosi imajo preprosto strukturo;

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(8) Rdeča komponenta

Označuje delež rdeče barve

0x0001 uint(8) Zelena komponenta

Označuje delež zelene barve

0x0002 uint(8) Modra komponenta

Označuje delež modre barve

0x0003 uint(8) Neznano - Zastave?

Natančno ni jasno, kaj ta vrednost pomeni, saj je očitno v osnovi 0x04.

O paletah pa lahko še rečem, da pri paletah, ki se uporabljajo za animacije, veljajo naslednja pravila:

  • Prva barva je Vedno prozorna, ne glede na to, kakšna vrednost je tam navedena.
  • Vnosi palete 1-24 se v paletah 1-8 štejejo kot barva igralca.
    Kje točno prihajajo barve izven igralca 1, mi ni jasno.
    Sumim, da so preostale barve hardcoded.

Referenca palet

Bitmapi

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Usmerjena širina

Natančno določa širino vrstic podatkov slik v bajtih - saj so te poravnane na meje 4 bajtov.

Tako je hitro možno preskočiti na določeno vrstico slike.

Zakaj se ta vrednost shranjuje ločeno, čeprav bi jo bilo mogoče izračunati, ni jasno.
Morda gre za optimizacijo za kodo za upodabljanje.

0x0004 uint(32) Odmik

Označuje premik prve vrstice v bitni sliki

0x0008 uint(32) Višina

Označuje višino slike v slikovnih pikah

0x000c uint(32) Širina

Navedite širino slike v pikslih

0x0010 uint(16) Tip

Navede vrsto slike. Zdi se, da gre za bitno masko:

  • 0x04 je nastavljen, če gre za 1bpp grafiko.
  • 0x40 je nastavljen, če gre za grafiko, ki mora uresničiti okna.
0x0012 uint(16) Paleta

Določa, katera paleta iz PRT-datoteke naj se uporablja

Ta podatkovna struktura PRT-datoteke določa, kako so zasnovani bitmapi, ki se uporabljajo za sprite. Ti bitmapi služijo kot posamezna komponenta, iz katere se sestavi več delov za animacijski okvir sprite.

Končni slikovni podatki so shranjeni v op2_art.BMP v igri.
Zakaj ta datoteka bitmape vsebuje (pretežno pravilno) RIFF-bitmap glavo, ni jasno. Verjetno Outpost 2 uporablja sistemske API-je za nalaganje grafike, pri čemer se ta glava začasno prevzame in ustrezna, spremenljiva polja prepišejo.

Piksli so v BMP-datoteki na položaju Offset + uint32-Offset, ki ga najdemo v BMP-datoteki na naslovu 0x000A (RIFF-bitmap-datotečni offset) - in ponovno ustrezajo vrstičnemu razporedu od zgoraj levo proti desno spodaj.

Monokromatske 1bpp grafike so lahko narisane tako, da barva 0 predstavlja popolno prosojnost, medtem ko barva 1 je polprosojna črna/siva, saj se monokromatske grafike ponavadi uporabljajo za sence vozil in zgradb v animacijah.

Tako lahko že sestavimo mnoge grafike.

Zavarovan stanovanjski modul (Plymouth)

Animacije

Zdaj pridemo do kraljevske discipline znotraj formatov podatkov Outpost 2:
Do animacij.

Seznami animacij se začnejo z globalno glavo, ki služi predvsem za verifikacijo podatkov. Nato sledijo konkretne definicije animacij, ki so razdeljene v 3 ravni:

  1. Animacija
    Animacija je najvišja instanca; predstavlja animacijo enote, stavbe ali 'delčne animacije' (kometski udar, vreme, eksplozija) v določenem izhodišču.
  2. Frame
    Frame je posamezna slika znotraj animacije. Animacija lahko vsebuje enega ali več frame-ov.
  3. Subframe
    Subframe je informacija, da naj se določena bitmapa pod določenimi kriteriji nariše na določeno mesto frame-a. Frame lahko vsebuje enega ali več subframe-ov.

Nato sledijo posamezne definicije animacij.

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Število animacij

Koliko animacijskih podatkovnih nizov je na voljo

0x0004 uint(32) Število okvirjev

Koliko okvirjev naj bi bilo skupaj na voljo

0x0008 uint(32) Število podokvirov

Koliko podokvotov naj bi bilo na voljo skupaj

0x000c uint(32) Število neobveznih vnosov

Koliko "opcijskih vnosov" je na voljo.

Animacija

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(32) Neznan 1

Neznane informacije

0x0004 uint(32) Omejitveni okvir: Levo

Označuje levi začetek (v pikslih) Bounding Box.

0x0008 uint(32) Omejitveni okvir: Zgoraj

Označuje zgornji začetnik (v pikselih) Bounding Box.

0x000c uint(32) Meja: Širina

Navede širino (v slikovnih pikah) Bounding Box.

0x0010 uint(32) Omejitveni okvir: višina

Navede višino (v pikselih) Bounding Box.

0x0014 uint(32) Odmik: X

Označuje horizontalno središče animacije

0x0018 uint(32) Odmik: Y

Označuje vertikalno središče animacije

0x001c uint(32) Neznan 2

Neznane informacije

0x0020 uint(32) Število okvirjev

Označuje, koliko animacijskih okvirjev je v tej animaciji vsebovanih

0x0024 uint(32) Število oken

Označuje, koliko oken naj se uporabi pri risanju

Podatki zgornje plasti animacije so predvsem upravljalski podatki - Boundingbox označuje koordinate oznake okoli vozila/poslopja, kadar je to izbrano, in hkrati označuje, kateri del je mogoče klikniti.

Offset predvsem določa "ničelno točko"; točko, ki se mora seštevati ali odštevati od notranjih koordinat igre. Matematično bi lahko rekli: offset tukaj označuje koordinatno izhodišče.

Oken je, prav tako kot offset, vsak (na okno) sestavljen iz 4 uint(32) vrednosti, ki določajo območje, ki velja za posamezne subframe. Zunaj oken se, če to ni predvideno za bitmaps, ne sme risati.

Okvir

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(8) Število podokvirjev in preklop za Opcionalno 1, 2

Ta vrednost vsebuje:

  • 0x7F (Bitmask): Število podokvirov, ki se uporabljajo v tem okviru
  • 0x80: Informacija o tem, ali sta opcionalna 1 in 2 prisotna
0x0001 uint(8) Neznano 1 in preklopnik za opcionalno 3, 4

Ta vrednost vsebuje:

  • 0x7F (Bitmask): Neznano - Močno sumim, da gre za število gametickov, ki minejo, preden se prikaže naslednji okvir
  • 0x80: Informacija o tem, ali sta opcionalna 3 in 4 prisotna
0x0002 uint(8) Neobvezno 1

Neznano

0x0003 uint(8) Neobvezno 2

Neznano

0x0004 uint(8) Neobvezno 3

Neznano

0x0005 uint(8) Opcijsko 4

Neznano

Podokvir

Nasl. x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Odmik Tip podatkov Oznaka Razlaga
0x0000 uint(16) Bitmap-ID

Navedite, katera bitna slika naj se uporablja za ta podokno

0x0002 uint(8) Neznan 1

Je neznano - močno pa sumim, da gre za prioriteto upodabljanja (Z-sloj).

0x0003 uint(8) Id podokvira

Navede, v katerem podoknu se nahajamo

0x0004 sint(16) Odmik - Horizontalni

Navede, kje znotraj okvirja naj bo podokno postavljeno, oziroma koliko pikslov naj bo bitna slika horizontalno premaknjena.

0x0006 sint(16) Offset - Vertikalno

Navaja, kje znotraj okvira naj bo podokno postavljeno, oziroma za koliko naj se bitna slika vertikalno premakne v pikselih.

Tako lahko zdaj sestavljamo posamezne okvire, pa tudi celotne animacije, tukaj pa to ob demonstraciji bolj kompleksne animacije, animacije z indeksom 500.

Animacija 500

Animacija 500 prikazuje, kako se Plymouth transporter, naložen z običajnimi minerali, raztovarja. To je ena redkih animacij, ki uporablja funkcionalnost oken.

In tako lahko sestavimo celotno animacijo.
Žal pa obstaja še en problem z zgornjim tovorom, saj tukaj ustrezni bit v informacijah o grafični vrsti ni nastavljen.

Tukaj je še nekaj drugih, čudovito animiranih sprite-ov iz igre:

Rendering animacije 500 ilustrira

Animacija 500 je dokončno sestavljena

Plymouth tovarna stavb

Eden vesoljski pristanišče

Eden medicinski center

SCAT

Plymouth vesoljski pristanišče

Easteregg:
Božiček

Easteregg:
Dans Dog

Uporabniški vmesnik

Zdaj še manjka uporabniški vmesnik igre, ki je zasnovan v brušeni kovini.

Vendar pa je tudi tukaj očitno, da Dynamix ni bilo treba ponovno izumiti kolesa; tukaj ne izkoriščajo le preprosto API-jev User32 in GDI32, ki jih zagotavlja Windows - še posebej se uporablja upravljanje virov User32.

Ti se lahko na primer izvlečejo s programi, kot je Resource Hacker, ki ga je kot freeware razvil Angus Johnson, ali - če se pod Linuxom / Mac OS izogibate uporabi Wine - s pomočjo wrestool, ki je vključen v icoutils.

Ime datoteke Vsebina
Outpost2.exe Vsebuje le ikono igre, ki prikazuje vesoljsko postajo pred New Terra
op2shres.dll Vsebuje grafike za kontrolne elemente, kot so obrobe, gumbi, radijske gumbe in potrditvena polja, prav tako pa tudi ozadja dialogov, spremljevalne slike za besedila zgodbenih misij in ozadje glavnega menija
out2res.dll Vsebuje dekoracijo oken v igri, ikone za običajno in posebno kovino, zaslon za nalaganje, grafike za dialoge ter dodatne grafike za kazalce, poleg animiranih v imeniku igre