Outpost 2 failu formāti · bei.pm

Šis teksts tika automatizēti tulkots, izmantojot OpenAI GPT-4o Mini.

Šajā lapā aprakstītie failu formāti balstās uz tehnisko analīzi par intelektuālo īpašumu no Dynamix, Inc. un Sierra Entertainment.
Intelektuālais īpašums šobrīd ir daļa no Activision Publishing, Inc. / Activision Blizzard, Inc. mases un pašreiz pieder Microsoft Corp..

Informācija tika apkopota, izmantojot Reverse Engineering un Datu analīzi, lai arhivētu un nodrošinātu savietojamību ar vēsturiskajiem datiem.
Nekādas patentētas vai konfidenciālas specifikācijas netika izmantotas.

Spēli pašlaik var iegādāties kā lejupielādi gog.com.

Spēles mākslas darbs

Šī rakstu sērija dokumentē manas atziņas par datu formātiem reāllaika stratēģijas spēlē "Outpost 2: Divided Destiny", kuru 1997. gadā izdeva Sierra un izstrādāja Dynamix.

Es galvenokārt analizēju spēles datus un to izmantošanu no 2015. gada 1. novembra līdz 2015. gada 14. novembrim.

Pēc līdz šim iegūtajām informācijām, Dynamix - kā daudzi komerciālie uzņēmumi - dažus datu formātus nav speciāli izstrādājuši Outpost 2, bet arī izmantojuši citos projektos, piemēram, Mechwarrior sērijā (pārveidoti).
Tajā pašā laikā ir jāatzīmē, ka datu formātu inovācijas spēks ir diezgan ierobežots un bieži vien balstās uz ilgstošām koncepcijām no parastajiem formātiem, piemēram, JFIF un RIFF.

Datu un tabulu interpretācijai ir pieejama papildus informācija šeit: Kas ir kas?.
Šeit norādītie dati vispārīgi tiek saprasti kā Little Endian.

Noslēgumā varu teikt, ka reverse engineering bija ļoti aizraujoša nodarbe, lai gan tā nav pilnīga.
Dabīgi, es arī ieteiktu spēlēt pašu spēli, jo tā piedāvā interesantas spēlēšanas mehānikas.

Ievads

Outpost 2 izmantotie datu formāti ir līdzīgi JFIF / PNG struktūrai - katram datu blokam ir 8 baitus liels virsraksts. Tādēļ es izlaidu katra virsraksta dokumentēšanu atbilstošajās specifiskajās vietās un dokumentēšu tikai novirzes.

Formāts vienmēr ir šāds; faktiskie lietotnes dati ir tajā iekļauti:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti

Satur informāciju par to, ko gaidīt nākamajā datu blokā.

Zināmās vērtības:

  • 0x204C4F56 ('VOL '):
    Tilpums
  • 0x686C6F76 ('VOLH'):
    Tilpuma galvene
  • 0x736C6F76 ('VOLS'):
    Tilpuma virsraksti
  • 0x696C6F76 ('VOLI'):
    Tilpuma informācija
  • 0x4B4C4256 ('BLCK'):
    Tilpuma bloks
  • 0x504D4250 ('PBMP'):
    Grafikas dati
  • 0x4C415050 ('PPAL'):
    Krāsu palete
  • 0x4C415043 ('CPAL'):
    Krāsu paletes konteineris
  • 0x64616568 ('head'):
    Galvene
  • 0x61746164 ('data'):
    Pamatdati
0x0004 uint(24) Bloka garums

Saturs informāciju par to, cik liels (baitos) ir nākamais datu bloks.

Šeit tiek domāti tikai tīrie lietotāju dati - 8 galvenes baitus tajā nav iekļauti.

0x0007 uint(8) Karogi?

Nav zināms, kam tieši šis bloks kalpo.

Apjomos šī vērtība bieži ir 0x80, citās failos bieži ir 0x00. Tas liecina, ka tas varētu būt karoga kopums.

