Outpost 2 formati datoteka · bei.pm

Ovaj tekst je automatski preveden pomoću OpenAI GPT-4o Mini.

Format datoteka opisani na ovoj stranici temelje se na tehničkoj analizi intelektualnog vlasništva Dynamix, Inc. i Sierra Entertainment.
Intelektualno vlasništvo danas je dio Activision Publishing, Inc. / Activision Blizzard, Inc. grupe i trenutno je u vlasništvu Microsoft Corp..

Informacije su prikupljene putem obrnute inženjering i analize podataka u svrhu arhiviranja i interoperabilnosti s povijesnim podacima.
Nisu korištene nikakve vlasničke ili povjerljive specifikacije.

Igra se trenutno može kupiti kao preuzimanje na gog.com.

Umjetničko djelo igre

Sljedeća serija članaka dokumentira moja saznanja o formatima podataka u realnom vremenu strategijskoj igri "Outpost 2: Divided Destiny", koja je 1997. godine objavljena od strane Siere i razvijena od strane Dynamixa.

Od 01. studenog 2015. do 14. studenog 2015. godine, uglavnom sam se bavio analizom podataka iz igre - i što se s njima može učiniti.

Prema informacijama koje sam do sada uspio prikupiti, Dynamix - kao i mnoga komercijalna poduzeća - nije razvio neke formate podataka posebno za Outpost 2, već ih je također koristio u drugim razvojnim projektima, poput serije Mechwarrior (izmijenjeno).
Neovisno o tome, može se također primijetiti da inovativnost formata podataka praktički ima svoja ograničenja i često se oslanja na dugo postojeće koncepte iz uobičajenih formata poput JFIF-a i RIFF-a.

Za interpretaciju tablica i formata podataka dostupne su dodatne informacije na Što je što?.
Ovdje navedeni podaci općenito se razumiju kao Little Endian.

Na kraju se može reći da je inverzno inženjerstvo bilo vrlo zabavno, iako nije potpuno.
Naravno, također bih preporučio igranje igre samostalno, jer nudi zanimljive mehanike igre.

Uvod

Podaci koje koristi Outpost 2 imaju strukturu koja podsjeća na JFIF / PNG - pojedini podaci blokovi uvijek imaju 8-byte zaglavlje. Zato ću izostaviti dokumentiranje pojedinačnih zaglavlja na odgovarajućim specifičnim mjestima i dokumentirati samo odstupanja.

Format je uvijek sljedeći; stvarni korisni podaci su tada u njega ugrađeni:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi

Sadrži informacije o tome što se može očekivati u sljedećem podatkovnom bloku.

Poznate vrijednosti:

  • 0x204C4F56 ('VOL '):
    Jedinica
  • 0x686C6F76 ('VOLH'):
    Header jedinice
  • 0x736C6F76 ('VOLS'):
    Stringovi jedinice
  • 0x696C6F76 ('VOLI'):
    Informacije o jedinici
  • 0x4B4C4256 ('BLCK'):
    Blok jedinice
  • 0x504D4250 ('PBMP'):
    Grafički podaci
  • 0x4C415050 ('PPAL'):
    Paleta boja
  • 0x4C415043 ('CPAL'):
    Kontejner paleta boja
  • 0x64616568 ('head'):
    Header
  • 0x61746164 ('data'):
    Podaci
0x0004 uint(24) Dužina bloka

Obuhvaća informaciju o veličini (u bajtovima) sljedećeg podatkovnog bloka.

Pri tome se misli na čiste korisničke podatke - 8 bajtova zaglavlja nije uključeno.

0x0007 uint(8) Zastave?

Nije poznato čemu točno služi ova blok.

U volumima je ova vrijednost često 0x80, dok je u drugim datotekama često 0x00. To sugerira da se radi o skupu zastavica.

Volumeni

Volumeni su kontejneri podataka za igru, slični arhivskom formatu kao što je Tarball. Bar u Outpost 2, format poznaje samo datoteke - nema mapa. Vjerojatno bi se mape mogle simulirati odgovarajućim imenima datoteka.

Volume se sastoji od Volume zaglavlja kao i od nekoliko Volume blokova koji odgovaraju konkretnim datotekama.

