Outpost 2 fájlformátumok · bei.pm
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 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:
|
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.
|
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 |
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 |
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 |
0x0014 | uint(32) | Színmélység? | Ennek az értéknek a jelentése ismeretlen. Mivel az összes ellenőrzött fájlban a |
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 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:
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 |
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 |
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 |
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 |
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 |
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.
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. |
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:
|
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.
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:
-
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. -
Kép
Egy kép egyetlen kép az animáción belül. Egy animáció tartalmazhat egy vagy több képet. -
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:
|
0x0001 | uint(8) | Ismeretlen 1 és Toggle az Opció 3, 4-hez | Ez az érték a következőket tartalmazza:
|
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:
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 |