Outpost 2 Mga Format ng File · bei.pm
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.
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:
|
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.
|
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 |
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 |
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 |
0x0014 | uint(32) | Lalim ng kulay? | Ang kahulugan ng halagang ito ay hindi alam. Dahil naglalaman ito ng halagang |
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.
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:
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 |
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 |
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 |
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 |
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 |
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
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. |
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:
|
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.
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:
-
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. -
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. -
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:
|
0x0001 | uint(8) | Hindi kilala 1 at Toggle para sa Opsyonal 3, 4 | Ang halagang ito ay naglalaman ng:
|
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:
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 |