Apjomi

Apjomi ir datu konteiners spēlei, līdzīgs arhīva formātam, piemēram, Tarball. Vismaz spēlē Outpost 2 šajā formātā ir tikai faili - nav mapju. Iespējams, ka tās varētu simulēt, izmantojot atbilstošus failu nosaukumus.

Apjoms sastāv no apjoma galvenes un vairākiem apjoma blokiem, kas atbilst konkrētajiem failiem.

"Apjomi" ir faili ar paplašinājumu 'vol' spēles direktorijā.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi

Apjoma virsraksts

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi

Apjoma galvene pati par sevi nesatur nekādas lietotāja datus.
T tā kalpo tikai kā konteineris.

Pirmajā datumā apjoma galvenē vajadzētu atrasties apjoma virknes; pēc tam seko apjoma informācija.

Apjoma virknēs

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi
Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi
0x0008 uint(32) Payload garums

Norāda, cik daudz baitus no šiem datiem patiesībā ir lietderīgi dati.

Atlikušos, palikušos datus no Volume-Strings saraksta acīmredzot jāuzskata par atkritumiem.

Failos ar vēlākām datumiem šie 'palikušie dati' ir 0x00, kas varētu liecināt par nepilnībām rīku komplektā spēles izstrādes laikā, proti, ka izstrādātājs par pareizu buferu inicializāciju rūpējās tikai ļoti vēlu, jo tam nav ietekmes uz spēli, vai dati ir inicializēti vai nav.

0x000c uint(8)[] Failu nosaukumu saraksts

Šeit ir runa par 0-baitu terminētu failu nosaukumu sarakstu, kas - vismaz šajā datu sastāvdaļā - sagaida tikai ASCII simbolus.

Nav nepieciešams, analizējot datus, šo datu bloku detalizētāk izvērtēt, jo apjoma informācijā jau tieši tiek norādītas failu nosaukumu ofseti.

Apjoma virknes ir failu nosaukumu saraksts, kas iekļauti apjomā.

Apjoma informācija

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi

Apjoma informācija ietver sīkākas ziņas par failiem. Tas ir zināmā mērā līdzīgs FAT direktorija ierakstam (FAT = Failu sadales tabula).

Failu skaits ir iegūts, dalot bloka izmēru ar direktorija ierakstu garumu - 14 baitiem.

Katram direktorija ierakstam ir šāda struktūra:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Datnes nosaukuma nobīde

Norāda, kurā pozīcijā (!) faila nosaukumu sarakstā (apjoma virknes) atrodas faila nosaukums.

Tas attiecas uz datu blokā esošo saturu sākumu.

0x0004 uint(32) Faila nobīde

Norāda, kurā ofsetā visā apjoma failā atrodas fails.

0x0008 uint(32) Faila izmērs

Norāda, cik liela ir faila izmērs baitos.

0x000c uint(16) Karogi?

Acīmredzot sniedz papildu informāciju par failu kodējumu.

  • 0x03 ir iestatīts, ja fails ir saspiests. Šeit, šķiet, tiek izmantots Huffmana koks.
  • 0x80 acīmredzot vienmēr ir iestatīts.

Tilpuma bloks

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi

Apjoma bloks ir konteineris, kurš satur failus. Tajā vēlreiz - blokformāta dēļ - ir redundanti norādīta faila lielums, un pēc tam seko tieši lietotājdati.

Flīzes

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi

Tiles ir Outpost-2 specifisks bitmap grafikas formāts. Tie aptver 13 Tileset, "wells" sauktas (well0000.bmp līdz well0012.bmp), kuri atrodas tilpumā maps.vol.

Tileseti / Wells satur sekojošo:

