Outpost 2 Tiedostomuodot · bei.pm
Tällä sivulla kuvattuja tiedostomuotoja on analysoitu teknisesti Dynamix, Inc.- ja Sierra Entertainment-yhtiöiden henkisen omaisuuden perusteella.
Henkinen omaisuus on nykyään osa Activision Publishing, Inc.- / Activision Blizzard, Inc.-yhtymää ja tällä hetkellä sen omistaa Microsoft Corp..
Tiedot on kerätty käänteisen insinöörityön ja tietoanalyysin avulla arkistointia ja yhteensopivuutta varten historiallisten tietojen kanssa.
Ei ole käytetty mitään omia tai luottamuksellisia spesifikaatioita.
Peli on tällä hetkellä saatavilla ostettavaksi ladattavana gog.com -sivustolla.
Seuraava artikkelisarja dokumentoi havaintojani "Outpost 2: Divided Destiny" -realisointistrategiapelin tiedostomuodoista, joka julkaistiin Sierra-yhtiön toimesta vuonna 1997 ja kehitti Dynamix.
Olen käsitellyt pääasiassa pelin tietojen analysointia ja niiden käyttöä noin 1. marraskuuta 2015 - 14. marraskuuta 2015.
Niiden tietojen mukaan, joita olen tähän mennessä saanut, Dynamix - kuten monet kaupalliset yritykset - ei ole kehittänyt joitakin tiedostomuotoja erityisesti Outpost 2:ta varten, vaan on käyttänyt niitä myös muissa kehityksissä, kuten Mechwarrior-sarjassa (muokattuna).
Riippumatta tästä on myös todettavissa, että tiedostomuotojen innovatiivisuus on käytännössä rajallista ja usein perustuu pidempään olemassa oleviin konsepteihin tavallisista muodoista, kuten JFIF ja RIFF.
Taulukoiden ja tiedostomuotojen tulkintaan on saatavilla lisätietoja osoitteessa Mikä on mitä?.
Tässä ilmoitetut tiedot ymmärretään yleisesti ottaen Little Endian -muodossa.
Lopuksi voidaan todeta, että käänteinen insinööritoiminta oli erittäin hauskaa, vaikka se ei ole täydellistä.
Tietenkin suosittelen myös pelaamaan peliä itse, sillä se tarjoaa mielenkiintoisia pelimekaniikkoja.
Johdanto
Outpost 2:n käyttämät tiedostomuodot muistuttavat rakenteeltaan JFIF / PNG:ta - yksittäisillä tietolohkoilla on aina 8 tavun otsikko. Siksi jätän yksittäisten otsikoiden dokumentoinnin asianmukaisiin erityiskohtiin ja dokumentoin vain poikkeamat.
Muoto on aina seuraava; varsinaiset hyötydatat on sitten upotettu siihen:
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | Sisältää tietoa siitä, mitä seuraavalta tietolohkolta voidaan odottaa. Tunnetut arvot:
|
0x0004 | uint(24) | Loftipituus | Sisältää tiedot siitä, kuinka suuri (tavuina) seuraava datalohko on. Tässä tarkoitetaan pelkästään hyötydataa - 8 otsikkotavua ei sisälly tähän. |
0x0007 | uint(8) | Lippuja? | On tuntematonta, mihin tätä blokkia tarkalleen ottaen käytetään. Tilavuuksissa tämä arvo on usein 0x80, muissa tiedostoissa usein 0x00. Tämä viittaa siihen, että kyseessä on lippu-setti. |
Tilavuudet
Volyymit ovat pelin tietokontteja, jotka ovat samanlaisia kuin arkistomuodot, kuten esimerkiksi Tarball. Ainakin Outpost 2:ssa muoto tuntee vain tiedostoja - ei kansioita. Todennäköisesti nämä voitaisiin kuitenkin simuloida vastaavilla tiedostonimillä.
Volume koostuu volume-otsikosta sekä useista volume-lohkoista, jotka vastaavat konkreettisia tiedostoja.
"Volumes" ovat tiedostoja, joiden pääte on 'vol'
pelin hakemistossa.
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 4f | 4c | 20 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | O | L | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnus pituus | |
0x0007 | uint(8) | Liput |
Tilavuuspääte
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 68 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | h | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnus pituus | |
0x0007 | uint(8) | Liput |
Volyymin otsikko itsessään ei sisällä mitään hyötydataa.
Sen ainoa tarkoitus on toimia säiliönä.
Volyymin otsikon ensimmäisenä tietona tulisi olla volyymin merkkijonot; niiden jälkeen seuraavat volyymin tiedot.
Ääni Merkit
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnus pituus | |
0x0007 | uint(8) | Liput |
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 73 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | s | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnus pituus | |
0x0007 | uint(8) | Liput | |
0x0008 | uint(32) | Kuorman pituus | Ilmoittaa, kuinka monta tavua seuraavista tiedoista on todellisia hyötydataa. Jäljelle jäävät tiedot Volume-Strings-listasta on ilmeisesti luettava roskana. Myöhempien päivämäärien tiedostoissa nämä 'jäljelle jääneet tiedot' ovat 0x00, mikä voisi viitata puutteisiin työkaluketjussa pelin kehityksen aikana, tarkoittaen, että vasta hyvin myöhään kehittäjä on huolehtinut puskureiden oikeasta alustamisesta, sillä datan alustamisella ei ole vaikutusta peliin. |
0x000c | uint(8)[] | Tiedostonimiluettelo | Kyseessä on 0-tavun päättynyt luettelo tiedostonimistä, jotka - ainakin tässä esitettyssä tietosisällössä - odottavat vain ASCII-merkkejä. Ei ole tarpeen arvioida tätä datablokkia tarkemmin tietojen analysoinnin yhteydessä, koska volyymin tiedoissa viitataan suoraan tiedostonimien offsetteihin. |
Volume Stringit ovat lista tiedostonimistä, jotka sisältyvät volyymiin.
Äänitiedot
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnus pituus | |
0x0007 | uint(8) | Liput |
Volumetiedot sisältävät tarkempia tietoja tiedostoista. Ne ovat eräänlainen FAT-hakemistorivi (FAT = File Allocation Table).
Tiedostojen määrä saadaan jakamalla lohkokoko hakemistotietueiden pituudella - 14 tavua.
Yksittäisten hakemistotietueiden rakenne on seuraavanlainen:
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Tiedostonimen siirto | Ilmoittaa, missä offsetissa (!) tiedostonimi sijaitsee tiedostonimiluettelossa (Volume-Strings). Viittaa käyttödatablokin alkuun. |
0x0004 | uint(32) | Tiedoston siirtymä | Ilmoittaa, missä offsetissa koko volyymitiedostossa tiedosto sijaitsee. |
0x0008 | uint(32) | Tiedoston koko | Ilmoittaa, kuinka suuri tiedosto on tavuina. |
0x000c | uint(16) | Liput? | Ilmeisesti antaa lisätietoja tiedostokoodauksesta.
|
Tilavihko
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 42 | 4c | 48 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | B | L | H | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnus pituus | |
0x0007 | uint(8) | Liput |
Volume-lohko on säiliö, joka sisältää tiedostoja. Se sisältää vain uudelleen - lohkomuodon vuoksi - redundanteisti tiedoston koon, ja sen jälkeen seuraavat suoraan käyttödatat.
Laatat
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 50 | 42 | 4d | 50 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | P | B | M | P | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnuksen pituus | |
0x0007 | uint(8) | Liput |
Tiles ovat Outpost-2:een liittyvä
bitmapsovelluksen grafiikkamuoto. Ne kattavat 13 Tilesettiä,
"kaivoiksi" kutsuttua (well0000.bmp
:sta well0012.bmp
:een),
jotka sijaitsevat maps.vol -tiedostossa.
Tileseteissä / Kaivoissa on seuraavaa:
Tiedostonimi | Sisältö |
---|---|
well0000.bmp | 32x32 pikselin kokoinen sininen grafiikka - ihanteellinen testi omaan kuvakuormittimeen |
well0001.bmp | Sisältää vaaleaa kiveä, vuorijonoja vaalealla kivellä ja lukemattomia variaatioita kraattereista vaaleassa kivessä |
well0002.bmp | Sisältää vaalean kiven 'Doodad' -elementtejä - eli elementtejä, joita voidaan sijoittaa vaalean kiven päälle koristeeksi (tai tietoisesti rakenteeksi, kuten esimerkiksi muureiksi), mukaan lukien kasvillisuus |
well0003.bmp | Sisältää kuorimaisen rakenteen vaalealla kivellä |
well0004.bmp | Sisältää tummaa kiveä, vuorijonoja tummalla kivellä ja lukemattomia variaatioita kraattereista tummassa kivessä |
well0005.bmp | Sisältää tumma kiven 'Doodad' -elementtejä - eli elementtejä, joita voidaan sijoittaa tumman kiven päälle koristeeksi (tai tietoisesti rakenteeksi, kuten esimerkiksi muureiksi) |
well0006.bmp | Sisältää kuorimaisen rakenteen tummalla kivellä sekä siirtymiä vaalean ja tumman kiven välillä |
well0007.bmp | Sisältää laavaa, mukaan lukien 4-5 animaatiokehyksen samaan |
well0008.bmp | Sisältää hiekkaa ja lukemattomia variaatioita kraattereista hiekassa |
well0009.bmp | Sisältää hiekka 'Doodad' -elementtejä - eli elementtejä, joita voidaan sijoittaa hiekalle koristeeksi (tai tietoisesti rakenteeksi, kuten esimerkiksi muureiksi) |
well0010.bmp | Sisältää 48 siirtymää hiekasta vaaleaan ja tummaan kiveen |
well0011.bmp | Sisältää kartan napajäätiköt, tumman kiven taustalla |
well0012.bmp | Sisältää kartan napajäätiköt, vaalean kiven taustalla |
On suositeltavaa, että tarkka toteutus ei renderöi laattoja etukäteen välimuistia varten, koska päivän/yön syklin tiedot täytyy vielä käsitellä - ja dataa syntyy todella paljon.
Laatoissa on 8bpp-grafiikka indeksoidulla väriavaruudella, jokainen 32x32 pikselin resoluutiolla, ja ne on järjestetty toistensa viereen. Tällaisessa laattaasetelmassa voi kuitenkin olla huomattavasti enemmän
Pääsäiliö koostuu kahdesta osiosta: head
ja data
.
Laatat Otsikko
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 68 | 65 | 61 | 64 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | h | e | a | d | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnuksen pituus | |
0x0007 | uint(8) | Liput | |
0x0008 | uint(32) | Versio / Liput? | Tässä voisi olla kyse tiedostomuodon versiosta; kaikissa minulla olevissa tiedostoissa oli arvo |
0x000c | uint(32) | Leveys (vaakasuuntainen resoluutio) | Ilmoittaa, kuinka leveä kuva-tiedosto on (pikseleinä). Kaikissa Outpost 2:n kaivoissa odotetaan tässä arvoksi |
0x0010 | uint(32) | Korkeus (Pystysuuntainen resoluutio) | Ilmaisee, kuinka korkea kuva-tiedosto on (pikseleinä). Kaiuttimien Outpost 2:ssä odotetaan täällä arvon olevan |
0x0014 | uint(32) | Väri syvyys? | Tämän arvon merkitys on tuntematon. Koska se sisältää arvon |
0x0018 | uint(32) | Värisyvyys 2? | Tämän arvon merkitys on tuntematon. Se saattaa olla 'tavoite'-värisyvyys. |
Tämän tiedon perusteella seuraa vielä yksi standardoidussa RIFF-muodossa oleva palettitiedosto. Tarkka erittely löytyy - koska paletit esiintyvät muuallakin - kohdasta Väripaletit.
Laattatiedot
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 64 | 61 | 74 | 61 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | d | a | t | a | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitonnuksen pituus | |
0x0007 | uint(8) | Liput |
Lopuksi seuraavat puhtaat pikselidatat, vasemmasta yläkulmasta riveittäin oikeaan alakulmaan.
Datan arvo, joka yleensä vastaa 8bpp-bitmapeissa olevia grafiikoita, vastaa värin indeksiä väripalettissa.
Pelimoottori piirtää laatat *todennäköisesti* kysynnän mukaan.
Tämä näyttää johtuvan muun muassa päivä- ja yösyklistä, jossa on 32 asteikkoa yksittäisille laatoille. Ilmeisesti kirkkausarvosta vähennetään aina 'hieman'. Tarkkoja arvoja ei ole vielä pystytty määrittämään, työskentelen laskentaperustalla
v *= (daylight / 48) + 0.25;
HSV-tietojen avulla pikseleistä, missä daylight on arvo 0-31 ja v on arvo välillä 0-1. Lisäksi on otettava huomioon, että kartalla on kummallakin puolella vielä 16 laatan reunus (joka palvelee yksiköiden näkymättömän ilmestyksen tarkoitusta).
Lisäksi päivä- ja yösykli näyttää päivittävän vain yhden sarakkeen kartasta jokaisen pelisykli aikana.
Vauhdikkaampi päivä- ja yösykli näyttää näin ollen seuraavalta:
PRT
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 43 | 50 | 41 | 4c | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | C | P | A | L | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Lavapituus | Ilmoittaa, toisin kuin normaali lohkoformaatti, kuinka monta palettia tässä tiedostossa on - ei lohkon pituutta byteinä. |
0x0007 | uint(8) | Liput | Todennäköisesti, kuten tavallista, liput. Minulle ei kuitenkaan ole tunnettuja lippuja; koska kaikki tuntemani arvot vastaavat |
Mitä PRT
tarkalleen ottaen tarkoittaa, ei ole minulle selvää; mahdollinen merkitys voisi olla esimerkiksi 'Palette and Resource Table' - koska tämä tiedosto, joka löytyy nimellä op2_art.prt maps.vol -kansiossa, liittyy tällaiseen, tai tämä kuvaa toimintoa varsin hyvin.
Tämä tiedosto sisältää luettelon paleteista, taulukon kaikista käytetyistä bitmap-kuvista, kaikki animaatiomääritelmät ja joukon tuntemattomia tietoja. Se noudattaa suurin piirtein aiempaa säilömuotoa, sillä kaikki tietueet eivät noudata tätä kaavaa.
CPAL
-osio (todennäköisesti tarkoittaa palettisäilöä) kattaa vain palettitiedot ilmoittamalla, kuinka monta tavallisesti 1052 tavun kokoista 8-bittistä palettia on olemassa.
1052 tavun ilmoitusta ei pidetä sitovana, sillä palettimuoto voi periaatteessa sisältää erilaisia palettikokoja. Se koskee vain tietojoukkoa, joka on mukana Outpost 2:ssa.
Palettien luettelon jälkeen seuraa välittömästi ja ilman johdanto-otsikkoa bitmap-luettelo; samoin seuraavat animaatiolistat.
Molemmat aloitetaan kukin uint(32):lla (tai taas uint24+uint8 liput?) joka sisältää tietueiden määrän.
Väripaletit
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 50 | 50 | 41 | 4c | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | P | P | A | L | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Lavapituus | Ilmoittaa, toisin kuin normaali lohkoformaatti, kuinka monta palettia tästä tiedostosta löytyy - ei lohkon pituutta byteinä. |
0x0007 | uint(8) | Liput | Luultavasti, kuten tavallista, liput. Kuitenkin en tunne mitään lippuja; koska kaikki tuntemani arvot vastaavat |
Paletteinformaatio on erittäin helppolukuista.
Se koostuu aina otsikosta ja datasegmentistä.
Laatikkopään otsikko
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 68 | 65 | 61 | 64 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | h | e | a | d | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Lavapituus | Ilmoittaa, toisin kuin normaali lohkoformaatti, kuinka monta palettia tästä tiedostosta löytyy - ei lohkon pituutta byteinä. |
0x0007 | uint(8) | Liput | Luultavasti, kuten tavallista, liput. Kuitenkin en tunne mitään lippuja; koska kaikki tuntemani arvot vastaavat |
0x0008 | uint(32) | Palettimuoto-versio? | Määrittelee todennäköisesti, mihin palettamuotojen versioon palette kuuluu. Kaikilla Outpost2-paleteilla näyttää olevan versio |
Palette-tiedot
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 64 | 61 | 74 | 61 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | d | a | t | a | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Taikabytit | |
0x0004 | uint(24) | Loitteen pituus | |
0x0007 | uint(8) | Liput |
Datan osio sisältää yksittäiset laatikkotiedot. Laatikkotietojen määrä saadaan lohkon pituudesta / 4.
Yksittäisillä tiedoilla on seuraava yksinkertainen rakenne;
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | 04 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(8) | Punainen komponentti | Ilmaisee värin punaisen osuuden |
0x0001 | uint(8) | Vihreä komponentti | Ilmaisee värin vihreän osan |
0x0002 | uint(8) | Sininen komponentti | Ilmaisee värin sinisen osuuden |
0x0003 | uint(8) | Tuntematon - Liput? | On epäselvää, mitä tämä arvo tarkoittaa, koska se näyttää periaatteessa olevan |
Paleteista on vielä sanottava, että animaatioissa käytettävien palettien osalta käytetään seuraavia sääntöjä:
- Ensimmäinen väri on AINA läpinäkyvä, riippumatta siitä, mikä arvo siellä on.
-
Palettien merkinnät 1-24 lasketaan pelaajaväreiksi paleteissa 1-8.
Mistä värit pelaaja 1:n ulkopuolella tarkalleen ottaen tulevat, ei ole minulle selvää.
Arvelen, että loput värit ovat hardcoded.
Bitmapeja
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Suuntautunut leveys | Antaa pikselidataviivojen leveyden tavuina - koska ne on kohdistettu 4 tavun rajoihin. Niin on nopeaa hypätä tiettyyn kuvaviivaan. Miksi tämä arvo tallennetaan erikseen, vaikka se voitaisiin laskea, on epäselvää. |
0x0004 | uint(32) | Siirto | Ilmoittaa ensimmäisen rivin offsetin bittikartassa |
0x0008 | uint(32) | Korkeus | Ilmoittaa kuvan korkeuden pikseleissä |
0x000c | uint(32) | Leveys | Antaa kuvan leveyden pikseleinä |
0x0010 | uint(16) | Typ | Ilmoittaa kuvan tyyppi. Tässä näyttää olevan kyse bittimaskista:
|
0x0012 | uint(16) | Väri palette | Määrittelee, mikä väripaletti PRT-tiedostosta käytetään |
Tämä PRT-tiedoston tietorakenne ilmoittaa, kuinka spriteille käytetyt bitmapit on rakennettu. Nämä bitmapit toimivat yksittäisinä osina, joista useita yhdistetään spriten animaatiokehyksessä.
Konkreettiset kuvadata piileksivät kuitenkin pelin hakemistossa
op2_art.BMP:ssä.
Miksi tämä bitmap-tiedosto sisältää (enimmäkseen oikein) RIFF-bitmap-otsikon, on epäselvää. Todennäköisesti Outpost 2 käyttää järjestelmän API:ita grafiikoiden lataamiseen, ottamalla tämän otsikon tilapäisesti käyttöön ja ylittämällä vastaavat, vaihtelevat kentät.
Pikselidataa löytyy BMP-tiedostosta Offset + uint32-offset -sijainnista, joka löytyy BMP-tiedostosta osoitteesta 0x000A (RIFF-bitmap-datan offset), ja se vastaa jälleen ylhäältä alas oikealle suuntautuvaa rivijärjestystä.
Monokromaattisia 1bpp-grafiikoita voidaan piirtää siten, että väri 0 on täysin läpinäkyvä, ja väri 1 on puoliksi läpinäkyvä musta/harmaa, koska monokromaattisia grafiikoita käytetään yleisesti ajoneuvojen ja rakennusten varjoissa animaatioissa.
Tällä tavoin voi jo koota monia grafiikoita.
Animaatiot
Nyt siirrymme Outpost 2 -tiedostomuotojen huipputason kurinalaisuuksiin:
Animaatioihin.
Animaatioruettelot alkavat globaalilla otsikolla, joka palvelee ensisijaisesti tietojen varmennusta. Tämän jälkeen seuraavat varsinaiset animaatiomääritelmät, jotka jakautuvat kolmeen tasoon:
-
Animaatio
Animaatio on korkein taso; se esittää animaatiota yksiköstä, rakennuksesta tai 'hiukkasanimaatiosta' (komettakolari, sää, räjähdys) tietyssä lähtötilanteessa. -
Kehys
Kehys on yksi kuva animaatiossa. Animaatio voi sisältää yhden tai useamman kehyksen. -
Alakehys
Alakehys on tieto siitä, että tietty bitmap on piirrettävä tiettyyn kehykseen tietyillä kriteereillä. Kehys voi sisältää yhden tai useamman alakehyksen.
Sitten seuraavat suoraan yksittäiset animaatiomääritelmät.
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Animaatioiden määrä | Kuinka monta animaatiotietuetta on olemassa |
0x0004 | uint(32) | Framejen määrä | Kuinka monta kehystä yhteensä pitäisi olla |
0x0008 | uint(32) | Alustojen määrä | Kuinka monta alirakennetta pitäisi yhteensä olla |
0x000c | uint(32) | Valinnaisten kenttien määrä | Kuinka monta "valinnaista merkintää" on olemassa. |
Animaatio
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0020 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(32) | Tuntematon 1 | Tuntemattomat tiedot |
0x0004 | uint(32) | Rajaava laatikko: Vasemmalle | Antaa Bounding Box:n vasemman alun (pikseleinä). |
0x0008 | uint(32) | Rajauslaatikko: Ylhäällä | Ilmaisee Bounding Boxin yläreunan alun (pikseleinä). |
0x000c | uint(32) | Raja-alue: Leveys | Antaa Bounding Box:n leveyden (pikseleinä). |
0x0010 | uint(32) | Rajauslaatikko: Korkeus | Ilmaisee Bounding Boxin korkeuden (pikseleinä). |
0x0014 | uint(32) | Offsetti: X | Ilmaisee animaation vaakasuuntaisen keskikohdan |
0x0018 | uint(32) | Offset: Y | Ilmaisee animaation pystysuoran keskipisteen |
0x001c | uint(32) | Tuntematon 2 | Tuntematon tieto |
0x0020 | uint(32) | Framejen määrä | Ilmoittaa, kuinka monta animaatiokehystä tämässä animaatiossa on |
0x0024 | uint(32) | Windowsien määrä | Ilmoittaa, kuinka monta ikkunaa piirrettäessä käytetään |
Ylimmän tason, animaation, tiedot ovat ensisijaisesti hallintotietoja - Boundingbox tarkoittaa auton/rakennuksen ympärillä olevia koordinaatteja, kun se on valittuna, ja se myös osoittaa, mikä alue on klikattavissa.
Offset määrittää ensisijaisesti "nollapisteen"; pisteen, jota pelin sisäisiin koordinaatteihin kuuluu lisätä tai vähentää. Voisi myös sanoa matemaattisesti: offset tarkoittaa tässä koordinaattien alkuperää.
Ikkunoissa on, aivan kuten offsetissa, kullekin ikkunalle 4 uint(32) -arvoa, jotka määrittävät alueen, joka on käytettävissä yksittäisille alarunkoille. Ikkunoiden ulkopuolella ei saa piirtää, ellei bitmapille ole erikseen varattu tilaa.
Runko
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(8) | Alustarvikkeiden määrä ja kytkin vaihtoehdoille 1, 2 | Tämä arvo sisältää:
|
0x0001 | uint(8) | Tuntematon 1 ja Vaihtoehto 3, 4 kytkin. | Tämä arvo sisältää:
|
0x0002 | uint(8) | Valinnainen 1 | Tuntematon |
0x0003 | uint(8) | Valinnainen 2 | Tuntematon |
0x0004 | uint(8) | Valinnainen 3 | Tuntematon |
0x0005 | uint(8) | Valinnainen 4 | Tuntematon |
Aluke
Osoite | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | merkki | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Siirtymä | Tietotyyppi | Nimi | Selitys |
---|---|---|---|
0x0000 | uint(16) | Bitmap-ID | Ilmoittaa, mikä bitmap tulisi käyttää tälle alakehykselle |
0x0002 | uint(8) | Tuntematon 1 | On tuntematon - epäilen kuitenkin vahvasti, että tämä liittyy renderöintiprioriteettiin (Z-kerros). |
0x0003 | uint(8) | Alakehyksen ID | Ilmaisee, missä aliruudussa olemme |
0x0004 | sint(16) | Offset - Vaaka | Ilmoittaa, mihin kohtaan kehystä alikehys sijoitetaan, tai kuinka monta pikseliä bitmapia siirretään vaakasuunnassa. |
0x0006 | sint(16) | Offset - Vertikaalinen | Ilmoittaa, mihin kohtaan kehystä alakehys tulisi sijoittaa tai kuinka monta pikseliä bittikarttaa tulisi siirtää pystysuunnassa |
Nyt voimme koota yksittäisiä kehyksiä sekä kokonaisia animaatioita. Tässä esimerkkinä monimutkaisemmasta animaatiosta, animaatiosta, jonka indeksi on 500, demonstroidaan.
Animaatio 500
Animaatio 500 näyttää, kuinka Plymouth-kuljetusauto, joka on tavallisilla mineraaleilla kuormattu, puretaan. Tämä on yksi harvoista animaatioista, jotka hyödyntävät ikkunointitoimintoa.
Niinpä koko animaatio voidaan yhdistää.
Valitettavasti yläkuormausluukun kanssa on edelleen ongelma, sillä vastaavaa bittiä grafiikkatyyppitiedossa ei ole asetettu.
Tässä vielä muutamia kauniisti animoituja spritejä pelistä:
Käyttöliittymä
Nyt puuttuu vielä pelin käyttöliittymä, joka on toteutettu harjatun metallin ilmeellä.
Kuitenkin on myös selvää, että Dynamix ei tarvinnut keksiä pyörää uudelleen; tässä ei vain yksinkertaisesti käytetä Windowsin tarjoamia User32- ja GDI32-API:ita - erityisesti myös User32:n resurssienhallintaa hyödynnetään.
Näitä voidaan esimerkiksi purkaa ohjelmilla, kuten Angus Johnsonin ilmaisohjelmalla Resource Hacker, tai - jos Linuxilla / Mac OS:lla vältetään Winen käyttöä - apuna voidaan käyttää icoutilsin mukana tulevaa wrestoolia.
Tiedostonimi | Sisältö |
---|---|
Outpost2.exe | Sisältää vain pelin ikonin, joka esittää avaruusasemaa New Terran edustalla |
op2shres.dll | Sisältää grafiikoita käyttöliittymän elementeille, kuten reunoille, painikkeille, radiopainikkeille ja valintaruutuille sekä dialogitaustakuvia, tarinatehtävien kuvia ja päävalikon taustagrafiikan |
out2res.dll | Sisältää pelin ikkunoiden koristeet, kuvakkeet tavalliselle ja erityiselle metallille, latausnäytön, grafiikoita dialogeihin sekä lisäksi muita osoittimen grafiikoita, lisäksi pelin hakemistossa olevat animaatiot |