Outpost 2 failivormingud · bei.pm

See tekst tõlgiti automaatselt OpenAI GPT-4o Mini abil.

Siin lehel kirjeldatud failiformaadid põhinevad Dynamix, Inc. ja Sierra Entertainment intellektuaalomandi tehnilisel analüüsil.
Intellektuaalne omand kuulub praegu Activision Publishing, Inc.-i / Activision Blizzard, Inc.-i varade hulka ja on praegu Microsoft Corp.-i omandis.

Teave on kogutud tagasipööramise inseneritehnika ja andmeanalüüsi abil, eesmärgiga arhiveerida ja tagada ühilduvus ajalooliste andmetega.
Kasutatud ei ole ühtegi patenteeritud või konfidentsiaalset spetsifikatsiooni.

Mängu saab praegu osta allalaadimiseks gog.com.

Mängu kunstiteos

Järgmine artiklite seeria dokumenteerib minu teadmisi andmeformaatidest reaalajas strateegiamängus "Outpost 2: Divided Destiny", mis ilmus 1997. aastal Sierra poolt ja mille arendas välja Dynamix.

Olen peamiselt analüüsinud mängu andmeid ja nende kasutamist ajavahemikus 1. november 2015 kuni 14. november 2015.

Minu seni kogutud teabe kohaselt ei arendanud Dynamix, nagu paljud kaubanduslikud ettevõtted, teatud andmeformaate spetsiaalselt Outpost 2 jaoks, vaid kasutas neid ka teistes projektides, näiteks Mechwarrior sarjas (muudetud kujul).
Samuti võib märkida, et andmeformaatide uuenduslikkus on praktiliselt piiratud ja sageli põhineb pikaajalistel kontseptsioonidel, mis tulenevad tavapärastest formaatidest nagu JFIF ja RIFF.

Tabelite ja andmeformatide tõlgendamiseks on saadaval täiendav teave aadressil Mis on mis?.
Siin esitatud andmeid tuleb üldiselt mõista kui Little Endian formaadis.

Lõpetuseks võib öelda, et tagasipööramine pakkus palju rõõmu, kuigi see ei ole täielik.
Muidugi soovitan ka lihtsalt mängu ise mängida, kuna see pakub huvitavaid mängumehaanikaid.

Sissejuhatus

Outpost 2 kasutatavad andmeformaatidel on JFIF / PNG-le sarnane struktuur - iga andmeploki puhul on alati olemas 8-baidine päis. Seetõttu jätan enda jaoks vahele individuaalsete päiste dokumenteerimise vastavates spetsiifilistes kohtades ja dokumenteerin seal ainult kõrvalekalded.

Formaat on alati järgmine; tegelikud kasutusandmed on seal sees:

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Maagia baitide

Sisaldab teavet selle kohta, mida järgmises andmeplokis oodata on.

Tuntud väärtused:

  • 0x204C4F56 ('VOL '):
    Heli
  • 0x686C6F76 ('VOLH'):
    Helipea
  • 0x736C6F76 ('VOLS'):
    Heli-stringid
  • 0x696C6F76 ('VOLI'):
    Heli-teave
  • 0x4B4C4256 ('BLCK'):
    Heli-plokk
  • 0x504D4250 ('PBMP'):
    Graafikateave
  • 0x4C415050 ('PPAL'):
    Värvipalett
  • 0x4C415043 ('CPAL'):
    Värvipalettide konteiner
  • 0x64616568 ('head'):
    Päis
  • 0x61746164 ('data'):
    Kasutusandmed
0x0004 uint(24) Bloki pikkus

Kätkeb teavet selle kohta, kui suur (baitides) on järgmine andmeplokk.

Siin on silmas peetud ainult puhast kasulikku sisu - 8 päise baiti ei arvestata.

0x0007 uint(8) Lipud?

On teadmata, milleks see plokk täpselt mõeldud on.

Mahtudes on see väärtus sageli 0x80, teistes failides aga sageli 0x00. See viitab sellele, et tegemist on lipu seadistusega.

Hulgad

Volüümid on mängu jaoks andmekonteiner, sarnane arhiiviformaadile, nagu näiteks Tarball. Outpost 2-s tunneb see formaat siiski vaid faile - mitte kaustasid. Tõenäoliselt saaks neid aga vastavate failinimede kaudu simuleerida.

Volüüm koosneb volüümi päisest ja mitmest volüümi plokist, mis vastavad konkreetsetele failidele.

