Outpost 2 Mga Format ng File · bei.pm

Ang tekstong ito ay awtomatikong isinalin gamit ang OpenAI GPT-4o Mini.

Ang mga format ng file na inilarawan sa pahinang ito ay batay sa teknikal na pagsusuri ng intelektwal na pag-aari ng Dynamix, Inc. at Sierra Entertainment.
Ang intelektwal na pag-aari ay ngayon bahagi ng Activision Publishing, Inc.- / Activision Blizzard, Inc.-na pag-aari at kasalukuyang pagmamay-ari ng Microsoft Corp..

Ang impormasyon ay nakalap sa pamamagitan ng Reverse Engineering at Pagsusuri ng Datos para sa layunin ng pag-archive at interoperability sa makasaysayang datos.
Walang ginamit na mga proprietary o kumpidensyal na espesipikasyon.

Ang laro ay kasalukuyang mabibili sa gog.com bilang isang download.

Sining ng laro

Ang sumusunod na serye ng mga artikulo ay nagdodokumento ng aking mga natuklasan tungkol sa mga format ng data sa real-time strategy game na "Outpost 2: Divided Destiny", na inilabas ng Sierra noong 1997 at binuo ng Dynamix.

Nakatuon ako mula noong Nobyembre 1, 2015 hanggang Nobyembre 14, 2015 sa pagsusuri ng data ng laro - at kung ano ang maaari nitong gawin.

Ayon sa mga impormasyong nakuha ko, ang Dynamix - tulad ng maraming komersyal na kumpanya - ay hindi partikular na bumuo ng ilang mga format ng data para sa Outpost 2, kundi ginamit din ang mga ito sa ibang mga proyekto tulad ng Mechwarrior series (na binago).
Anuman ito, maaari ring mapansin na ang kakayahan sa inobasyon ng mga format ng data ay kadalasang limitado at madalas na nakabatay sa mga mas matagal nang konsepto mula sa mga karaniwang format tulad ng JFIF at RIFF.

Para sa interpretasyon ng mga talahanayan at mga format ng data, may karagdagang impormasyon sa Ano ang ano?.
Ang mga datos na nakalista dito ay karaniwang nauunawaan bilang Little Endian.

Bilang pangwakas, masasabi kong napakasaya ng reverse engineering, kahit na hindi ito kumpleto.
Siyempre, inirerekomenda ko rin na laruin mo ang laro mismo, dahil nag-aalok ito ng mga kawili-wiling mekanika ng laro.

Panimula

Ang mga format ng data na ginagamit ng Outpost 2 ay may estruktura na kahawig ng JFIF / PNG - ang bawat data block ay palaging may 8 Byte header. Kaya't hindi ko na ito idodokumento ang bawat header sa mga kaukulang tiyak na lugar at idodokumento lamang ang mga pagkakaiba.

Ang format ay palaging ang sumusunod; ang mga aktwal na data na ginagamit ay nakapaloob dito:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Bituin ng Mahika

Naglalaman ng impormasyon tungkol sa kung ano ang dapat asahan sa susunod na data block.

Mga kilalang halaga:

  • 0x204C4F56 ('VOL '):
    Volume
  • 0x686C6F76 ('VOLH'):
    Volume-Header
  • 0x736C6F76 ('VOLS'):
    Volume-Strings
  • 0x696C6F76 ('VOLI'):
    Volume-Impormasyon
  • 0x4B4C4256 ('BLCK'):
    Volume-Block
  • 0x504D4250 ('PBMP'):
    Grafikong datos
  • 0x4C415050 ('PPAL'):
    Palette ng kulay
  • 0x4C415043 ('CPAL'):
    Container ng palette ng kulay
  • 0x64616568 ('head'):
    Header
  • 0x61746164 ('data'):
    Gamit na datos
0x0004 uint(24) Haba ng Block

Naglalaman ito ng impormasyon tungkol sa kung gaano kalaki (sa Byte) ang sumusunod na data block.

Ang mga purong data lamang ang tinutukoy - hindi kasama ang 8 Header-Byte dito.

0x0007 uint(8) Mga watawat?

Hindi tiyak kung para saan talaga ang block na ito.

Sa mga Volumes, madalas na ang halagang ito ay 0x80, habang sa ibang mga file ay madalas na 0x00. Ipinapahiwatig nito na ito ay maaaring isang set ng flag.