Faila nosaukums Saturs
well0000.bmp 32x32px liela zila grafika - ideāli piemērota, lai pārbaudītu, vai jūsu attēlu ielādētājs darbojas
well0001.bmp Izsistā gaiša akmens, kalnu grēdas uz gaiša akmens un neskaitāmas krāteru variācijas gaišā akmens
well0002.bmp Izsistā gaiša akmens 'Doodads' - elementi, kurus var novietot uz gaiša akmens, lai tos atbrīvotu (vai apzināti kā struktūru, piemēram, sienas), tostarp veģetācija
well0003.bmp Izsistā kraukšķīga struktūra uz gaiša akmens
well0004.bmp Izsistā tumša akmens, kalnu grēdas uz tumša akmens un neskaitāmas krāteru variācijas tumšā akmens
well0005.bmp Izsistā tumša akmens 'Doodads' - elementi, kurus var novietot uz tumša akmens, lai tos atbrīvotu (vai apzināti kā struktūru, piemēram, sienas)
well0006.bmp Izsistā kraukšķīga struktūra uz tumša akmens, kā arī pārejas starp gaišu un tumšu akmeni
well0007.bmp Izsistā lava, tostarp katrai 4-5 animācijas kadri
well0008.bmp Izsistā smiltis un neskaitāmas krāteru variācijas smiltīs
well0009.bmp Izsistā smilšu 'Doodads' - elementi, kurus var novietot uz smiltīm, lai tos atbrīvotu (vai apzināti kā struktūru, piemēram, sienas)
well0010.bmp Izsistā 48 pārejas no smiltīm uz gaišu un tumšu akmeni
well0011.bmp Izsistās kartes polārie cepures, ar tumšu akmeni kā pamatu
well0012.bmp Izsistās kartes polārie cepures, ar gaišu akmeni kā pamatu

Ir ieteicams, lai nodrošinātu precīzu īstenošanu, nesagatavot flīzes iepriekš, lai tās varētu kešot, jo dati dienas/nakts ciklam vēl ir jāapstrādā - un radīsies ļoti, ļoti daudz datu.

Flīzes ir 8bpp grafikas ar indeksētu paleti, katra ar 32x32 pikseļu izšķirtspēju, kas ir sakārtotas viena virs otras. Tomēr šādā veidā radītajā flīžu komplektā var būt ievērojami vairāk

Pamatsastāvdaļa sastāv no 2 sekcijām: head un data.

Flīžu virsraksts

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi
0x0008 uint(32) Versija / Karogi?

Šeit varētu būt faila formāta versijas norāde; visās man pieejamajās failēs šeit bija vērtība 0x02

0x000c uint(32) Platums (Horizontālā izšķirtspēja)

Norāda, cik plats ir attēla fails (pikseļos).

Visiem Wells no Outpost 2 šeit jābūt vērtībai 0x20 jeb 32.

0x0010 uint(32) Augstums (vertikālā izšķirtspēja)

Norāda, cik liels ir attēla fails (pikseļos).

Visiem Wells no Outpost 2 šeit tiks gaidīts vērtība 0x20 jeb 32.

0x0014 uint(32) Krāsu dziļums?

Šī vērtība nav zināma.

Tā kā visos pārbaudītajos failos ir iekļauts vērtība 8, iespējams, ka tā attiecas uz krāsu dziļuma norādi.

0x0018 uint(32) Krāsu dziļums 2?

Šī vērtības nozīme nav zināma.

Iespējams, ka tā ir 'mērķa' krāsas dziļums.

Pēc šiem datiem seko standarta RIFF formātā sagatavota paletes faila. Precīzu specifikāciju var atrast - jo paletes parādās arī citur - zem Paletes.

Flīžu dati

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Bloka garums
0x0007 uint(8) Karogi

Visbeidzot seko jau neapstrādātie pikseļu dati, sākot no kreisā augšējā stūra un virzoties pa rindām uz labo apakšējo stūri.
Datu vērtība grafikai, kas parasti ir 8bpp bitkarti, atbilst krāsas indeksam krāsu paletē.