"Volüümid" on failid, mille laiend on 'vol' mängu kataloogis.

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud

Helipealkiri

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud

Volume'i pealkiri ei sisalda mitte mingit kasulikku teavet.
See teenib vaid konteinerina.

Volume'i pealkirjas peaks esimesena olema Volume'i stringid; nendele järgnevad siis Volume'i andmed.

Heli stringid

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud
Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud
0x0008 uint(32) Kandepinna pikkus

Näitab, kui palju baite järgnevatest andmetest tegelikult on kasulikud andmed.

Ülejäänud, allesolevad andmed maht-stringsi loendis on ilmselt prügiks loetletavad.

Hiljem kuupäevale kuuluvates failides on need 'allesolevad andmed' 0x00, mis võib viidata probleemidele tööriistade komplektis mängu arendamise ajal, st et arendaja hakkas õigete puhversalvestuste algseadistamisega tegelema alles hilja, kuna andmete algseadistamine ei mõjuta mängu toimimist.

0x000c uint(8)[] Failinimede loend

Siin on tegemist 0-baiti lõpetatud failinimede nimekirjaga, mis - vähemalt käesolevas andmekomponendis - eeldab vaid ASCII märke.

Andmete töötlemisel ei ole vajalik selle andmeploki täiendav analüüs, kuna mahtude teabes viidatakse failinimede offset'idele otse.

Volume Strings on nimekiri failinimedest, mis kuuluvad mahutisse.

Mahuteave

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud

Mahtude teave sisaldab üksikasjalikumat teavet failide kohta. See on teatud mõttes nagu FAT-i katalooge (FAT = Faili jaotustabel).

Failide arv tuleneb ploki suurusest, jagatuna katalooge sissekannete pikkusega - 14 baiti.

Igal katalooge sissekandel on järgmine struktuur:

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Failinime nihke

Osutab, millisel offset'il (!) failinime loendis (volume-string'id) faili nimi asub.

See viitab kasutusandmete ploki algusele.

0x0004 uint(32) Faili-offset

Näitab, millisel nihkel kogu mahufailis asub fail.

0x0008 uint(32) Faili suurus

Osutab, kui suur fail on baitides.

0x000c uint(16) Lippud?

Ilmselt annab see täiendavat teavet faili kodeerimise kohta.

  • 0x03 on seadistatud, kui fail on kokku surutud. Siin tundub olevat kasutusel Huffmani puu.
  • 0x80 on ilmselt alati seadistatud.

Heli plokk

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud

Volume-blokk on konteiner, mis sisaldab faile. See sisaldab veel kord - blockformaatide tõttu - redundantselt faili suurust ja seejärel järgivad kohe kasutusandmed.

Plaadid

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud

Tiilid on Outpost-2-spetsiifiline bitmap-graafikafailide formaat. Need katavad 13 tiilide komplekti, mida nimetatakse "kaevudeks" (well0000.bmp kuni well0012.bmp), mis asuvad mahus maps.vol.

Tiilide komplektid / Kaevud sisaldavad järgmist:

Failinimi Sisu
well0000.bmp 32x32px suurune sinine graafika - ideaalne testimiseks, kas teie pildilaadur töötab
well0001.bmp Sisaldab heledat kivi, mäeahelikke heledal kivimisel ja lugematuid variante kraatritest heledal kivimisel
well0002.bmp Sisaldab heleda kivi 'Doodade', st elemente, mida saab heledal kivimisel paigutada lõdvestamiseks (või teadlikult struktuurina, nagu näiteks müürid), sealhulgas taimestik
well0003.bmp Sisaldab koorikulaadset struktuuri heledal kivimisel
well0004.bmp Sisaldab tumedat kivi, mäeahelikke tumedal kivimisel ja lugematuid variante kraatritest tumedal kivimisel
well0005.bmp Sisaldab tumeda kivi 'Doodade', st elemente, mida saab tumedal kivimisel paigutada lõdvestamiseks (või teadlikult struktuurina, nagu näiteks müürid)
well0006.bmp Sisaldab koorikulaadset struktuuri tumedal kivimisel, samuti üleminekud heleda ja tumeda kivi vahel
well0007.bmp Sisaldab laavat, sealhulgas 4-5 kaadrit sama animatsiooni
well0008.bmp Sisaldab liiva ja lugematuid variante kraatritest liivas
well0009.bmp Sisaldab liiva 'Doodade', st elemente, mida saab liivas paigutada lõdvestamiseks (või teadlikult struktuurina, nagu näiteks müürid)
well0010.bmp Sisaldab 48 üleminekut liivast heledale ja tumedale kivile
well0011.bmp Sisaldab kaardil polar kappe, tumeda kiviga aluspinnana
well0012.bmp Sisaldab kaardil polar kappe, heleda kiviga aluspinnana