Mga B volumen

Ang mga Volume ay isang lalagyan ng datos para sa laro, katulad ng isang format ng archive tulad ng Tarball. Sa Outpost 2, ang format na ito ay kumikilala lamang ng mga file - walang mga folder. Marahil ay maaring i-simulate ang mga ito sa pamamagitan ng mga naaangkop na pangalan ng file.

Ang isang Volume ay binubuo ng Volume-Header at ng maraming Volume Blocks, na tumutugma sa mga konkretong file.

"Volumes" ang mga file na may pagtatapos na 'vol' sa direktoryo ng laro.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Ulo ng Dami

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Walang mga datos na maaaring gamitin ang Volume Header.
Ito ay nagsisilbing lalagyan lamang.

Ang unang datos sa Volume Header ay dapat na ang Volume Strings; kasunod nito ay ang mga impormasyon ng Volume.

Mga String ng Bvolume

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat
Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat
0x0008 uint(32) Haba ng Payload

Ipinapakita kung gaano karaming Bytes ng sumusunod na datos ang talagang mga kapaki-pakinabang na datos.

Ang natitirang datos ng listahan ng Volume-Strings ay tila itinuturing na garbage.

Sa mga file na may mas bagong petsa, ang mga 'natitirang datos' ay 0x00, na maaaring magpahiwatig ng mga kakulangan sa toolchain habang ginagawa ang laro, ibig sabihin, na ang isang developer ay nag-alala lamang tungkol sa tamang inisyal na pag-set ng mga buffer nang napakahuli, dahil walang epekto sa laro kung ang mga datos ay na-inisyal na o hindi.

0x000c uint(8)[] Listahan ng mga Pangalan ng File

Ito ay isang 0-byte na tinapos na listahan ng mga pangalan ng file, na - kahit sa kasalukuyang bahagi ng datos - ay tanging inaasahang mga ASCII na character lamang.

Hindi kinakailangan na masusing suriin ang data block na ito habang pinoproseso ang mga datos, dahil sa impormasyon ng volume, ang mga offset ng mga pangalan ng file ay direktang nire-refer naman.

Ang mga Volume Strings ay isang listahan ng mga pangalan ng file na kasama sa loob ng volume.

Impormasyon ng Dami

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Ang mga impormasyon ng volume ay kumukuha ng mas detalyadong impormasyon tungkol sa mga file. Ito ay sa isang paraan na katulad ng isang uri ng FAT directory entry (FAT = File Allocation Table)

Ang bilang ng mga file ay nagmumula sa laki ng block na hinati sa haba ng mga directory entry - 14 Byte.

Ang bawat mga directory entry ay may sumusunod na estruktura:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Offset ng Pangalan ng File

Nagbibigay ng impormasyon kung saang offset (!) sa loob ng listahan ng mga pangalan ng file (Volume-Strings) matatagpuan ang pangalan ng file.

Tumutukoy ito sa simula ng block ng datos.

0x0004 uint(32) Offset ng File

Ipinapakita kung anong offset sa loob ng kabuuang volume file naroroon ang file.

0x0008 uint(32) Laki ng File

Ipinapakita kung gaano kalaki ang file sa Bytes.

0x000c uint(16) Mga watawat?

Mayroon tila karagdagang impormasyon tungkol sa pag-encode ng file.

  • 0x03 ay nakatakda kung ang file ay naka-compress. Dito, tila ginagamit ang isang Huffmann tree.
  • 0x80 ay tila palaging nakatakda.

Blok ng Dami

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Ang isang volume block ay isang lalagyan na tumatanggap ng mga file. Naglalaman ito ng muli - dahil sa format ng block - ng redundant na sukat ng file at kasunod nito ay direkta ang mga datos na ginagamit.

Mga tile

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Mahika na Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Ang mga Tiles ay isang tiyak na format ng Bitmap graphics para sa Outpost-2. Sumasaklaw ito sa 13 Tilesets, na tinatawag na "wells" (well0000.bmp hanggang well0012.bmp), na matatagpuan sa loob ng Volume maps.vol.

Ang mga Tilesets / Wells ay naglalaman ng mga sumusunod:

