Outpost 2 fájlformátumok · bei.pm

Ez a szöveg automatikusan lett lefordítva az OpenAI GPT-4o Mini által.

A ezen az oldalon leírt fájlformátumok a Dynamix, Inc. és a Sierra Entertainment szellemi tulajdonának technikai elemzésén alapulnak.
A szellemi tulajdon ma az Activision Publishing, Inc. / Activision Blizzard, Inc. tömeg részét képezi, és jelenleg a Microsoft Corp. birtokában van.

Az információkat fordított mérnöki munka és adatok elemzése révén gyűjtötték össze az archíválás és a történelmi adatokkal való interoperabilitás céljából.
Semmilyen tulajdonjoggal védett vagy bizalmas specifikációt nem használtak.

A játék jelenleg a gog.com oldalon vásárolható meg letöltésként.

A játék művészeti munkái

A következő cikk-sorozat dokumentálja a "Outpost 2: Divided Destiny" valós idejű stratégiai játék adatformátumaival kapcsolatos tapasztalataimat, amelyet 1997-ben a Sierra adott ki, és a Dynamix fejlesztett.

2015. november 1. és november 14. között főként a játék adatainak elemzésével foglalkoztam - és azzal, hogy mit kezdhetünk velük.

Az eddig megszerzett információk alapján a Dynamix - hasonlóan sok kereskedelmi vállalathoz - nem fejlesztett néhány adatformátumot kifejezetten az Outpost 2-höz, hanem más fejlesztésekben, például a Mechwarrior sorozatban (kicsit átalakítva) is használták őket.
Függetlenül ettől megállapítható, hogy az adatformátumok innovációja gyakorlatilag korlátozott, és gyakran hosszú ideje meglévő, szokásos formátumok, mint például a JFIF és RIFF alapjaira épül.

A táblázatok és adatformátumok értelmezéséhez további információk találhatók itt: Mi az mi?.
Az itt megadott adatok általában Little Endian formátumban értendők.

Végül elmondható, hogy a visszafejtés nagyon szórakoztató volt, még ha nem is teljesen kerek.
Természetesen csak ajánlani tudom, hogy magát a játékot is játssza le, mivel érdekes játékmeneteket kínál.

Bevezetés

Az Outpost 2 által használt adatformátumok a JFIF / PNG struktúrájára emlékeztetnek - az egyes adatblokkok mindig 8 byte-os fejlécet tartalmaznak. Ezért nem dokumentálom az egyes fejléceket a megfelelő specifikus helyeken, csak az eltéréseket jegyzem fel.

A formátum mindig a következő; a tényleges hasznos adatok pedig ebben vannak beágyazva:

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs bájtok

Tartalmazza az információt arról, hogy mi várható a következő adatblokkban.

Ismert értékek:

  • 0x204C4F56 ('VOL '):
    Hangerő
  • 0x686C6F76 ('VOLH'):
    Hangerő-Fejléc
  • 0x736C6F76 ('VOLS'):
    Hangerő-Stringek
  • 0x696C6F76 ('VOLI'):
    Hangerő-információk
  • 0x4B4C4256 ('BLCK'):
    Hangerő-Blokk
  • 0x504D4250 ('PBMP'):
    Grafikai adatok
  • 0x4C415050 ('PPAL'):
    Színpaletta
  • 0x4C415043 ('CPAL'):
    Színpaletták tárolója
  • 0x64616568 ('head'):
    Fejléc
  • 0x61746164 ('data'):
    Használati adatok
0x0004 uint(24) Blokk hossza

Tartalmazza az információt arról, hogy mekkora (byte-ban) a következő adatblokk.

Itt a tiszta hasznos adatokra gondolunk - a 8 fejléccel kapcsolatos byte nem szerepel benne.

0x0007 uint(8) Zászlók?

Nem ismert, hogy pontosan mire szolgál ez a blokk.