On soovitatav, et täpne rakendus ei renderdaks plaatide eelnevalt, et neid vahemälus hoida, kuna andmed päeva/öö tsükli jaoks peavad veel töötlemiseks minema - ja andmeid koguneks väga, väga palju.

Plaatideks on 8bpp graafika indekseeritud paletiga, mille lahutusvõime on 32x32 pikslit, ja need on omavahel paigutatud. Sellises loodud plaatide kogumis võib siiski olla palju rohkem

Pea konteiner koosneb kahest sektsioonist: head ja data.

Plaatide pealkiri

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud
0x0008 uint(32) Versioon / Lipud?

See võib olla failiformaadi versiooni näitaja; kõikides mulle teadaolevates failides oli siin väärtus 0x02

0x000c uint(32) Laius (horisontaalne eraldusvõime)

Osutab, kui lai on pildifail (pikslites).

Kõigi Outpost 2 kaevude puhul on oodata, et siin on väärtus 0x20 ehk 32.

0x0010 uint(32) Kõrgus (vertikaalne eraldusvõime)

Näitab, kui kõrge pildifail on (pikslites).

Kõigi Outpost 2 kaevude puhul on siin oodata väärtust 0x20 ehk 32.

0x0014 uint(32) Värvisügavus?

Oma tähenduselt on see väärtus teadmata.

Kuna see esineb kõigis kontrollitud failides väärtusega 8, võib see viidata värvisügavuse näitajale.

0x0018 uint(32) Värvisügavus 2?

Selle väärtuse tähendus on teadmata.

Võimalik, et see on 'siht'-värvisügavus.

nende andmete põhjal järgneb standardiseeritud RIFF-vormingus palettifail. Täpse spetsifikatsiooni leiate - kuna paletid ilmuvad ka mujal - Värvipalettide tabelitest.

Keraamika andmed

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitide
0x0004 uint(24) Bloki pikkus
0x0007 uint(8) Lipud

Lõpuks järgivad juba puhtad pikselandmed, vasakult ülalpool rida-realt paremale alla.
Datanä值, mis tavaliselt esineb 8bpp-bitmappidena, vastab värvi indeksile värvipaletis.

Pikselandmed algavad ülal vasakult ja lõppevad all paremal.

Mängu mootor joonistab plaate *tõenäoliselt* nõudmisel.
Tundub, et see on osaliselt tingitud päeva-öö tsüklist, mis tunneb 32 erinevat taset. Selgub, et heledusväärtusest 'võetakse natuke' ära. Täpsed väärtused pole veel selgunud, töötan arvutuste põhjal

v *= (daylight / 48) + 0.25;

pikslite HSV-andmetega, kusjuures daylight on väärtus vahemikus 0-31 ja v väärtus vahemikus 0-1. Lisaks tuleb arvesse võtta, et kaardil on kummalgi pool veel 16 plaati (need teenivad nähtamatute üksuste spawnimiseks).

Lisaks näib, et päeva-öö tsükkel uuendab iga mängutsükli jooksul ainult ühte kaardiveergu.
Kiirendatud päeva-öö tsükkel näeb seega välja järgmine:

Päeva-öö tsükli visualiseerimine

PRT

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Magiabaitid
0x0004 uint(24) Pakkide pikkus

Erinevalt tavalisest plokiformaadist näitab see failis leiduvate palettide arvu - mitte ploki pikkust baitides.

0x0007 uint(8) Lipud

Tõenäoliselt nagu tavaliselt, lipud.

Kuid mulle ei ole teada ühtegi lippu; kuna kõik mulle teadaolevad väärtused vastavad 0x00, oleks teoreetiliselt võimalik, et palettide arv on lihtsalt uint(32).

Millele PRT täpselt viitab, ei ole mulle teada; võimalik, et see tähistab näiteks 'Palette and Resource Table' - kuna see fail, mida leidub nimega op2_art.prt maps.vol failis, on just selline fail, või see kirjeldaks funktsiooni üsna hästi.