Pangalan ng File Nilalaman
well0000.bmp Isang 32x32px na asul na graphic - ideal bilang pagsusuri kung gumagana ang sariling image-loader
well0001.bmp Naglalaman ng maliwanag na bato, mga bundok sa maliwanag na bato at di mabilang na mga variant ng mga crater sa maliwanag na bato
well0002.bmp Naglalaman ng mga 'Doodads' na gawa sa maliwanag na bato - mga elemento na maaaring ilagay sa maliwanag na bato para sa pagpapaluwag (o sinasadya bilang estruktura, tulad ng mga pader), kabilang ang mga halaman
well0003.bmp Naglalaman ng isang crusty na estruktura sa maliwanag na bato
well0004.bmp Naglalaman ng madilim na bato, mga bundok sa madilim na bato at di mabilang na mga variant ng mga crater sa madilim na bato
well0005.bmp Naglalaman ng mga 'Doodads' na gawa sa madilim na bato - mga elemento na maaaring ilagay sa madilim na bato para sa pagpapaluwag (o sinasadya bilang estruktura, tulad ng mga pader)
well0006.bmp Naglalaman ng isang crusty na estruktura sa madilim na bato, pati na rin ang mga paglipat sa pagitan ng maliwanag at madilim na bato
well0007.bmp Naglalaman ng lava kabilang ang 4-5 frame ng animation nito
well0008.bmp Naglalaman ng buhangin at di mabilang na mga variant ng mga crater sa buhangin
well0009.bmp Naglalaman ng mga 'Doodads' na gawa sa buhangin - mga elemento na maaaring ilagay sa buhangin para sa pagpapaluwag (o sinasadya bilang estruktura, tulad ng mga pader)
well0010.bmp Naglalaman ng 48 na paglipat mula sa buhangin patungo sa maliwanag at madilim na bato
well0011.bmp Naglalaman ng mga polar caps ng mapa, na may madilim na bato bilang ilalim
well0012.bmp Naglalaman ng mga polar caps ng mapa, na may maliwanag na bato bilang ilalim

Makatuwid na hindi i-render ang mga Tiles nang maaga upang ma-cache ang mga ito, dahil ang mga datos para sa siklo ng araw/gabi ay kailangan pang iproseso - at napakaraming datos ang mabubuo.

Ang mga Tiles ay 8bpp na mga grapika na may indexed palette na may sukat na 32x32 pixel, na nakaayos nang magkakasunod. Sa isang ganitong Tileset, maaaring higit pang mga

Ang pangunahing lalagyan ay binubuo ng 2 seksyon: head at data.

Ulo ng mga Bato

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Mahika na Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat
0x0008 uint(32) Bersyon / Watawat?

Maaaring ito ay isang bersyon ng pagtukoy sa format ng file; sa lahat ng mga file na nasa aking kamay, ang nakalagay dito ay ang halaga 0x02

0x000c uint(32) Lapad (Pahalang na Resolusyon)

Itinutukoy kung gaano kalawak ang file ng larawan (sa pixels).

Sa lahat ng Wells ng Outpost 2, ang halaga na inaasahan dito ay 0x20 o 32.

0x0010 uint(32) Taas (Bersyon ng Patayo)

Ipinapakita kung gaano kataas ang larawan (sa pixel).

Sa lahat ng Wells ng Outpost 2, dito ay inaasahang magiging halaga ang 0x20 o 32.

0x0014 uint(32) Lalim ng kulay?

Ang kahulugan ng halagang ito ay hindi alam.

Dahil naglalaman ito ng halagang 8 sa lahat ng sinuring mga file, maaaring ito ay tumutukoy sa isang pahayag ng lalim ng kulay.

0x0018 uint(32) Lalim ng kulay 2?

Ang kahulugan ng halagang ito ay hindi alam.

Maaaring ito ay isang 'target' na lalim ng kulay.

Mula sa mga impormasyong ito, magkakaroon pa ng isang file ng paleta na nasa standardized na RIFF format. Ang eksaktong espesipikasyon ay matatagpuan - dahil ang mga palette ay lumilitaw din sa iba pang mga lugar - sa ilalim ng Mga palette.

Mga Datos ng Tiles

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Mahika na Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Sa wakas, narito na ang mga purong datos ng pixel, mula sa kaliwang itaas na nakaayos ng linya patungo sa kanang ibaba.
Ang halaga ng datos sa mga larawang karaniwang nasa 8bpp-bitmaps ay tumutugma sa index ng kulay sa palette ng kulay.