A kötetekben ez az érték gyakran 0x80, míg más fájlokban gyakran 0x00. Ez arra utal, hogy valószínűleg egy jelzőkészletről van szó.

Kötetek

A Volumek adatkonténerek a játékhoz, hasonlóan egy archiváló formátumhoz, mint például a Tarball. Legalábbis az Outpost 2-ben a formátum csupán fájlokat ismer - mappákat nem. Valószínűleg ezeket azonban megfelelő fájlnevekkel lehetne szimulálni.

Egy Volume a Volume-fejlécből és több Volume blokkból áll, amelyek a konkrét fájloknak felelnek meg.

A "Volumes" azok a fájlok, amelyek végződnek 'vol' a játék könyvtárában.

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs byte-ok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók

Űrméret fejléc

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs byte-ok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók

A Volume Header önmagában nem tartalmaz felhasználói adatokat.
Csupán tárolóként szolgál.

A Volume Header elsődleges adatai a Volume Stringek; ezt követik a Volume információk.

Térfogat karakterláncok

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs byte-ok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók
Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs byte-ok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók
0x0008 uint(32) Payload-hossz

Megadja, hogy a következő adatok közül hány byte számít tényleges hasznos adatnak.

A többi, megmaradt adat a Volume-Strings listában nyilvánvalóan hulladéknak minősül.

A későbbi dátumú fájlokban ezek a 'megmaradt adatok' 0x00, ami arra utalhat, hogy a játék fejlesztése során a szerszámkészletben hiányosságok voltak, más szóval, hogy a fejlesztő csak nagyon későn foglalkozott a pufferek helyes inicializálásával, mivel az adatok inicializálása nincs hatással a játékra.

0x000c uint(8)[] Fájlnevek listája

Ez egy 0 bájtos terminálú fájlnév lista, amely - legalábbis a jelenlegi adatösszetevőben - csupán ASCII karaktereket vár.

Az adatok elemzésekor nem szükséges ezt az adatblokkot részletesebben kiértékelni, mivel a kötetinformációkban közvetlenül a fájlnevek offsetjei vannak hivatkozva.

A Volume Strings egy fájlnév lista, amely a kötetben található.

Hanginformációk

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs byte-ok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók

A kötetinformációk részletesebb információkat tartalmaznak a fájlokról. Ez bizonyos szempontból hasonlít egy FAT könyvtári bejegyzéshez (FAT = File Allocation Table).

A fájlok száma a blokk méretének és a könyvtári bejegyzések hosszának (14 byte) hányadosából adódik.

A különböző könyvtári bejegyzések felépítése a következő:

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Fájlnév-előtag

Megadja, hogy a fájlnév-lista (Volume-Strings) melyik eltolásán (!) található a fájl neve.

Ez a hasznos adatok blokk kezdetére vonatkozik.

0x0004 uint(32) Fájl-elmozdulás

Megadja, hogy a teljes kötetfájl melyik eltolásán belül található a fájl.

0x0008 uint(32) Fájlméret

Megadja, mekkora a fájl mérete byte-ban.

0x000c uint(16) Zászlók?

Nyilvánvalóan további információkat ad a fájl kódolásáról.

  • 0x03 be van állítva, ha a fájl tömörítve van. Itt nyilvánvalóan egy Huffman-fát használnak.
  • 0x80 látszólag mindig be van állítva.

Térfogat Blokk

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázs byte-ok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók

A Volume-blokk egy olyan tároló, amely fájlokat tartalmaz. Csak még egyszer - a blokkformátum miatt - redundánsan tartalmazza a fájlméretet, majd közvetlenül ezután következnek a hasznos adatok.

Csempe

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Bűvös bájtok
0x0004 uint(24) Blokk-hossz
0x0007 uint(8) Zászlók

A Tiles-ök egy Outpost-2-specifikus bitmap grafikai formátum. 13 Tileset-re terjednek ki, "well" néven (well0000.bmp-tól well0012.bmp-ig), melyek a maps.vol kötetben találhatók.