See fail sisaldab nimekirja palettidest, tabelit kõigi kasutatud bitmappide kohta, kõiki animatsiooni määratlusi ja veel mitmeid tundmatuid andmeid. See järgib varasemaid konteinerivormingute lõdvalt, kuna mitte kõik andmerikkad ei vasta sellele skeemile.

CPAL sektsioon (tõenäoliselt tähendab see palettide konteinerit) sisaldab ainult palettide andmeid, märkides ära, kui palju on tavaliselt 1052 baitist koosnevaid 8-bitiseid palette.

1052-baidine näit on siiski mitte kohustuslik, kuna palettide formaat võib potentsiaalselt näha ette erinevaid palettide suurusi. See kehtib ainult andmekogumi kohta, millega Outpost 2 tarnitakse.

Palettide nimekirjadele järgneb kohe ja ilma sissejuhatava päiseta bitmappide nimekiri; sellele järgneb kohe ka animatsioonide nimekiri.
Kumbki neist algab uint(32) (või jälle uint24+uint8 lipud?) abil, mis sisaldab andmerikkade arvu.

Värvipalettide tabelid

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Maagia baitid
0x0004 uint(24) Plaatide pikkus

Annab, vastupidiselt tavapärasele plokiformaadile, arvu selles failis leiduvate palateid - mitte ploki pikkuse baitides.

0x0007 uint(8) Lipud

Tõenäoliselt, nagu tavaliselt, lipud.

Kuid mulle ei ole lipud teada; kuna kõik mulle tuntud väärtused vastavad 0x00, võiks potentsiaalselt olla, et palettide arv on lihtsalt uint(32).

Kaubaaluste teave on väga lihtne lugeda.
Need koosnevad igaühel pealkirjast ja andmesegmentidest.

Palettide päis

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Maagia baitid
0x0004 uint(24) Plaatide pikkus

Annab, vastupidiselt tavapärasele plokiformaadile, arvu selles failis leiduvate palateid - mitte ploki pikkuse baitides.

0x0007 uint(8) Lipud

Tõenäoliselt, nagu tavaliselt, lipud.

Kuid mulle ei ole lipud teada; kuna kõik mulle tuntud väärtused vastavad 0x00, võiks potentsiaalselt olla, et palettide arv on lihtsalt uint(32).

0x0008 uint(32) Palettiformaadi versioon?

Tõenäoliselt määratleb, millise palettide formaadi versioonile palette vastab.

Kõik Outpost2 paletid näivad omavat versiooni 0x01.

Palettide andmed

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Maagia baitid
0x0004 uint(24) Ploki pikkus
0x0007 uint(8) Lipud

Andmesection sisaldab üksikute pookimiste sissekandeid. Pookimiste sissekannete arv tuleneb ploki pikkusest / 4.

Üksikutel sissekannetel on järgmine lihtne struktuur;

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(8) Punane komponent

Osutab värvi punasele osale

0x0001 uint(8) Roheline komponent

Osutab värvi rohelise osa suurusele

0x0002 uint(8) Sinine komponent

Annab värvi sinise osa

0x0003 uint(8) Tundmatu - Lipud?

Ei ole selge, mida see väärtus tähendab, kuna see paistab olevat põhimõtteliselt 0x04.

Palettide kohta on veel öelda, et animatsioonide jaoks kasutatavate palettide puhul kehtivad järgmised reeglid:

  • Esimene värv on ALATI läbipaistev, olenemata sellest, milline väärtus seal on.
  • Palettide sissekanded 1-24 loetakse palettides 1-8 mängija värviks.
    Kust värvid mängijast 1 väljaspool täpselt tulevad, on mulle ebaselge.
    Kahtlustan, et ülejäänud värvid on hardcoded.

Palettide viidatud

Bitmape.

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Suunatud laius

Annab pikslite andmereadade laiust baitides - kuna need on joondatud 4-baitiste piiridega.

Nii on kiirelt võimalik liikuda teatud pildirea juurde.

Miks seda väärtust eraldi salvestatakse, kuigi seda oleks võimalik arvutada, on ebaselge.
Võib-olla on see optimeerimine renderdamise koodi jaoks.

0x0004 uint(32) Kohandamine

Osutab bitmap'i esimese rea nihkele

0x0008 uint(32) Kõrgus

Annab pildi kõrguse pikslites

0x000c uint(32) Laius

Väljendab pildi laiust pikslites

0x0010 uint(16) Tüüp