Nagsisimula ang datos ng pixel mula sa itaas na kaliwa at nagtatapos sa ibabang kanan.

Ang game engine ay malamang na nagda-download ng mga tiles *on-demand*.
Tila ito ay dahil sa siklo ng araw-gabi, na may 32 na antas ng mga indibidwal na tiles. Ayon sa mga impormasyon, tila may kaunting ibinabawas mula sa halaga ng liwanag. Hindi pa matukoy ang eksaktong mga halaga, nagtatrabaho ako sa batayan ng pagkalkula

v *= (daylight / 48) + 0.25;

gamit ang mga HSV na datos ng pixel, kung saan ang daylight ay isang halaga mula 0-31 at v ay isang halaga mula 0-1. Dapat ding isaalang-alang na sa mapa ay may hangganan na 16 na tiles sa kaliwa at kanan (na nagsisilbing hindi nakikitang paglitaw ng mga yunit).

Karagdagan pa, tila ang siklo ng araw-gabi ay nag-uupdate lamang ng isang column ng mapa sa bawat game cycle.
Ang pinabilis na siklo ng araw-gabi ay mukhang ganito:

Visualisasyon ng siklo ng araw-gabi

PRT

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng palette

Ibinibigay, sa kabila ng karaniwang anyo ng bloke, ang bilang ng mga palette na matatagpuan sa file na ito - hindi ang haba ng bloke sa byte.

0x0007 uint(8) Mga Watawat

Malamang, tulad ng dati, mga Flags.

Ngunit wala akong kaalaman tungkol sa mga Flags; dahil ang lahat ng aking kilalang halaga ay katumbas ng 0x00, maaari ring posible na ang bilang ng mga paleta ay simpleng isang uint(32).

Walang tiyak na kaalaman kung ano ang ibig sabihin ng PRT; maaaring tumukoy ito sa 'Palette and Resource Table' - dahil ang file na ito - na makikita bilang op2_art.prt sa maps.vol - ay isang ganitong uri, o kaya naman ay mahusay na nailalarawan ang function na ito.

Ang file na ito ay naglalaman ng isang listahan ng mga palette, isang talahanayan ng lahat ng ginamit na bitmap, lahat ng mga depinisyon ng animasyon at iba pang hindi kilalang data. Ito ay maluwag na sumusunod sa nakaraang format ng container, dahil hindi lahat ng record ay sumusunod sa schema na ito.

Ang CPAL na seksyon (malamang ay nangangahulugang Palette Container) ay sumasaklaw lamang sa mga data ng palette, sa pamamagitan ng pagtukoy kung gaano karaming karaniwang 1052 byte na 8-bit na palette ang naroroon.

Ang 1052-byte na pagtukoy ay hindi itinuturing na obligado, dahil ang format ng palette ay maaaring maglaman ng iba’t ibang laki ng palette. Ito ay nalalapat lamang sa data na kasama sa Outpost 2.

Matapos ang mga listahan ng palette, agad na sumusunod at walang paunang header, ang listahan ng mga bitmap; kasunod nito ay ang mga listahan ng animasyon.
Ang pareho ay sinisimulan ng isang uint(32) (o muling uint24+uint8 flags?) na naglalaman ng bilang ng mga record.

Mga palette

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Paleta

Ipinapakita, sa halip na ang normal na block format, ang bilang ng mga pallet na matatagpuan sa file na ito - hindi ang haba ng block sa byte.

0x0007 uint(8) Mga Watawat

Marahil, tulad ng dati, mga Flags.

Ngunit wala akong kaalaman tungkol sa mga Flags; dahil ang lahat ng alam kong mga halaga ay katumbas ng 0x00, maaari ring maging posible na ang bilang ng mga palette ay simpleng isang uint(32).

Ang impormasyon ng mga palette ay napakadaling basahin.
Ang mga ito ay binubuo ng isang header at isang data segment.

Ulo ng Paleta

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Paleta

Ipinapakita, sa halip na ang normal na block format, ang bilang ng mga pallet na matatagpuan sa file na ito - hindi ang haba ng block sa byte.

0x0007 uint(8) Mga Watawat

Marahil, tulad ng dati, mga Flags.

Ngunit wala akong kaalaman tungkol sa mga Flags; dahil ang lahat ng alam kong mga halaga ay katumbas ng 0x00, maaari ring maging posible na ang bilang ng mga palette ay simpleng isang uint(32).