Pikseļu dati sākas no augšējā kreisā stūra un beidzas apakšējā labajā stūrī.

Spēļu dzinējs izsauc lauku *visticamāk* pēc pieprasījuma.
Tas, iespējams, ir saistīts ar dienas-nakts ciklu, kuram ir 32 atsevišķu lauku pakāpes. Šajā procesā, šķiet, tiek atņemts 'mazliet' no gaismas vērtības. Precīzi rādītāji vēl nav noteikti, es strādāju ar aprēķinu pamatu

v *= (daylight / 48) + 0.25;

ar pikseļu HSV datiem, kur daylight ir vērtība no 0-31, un v ir vērtība no 0-1. Tāpat ir jāņem vērā, ka kartē katrā pusē ir vēl 16 lauki (tie kalpo neredzamai vienību izsaukšanai).

Turklāt dienas-nakts cikls katrā spēles ciklā atjaunina tikai vienu kolonu kartē.
Paātrināts dienas-nakts cikls izskatās šādi:

Dienas-nakts cikla vizualizācija

PRT

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Paletes garums

Norāda paletēm šajā failā pieejamo skaitu, atšķirībā no parastā bloka formāta - nevis bloka garumu baitos.

0x0007 uint(8) Karogi Visticamāk, kā parasti, ir karogi.

Tomēr man nav zināmu karogu; jo visi man zināmie vērtības atbilst 0x00, tāpēc ir arī potenciāli iespējams, ka paletju skaits vienkārši būtu uint(32).

Ko precīzi nozīmē PRT, man nav zināms; iespējams, tas varētu nozīmēt 'Paletes un Resursu Tabula' - jo šī faila, kas atrodas kā op2_art.prt mapē maps.vol, saturs ir tieši saistīts ar to, un tas diezgan labi aprakstītu funkciju.

Šis fails satur sarakstu ar paletēm, tabulu par visām izmantotajām bitmap attēliem, visām animāciju definīcijām un vēl virkni nezināmu datu. Tas brīvi seko iepriekšējā konteineru formātam, jo ne visi datu ieraksti atbilst šai shēmai.

CPAL sekcija (visticamāk, nozīmē paletes konteineru) ietver tikai paletēm datus, norādot, cik daudz no parasti 1052 baitiem lielajām 8-bit paletēm ir pieejamas.

1052 baitus skaitlis nav uzskatāms par saistošu, jo paletes formāts potenciāli varētu paredzēt dažādas paletes izmērus. Tas attiecas tikai uz datu kopumu, ar kuru tiek piegādāts Outpost 2.

Pēc paletes saraksta nekavējoties un bez ievada virsraksta seko bitmapu saraksts; tāpat nekavējoties seko animāciju saraksti.
Abi tiek uzsākti ar uint(32) (vai atkal uint24+uint8 karodziņi?) skaitli, kas satur ierakstu skaitu.

Paletes

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Paletes garums

Norāda, pretēji parastajam bloka formātam, paletju skaitu, kas atrodams šajā failā - nevis bloka garumu baitos.

0x0007 uint(8) Karogi

Visticamāk, kā parasti, ir karogi.

Tomēr man nav zināmu karogu; jo visi man zināmie vērtības atbilst 0x00, būtu arī potenciāli iespējams, ka paletju skaits vienkārši ir uint(32).

Informācija par paletēm ir ļoti viegli lasāma.
Tā sastāv no galvenes un datu segmenta.

Paletņu virsraksts

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Paletes garums

Norāda, pretēji parastajam bloka formātam, paletju skaitu, kas atrodams šajā failā - nevis bloka garumu baitos.

0x0007 uint(8) Karogi

Visticamāk, kā parasti, ir karogi.

Tomēr man nav zināmu karogu; jo visi man zināmie vērtības atbilst 0x00, būtu arī potenciāli iespējams, ka paletju skaits vienkārši ir uint(32).