A Tilesetek / Wells a következőket tartalmazzák:

Fájlnév Tartalom
well0000.bmp Egy 32x32px méretű, kék grafika - ideális tesztelésre, hogy működik-e a saját képkészítő
well0001.bmp Világos kőzetet, hegyvonulatokat világos kőzeten és számtalan kráter változatot tartalmaz világos kőzeten
well0002.bmp Világos kőzeti 'Doodad'-okat tartalmaz - tehát elemeket, amelyeket lazítás céljából (vagy tudatosan strukturaként, mint pl. falak) helyezhetünk el világos kőzeten, beleértve a növényzetet is
well0003.bmp Egy kérgesszerű struktúrát tartalmaz világos kőzeten
well0004.bmp Sötét kőzetet, hegyvonulatokat sötét kőzeten és számtalan kráter változatot tartalmaz sötét kőzeten
well0005.bmp Sötét kőzeti 'Doodad'-okat tartalmaz - tehát elemeket, amelyeket lazítás céljából (vagy tudatosan strukturaként, mint pl. falak) helyezhetünk el sötét kőzeten
well0006.bmp Egy kérgesszerű struktúrát tartalmaz sötét kőzeten, valamint átmeneteket világos és sötét kőzet között
well0007.bmp Láva tartalmaz, amelyhez 4-5 animációs keret tartozik
well0008.bmp Homokot és számtalan kráter változatot tartalmaz homokon
well0009.bmp Homok-'Doodad'-okat tartalmaz - tehát elemeket, amelyeket lazítás céljából (vagy tudatosan strukturaként, mint pl. falak) helyezhetünk el homokon
well0010.bmp 48 átmenetet tartalmaz homokról világos és sötét kőzetre
well0011.bmp A térkép sarkvidéki sapkáit tartalmazza, sötét kőzettel mint alap
well0012.bmp A térkép sarkvidéki sapkáit tartalmazza, világos kőzettel mint alap

Javasolt, hogy a pontos megvalósítás érdekében ne rendereljük előre a lapkákat a gyorsítótárazás érdekében, mivel az adatok a nappali/éjjeli ciklushoz még feldolgozásra várnak - és nagyon-nagyon sok adat keletkezne.

A lapkák 8bpp grafikák indexelt palettával, mindegyik 32x32 pixel felbontású, amelyek egymás mellett helyezkednek el. Az így létrejött lapkakészlet azonban sokkal több

A fő konténer 2 szekcióból áll: head és data.

Csempe Fejléc

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Bűvös bájtok
0x0004 uint(24) Blokk-hossz
0x0007 uint(8) Zászlók
0x0008 uint(32) Verzió / Zászlók?

Ez valószínűleg a fájlformátum verziószáma; az összes általam megkapott fájlban itt a 0x02 érték szerepelt.

0x000c uint(32) Szélesség (Horizontális felbontás)

Megadja, hogy milyen széles a képfájl (pixelben).

Az Outpost 2 minden kútjánál itt a 0x20 vagyis 32 értékre lehet számítani.

0x0010 uint(32) Magasság (Vertikális felbontás)

Megadja, hogy mekkora a képfájl magassága (pixelben).

Az Outpost 2 összes kútjánál itt a 0x20 vagyis a 32 érték várható.

0x0014 uint(32) Színmélység?

Ennek az értéknek a jelentése ismeretlen.

Mivel az összes ellenőrzött fájlban a 8 értéket tartalmazza, lehetséges, hogy a színmélység megadásáról van szó.

0x0018 uint(32) Színmélység 2?

Ennek az értéknek a jelentése ismeretlen.

Lehetséges, hogy ez egy 'cél'-színmélység.

Ezeket az adatok után egy standardizált RIFF-formátumban lévő palettafájl következik. A pontos specifikációt - mivel a paletták máshol is előfordulnak - a Paletták alatt található.