"Volumes" su datoteke s ekstenzijom 'vol' u direktoriju igre.

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Naslov volumena

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Volumenski zaglavlje ne sadrži nikakve korisničke podatke.
Slijži samo kao kontejner.

Prvi podaci u volumenskom zaglavlju trebali bi biti volumenski stringovi; nakon toga slijede informacije o volumenu.

Volumenski nizovi

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave
Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave
0x0008 uint(32) Duljina tereta

Navodi koliko je bajtova od sljedećih podataka zapravo korisnih podataka.

Preostali podaci s popisa volumena stringova očigledno se smatraju garbage.

U datotekama s kasnijim datumima, ti 'preostali podaci' su 0x00, što bi moglo ukazivati na nedostatke u alatnom lancu tijekom razvoja igre, odnosno da se tek vrlo kasno jedan od developera pobrinuo za pravilnu inicijalizaciju bafera, budući da nema utjecaja na igru je li podaci inicijalizirani ili ne.

0x000c uint(8)[] Popis imena datoteka

Ovo je lista imena datoteka terminirana s 0 bajtova, koja - barem u ovom dijelu podataka - očekuje samo ASCII znakove.

Nije potrebno detaljnije analizirati ovaj blok podataka prilikom parsiranja, budući da se u informacijama o volumenu izravno referenciraju ofseti imena datoteka.

Volume Strings predstavljaju popis imena datoteka koje se nalaze unutar volumena.

Informacije o volumenu

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Informacije o volumenu sadrže detaljnije informacije o datotekama. To je na određeni način vrsta FAT unosa u direktorij (FAT = File Allocation Table)

Broj datoteka dobiva se dijeljenjem veličine bloka sa duljinom unosa u direktorij - 14 bajtova.

pojedinačni unosi u direktoriju imaju sljedeću strukturu:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Offset imena datoteka

Navodi na kojem offsetu (!) unutar popisa imena datoteka (Volume-Strings) se nalazi naziv datoteke.

Odnosi se na početak bloka korisničkih podataka.

0x0004 uint(32) Datotečni offset

Navodi na kojem se offsetu unutar cijele volumenske datoteke nalazi datoteka.

0x0008 uint(32) Veličina datoteke

Navodi koliko je velika datoteka u bajtovima.

0x000c uint(16) Zastave?

Izgleda da pruža dodatne informacije o kodiranju datoteka.

  • 0x03 je postavljeno kada je datoteka komprimirana. Ovdje se očito koristi Huffmanovo stablo.
  • 0x80 se čini da je uvijek postavljeno.

Volumenski blok

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Volume blok je kontejner koji sadrži datoteke. U njemu se redundantno, zbog formata bloka, ponavlja veličina datoteke, a zatim odmah slijede korisni podaci.

Kamenčići

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magijski bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Tiles su specifičan Bitmap grafički format za Outpost-2. Protežu se kroz 13 tileseta, koji se nazivaju "wells" (well0000.bmp do well0012.bmp), a nalaze se unutar volumena maps.vol.

Tileseti / Wells sadrže sljedeće:

Ime datoteke Sadržaj
well0000.bmp Grafika veličine 32x32px, plava - idealna za testiranje funkcionira li vlastiti loader za slike
well0001.bmp Sadrži svijetlu stijenu, planinske lance na svijetloj stijeni i bezbroj varijanti kratera na svijetloj stijeni
well0002.bmp Sadrži 'Doodads' od svijetle stijene - dakle, elemente koji se mogu postaviti za razbibrigu (ili namjerno kao struktura, poput zidova) na svijetloj stijeni, uključujući i vegetaciju
well0003.bmp Sadrži strukturu nalik kori na svijetloj stijeni
well0004.bmp Sadrži tamnu stijenu, planinske lance na tamnoj stijeni i bezbroj varijanti kratera na tamnoj stijeni
well0005.bmp Sadrži 'Doodads' od tamne stijene - dakle, elemente koji se mogu postaviti za razbibrigu (ili namjerno kao struktura, poput zidova) na tamnoj stijeni
well0006.bmp Sadrži strukturu nalik kori na tamnoj stijeni, kao i prijelaze između svijetle i tamne stijene
well0007.bmp Sadrži lavu uključujući po 4-5 okvira animacije iste
well0008.bmp Sadrži pijesak i bezbroj varijanti kratera u pijesku
well0009.bmp Sadrži 'Doodads' od pijeska - dakle, elemente koji se mogu postaviti za razbibrigu (ili namjerno kao struktura, poput zidova) na pijesku
well0010.bmp Sadrži po 48 prijelaza s pijeska na svijetlu i tamnu stijenu
well0011.bmp Sadrži polarne kapice mape, s tamnom stijenom kao podlogom
well0012.bmp Sadrži polarne kapice mape, s svijetlom stijenom kao podlogom