0x0008 uint(32) Paletes formāta versija?

Visticamāk, tas nosaka, kurai paletēm formāta versijai palete seko.

Visām Outpost2 paletēm šķiet, ka ir versija 0x01.

Paletes dati

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Burvju baiti
0x0004 uint(24) Blocka garums
0x0007 uint(8) Karogi

Datu sekcija iekļauj katru atsevišķo paletes ierakstu. Paletes ierakstu skaits ir atkarīgs no bloka garuma / 4.

Atsevišķiem ierakstiem ir šāda vienkārša struktūra;

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(8) Sarkana komponente

Norāda krāsas sarkano komponenti

0x0001 uint(8) Zaļā komponente

Norāda krāsas zaļās sastāvdaļas proporciju

0x0002 uint(8) Zilā komponente

Norāda krāsas zilo komponentu

0x0003 uint(8) Nezināms - Karogi?

Nav skaidrs, ko šī vērtība nozīmē, jo tā acīmredzot pamatā ir 0x04.

Par paletēm jāatzīmē, ka animācijām izmantotajām paletēm pastāv šādi noteikumi:

  • Pirmā krāsa vienmēr ir CAURSPIDĪGA, neatkarīgi no tā, kāda vērtība tur ir norādīta.
  • Paletes ieraksti 1-24 tiek uzskatīti par spēlētāju krāsām paletēs 1-8.
    Man nav skaidrs, no kurienes nāk krāsas, kas nav saistītas ar spēlētāju 1.
    Es pieņemu, ka pārējās krāsas ir cieti kodētas.

Paletes atsauce

Bitkartiņas

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Izvietotā platums

Norāda pikseļu datu rindu platumu baitos - jo tās ir izlīdzinātas uz 4 baitiem.

Tādējādi ir ātri iespējams pāriet uz noteiktu attēla rindu.

Kāpēc šī vērtība tiek glabāta atsevišķi, lai gan to varētu aprēķināt, nav skaidrs.
Iespējams, ka tas ir optimizācija renderēšanas kodam.

0x0004 uint(32) Novirze

Norāda pirmās rindas nobīdi bitmapā

0x0008 uint(32) Augstums

Norāda attēla augstumu pikseļos

0x000c uint(32) Platums

Norāda attēla platumu pikseļos

0x0010 uint(16) Tips

Norāda attēla veidu. Šajā gadījumā šķiet, ka tas ir bitmaskas formātā:

  • 0x04 ir iestatīts, ja tas ir 1bpp grafikas formāts.
  • 0x40 ir iestatīts, ja tas ir grafikas formāts, kuram jāīsteno logošana.
0x0012 uint(16) Palete

Definē, kuru paleti no PRT faila izmantot

Šī PRT faila datu struktūra norāda, kā ir veidoti bitmapi, kas tiek izmantoti spritē. Šie bitmapi kalpo kā atsevišķas sastāvdaļas, no kurām vairākas tiek apkopotas, veidojot sprita animācijas kadru.

Konkrētie attēlu dati slēpjas op2_art.BMP spēles direktorijā.
Kāpēc šai bitmapii ir (galvenokārt pareizs) RIFF bitmapa galvene, nav skaidrs. Iespējams, ka Outpost 2 izmanto sistēmas API, lai ielādētu grafikas, uztverot šo galveni pagaidu veidā un pārrakstot attiecīgās, mainīgās laukus.

Pikseļu dati BMP failā atrodas pozīcijā Offset + uint32-Offset, kas BMP failā atrodas adresē 0x000A (RIFF bitmapa datu offsets), - un atkal atbilst rindu kārtībai no augšas pa kreisi uz apakšu pa labi.

Monohromās 1bpp grafikas var zīmēt tā, ka krāsa 0 ir pilnīga caurspīdība, bet krāsa 1 ir puscaurspīdīga melna/ pelēka, jo monohromās grafikas parasti tiek izmantotas transportlīdzekļu un ēku ēnu animācijās.

