Outpost 2 Tiedostomuodot · bei.pm

Tämä teksti on automaattisesti käännetty OpenAI GPT-4o Mini:n avulla.

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.

Pelin taide

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:

  • 0x204C4F56 ('VOL '):
    Äänenvoimakkuus
  • 0x686C6F76 ('VOLH'):
    Äänenvoimakkuuden otsikko
  • 0x736C6F76 ('VOLS'):
    Äänenvoimakkuuden merkit
  • 0x696C6F76 ('VOLI'):
    Äänenvoimakkuuden tiedot
  • 0x4B4C4256 ('BLCK'):
    Äänenvoimakkuuden lohko
  • 0x504D4250 ('PBMP'):
    Kuvadata
  • 0x4C415050 ('PPAL'):
    VäriPalette
  • 0x4C415043 ('CPAL'):
    VäriPalettikontti
  • 0x64616568 ('head'):
    Otsikko
  • 0x61746164 ('data'):
    Käytettävä data
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.

  • 0x03 on asetettu, kun tiedosto on pakattu. Tässä käytetään ilmeisesti Huffman-puuta.
  • 0x80 näyttää olevan aina asetettu.

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 0x02

0x000c uint(32) Leveys (vaakasuuntainen resoluutio)

Ilmoittaa, kuinka leveä kuva-tiedosto on (pikseleinä).

Kaikissa Outpost 2:n kaivoissa odotetaan tässä arvoksi 0x20 tai 32.

0x0010 uint(32) Korkeus (Pystysuuntainen resoluutio)

Ilmaisee, kuinka korkea kuva-tiedosto on (pikseleinä).

Kaiuttimien Outpost 2:ssä odotetaan täällä arvon olevan 0x20 eli 32.

0x0014 uint(32) Väri syvyys?

Tämän arvon merkitys on tuntematon.

Koska se sisältää arvon 8 kaikissa tarkastetuissa tiedostoissa, se voisi viitata väri syvyyden määrittelyyn.

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.

Pikselidatat alkavat ylhäältä vasemmalta ja päättyvät alhaalta oikealle.

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:

Päivä- ja yösyklin visualisointi

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 0x00, olisi myös mahdollista, että palettien määrä on yksinkertaisesti uint(32).

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 0x00, voisi myös olla mahdollista, että palettien määrä on yksinkertaisesti uint(32).

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 0x00, voisi myös olla mahdollista, että palettien määrä on yksinkertaisesti uint(32).

0x0008 uint(32) Palettimuoto-versio?

Määrittelee todennäköisesti, mihin palettamuotojen versioon palette kuuluu.

Kaikilla Outpost2-paleteilla näyttää olevan versio 0x01.

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 0x04.

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.

Palettiviite

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ää.
Ehkä se on optimointi renderöintikoodille.

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:

  • 0x04 on asetettu, jos kyseessä on 1bpp-grafiikka.
  • 0x40 on asetettu, jos kyseessä on grafiikka, joka tarvitsee ikkunointia.
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.

Suojattu asuinmoduuli (Plymouth)

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:

  1. Animaatio
    Animaatio on korkein taso; se esittää animaatiota yksiköstä, rakennuksesta tai 'hiukkasanimaatiosta' (komettakolari, sää, räjähdys) tietyssä lähtötilanteessa.
  2. Kehys
    Kehys on yksi kuva animaatiossa. Animaatio voi sisältää yhden tai useamman kehyksen.
  3. 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ää:

  • 0x7F (Bitmaski): Alirunkojen määrä, joita käytetään tässä kehyksessä
  • 0x80: Tieto siitä, ovatko Valinnainen 1 ja 2 läsnä
0x0001 uint(8) Tuntematon 1 ja Vaihtoehto 3, 4 kytkin.

Tämä arvo sisältää:

  • 0x7F (Bitmaski): Tuntematon - Arvioni mukaan tämä liittyy pelin tikkeihin, jotka kuluvat, ennen kuin seuraava kehys näytetään
  • 0x80: Tieto siitä, ovatko vaihtoehdot 3 ja 4 käytettävissä
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ä:

Animaatio 500:n renderöinti kuvastaa

Animaatio 500 valmis yhdistettynä

Plymouthin rakennustehdas

Eden avaruussatama

Edenin lääketieteellinen keskus

SCAT

Plymouthin avaruussatama

Easteregg:
Joulupukki

Easteregg:
Dans Dog

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