Preporučuje se da se pločice ne renderiraju unaprijed kako bi se izbjeglo njihovo keširanje, jer podaci za ciklus dana/noći još uvijek trebaju biti obrađeni - a nastalo bi jako puno podataka.

Pločice su 8bpp grafike s indeksiranom paletom, svaka rezolucije 32x32 piksela, koje su raspoređene jedna ispod druge. U tako stvorenom setu pločica može biti znatno više

Glavni kontejner sastoji se od 2 sekcije: head i data.

Naslov pločica

Adr 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 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magijski bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave
0x0008 uint(32) Verzija / Zastave?

Ovo bi mogla biti verzija datotečnog formata; u svim datotekama koje imam ovdje je bio zapis 0x02

0x000c uint(32) Širina (Horizontalna rezolucija)

Navodi koliko je široka slika (u pikselima).

Za sve bunare iz Outpost 2 ovdje se očekuje vrijednost 0x20 odnosno 32.

0x0010 uint(32) Visina (Vertikalna razlučivost)

Navodi koliko je visoka slika (u pikselima).

Za sve bunare iz Outpost 2 ovdje će se očekivati vrijednost 0x20 odnosno 32.

0x0014 uint(32) Dubina boje?

Značenje ove vrijednosti je nepoznato.

Budući da u svim provjerenim datotekama ima vrijednost 8, moglo bi se raditi o oznaci dubine boje.

0x0018 uint(32) Dubina boje 2?

Značenje ove vrijednosti je nepoznato.

Možda se radi o 'ciljanoj' dubini boje.

Nakon ovih podataka slijedi još jedan datoteka palete u standardiziranom RIFF formatu. Točna specifikacija može se pronaći - budući da se palete pojavljuju i drugdje - na Palete.

Podaci o pločicama

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magijski bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Nakon toga slijede sirovi podaci o pikselima, redom s lijeva prema desnoj donjoj strani.
Vrijednost podataka kod grafika koje su obično u formatu 8bpp-Bitmaps odgovara indeksu boje u paleti boja.

Podaci o pikselima počinju u gornjem lijevom kutu i završavaju u donjem desnom kutu.

Igračka Engina vjerojatno *na zahtjev* crta pločice.
To je, između ostalog, posljedica ciklusa dana i noći, koji poznaje 32 razine pojedinačnih pločica. Čini se da se od vrijednosti svjetlosti 'malo' oduzima. Točne vrijednosti još nisu utvrđene, radim na osnovi izračuna

v *= (daylight / 48) + 0.25;

s HSV podacima piksela, pri čemu je daylight vrijednost od 0-31, a v vrijednost između 0-1. Dodatno, treba uzeti u obzir da na karti postoji još rub od 16 pločica lijevo i desno (koji služi za nevidljivo pojavljivanje jedinica).

Dodatno, čini se da ciklus dana i noći po ciklusu igre ažurira samo jedan stupac karte.
Ubrzani ciklus dana i noći izgleda ovako:

Vizualizacija ciklusa dana i noći

PRT

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magijski bajtovi
0x0004 uint(24) Duljina paleta

U odnosu na normalni blok format, navodi broj paleta koje se mogu pronaći u ovoj datoteci - a ne duljinu bloka u bajtovima.

0x0007 uint(8) Zastave

Vjerojatno, kao i obično, zastavice.

Međutim, nisu mi poznate nikakve zastavice; budući da svi meni poznati vrijednosti odgovaraju 0x00, također bi bilo potencijalno moguće da je broj paleta jednostavno uint(32).

Za što točno PRT stoji, nije mi poznato; moglo bi se, na primjer, raditi o 'Paleta i Resursna Tablica' - budući da je ova datoteka - koja se nalazi kao op2_art.prt u maps.vol - upravo takva, odnosno to bi dobro opisalo njezinu funkciju.