Tādējādi var jau kombinēt daudzus grafikus.

Aizsargāts dzīvojamais modulis (Plymouth)

Animācijas

Tagad mēs pārejam pie augstākās klases disciplīnām Outpost 2 datu formātos:
Animācijām.

Animāciju saraksti sākas ar globālu galveni, kas galvenokārt kalpo datu verificēšanai. Tam seko konkrēto animāciju definīcijas, kas iedalās trīs līmeņos:

  1. Animācija
    Animācija ir augstākā instance; tā attēlo vienības, ēkas vai 'daļiņu animāciju' (komētas trieciens, laika apstākļi, eksplozija) animāciju noteiktā izsākuma situācijā.
  2. Rāmītis
    Rāmītis ir viens attēls animācijā. Animācija var ietvert vienu vai vairākus rāmīšus.
  3. Apakšrāmītis
    Apakšrāmītis ir informācija par to, ka noteikta bitmapa noteiktos kritērijos jāizvieto noteiktā rāmīša pozīcijā. Rāmītī var būt viens vai vairāki apakšrāmīši.

Pēc tam seko tieši konkrētās animāciju definīcijas.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Animāciju skaits

Cik daudz animāciju datu kopu ir pieejams

0x0004 uint(32) Rāmi skaits

Cik kopumā būtu jābūt kadriem

0x0008 uint(32) Apakšrāmju skaits

Cik daudz subrāmju kopumā vajadzētu būt

0x000c uint(32) Nepieciešamo izvēles ierakstu skaits

Cik daudz "papildu ierakstu" ir pieejami.

Animācija

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(32) Nepazīstams 1

Nezināma informācija

0x0004 uint(32) Apkārtmējo kasti: Kreisi

Norāda kreiso sākumu (pikseļos) Bounding Box.

0x0008 uint(32) Apvilkšanas kaste: Augšā

Norāda augšējo sākumu (pikseļos) Bounding Box.

0x000c uint(32) Robusta kaste: platums

Norāda Bounding Box platumu (pikseļos).

0x0010 uint(32) Ierobežojošais lodziņš: augstums

Norāda Bounding Box augstumu (pikseļos).

0x0014 uint(32) Noregulējums: X

Norāda animācijas horizontālo centru

0x0018 uint(32) Nostāde: Y

Norāda animācijas vertikālo centru

0x001c uint(32) Nepazīstams 2

Nezināma informācija

0x0020 uint(32) Rāmi skaits

Norāda, cik daudz animāciju rādu ir šajā animācijā

0x0024 uint(32) Logu skaits

Norāda, cik daudz logu jāizmanto zīmēšanā

Augstākās slāņa dati, kas attiecas uz animāciju, galvenokārt ir administratīvie dati - Boundingbox apzīmē koordinātas ap transportlīdzekli/ēku, kad tas ir izvēlēts, un norāda arī to, kurš apgabals ir klikšķināms.

Ofsets galvenokārt nosaka "nulles punktu"; punktu, kas jāaprēķina vai jāatņem no spēles iekšējām koordinātām. Matemātiski sakot, ofsets šeit apzīmē koordinātu izcelsmi.

Windows ir, tāpat kā ofsets, katram logam 4 uint(32) vērtības, kuras norāda apgabalu, kas tiek uzskatīts par izmantojamu atsevišķiem subframe. Ārpus logiem nedrīkst zīmēt, ja vien tas nav paredzēts bitmap.

Rāmja

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(8) Subrāmis skaits un pārslēdzējs opcijai 1, 2

Šī vērtība satur:

  • 0x7F (Bitu maska): Subfrāmu skaits, kas tiek izmantots šajā rāmī
  • 0x80: Informācija par to, vai ir pieejami Opcija 1 un 2
0x0001 uint(8) Nepazīstams 1 un pārslēgs izvēles 3, 4