Csempe adatok

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Bűvös bájtok
0x0004 uint(24) Blokk-hossz
0x0007 uint(8) Zászlók

Végül következnek a nyers pixeldatok, balról fentről lefelé, soronként jobbra.
A 8bpp-bitképként megjelenő grafikák adatértéke a színindexet jelenti a színpalettán.

A pixeldatok a bal felső sarokból indulnak, és a jobb alsó sarokban érnek véget.

A játékmotor a csempéket *valószínűleg* igény szerint rajzolja meg.
Ennek egyik oka valószínűleg a nap-éj ciklus, amely 32 fokozatot ismer az egyes csempék számára. Úgy tűnik, hogy a fényesség értékéből 'egy kicsit' levonnak. Pontos értékeket még nem sikerült meghatározni, a számítási alapot a következő képlettel dolgozom ki:

v *= (daylight / 48) + 0.25;

a pixel HSV-adatai alapján, ahol a daylight egy 0-31 közötti érték, és v egy 0-1 közötti érték. Továbbá figyelembe kell venni, hogy a térképen balra és jobbra is van egy 16 csempéből álló szegély (ez az egységek láthatatlan spawnálására szolgál).

Továbbá úgy tűnik, hogy a nap-éj ciklus játékciklusonként csak egy oszlopot frissít a térképen.
Egy felgyorsított nap-éj ciklus tehát a következőképpen néz ki:

A nap-éj ciklus vizualizációja

PRT

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Varázsbyte-ok
0x0004 uint(24) Paletta hossza

Az alapértelmezett blokkformátummal ellentétben megadja a fájlban található paletták számát - nem a blokk hosszát bájtban.

0x0007 uint(8) Zászlók

Valószínűleg, mint általában, zászlók.

Viszont nincsenek ismert zászlóim; mivel az összes általam ismert érték 0x00-t képvisel, lehetséges, hogy a paletták száma egyszerűen egy uint(32) lenne.

A PRT pontos jelentése számomra nem ismert; elképzelhető például, hogy a 'Paletta és Erőforrás Tábla' - mivel ez a fájl - amely a op2_art.prt néven található a maps.vol-ban - valóban egy ilyen fájlt jelent, vagy akár jól is leírhatja a funkcióját.

Ez a fájl tartalmaz egy paletták listáját, egy táblázatot az összes használt bitmapról, az összes animációs definíciót és számos ismeretlen adatot. A korábbi konténerformát követi, de laza összefüggésben, mivel nem minden rekord követi ezt a sémát.

A CPAL szekció (valószínűleg a paletták konténerét jelenti) csupán a palettadatokat öleli fel, megadva, hogy hány db a jellemzően 1052 byte méretű 8-bites palettákból van jelen.

A 1052-byte méret nem tekinthető kötelezőnek, mivel a palettaformátum potenciálisan eltérő palettaméreteket is megengedhet. Ez csupán azokra az adatokra vonatkozik, amelyekkel az Outpost 2 kiadásra került.

A paletták listája után közvetlenül és bevezető fejléc nélkül következik a bitmapelemek listája; ugyanígy az animációs listák is közvetlenül következnek.
Ezek mindegyike egy uint(32) (vagy esetleg uint24 + uint8 flag?) bevezetésével kezdődik, amely tartalmazza a rekordok számát.

Paletták

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Bűvös bájtok
0x0004 uint(24) Paletta hossza

Ellentétben a normál blokkformátummal, a fájlban található paletták számát adja meg - nem a blokk hosszát byte-ban.

0x0007 uint(8) Zászlók

Valószínűleg, mint mindig, zászlók.

Viszont nem tudok zászlókról; mivel az összes általam ismert érték 0x00-nak felel meg, az is potenciálisan elképzelhető, hogy a paletták száma egyszerűen egy uint(32) lenne.

A raklap-információk nagyon egyszerűen olvashatók.
Egy fejlécből és egy adat-szegmensből állnak.

Paletta fejléc

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Bűvös bájtok
0x0004 uint(24) Paletta hossza