Ova datoteka sadrži popis paleta, tablicu svih korištenih bitmapa, sve definicije animacija i još niz nepoznatih podataka. Pridržava se dosadašnjeg formata kontejnera, ali ne svi zapisi slijede ovu shemu.

CPAL sekcija (vjerojatno označava kontejner paleta) obuhvaća isključivo podatke o paletama, navodeći koliko ima uobičajenih 8-bitnih paleta, koje obično imaju 1052 bajta.

Izjava o 1052 bajta nije obvezujuća, budući da format paleta potencijalno može imati različite veličine paleta. Ona se odnosi samo na skup podataka koji se isporučuje s Outpost 2.

Odmah nakon popisa paleta, bez uvodnog zaglavlja, slijedi popis bitmapa; a odmah nakon toga slijede popisi animacija.
Oba će biti započeta s uint(32) (ili ponovno uint24+uint8 zastavice?), koji sadrži broj zapisa.

Palete

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina palete

U suprotnosti s normalnim blok formatom, navodi broj paleta koji se može pronaći u ovoj datoteci - ne duljinu bloka u bajtovima.

0x0007 uint(8) Zastave

Vjerojatno, kao i obično, zastavice.

Međutim, nisam upoznat s nijednom zastavicama; budući da su svi poznati vrijednosti 0x00, moglo bi biti i da je broj paleta jednostavno uint(32).

Informacije o paletama su veoma jednostavne za čitanje.
Sastoje se od zaglavlja i segmenta podataka.

Glava Paleta

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina palete

U suprotnosti s normalnim blok formatom, navodi broj paleta koji se može pronaći u ovoj datoteci - ne duljinu bloka u bajtovima.

0x0007 uint(8) Zastave

Vjerojatno, kao i obično, zastavice.

Međutim, nisam upoznat s nijednom zastavicama; budući da su svi poznati vrijednosti 0x00, moglo bi biti i da je broj paleta jednostavno uint(32).

0x0008 uint(32) Verzija formata paleta?

Vjerojatno definira koja verzija formata paleta slijedi paletu.

Sve Outpost2 palete čini se da imaju verziju 0x01.

Podaci o paletama

Adr 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 . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Magični bajtovi
0x0004 uint(24) Duljina bloka
0x0007 uint(8) Zastave

Odjeljak s podacima uključuje pojedinačne unose paleta. Broj unosa paleta dobiva se dijeljenjem duljine bloka s 4.

Pojedinačni unosi imaju sljedeću, jednostavnu strukturu;

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(8) Crvena komponenta

Navodi udio crvene boje

0x0001 uint(8) Zelena komponenta

Navodi udio zelene boje

0x0002 uint(8) Plava komponenta

Navodi plavu komponentu boje

0x0003 uint(8) Nepoznato - Zastave?

Nije jasno što ova vrijednost znači, budući da se očigledno temelji na 0x04.

O paletama se može reći samo to da za palete koje se koriste za animacije vrijede sljedeća pravila:

  • Prva boja je UVIJEK prozirna, bez obzira na vrijednost koja je navedena.
  • Unosi paleta 1-24 smatraju se igračkim bojama u paletama 1-8.
    Odakle ostale boje, osim boje igrača 1, nije mi jasno.
    Pretpostavljam da su preostale boje hardkodirane.

Referenca paleta

Bitmape

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Usmjerena širina

Navodi širinu redova podataka piksela u bajtovima - jer su oni usklađeni s granicama od 4 bajta.

Na taj način je brzo moguće skočiti na određeni redak slike.

Zašto se ova vrijednost pohranjuje odvojeno, iako bi se mogla izračunati, nije jasno.
Možda se radi o optimizaciji za kod za renderiranje.

0x0004 uint(32) Pomak

Navodi pomak prve linije u bitmapi

0x0008 uint(32) Visina

Navodi visinu slike u pikselima

0x000c uint(32) Širina

Navodi širinu slike u pikselima

0x0010 uint(16) Tip

Navodi vrstu slike. Ovdje se čini da se radi o bitmaski:

  • 0x04 je postavljen ako se radi o 1bpp grafici.
  • 0x40 je postavljen ako se radi o grafici koja mora implementirati prozore.