Šī vērtība satur:

  • 0x7F (Bitmask): Nezināms - Es stipri pieņemu, ka tas attiecas uz to gametick skaitu, kas paiet, līdz tiek parādīts nākamais kadrs
  • 0x80: Informācija par to, vai ir pieejami Opcija 3 un 4
0x0002 uint(8) Nepieciešams 1

Nezināms

0x0003 uint(8) Opcionalais 2

Nezināms

0x0004 uint(8) Izvēles 3

Nezināms

0x0005 uint(8) Opcija 4

Nezināms

Apakšrāmis

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF rakstz.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Novirze Datu tips Nosaukums Skaidrojums
0x0000 uint(16) Bitmap-ID

Norāda, kura bitmap jāizmanto šim apakšrāmim

0x0002 uint(8) Nepazīstams 1

Nav zināms - tomēr stipri pieļauju, ka šeit ir runa par renderēšanas prioritāti (Z-līmenis).

0x0003 uint(8) Apakšrāmja ID

Norāda, kurā apakšrāmī mēs atrodamies

0x0004 sint(16) Noslēgums - Horizontāls

Norāda, kur ietvarā jānovieto apakšrāmis, vai arī par cik pikseļiem bitmapa jānovirza horizontāli.

0x0006 sint(16) Offset - Vertikāls

Norāda, kur ietvarā jānovieto apakšsistēma, vai arī par cik pikseļiem attēls jānovieto vertikāli.

Tādējādi mēs tagad varam salikt atsevišķus kadrus, kā arī pilnīgas animācijas, šeit piemēram tiek demonstrēta sarežģītāka animācija ar indeksu 500

Animācija 500

Animācija 500 parāda, kā Plymouth transportieris, kas ir iekrauts ar parasto ore, tiek izkrauts. Tā ir viena no nedaudzajām animācijām, kas izmanto logu funkcionalitāti.

Tādējādi var savienot visu animāciju kopā.
Diemžēl joprojām pastāv problēma ar augšējo kravas atveri, jo šeit attiecīgais bits grafikas tipa informācijā nav iestatīts.

Šeit ir vēl daži, skaisti animēti sprite no spēles:

Animācijas 500 attēlojums

Animācija 500 pabeigta un salikta

Plymouth ēku fabrika

Eden kosmosa osta

Eden medicīnas centrs

SCAT

Plymouth kosmosa osta

Lieldienu ola:
Ziemassvētku vecītis

Lieldienu ola:
Dansa suns

Lietotāja interfeiss

Tagad trūkst spēles lietotāja saskarne, kas ir izstrādāta slīpēta metāla stilā.

Tomēr arī šeit ir skaidrs, ka Dynamix nebija jāizgudro ritenis no jauna; šeit tiek izmantotas ne tikai vienkāršās User32 un GDI32 API, ko nodrošina Windows, bet īpaši tiek izmantota arī resursu pārvaldība no User32.

Šos resursus var izvilkt, piemēram, izmantojot programmas, ko izstrādājis Angus Johnson kā bezmaksas programmatūru Resource Hacker, vai - ja jūs nevēlaties izmantot Wine Linux / Mac OS - izmantojot icoutils iekļauto wrestool.

Faila nosaukums Saturs
Outpost2.exe Saturs tikai spēles ikona, kas attēlo kosmosa staciju pie New Terra
op2shres.dll Saturs grafikas, kas paredzētas vadības elementiem, piemēram, apmalēm, pogām, radio pogām un izvēles rūtiņām, kā arī dialogu fona attēlus, pavadītājus stāsta misiju tekstiem un galvenā izvēlnes fona grafiku
out2res.dll Saturs spēles logu dekorācijas, ikonas parastajam un īpašajam metālam, ielādes ekrānu, grafikas dialogiem, kā arī papildu kursoru grafikas, papildus animētajiem spēles direktorijā