Ellentétben a normál blokkformátummal, a fájlban található paletták számát adja meg - nem a blokk hosszát byte-ban.

0x0007 uint(8) Zászlók

Valószínűleg, mint mindig, zászlók.

Viszont nem tudok zászlókról; mivel az összes általam ismert érték 0x00-nak felel meg, az is potenciálisan elképzelhető, hogy a paletták száma egyszerűen egy uint(32) lenne.

0x0008 uint(32) Palettaformátum verzió?

Valószínűleg meghatározza, hogy melyik palettaformátum verzióját követi a paletta.

Úgy tűnik, hogy minden Outpost2 palettának 0x01 verziója van.

Pallettadatok

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Bűvös bájtok
0x0004 uint(24) Blokk hossza
0x0007 uint(8) Zászlók

A adat szekció tartalmazza az egyes raklap-bejegyzéseket. A raklap-bejegyzések száma a blokk hosszának / 4-ből adódik.

Az egyes bejegyzések egyszerű felépítése a következő;

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(8) Piros komponens

Megadja a szín vörös komponensének arányát

0x0001 uint(8) Zöld komponens

Megadja a szín zöld arányát

0x0002 uint(8) Kék komponens

Megadja a szín kék arányát

0x0003 uint(8) Ismeretlen - Zászlók?

Nem világos, mit jelent ez az érték, mivel látszólag alapvetően 0x04.

A palettákkal kapcsolatban annyit kell még mondani, hogy az animációkhoz használt palettákra a következő szabályok vonatkoznak:

  • A legelső szín MINDIG átlátszó, függetlenül attól, hogy milyen értéket adtak meg.
  • A paletta bejegyzések 1-24 a 1-8. palettákban játékos színként értendők.
    Hogy a színek honnan származnak az 1-es játékoson kívül, azt nem tudom.
    Feltételezem, hogy a többi szín hardcoded.

Paletta hivatkozás

Bitképek

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Középre igazított szélesség

A bájtokban megadja a pixeladat-sorok szélességét - mivel ezek a 4 bájt határokhoz vannak igazítva.

Így gyorsan ugrani lehet egy adott képsorra.

Nem világos, miért tárolják ezt az értéket külön, bár kiszámítható lenne.
Lehetséges, hogy ez egy optimalizáció a renderelő kód számára.

0x0004 uint(32) Eltolás

Megadja a bitmap első sorának eltolását

0x0008 uint(32) Magasság

Adja meg a kép magasságát pixelben

0x000c uint(32) Szélesség

A kép szélességét pixelben adja meg

0x0010 uint(16) Típus

A kép típusát adja meg. Úgy tűnik, hogy egy bitmaszkra vonatkozik:

  • 0x04 be van állítva, ha 1bpp grafika van.
  • 0x40 be van állítva, ha a grafikának windowingot kell megvalósítania.
0x0012 uint(16) Paletta

Meghatározza, hogy melyik palettát kell használni a PRT fájlból

A PRT-fájl adatszerkezete megmutatja, hogyan épülnek fel a spritekhez használt bitmapok. Ezek a bitmapok egy-egy alkotóelemként szolgálnak, amelyből több darabot összeállítanak egy sprite animációs keretéhez.

A konkrét képadatok a játék mappájában található op2_art.BMP fájlban rejtőznek.
Hogy miért rendelkezik ez a bitmap fájl egy (többnyire helyes) RIFF-bitmap fejlécsel, az nem világos. Valószínű, hogy az Outpost 2 rendszer-API-kat használ a grafikák betöltésére, ideiglenesen átvéve ezt a fejlécet, és felülírva a megfelelő, változó mezőket.

A pixeldatok a BMP fájlban az Offset + uint32-Offset pozíción találhatók, mely a BMP fájlban a 0x000A címen érhető el (RIFF-bitmap adatok offsetje), és ismét a bal felső saroktól jobbra lefelé haladó soros elrendezést követi.