Näitab pildi tüüpi. Tundub, et tegemist on bitmaskiga:

  • 0x04 on seadistatud, kui tegemist on 1bpp graafikaga.
  • 0x40 on seadistatud, kui tegemist on graafikaga, mis peab rakendama akende haldamist.
0x0012 uint(16) Palett

Defineerib, millist paletti PRT-failist kasutada

PRT-faili andmestruktuur näitab, kuidas sprite'ide jaoks kasutatavad bitmap'id on üles ehitatud. Need bitmap'id toimivad kui üksik komponent, millest mitmed kokku pannakse sprite'i animatsioonikaadriks.

Konkreetne pilditeave peitub aga op2_art.BMP mängu kaustas.
Miks selle bitmap-failil on (peamiselt õige) RIFF-bitmapi päis, on ebaselge. Tõenäoliselt kasutab Outpost 2 süsteemi-API-sid graafika laadimiseks, kasutades seda päist ajutiselt ning asendades vastavad, varieeruvad väljad.

Pikslite andmed on BMP-failis asendis offset + uint32-offset, mis asub BMP-failis aadressil 0x000A (RIFF-Bitmapi andmeoffset), ja on jälle järjestatud vasakult ülalpool paremale allapoole.

Monokroomseid 1bpp graafikaid saab joonistada nii, et värv 0 esindab täielikku läbipaistmatust ning värv 1 on poolläbipaistev must/hall, kuna monokroomseid graafikaid kasutatakse tavaliselt sõidukite ja hoonete varjude jaoks animatsioonides.

Nii saab juba palju graafikaid kokku panna.

Kaitstud elumoodul (Plymouth)

Animatsioonid

Nüüd liigume edasi väljaannete 2 andmeformaatide kuningaklassi:
Animatsioonid.

Animatsioonide loendid algavad globaalsete peadega, mis teenivad peamiselt andmete kontrollimist. Seejärel järgivad konkreetsed animatsiooni määratlemised, mis jagunevad 3 tasandisse:

  1. Animatsioon
    Animatsioon on kõrgeim tase; see esindab üksuse, hoone või 'osakeste animatsiooni' (koometaari tabamine, ilm, plahvatus) animatsiooni teatud algtingimustes.
  2. Raam
    Raam on üksikud pilt animatsioonis. Animatsioon võib sisaldada ühte või mitut raami.
  3. Alaraam
    Alaraam on teave selle kohta, et teatud bitmap tuleb teatud kriteeriumide alusel joonistada teatud raami positsioonile. Raam võib sisaldada ühte või mitut alaraami.

Seejärel järgivad kohe konkreetsed animatsiooni määratlemised.

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Animatsioonide arv

Kui palju animatsioonide andmekogusid on olemas

0x0004 uint(32) Raamide arv

Kui palju kaadreid peaks kokku olema

0x0008 uint(32) Alamraamide arv

Kui palju subraame kokku peaks olema

0x000c uint(32) Valikuliste kirjete arv

Kui palju "valikulisi kirjeid" on olemas.

Animatsioon

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(32) Tundmatu 1

Tundmatud teated

0x0004 uint(32) Piirav kast: Vasak

Annab Bounding Box vasaku alguse (pikslites).

0x0008 uint(32) Piirbox: Ülal

Annab ülemise alguse (pikslites) Bounding Box jaoks.

0x000c uint(32) Piirkonna kast: Laius

Annab Bounding Box laius (pikslites).

0x0010 uint(32) Piirbox: Kõrgus

Annab Bounding Box kõrguse (pikslites).

0x0014 uint(32) Offset: X

Annab animatsiooni horisontaalse keskpunkti

0x0018 uint(32) Offset: Y

Osutab animatsiooni vertikaalsele keskpunktile

0x001c uint(32) Tundmatu 2

Tundmatu teave

0x0020 uint(32) Raamide arv

Näitab, kui palju animatsiooniraame see animatsioon sisaldab

0x0024 uint(32) Windowside arv

Näitab, kui palju aknaid joonistamisel rakendada

Ülemise kihi, animatsiooni, andmed on peamiselt haldusandmed - Boundingbox tähistab siin sõiduki/hoone ümber asuva märgise koordinaate, kui see on valitud, ja näitab samal ajal, milline ala peaks olema klikatav.

Offset määrab peamiselt "nullpunkti"; punkti, mida tuleb mängusiseste koordinaatide pealt arvesse võtta või maha arvestada. Matemaatiliselt öeldes: offset tähistab siin koordinaatide algpunkti.