0x0012 uint(16) Paleta

Definira koja paleta iz PRT datoteke treba biti korištena

Ova struktura podataka PRT datoteke pokazuje kako su izgrađene bitmape korištene za spriteove. Te bitmape služe kao pojedinačni sastavni dijelovi, od kojih se nekoliko sastavlja u animacijski okvir spritea.

Konkretniji podaci o slikama nalaze se u op2_art.BMP u mapi igre.
Zašto ova bitmap datoteka ima (pretežno točan) RIFF bitmap zaglavlje, nije jasno. Vjerojatno Outpost 2 koristi sistemske API-e za učitavanje grafike, time privremeno preuzimajući ovo zaglavlje i prepisujući odgovarajuća, varijabilna polja.

Pikselski podaci nalaze se u BMP datoteci na poziciji Offset + uint32-offset, koji se može pronaći u BMP datoteci na adresi 0x000A (RIFF bitmap podaci offset), i ponovno odgovaraju redoslijedu od vrha lijevo prema dolje desno.

Monokromatske 1bpp grafike mogu se crtati tako da boja 0 predstavlja potpunu prozirnost, dok boja 1 ima poluprozirnu crnu/sivu, budući da se monokromatske grafike uglavnom koriste za sjene vozila i zgrada u animacijama.

Na taj način već se može sastaviti mnogo grafika.

Zaštićeni stambeni modul (Plymouth)

Animacije

Sada dolazimo do kraljevske discipline unutar Outpost 2 formata podataka:
Animacija.

Popisi animacija započinju globalnim zaglavljem, koje prvenstveno služi za verifikaciju podataka. Nakon toga slijede konkretne definicije animacija, koje su podijeljene u 3 razine:

  1. Animacija
    Animacija je najviša instanca; predstavlja animaciju jedinice, zgrade ili 'čestice-animacije' (udar kometa, vrijeme, eksplozija) u određenoj početnoj situaciji.
  2. Okvir
    Okvir je pojedinačna slika unutar animacije. Animacija može sadržavati jedan ili više okvira.
  3. Podokvir
    Podokvir je informacija o tome da se određena bitmapa pod određenim kriterijima treba nacrtati na određenu poziciju okvira. Okvir može sadržavati jedan ili više podokvira.

Nakon toga slijede konkretne definicije animacija.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Broj animacija

Koliko animacijskih podataka postoji

0x0004 uint(32) Broj okvira

Koliko ukupno okvira bi trebalo biti prisutno

0x0008 uint(32) Broj podokvira

Koliko ukupno subframe-ova bi trebalo biti prisutno

0x000c uint(32) Broj opcionalnih unosa

Koliko "opcionalnih unosa" postoji.

Animacija

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(32) Nepoznato 1

Nepoznate informacije

0x0004 uint(32) Okvir za ograničavanje: Lijevo

Određuje lijevi početak (u pikselima) Bounding Box.

0x0008 uint(32) Bounding Box: Gore

Određuje gornju granicu (u pikselima) Bounding Box.

0x000c uint(32) Okvir: Širina

Određuje širinu (u pikselima) okvira.

0x0010 uint(32) Okvir za ograničavanje: Visina

Navodi visinu (u pikselima) Bounding Box.

0x0014 uint(32) Pomak: X

Postavlja horizontalnu središnju točku animacije

0x0018 uint(32) Offset: Y

Navodi vertikalnu središnju točku animacije

0x001c uint(32) Nepoznato 2

Nepoznata informacija

0x0020 uint(32) Broj okvira

Navodi koliko animacijskih okvira sadrži ova animacija

0x0024 uint(32) Broj prozora

Navodi koliko prozora treba primijeniti prilikom crtanja

Podaci gornjeg sloja, animacije, prvenstveno su upravni podaci - Boundingbox označava koordinate oznake oko vozila/zgrade, kada je ona odabrana, i također označava koji dio treba biti klikabilan.

Offset prvenstveno određuje "nulte točke"; točka koja se mora izračunati ili oduzeti od unutarnjih koordinata igre. Moglo bi se reći i matematički: offset ovdje označava izvor koordinata.