A monokróm 1bpp grafikák úgy is megrajzolhatók, hogy a 0 szín teljes átlátszóságot, míg az 1 szín félig átlátszó fekete/szürke, mivel a monokróm grafikákat jellemzően jármű- és épületsötétekhez használják az animációkban.

Ily módon már sok grafikát össze lehet állítani.

Védett lakómodul (Plymouth)

Animációk

Most már a legmagasabb szintű diszciplínákra térünk át az Outpost 2 adatformátumok között:
Az animációkra.

Az animációs listák egy globális fejlécsel kezdődnek, amely elsődlegesen az adatok ellenőrzésére szolgál. Ezt követik a konkrét animációs definíciók, amelyek 3 szintre oszlanak:

  1. Animáció
    Egy animáció a legfelsőbb szint; egy egység, egy épület vagy egy 'reszkető animáció' (üstökös becsapódás, időjárás, robbanás) animációját ábrázolja egy adott kiindulási helyzetben.
  2. Kép
    Egy kép egyetlen kép az animáción belül. Egy animáció tartalmazhat egy vagy több képet.
  3. Alkép
    Egy alkép az információ arról, hogy egy adott bitmapot bizonyos kritériumok alapján egy adott helyre kell rajzolni egy képen. Egy kép tartalmazhat egy vagy több alképet.

Ezt követően közvetlenül az egyes animációs definíciók következnek.

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Animációk száma

Hány animációs adatbázis áll rendelkezésre

0x0004 uint(32) Képkockák száma

Összesen hány keretnek kellene lennie

0x0008 uint(32) Alkatrészek száma

Összesen hány alkeretnek kellene lennie

0x000c uint(32) Opcionális bejegyzések száma

Hány "opcionális bejegyzés" található.

Animáció

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(32) Ismeretlen 1

Ismeretlen információk

0x0004 uint(32) Határoló doboz: Balra

Megadja a Bounding Box bal szélső pontját (pixelekben).

0x0008 uint(32) Határoló doboz: Felül

Megadja a Bounding Box felső kezdetét (pixelben).

0x000c uint(32) Határoló doboz: Szélesség

Megadja a Bounding Box szélességét (pixelben).

0x0010 uint(32) Határoló doboz: Magasság

A Bounding Box magasságát (pixelben) adja meg.

0x0014 uint(32) Elmozdulás: X

Megadja az animáció vízszintes középpontját

0x0018 uint(32) Eltolás: Y

Megadja az animáció függőleges középpontját

0x001c uint(32) Ismeretlen 2

Ismeretlen információ

0x0020 uint(32) Képkockák száma

Megadja, hány animációs keret található ebben az animációban

0x0024 uint(32) A Windows számossága

Megadja, hány ablakot kell alkalmazni a rajzolás során

A legfelső réteg, az animáció adatai elsősorban adminisztrációs adatok - a Boundingbox a jármű/épület körüli jelölés koordinátáit jelöli, mikor az ki van választva, és egyúttal azt is megadja, hogy melyik terület legyen kattintható.

Az offset elsősorban a "nullpontot" határozza meg; azt a pontot, amelyet a játékbeli koordinátákhoz hozzá kell adni, vagy el kell vonni. Matematikai értelemben az offset itt a koordináták eredetét jelenti.

A windows esetében, akárcsak az offsetnél, minden egyes (ablak) 4 uint(32) értéket tartalmaz, amelyek egy területet határoznak meg, ami egyes alkeretek számára felhasználható. Az ablakokon kívül, ha azt a bitmap megfelelően megengedi, nem szabad rajzolni.

Keretszerkezet

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(8) Alvázszám és kapcsoló az Opció 1, 2-hez

Ez az érték a következőket tartalmazza:

  • 0x7F (Bitmaszk): A subframe-ek száma, amelyeket ebben a keretben használnak
  • 0x80: Az információ arról, hogy az Opció 1 és 2 elérhető-e