0x0008 uint(32) Palettenformat na bersyon?

Tinatayang tinutukoy kung aling bersyon ng format ng paleta ang sinusunod ng paleta.

Lahat ng Outpost2 na paleta ay tila may bersyon na 0x01.

Data ng Pallet

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Magic Bytes
0x0004 uint(24) Haba ng Block
0x0007 uint(8) Mga Watawat

Ang seksyon ng datos ay naglalaman ng mga indibidwal na entry ng paleta. Ang bilang ng mga entry ng paleta ay nakabatay sa haba ng block / 4.

Ang bawat entry ay may simpleng estruktura na ganito;

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(8) Pulang Komponente

Nagbibigay ng bahagi ng pulang kulay

0x0001 uint(8) Berde-Komponente

Nagbibigay ng bahagi ng berde ng kulay

0x0002 uint(8) Asul na bahagi

Ipinapahayag ang bahagi ng asul ng kulay

0x0003 uint(8) Hindi kilala - Mga Watawat?

Hindi malinaw kung ano ang kahulugan ng halagang ito, dahil ito ay tila pangunahing 0x04.

Tungkol sa mga palette, maaari lamang sabihin na ang mga sumusunod na patakaran ay nalalapat sa mga palette na gagamitin para sa mga animation:

  • Ang unang kulay ay PALAGING transparent, anuman ang halaga na nakalagay doon.
  • Ang mga entry ng palette 1-24 ay itinuturing na kulay ng manlalaro sa mga palette 1-8.
    Hindi ko alam kung saan nagmumula ang mga kulay maliban sa Manlalaro 1.
    Suspek ko na ang natitirang mga kulay ay hardcoded

Reperensiya ng Palette

Mga Bitmap

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Nakatutok na Lapad

Ipinapakita ang lapad ng mga pixel data line sa mga byte - dahil ang mga ito ay naka-align sa 4-byte na mga hangganan.

Kaya't madali nang makuha ang isang tiyak na linya ng imahe.

Bakit ang halaga na ito ay naka-imbak nang hiwalay, kahit na maaring itong kalkulahin, ay hindi malinaw.
Maaaring ito ay isang optimisasyon para sa render code.

0x0004 uint(32) Offset

Ipinapakita ang offset ng unang linya sa bitmap

0x0008 uint(32) Taas

Ipinapakita ang taas ng larawan sa mga pixel

0x000c uint(32) Lapad

Ipinapakita ang lapad ng larawan sa mga pixel

0x0010 uint(16) Uri

Ipinapahiwatig ang uri ng larawan. Mukhang ito ay isang Bitmask:

  • 0x04 ay nakatakda kung ito ay isang 1bpp na grapika.
  • 0x40 ay nakatakda kung ito ay isang grapika na kailangang magpatupad ng Windowing
0x0012 uint(16) Paleta

Tinutukoy kung aling palette mula sa PRT file ang dapat gamitin

Ang estruktura ng datos ng PRT-file na ito ay nagpapakita kung paano nakaayos ang mga bitmap na ginagamit para sa mga sprites. Ang mga bitmap na ito ay nagsisilbing isang bahagi, kung saan ang marami sa mga ito ay pinagsama-sama upang bumuo ng isang animasyon na frame ng isang sprite.

Ang mga konkretong datos ng larawan ay nakatago sa op2_art.BMP sa direktoryo ng laro.
Kung bakit ang bitmap file na ito ay may isang (karaniwang tamang) RIFF-bitmap header ay hindi malinaw. Marahil ang Outpost 2 ay gumagamit ng mga system-API para sa pag-load ng mga graphics, sa pamamagitan ng pansamantalang pagkuha ng header na ito at pag-overwrite ng mga kaukulang, nag-iibang field.

Ang mga pixel data ay matatagpuan sa BMP file sa Posisyon na Offset + ang uint32-offset, na makikita sa BMP file sa address na 0x000A (RIFF-Bitmap data offset), at nauugnay muli sa line-by-line na pagkakaayos mula sa itaas-kaliwa papuntang kanan-pababa.

Ang monochrome 1bpp graphics ay maaaring iguhit sa paraang ang kulay 0 ay kumakatawan sa ganap na transparency, at ang kulay 1 ay isang semi-transparent na itim/gray, dahil ang mga monochrome graphics karaniwang ginagamit para sa mga anino ng sasakyan at gusali sa mga animasyon.