Aknad koosnevad, nagu ka offset, igaühe kohta (igale aknale) 4 uint(32) väärtusest, mis näitavad ala, mis on kasutatav eraldi subraamide jaoks. Aknadest väljaspool ei tohi, niikaua kui see on bitmapi jaoks ette nähtud, joonistada.

Raam

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(8) Subframe'i arv ja lüliti valikulistele 1, 2

See väärtus sisaldab:

  • 0x7F (Bitmask): Subframe'ide arv, mida selles raamis kasutatakse
  • 0x80: Teave selle kohta, kas valikuline 1 ja 2 on olemas
0x0001 uint(8) Tundmatu 1 ja lüliti valikuliseks 3, 4

See väärtus sisaldab:

  • 0x7F (Bitmask): Tundmatu - Kahtlustan tugevalt, et see viitab mängu tsüklite arvule, mis möödub enne järgmise kaadri kuvamist
  • 0x80: Teave selle kohta, kas valikuline 3 ja 4 on olemas
0x0002 uint(8) Valikuline 1

Tundmatu

0x0003 uint(8) Valikuline 2

Tundmatu

0x0004 uint(8) Valikuline 3

Tundmatu

0x0005 uint(8) Valikuline 4

Tundmatu

Alusraam

Aadress x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF sümbol
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Andmetüüp Nimi Selgitus
0x0000 uint(16) Bitmap-ID

Näitab, millist bitmapi selle alaraami jaoks kasutada

0x0002 uint(8) Tundmatu 1

On tundmatu - arvan siiski kindlalt, et see on seotud renderdamise prioriteediga (Z-kihiga).

0x0003 uint(8) Alusraami ID

Näitab, millises alamsalves me oleme

0x0004 sint(16) Offset - Horisontaalne

Näitab, kus raami sees subraam paigutada tuleks, või kui palju pikslit tuleb bitmapi horisontaalselt nihutada

0x0006 sint(16) Offset - Vertikaalne

Näitab, kus raami sees subraam asetada tuleks, või kui palju pikslit bitmap vertikaalselt nihutada tuleks

Samuti saame nüüd koostada üksikuid kaadreid ning ka terveid animatsioone, siin näidates näitena keerukamat animatsiooni, animatsiooni indeksiga 500.

Animatsioon 500

Animatsioon 500 näitab, kuidas Plymouthi transportija, mis on tavalise rauaga laaditud, tühjendatakse. See on üks väheseid animaatsioone, mis kasutab akende funktsionaalsust.

Nii saab kokku panna kogu animatsiooni.
Kahjuks on ülemise laadimisluugi osas endiselt probleem, kuna graafikateabe bit ei ole seadistatud.

Siin on veel mõned, kaunilt animatsioonitud spritid mängust:

Animatsiooni 500 renderdus illustreeritud

Animatsioon 500 on lõpetatud

Plymouthi hoone-tehas

Edeni kosmoseport

Edeni meditsiinikeskus

SCAT

Plymouthi kosmoseport

Peidetud element:
Jõuluvana

Peidetud element:
Dans Dog

Kasutajaliides

Nüüd on puudu mängu kasutajaliides, mis on valmistatud harjatud metall -näo järgi.

Aga ka siin on selgelt näha, et Dynamix ei pidanud ratast uuesti leiutama; siin ei kasutata mitte ainult Windowsi pakutavaid User32- ja GDI32-API-sid, vaid ka User32 ressursside haldust.

Näiteks saab neid eraldada programmidega nagu Angus Johnson tasuta arendatud Resource Hacker, või - kui keegi ei soovi Linuxis / Mac OS-is kasutada Wine'i - kasutades icoutils paketi sisaldavat wrestool.

Failinimi Sisu
Outpost2.exe Sisaldab ainult mängu ikooni, mis kujutab kosmosesidet New Terra ees
op2shres.dll Lisaks graafikutele juhtnuppude jaoks, nagu piirjooned, nupud, raadio-nupud ja linnukesed, sisaldab ka dialoogide taustu, saatvaid pilte loo missioonitekstide jaoks ja põhimenüü taustagraafikat
out2res.dll Sisaldab mänguaken kaunistust, ikoone tavalise ja erilise metalli jaoks, laadimisekraani, graafikat dialoogide jaoks ning lisaks muid kursorite graafikaid, lisaks animatsioonidele mängu kaustas