0x0001 uint(8) Ismeretlen 1 és Toggle az Opció 3, 4-hez

Ez az érték a következőket tartalmazza:

  • 0x7F (Bitmaszk): Ismeretlen - Nagyon valószínű, hogy ez a gametickek számát jelenti, amelyek eltelnek, amíg a következő frame megjelenik
  • 0x80: Az információ arról, hogy a 3. és 4. opciók jelen vannak-e
0x0002 uint(8) Opcionális 1

Ismeretlen

0x0003 uint(8) Opcionális 2

Ismeretlen

0x0004 uint(8) Opcionális 3

Ismeretlen

0x0005 uint(8) Opcionális 4

Ismeretlen

Alváz

Cím x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Eltolás Adattípus Megnevezés Magyarázat
0x0000 uint(16) Bitmap-azonosító

Megadja, hogy melyik bitmapot kell használni ehhez a szubrámához

0x0002 uint(8) Ismeretlen 1

Ismeretlen - azonban erősen gyanítom, hogy ez egy renderelési prioritás (Z-reteg) lehet.

0x0003 uint(8) Alváz-azonosító

Megadja, hogy melyik alkeretben vagyunk

0x0004 sint(16) Offset - Horizontális

Megadja, hogy a kereten belül hol helyezkedjen el az alkeret, illetve hogy hány pixellel kell a bitképet vízszintesen eltolni.

0x0006 sint(16) Offset - Vertikális

Megadja, hol a kereten belül kell elhelyezni a szubkeretet, illetve hány pixellel kell függőlegesen elmozdítani a bitképet

Ezzel most már egyes kereteket, valamint teljes animációkat is össze tudunk állítani, itt egy összetettebb animáció példáján, az 500 indexű animáción demonstrálva

Animáció 500

A 500-as animáció bemutatja, hogyan ürítik ki a Plymouth teherautót, amelyet hagyományos érccel rakodtak meg. Ez az egyik kevés animáció, amely kihasználja az ablakkezelési funkciót.

Így a teljes animáció összerakható.
Sajnos van még egy probléma a felső rakodónyílással, mivel itt a megfelelő bit nincs beállítva a grafikai típus információjában.

Itt van még néhány gyönyörűen animált sprite a játékból:

A 500-as animáció renderelése illusztrálva

A 500-as animáció befejeződött összerakása

Plymouth Épületgyár

Eden Űrkikötő

Eden Orvosi Központ

SCAT

Plymouth Űrkikötő

Húsvéti tojás:
Mikulás

Húsvéti tojás:
Dans kutya

Felhasználói felület

Még hiányzik a játék felhasználói felülete, amely fémes, kefélt megjelenésű.

De itt is észlelhető, hogy Dynamix nem kellett, hogy újra feltalálja a kereket; itt nemcsak a Windows által biztosított User32 és GDI32 API-kat használják - különösen a User32 erőforrás-kezelését is alkalmazzák.

Ezek például programokkal, mint az Angus Johnson által ingyenes szoftverként kifejlesztett Resource Hacker, vagy - ha valaki Linux / Mac OS alatt kerüli a Wine használatát - az icoutils-ban található wrestool segítségével is ki tudja nyerni.

Fájlnév Tartalom
Outpost2.exe Csak a játék ikonját tartalmazza, amely a New Terra előtti űrállomást ábrázolja
op2shres.dll A grafikonok mellett, amelyek a vezérlőelemekhez, például keretekhez, gombokhoz, rádiógombokhoz és jelölőnégyzetekhez szükségesek, tartalmaz dialógus háttérképeket, a történet küldetés szövegeihez tartozó kísérő képeket és a főmenü háttérgrafikáját is
out2res.dll Tartalmazza a játékon belüli ablakdíszítést, ikónokat a szokásos és különleges fémből, a betöltési képernyőt, dialógus grafikonokat, valamint további kurzorgrafikákat, az animáltak mellett a játék könyvtárában