Sa ganitong paraan, maaari nang pagsamahin ang maraming graphics.

Nakatagong modular na tirahan (Plymouth)

Mga animasyon

Narito na tayo sa pinakamataas na antas ng mga disiplina sa loob ng mga format ng datos ng Outpost 2:
Ang mga animasyon.

Ang mga listahan ng animasyon ay nagsisimula sa isang pandaigdigang header, na pangunahing nagsisilbing beripikasyon ng datos. Kasunod nito ang mga tiyak na depinisyon ng animasyon, na nahahati sa 3 antas:

  1. Animasyon
    Ang isang animasyon ay ang pinakamataas na antas; ito ay kumakatawan sa isang animasyon ng isang yunit, isang gusali, o isang 'partikular na animasyon' (pagsabog ng kometa, panahon, pagsabog) sa isang tiyak na sitwasyon.
  2. Frame
    Ang isang frame ay isang solong imahe sa loob ng isang animasyon. Ang isang animasyon ay maaaring maglaman ng isa o higit pang mga frame.
  3. Subframe
    Ang isang subframe ay ang impormasyon na nagsasaad na ang isang tiyak na bitmap ay dapat iguhit sa isang tiyak na posisyon ng isang frame sa ilalim ng mga tiyak na pamantayan. Ang isang frame ay maaaring maglaman ng isa o higit pang mga subframe.

Pagkatapos nito, agad nang susunod ang mga indibidwal na depinisyon ng animasyon.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Bilang ng mga animasyon

Gaano karaming mga set ng datos ng animasyon ang naroroon

0x0004 uint(32) Bilang ng mga frame

Gaano karaming mga frame ang dapat na kabuuan

0x0008 uint(32) Bilang ng mga Subframe

Gaano karaming subframes ang dapat na naroroon sa kabuuan

0x000c uint(32) Bilang ng mga opsyonal na entry

Gaano karaming "mga opsyonal na entry" ang naroroon.

Animasyon

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(32) Hindi kilala 1

Hindi kilalang impormasyon

0x0004 uint(32) Bounding Box: Kaliwa

Ipinapahiwatig ang kaliwang simula (sa Pixel) ng Bounding Box.

0x0008 uint(32) Bounding Box: Itaas

Tinutukoy ang itaas na simula (sa pixel) ng Bounding Box.

0x000c uint(32) Bounding Box: Lapad

Ipinapahayag ang lapad (sa mga pixel) ng Bounding Box.

0x0010 uint(32) Bounding Box: Taas

Ipinapahayag ang taas (sa Pixel) ng Bounding Box.

0x0014 uint(32) Offset: X

Itinutukoy ang pahalang na gitnang punto ng animasyon

0x0018 uint(32) Offset: Y

Itinutukoy ang patayong gitna ng animasyon

0x001c uint(32) Hindi kilala 2

Hindi kilalang impormasyon

0x0020 uint(32) Bilang ng mga frame

Ipinapakita kung gaano karaming mga frames ng animation ang nasa animation na ito

0x0024 uint(32) Bilang ng mga Bintana

Ipinapahiwatig kung gaano karaming bintana ang dapat gamitin sa pag-drawing

Ang mga datos ng pinakamataas na layer, ang animasyon, ay pangunahing mga datos ng pamamahala - ang Boundingbox ay tumutukoy sa mga koordinato ng marka sa paligid ng sasakyan/o gusali, kapag ito ay napili at sabay-sabay na nagsasaad kung aling bahagi ang maaaring i-click.

Ang offset ay pangunahing tumutukoy sa "zero point"; ang puntong dapat ilagay sa mga panloob na koordinato o ibawas mula rito. Maari rin itong sabihin sa mas matematikal na paraan: ang offset ay tumutukoy dito sa origin ng koordinato.

Ang mga bintana ay, katulad ng offset, binubuo ng 4 na uint(32) na halaga (para sa bawat bintana), na naglalarawan ng isang lugar na itinuturing na magagamit para sa mga indibidwal na subframe. Sa labas ng mga bintana, hangga't ito ay nakalaan para sa bitmap, hindi dapat magdrawing.

Balangkas

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(8) Bilang ng subframe at toggle para sa Opsyonal 1, 2