Windows se, kao i offset, sastoje od 4 uint(32) vrijednosti po prozoru, koje označavaju područje koje se može koristiti za pojedinačne subframeove. Izvan prozora ne smije se, osim ako nije predviđeno za bitmapu, crtati.

Okvir

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(8) Broj podokvira i prekidač za Opcionalno 1, 2

Ova vrijednost sadrži:

  • 0x7F (Bitmaske): Broj podokvira koji se koriste u ovom okviru
  • 0x80: Informacija o tome jesu li Opcional 1 i 2 prisutni
0x0001 uint(8) Nepoznato 1 i prekidač za Opcionalno 3, 4

Ova vrijednost sadrži:

  • 0x7F (Bitmaski): Nepoznata - Snažno sumnjam da se ovdje radi o broju gametickova koji prolaze dok se ne prikaže sljedeći kadar
  • 0x80: Informacija o tome jesu li Opcional 3 i 4 prisutni
0x0002 uint(8) Opcionalno 1

Nepoznat

0x0003 uint(8) Opcionalno 2

Nepoznat

0x0004 uint(8) Opcionalno 3

Nepoznat

0x0005 uint(8) Opcionalno 4

Nepoznat

Subokvir

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Pomak Tip podataka Naziv Objašnjenje
0x0000 uint(16) Bitmap-ID

Navodi koja bitmapa treba biti korištena za ovaj podokvir

0x0002 uint(8) Nepoznato 1

Nije poznato - međutim, snažno sumnjam da se ovdje radi o prioritetu renderiranja (Z-sloj).

0x0003 uint(8) Id podokvira

Navodi u kojem se podokviru nalazimo

0x0004 sint(16) Offset - Horizontalni

Navodi gdje unutar okvira treba smjestiti podokvir, odnosno za koliko piksela treba horizontalno pomaknuti bitmapu

0x0006 sint(16) Offset - Vertikalno

Navodi gdje unutar okvira treba postaviti podokvir, odnosno za koliko piksela treba vertikalno pomaknuti bitmapu

Tako možemo sada sastaviti pojedinačne okvire, kao i kompletne animacije, ovdje jednom primjerom na složenijoj animaciji, animaciji s indeksom 500, demonstrirano

Animacija 500

Animacija 500 prikazuje kako se Plymouth transporter, koji je opterećen običnim željezom, istovara. Ovo je jedna od rijetkih animacija koja koristi funkcionalnost prozora.

Tako se može sastaviti cijela animacija.
Nažalost, još uvijek postoji problem s gornjim otvorom za utovar, jer ovdje odgovarajući bit u informacijama o tipu grafike nije postavljen.

Evo još nekoliko prekrasno animiranih spriteova iz igre:

Renderiranje animacije 500 ilustrirano

Animacija 500 potpuno sastavljena

Plymouth Fabrika zgrada

Eden Svemirska luka

Eden Medicinski centar

SCAT

Plymouth Svemirska luka

Easteregg:
Djed Mraz

Easteregg:
Dans Pas

Korisničko sučelje

Sada nedostaje još korisničko sučelje igre, koje je u brušenom metalu stilu.

No, i ovdje je jasno da Dynamix nije morao izmišljati toplu vodu; ovdje se ne koriste samo jednostavno API-ji User32 i GDI32 koje pruža Windows - posebno se koristi i upravljanje resursima iz User32.

Ti se resursi mogu, na primjer, izvući pomoću programa kao što je Resource Hacker, koji je razvio Angus Johnson kao freeware, ili - ako se ne želi koristiti Wine na Linuxu / Mac OS-u - uz pomoć wrestool koji dolazi s icoutils.

Ime datoteke Sadržaj
Outpost2.exe Sadrži samo ikonu igre koja prikazuje svemirsku stanicu ispred New Terra
op2shres.dll Sadrži grafike za kontrolne elemente kao što su okviri, dugmadi, radio dugmadi i potvrdnih okvira, kao i pozadine dijaloga, prateće slike za tekstove misija i pozadinsku grafiku glavnog izbornika
out2res.dll Sadrži ukrase prozora unutar igre, ikone za obični i specijalni metal, ekran za učitavanje, grafike za dijaloge, kao i dodatne grafike kursora, uz animirane u mapi igre