Ang halagang ito ay naglalaman ng:

  • 0x7F (Bitmask): Ang bilang ng mga subframe na ginamit sa frame na ito
  • 0x80: Ang impormasyon kung naroroon ang Optional 1 at 2
0x0001 uint(8) Hindi kilala 1 at Toggle para sa Opsyonal 3, 4

Ang halagang ito ay naglalaman ng:

  • 0x7F (Bitmask): Hindi alam - Malakas ang hinala ko na ito ay tumutukoy sa bilang ng Gameticks na lumipas bago ipakita ang susunod na Frame
  • 0x80: Ang impormasyon kung naroroon ang Optional 3 at 4
0x0002 uint(8) Opsyonal 1

Hindi kilala

0x0003 uint(8) Opsyonal 2

Hindi kilala

0x0004 uint(8) Opsyonal 3

Hindi kilala

0x0005 uint(8) Opsyonal 4

Hindi kilala

Subframe

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF karakter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Uri ng Data Pangalan Paliwanag
0x0000 uint(16) Bitmap-Id

Itinutukoy kung aling Bitmap ang dapat gamitin para sa subframe na ito

0x0002 uint(8) Hindi kilala 1

Hindi ito alam - ngunit malaki ang hinala ko na ito ay may kinalaman sa render-priority (Z-Layer).

0x0003 uint(8) Subframe-Id

Nagbibigay ng impormasyon kung aling subframe tayo naroroon

0x0004 sint(16) Offset - Pahalang

Tinutukoy kung saan sa loob ng frame dapat ilagay ang subframe, o kung ilang pixel dapat ilipat nang pahalang ang bitmap

0x0006 sint(16) Offset - Patayo

Ipinapahiwatig kung saan sa loob ng frame ilalagay ang subframe, o kung gaano karaming pixel ang dapat ilipat nang patayo ang bitmap

Dito maaari na nating pagsamahin ang mga indibidwal na frame, pati na rin ang mga kumpletong animasyon, ipinapakita dito bilang halimbawa sa isang mas kumplikadong animasyon, ang animasyon na may index na 500.

Animasyon 500

Ang Animation 500 ay nagpapakita kung paano ang isang Plymouth-Transporter, na puno ng karaniwang ore, ay na-unload. Ito ay isa sa mga kaunting animation na gumagamit ng windowing functionality.

At ganito maaaring i-disenyo ang buong animation.
Sa kasamaang palad, may problema pa rin sa itaas na loading hatch, dahil ang kinauukulang bit sa graphic type information ay hindi nakatakda.

Narito ang ilang iba pang magagandang animated sprites mula sa laro:

Rendering ng Animation 500 ay inilalarawan

Animation 500 ay kumpletong naipon na

Plymouth Pabrika ng Gusali

Eden Spaceport

Eden Medikal na Sentro

SCAT

Plymouth Spaceport

Easteregg:
Santa Claus

Easteregg:
Dans Aso

User-Interface

Nangangailangan pa ng User-Interface ng laro, na may brushed metal na hitsura.

Ngunit dito rin makikita na hindi na kailangang muling likhain ng Dynamix ang gulong; hindi lamang dito simpleng ginagamit ang User32 at GDI32 APIs na ibinibigay ng Windows - lalo na, ginagamit din ang pamamahala ng resources mula sa User32.

Maaari itong i-extract sa pamamagitan ng mga programa gaya ng Resource Hacker na binuo ni Angus Johnson bilang Freeware, o - kung ikaw ay nag-iingat sa paggamit ng Wine sa Linux / Mac OS - sa tulong ng wrestool na kasama sa icoutils.

Pangalan ng File Nilalaman
Outpost2.exe Naglalaman lamang ng icon ng laro, na nagpapakita ng istasyon ng espasyo sa New Terra
op2shres.dll Naglalaman ng mga graphics para sa mga kontrol tulad ng mga border, button, radio-button, at checkbox pati na rin ang mga background ng dialog, mga kasamang larawan para sa mga kwento ng misyon, at ang background graphic ng pangunahing menu
out2res.dll Naglalaman ng ingame window decoration, mga icon para sa karaniwan at espesyal na metal, ang loading screen, mga graphics para sa mga dialog pati na rin ang karagdagang cursor graphics, bukod sa mga animated na nasa direktoryo ng laro