Outpost 2 Ifomethi Zezifayela · bei.pm

Lo mbhalo uthunyelwe ngokuzenzakalelayo nge-OpenAI GPT-4o Mini.

Amafomethi edokhumenti achazwe kule ndawo asuselwa ekuhlaziyweni kwezobuchwepheshe kobunikazi bokwakha be-Dynamix, Inc. kanye ne-Sierra Entertainment.
Ubunikazi bokwakha manje sebuye ingxenye ye-Activision Publishing, Inc.- / Activision Blizzard, Inc. futhi manje kuphathwa yi-Microsoft Corp..

Ulwazi luqoqwe ngokuqhuba Reverse Engineering kanye Datenanalyse ngenhloso yokugcinwa futhi kuhlanganyela nedatha yomlando.
Amazwibela okwakha angama-proprietary noma afihlekile awasetshenziswanga.

Umdlalo manje ungathengwa ku-gog.com njengokulanda.

Umsebenzi wezokwakha weMidlalo

Uchungechunge lwama-athikili olulandelayo lubhala ngokuqonda kwami ngama-format wedatha emidlalweni ye-strategy yesikhathi sangempela "Outpost 2: Divided Destiny", eyakhishwa nguSierra ngo-1997 futhi yathuthukiswa yiDynamix.

Ngeholo engisebenze ngalo kusukela ngo-01 Novemba 2015 kuya ku-14 Novemba 2015, ngagxila ekuhlaziyeni idatha yomdlalo - nokuthi iyenzani.

Ngezinsiza engizithole kuze kube manje, iDynamix - njengamabhizinisi amaningi ezentengiselwano - ayithuthukisanga ama-format wedatha ngokukhethekile ukuze kube se-Outpost 2, kodwa ayisebenzisa nakwezinye ukuthuthukiswa njengeMechwarrior-series (kushintshiwe).
Noma kunjalo, kubonakala ukuthi amandla okwakha ama-format wedatha akhululekile kakhulu futhi avame ukususelwa ezicini ezindala ezivela kuma-format ajwayelekile njenge-JFIF ne-RIFF.

Ngokuphathelene nokuchazwa kwamatafula namafomethi wedatha, kunezinye izinsiza ezitholakalayo ku- Yini okufanele iyiphi?.
Idatha enikeziwe lapha ngokujwayelekile ibonwa njenge-Little Endian.

Ekuqedeni, kungasho ukuthi ukuhlela kabusha kube mnandi kakhulu, nakuba kungaphelele.
Nakanjani, ngingaphinde ngincome ukuba udlale umdlalo uqobo, njengoba unikeza izindlela zokudlala ezithakazelisayo.

Intshayelelo

Izifomethi zedatha ezisetshenziswa yi-Outpost 2 zinezakhiwo ezikhumbuza i-JFIF / PNG - ama-block wedatha ngamunye anenhloko ye-byte engu-8. Ngakho-ke ngizogcina isikhathi, ngingabhali izihloko ezithile ezindaweni ezifanele futhi ngizobhala kuphela ngezinguquko.

Ifomethi ihlale ingeyona; idatha yokusetshenziswa itholakala ngaphakathi:

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Iziphathamandla Zemilingo

Ikhombisa ulwazi lokuthi yini okulindelekile emgqeni wedatha olandelayo.

Imigomo eyaziwa:

  • 0x204C4F56 ('VOL '):
    Umthamo
  • 0x686C6F76 ('VOLH'):
    Isikhumbuzo Somthamo
  • 0x736C6F76 ('VOLS'):
    Izintambo Zomthamo
  • 0x696C6F76 ('VOLI'):
    Ulwazi Lomthamo
  • 0x4B4C4256 ('BLCK'):
    Umqulu Womthamo
  • 0x504D4250 ('PBMP'):
    Idatha Yesithombe
  • 0x4C415050 ('PPAL'):
    Ipharamitha Yombala
  • 0x4C415043 ('CPAL'):
    Isigaba Semibala
  • 0x64616568 ('head'):
    Isikhumbuzo
  • 0x61746164 ('data'):
    Idatha Yokusebenzisa
0x0004 uint(24) Ubude beBlock

Lezizindaba ziqukethe ulwazi mayelana nosayizi (ngoku-Byte) wombhalo wedatha olandelayo.

Kukhulunywa ngedatha yokusebenzisa kuphela - ama-Byte ayi-8 e-Header awabandakanyi kulokhu.

0x0007 uint(8) Amathegi?

Akukaziwa kahle ukuthi lo mqulu usebenza kuphi.

Emavolumu, le mvalue ivamise ukuba ngu-0x80, kwezinye ifayela ivamise ukuba ngu-0x00. Lokhu kukhombisa ukuthi kungase kube kuyi-flag-set.

Izithombe

Izivolumu ziwumgqibelo wedatha yomdlalo, efana nefomethi ye-archive njenge Tarball. Nakuba i-Outpost 2 iyazi le fomethi, ithola kuphela amafayela - ayikho imibhalo. Kungenzeka ukuthi lezi zingafakazelwa ngamagama efayela afanele.

IVolume iqukethe i-volume-header kanye nezinqamuleli eziningi ze-volume ezihambisana namafayela athile.

"Izivolumu" zingamafayela anenhloso 'vol' endaweni yomdlalo.

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izigcawu Zemilingo
0x0004 uint(24) Ubude bebhulokhi
0x0007 uint(8) Amathegi

Isihloko Sezinga

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izigcawu Zemilingo
0x0004 uint(24) Ubude bebhulokhi
0x0007 uint(8) Amathegi

I-Volume Header ayinayo imikhiqizo ethile.
Isebenza kuphela njengenhlaka.

Ngokokuqala, idatha ku-Volume Header kufanele kube ama-Volume Strings; kulandela lokho imininingwane ye-Volume.

Izintambo Zomthamo

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izigcawu Zemilingo
0x0004 uint(24) Ubude bebhulokhi
0x0007 uint(8) Amathegi
I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izigcawu Zemilingo
0x0004 uint(24) Ubude bebhulokhi
0x0007 uint(8) Amathegi
0x0008 uint(32) Ubude be-Payload

Ikhombisa ukuthi mangaki ama-bytes alawa madatha alungile njengamadatha asetshenziswayo.

Amanye ama-data aseleyo ohlwini lwe-Volume-Strings kubonakala kufanele abhekwa njengokuthi garbage.

Kwi-fayili ezine-usuku olwandulele, la 'madatha aseleyo' angama-0x00, okungase kube wuphawu lokungahambi kahle kwe-toolchain ngesikhathi sokuthuthukiswa komdlalo, okusho ukuthi umthuthukisi wakhathalela ukufakwa kahle kwamabhafa kuphela kamuva, njengoba kungathinti umdlalo ukuthi ama-data afakiwe noma cha.

0x000c uint(8)[] Uhlu lwegama lefayela

Lezi yizinhlu zezimfanelo zezikhalazo eziphelele ezine-byte eziphelile, ezilindele kuphela izimpawu ze-ASCII - okungenani kule ngxenye yedatha efakiwe.

Akudingeki ukuba sihlaziye le datha ngokuqinile ngesikhathi sokuhlukanisa, njengoba ama-volumu-emininingwane asevele ebhekisela ku-offsets zezimfanelo zezikhalazo ngqo.

I-Volume Strings iyaluhlu lwegama lamafayela athi ngaphakathi kwe-Volume.

Ulwazi lweVOLUME

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izigcawu Zemilingo
0x0004 uint(24) Ubude bebhulokhi
0x0007 uint(8) Amathegi

Ulwazi lwe-Volume luthola ulwazi olunembile ngemafayela. Lokhu kungathathwa njengohlobo lwe-FAT (FAT = File Allocation Table) olwakha umaki wombhalo.

Inani lamafayela litholwa ngokuhlukanisa usayizi wombhoxo ngokuqhathaniswa nobude bemaki - 14 Byte.

Lezi zinkomba zefayela zinezakhiwo ezilandelayo:

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Ukuphambuka Kwamagama Wefayela

Ikhombisa ukuthi kuphi (offset) ngaphakathi kohlu lwegama lefayela (Volume-Strings) igama lefayela litholakala khona.

Lokhu kubhekisela ekuqaleni kwehlaka lemininingwane.

0x0004 uint(32) I-Offset yeFayela

Ikhombisa ukuthi ikuphi ukushintshwa ngaphakathi kwefayela eliphelele le-Volume.

0x0008 uint(32) Usayizi wefayela

Ikhombisa ukuthi usayizi wefayela ungakanani nge-Byte.

0x000c uint(16) Amathegi?

Kubonakala kunemininingwane eyengeziwe mayelana nokuhlelwa kwamafayela.

  • 0x03 ibekwa uma ifayela liqukethe ukufakwa. Lapha kubonakala kusetshenziswa umuthi we-Huffman.
  • 0x80 kubonakala kuwumsebenzi njalo.

Isikhala Sovolumu

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izigcawu Zemilingo
0x0004 uint(24) Ubude bebhulokhi
0x0007 uint(8) Amathegi

I-Volume-Block iyi-container, ethatha amafayela. Iqukethe kuphela - bona ngenxa yesakhiwo se-Block - kabili usayizi wefayela futhi kulandela ngqo idatha esetshenziswayo.

Amathayela

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Imibhalo Yemagic
0x0004 uint(24) Ubude bebhlogo
0x0007 uint(8) Amathikithi

I-Tiles yizifomathi ze-Bitmap ezikhethekile ze-Outpost-2. Zihlanganisa ama-Tilesets angu-13, abizwa ngokuthi "wells" (well0000.bmp kuya ku-well0012.bmp), ezitholakala ngaphakathi kwe-volumu maps.vol.

I-Tilesets / Wells ziqukethe lokhu okulandelayo:

Igama lefayela Okuqukethwe
well0000.bmp Umfanekiso omncane ongu-32x32px, oluhlaza - ufaneleka kahle njengezivivinyo zokuthi ingabe i-image-loader yakho iyasebenza
well0001.bmp Uqukethe litha eliphakeme, izintaba eziphakeme phezulu kwelitha eliphakeme kanye nezinhlobonhlobo ezingenamkhawulo zeziqhumane ezitholakala nelitha eliphakeme
well0002.bmp Uqukethe 'Doodads' lwe-litha eliphakeme - izakhi ezilungele ukuhlinzeka (noma ngokuqondile njengokwakhiwa, njengezindonga) ezitholakala nelitha eliphakeme, kuhlanganisa nevegetation
well0003.bmp Uqukethe isakhiwo esifana ne-crust phezulu kwelitha eliphakeme
well0004.bmp Uqukethe litha elinsomi, izintaba eziphakeme phezulu kwelitha elinsomi kanye nezinhlobonhlobo ezingenamkhawulo zeziqhumane ezitholakala nelitha elinsomi
well0005.bmp Uqukethe 'Doodads' lwe-litha elinsomi - izakhi ezilungele ukuhlinzeka (noma ngokuqondile njengokwakhiwa, njengezindonga) ezitholakala nelitha elinsomi
well0006.bmp Uqukethe isakhiwo esifana ne-crust phezulu kwelitha elinsomi, kanye nezinguquko phakathi kwelitha eliphakeme nelinsomi
well0007.bmp Uqukethe i-lava kuhlanganiswe nezithombe ezingu-4-5 zokunyakaza kwayo
well0008.bmp Uqukethe is sand nezinhlobonhlobo ezingenamkhawulo zeziqhumane ezitholakala esandleni
well0009.bmp Uqukethe 'Doodads' zesand - izakhi ezilungele ukuhlinzeka (noma ngokuqondile njengokwakhiwa, njengezindonga) ezitholakala esandleni
well0010.bmp Uqukethe izinguquko eziyi-48 ukusuka esandleni kuya kwelitha eliphakeme nelinsomi
well0011.bmp Uqukethe ama-Polar Caps eMap, ane litha elinsomi njengesisekelo
well0012.bmp Uqukethe ama-Polar Caps eMap, ane litha eliphakeme njengesisekelo

Kuyasiza ukuhlela kahle, ukuthi amaTiles angakanyathelwa ngaphambi kokuba abekwe ekhadini, ngoba idatha yokujikeleza kosuku/nokuhlwa isadinga ukulungiswa - futhi kuzodingeka idatha eningi kakhulu.

AmaTiles angama-8bpp-grafiki anepalethi eyindekade, ayisigaba esingu-32x32 pixel, ahlelwe ngokuqondile. Kodwa kwiTileset enjalo, kungaba khona okungaphezulu

I-Container eyinhloko iqukethe izingxenye ezi-2: head kanye data.

Isihloko Sezitshalo

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Imibhalo Yemagic
0x0004 uint(24) Ubude bebhlogo
0x0007 uint(8) Amathikithi
0x0008 uint(32) Inguqulo / Amabhanoyi?

Kungenzeka ukuthi lokhu kuyinkomba ye-versions ye-format ye-file; kuzo zonke amafayela enginazo, leli nani bekungukuthi 0x02

0x000c uint(32) Ububanzi (Ukuxazulula Okujolile)

Khombisa ukuthi ububanzi befayela lesithombe bukhulu kangakanani (ngaphakathi kwe-Pixel).

Kuwo wonke ama-Wells e-Outpost 2, kulindeleke ukuthi kube nenani 0x20 noma 32.

0x0010 uint(32) Ukuphakama (Ukuxazulula Okujolile)

Khombisa ukuthi iphayiphi yesithombe iphakama kangakanani (nge-Pixel).

Kuwo wonke amaWells e-Outpost 2, kulindeleke ukuthi lena inani 0x20 noma 32.

0x0014 uint(32) Ukujula kombala?

Inani leli alaziwa.

Njengoba likhona kuwo wonke amafayela ahlolwe, linomsebenzi 8, kungase kube yinkomba yokujula kwemibala.

0x0018 uint(32) Ubulukhuni bombala 2?

Incazelo yalolu hlu ayaziwa.

Kungenzeka ukuthi kuyi 'njongo'-ubukhulu bombala.

Ngokwalokhu, kuzolandela ifayela lepalethi elitholakala kufomat ye-RIFF evunyelwe. Ukucaciswa okunembile kutholakala - njengoba ama-palethi ephuma nakwezinye izindawo - ngaphansi kwe Amapalethi.

Idatha yeTiles

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Imibhalo Yemagic
0x0004 uint(24) Ubude bebhlogo
0x0007 uint(8) Amathikithi

Ukuze kube sekupheleni, sekuphume izithombe ze-pixel ezicacile, zisuka phezulu kwesobunxele ziye phansi kwesokudla.
Ikhodi yedatha kumagrafu avamise ukuba ama-8bpp-bitmaps ihambisana ne-index yombala ku-palette yombala.

Idatha ye-pixel iqala phezulu kwesobunxele bese iphela phansi kwesokudla.

i-Game Engine ibonisa ama-Tiles *mhlawumbe* on-demand.
Lokhu kubonakala kuxhumene, phakathi kokunye, ne-cycle ye-day-night, enezigaba eziyi-32 zama-Tiles ahlukene. Kubonakala ukuthi kuthathwa 'kancane' kumazinga okukhanya. Amanani anembile awakatholakala, ngisebenza ngokusekelwe ekubalwa

v *= (daylight / 48) + 0.25;

nge-HSV data ye-pixels, lapho i-daylight ingu-0-31 futhi i-v ingu-0-1. Ukuze kwenziwe kahle, kufanele kuqashelwe ukuthi emaphandleni kukhona umngcele we-Tiles eziyi-16 ngakwesokunxele nasokudla (lokhu kusetshenziselwa ukufaka ama-units engabonakali).

Okwengeziwe, i-cycle ye-day-night ibonakala ivuselela isikhala esisodwa se-map ngokuqhubekayo.
I-cycle ye-day-night esheshayo ibukeka kanje:

Ukuveza i-cycle ye-day-night

I-PRT

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Ama-Magic Bytes
0x0004 uint(24) Ubude bePalethi

Khombisa, ngokuphambene ne-Block format ejwayelekile, inani lemaphakeji atholakala kule fayili - hhayi ubude be-block ngo-byte.

0x0007 uint(8) Amabhande

Mhlawumbe, njengajwayelekile, amafulegi.

Kepha angaziwa amafulegi; njengoba wonke amanani engiwaziyo efana 0x00, kungenzeka futhi ukuthi inani lepalethi lingenzeka ukuthi kube nje i-uint(32).

Kungani PRT imele kahle, angazi; kungenzeka ukuthi 'Palette and Ressource Table' - njengoba le fayela - etholakala njenge op2_art.prt kwi maps.vol - ibhekisela kulokhu, noma lokhu kungachaza kahle umsebenzi.

Le fayela iqukethe uhlu lwama-palettes, ithebula le-bitmap esetshenziswe, yonke imishini yokuhlanganisa, kanye nemininingwane eminingi engaziwa. Ilandela ifomethi ye-container edlule ngokukhululeka, ngoba hhayi wonke amarekhodi alandela leli shadi.

Ingxenye CPAL (mhlawumbe imele ama-palettes-container) ihlanganisa kuphela idatha ye-palettes, ibonisa ukuthi zingaki ze-8-Bit palettes zinezi-1052 Bytes ezivamile.

Okukhuluma ngama-1052 Bytes akubhekwa njengokubophelelekile, njengoba ifomethi ye-palettes ingase ibe nezilinganiso ezahlukene. Lokhu kubhekiselwa kuphela kumthamo wedatha, okwenziwa nge-Outpost 2.

Ngemuva kwezinhlu ze-palettes, kulandela ngqo futhi ngaphandle kokwethulwa kwe-header, uhlu lwe-bitmaps; ngokufana, kulandela uhlu lwe-animations.
Zombili zihanjiswa ngesisekelo se-uint(32) (noma futhi uint24+uint8 flags?) esiqukethe inani lamarekhodi.

Amapalethi

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izinsiza zamanga
0x0004 uint(24) Ubude bephalethi

Inikeza, ngokuphambene ne-Block format ejwayelekile, inani lamapalethi atholakala kule fayela - hhayi ubude be-block ngama-byte.

0x0007 uint(8) Amabhande

Kungenzeka, njengajwayelekile, ama-Flags.

Ngaphandle kwalokho, angazi ama-Flags; njengoba wonke ama-value engiwazi afana 0x00, kungenzeka futhi ukuthi inani le-Palettes lingaba nje i-uint(32).

Ulwazi lwezikhala lufundeka kalula.
Lwakhiwa ngentambo yokuqala kanye nesigaba sedatha.

Isihloko sePalethi

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izinsiza zamanga
0x0004 uint(24) Ubude bephalethi

Inikeza, ngokuphambene ne-Block format ejwayelekile, inani lamapalethi atholakala kule fayela - hhayi ubude be-block ngama-byte.

0x0007 uint(8) Amabhande

Kungenzeka, njengajwayelekile, ama-Flags.

Ngaphandle kwalokho, angazi ama-Flags; njengoba wonke ama-value engiwazi afana 0x00, kungenzeka futhi ukuthi inani le-Palettes lingaba nje i-uint(32).

0x0008 uint(32) Uhlobo lwepalethi?

Kuhlonza ukuthi yiluphi uhlobo lwephakheji lepalethi oluhambisana nepalethi.

Bonke amapalethi e-Outpost2 abonakala enesigaba 0x01.

Idatha yePalethi

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Izinsiza zamanga
0x0004 uint(24) Ubude bebhlogo
0x0007 uint(8) Amabhande

Isigaba sedatha sithatha izinhlu zephalethi ezithile. Inani lezinhlu zephalethi lihlala liyehluka ngokwelokhu ubude bebhulokhi / 4.

Izinhlu ezithile zinekulungiselelo okulula okulandelayo;

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(8) Ikomponenti ebomvu

Ikhombisa ingxenye ye-Rot yemibala

0x0001 uint(8) Ingxenye ye-Green

Kukhombisa ingxenye eluhlaza color

0x0002 uint(8) Iphuzu leBlue

Ikhombisa ingxenye ye-blue yombala

0x0003 uint(8) Ayaziwa - Amathagethi?

Kuyacaca ukuthi le mvalue ayicacile, ngoba ibonakala ingu 0x04 ngokuyisisekelo.

Okuhlobene nepalethi, kukhona okunye okufanele kushiwo, okuthi uma kukhulunywa ngepalethi ezosetshenziswa ku-animation kukhona imithetho elandelayo:

  • Umbala wokuqala UYAKHANGELA ngaso sonke isikhathi, kungakhathaliseki ukuthi iyiphi inani elishiwo.
  • Izinto ze-palethi ezingu-1-24 zibalwa njengezombala zomdlali ku-palethi 1-8.
    Ubani onama-umbala angaphandle komdlali wokuqala, akusobala.
    Ngethukela ukuthi ama-umbala asele ahlale enziwe ngekhodi.

Isikhumbuzo se-palethi

Ama-Bitmaps

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Ububanzi obuhlelwe kahle

Khombisa ububanzi bezigaba zedatha ze-pixel ku-Byte - ngoba lezi ziqondaniswa emaphethelweni e-4-Byte.

Kanjalo, kulula ukufinyelela emgqeni ophakathi kwesithombe othile.

Kungani le mvume igcinwa ngokwehlukana, nakuba ingabala, akucaci.
Kungenzeka ukuthi kuyisithuthukisi se-render code.

0x0004 uint(32) Ukuphambuka

Ikhombisa i-offset yomugqa wokuqala ku-Bitmap

0x0008 uint(32) Ukuphakama

Khombisa ukuphakama kwesithombe ngama-pixel

0x000c uint(32) Ububanzi

Ikhombisa ububanzi besithombe nge-pixel

0x0010 uint(16) Thayipha

Kukhombisa uhlobo lwe-sithombe. Kubonakala sengathi lokhu kuyi-Bitmaske:

  • 0x04 ibekwe uma kukhuluma nge 1bpp-Grafik.
  • 0x40 ibekwe uma kukhuluma nge-Grafik edinga ukusebenzisa i-Windowing.
0x0012 uint(16) Iphalethi

Ichaza ukuthi iyiphi iphalethi ephuma kufayela le-PRT okufanele isetshenziswe

Lolu hlelo lwedatha lwefayela le-PRT lukhombisa ukuthi ama-Bitmaps asetshenziswa ku-Sprites akhiwe kanjani. Lezi zindawo ze-Bitmaps zisebenza ngokuthi zingxenye eziyodwa, eziningi zixhunywe ndawonye ukuze zenze ifreyimu ye-animethishini ye-Sprite.

Idatha ethile yezithombe ibhiddena kumafayela op2_art.BMP emgqeni womdlalo.
Kungani leli fayela le-Bitmap line (ngokuvamile eliqondile) i-RIFF-Bitmapheader, akucaci. Kungenzeka ukuthi u-Outpost 2 usebenzisa ama-API ezinhlelo ukuze alandele izithombe, njengoba le header ithathwa ngezikhathi ezithile futhi izigaba ezihambisanayo, ezihlukile zibhidlikiswa.

Idatha ye-Pixel itholakala kwi-BMP-file endaweni ye Offset + uint32-Offset, etholakala kwi-BMP-file ku-adresi 0x000A (i-RIFF-Bitmap-dataoffset), - futhi iphinde ihambisane nohlelo lwezintambo ukusuka phezulu kwesokunxele ukuya phansi kwesokudla.

Izithombe ze-monochrome ezingu-1bpp zingadwetshwa njengoba umbala 0 unokuhlanzeka okuphelele, kanti umbala 1 uwumbala omnyama/grey ophakathi kokuhlanzeka, njengoba izithombe ze-monochrome zivame ukusetshenziswa ukuze zihlabe umoya ezithombeni zezimoto nemikhakha emidlalweni.

Ngakho-ke ungakwazi ukuhlanganisa izithombe eziningi.

Imoduli yokuhlala evikelwe (Plymouth)

Izinhlobonhlobo zokuhlanganisa.

Hhayi, manje sifika esigabeni esiphezulu seziqu zezikrini ngaphakathi kwezimo ze- Outpost 2:
Izenzakalo.

Uhlu lwezenzakalo luqala ngekhanda elijoliso, elihloselwe ukuqinisekisa idatha. Kulandele izincazelo ezithile zezenzakalo, ezihlukaniswe ngezitezi ezi-3:

  1. Ukwenza Izenzakalo
    Ukwenza izenzakalo kuwumsebenzi ophakeme; kubonisa ukwenza isenzakalo senhlangano, isakhiwo noma 'ukwenza izenzakalo' (ukuhlasela kwekhamera, isimo sezulu, ukuwa) endaweni ethile.
  2. Isithombe
    Isithombe sikhuluma ngesithombe esisodwa ngaphakathi kokwenza izenzakalo. Ukwenza izenzakalo kungaba nesithombe esisodwa noma eziningi.
  3. Isithombe Esincane
    Isithombe esincane sikhuluma ngemininingwane yokuthi i-Bitmap ethile kufanele iboniswe endaweni ethile yesithombe ngaphansi kwezimo ezithile. Isithombe singaba nesithombe esincane esisodwa noma eziningi.

Qhubeka, kulandela izincazelo ezithile zezenzakalo.

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Inani leziqeshana zomdwebo

Bangaki amadokhumenti okwenziwa anekhono elikhona

0x0004 uint(32) Inani lemiqondo

Kangaki ama-frames kufanele abe khona ngokuphelele

0x0008 uint(32) Inani leSubframes

Bangaki ama-subframe okufanele akhona ngokuphelele

0x000c uint(32) Inani leziqinisekiso ezikhethwayo

Kangaki "ukufakwa okukhethwayo" okukhona.

Ukuhamba

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(32) Unknown 1

Ulwazi olungaziwa

0x0004 uint(32) Ibhokisi Elimnyama: Izinkomba

Kuchaza ukuqala kwesobunxele (ngama-pixel) kwe Bounding Box.

0x0008 uint(32) Ibhokisi Elilinganiselwe: Phezulu

Inikeza i-Bounding Box phezulu (ngama-pixel).

0x000c uint(32) Ibokhwe: Ububanzi

Ikhombisa ububanzi (ku-pixel) be Bounding Box.

0x0010 uint(32) Ibhokisi elibandayo: Ukuphakama

Ikhomba ukuphakama (ngamaphikseli) kwe- Bounding Box.

0x0014 uint(32) Offset: X

Ikhombisa indawo ephakathi ye-animation ngokuhamba ngokuqondile

0x0018 uint(32) Offset: Y

Ikhombisa iphuzu eliphakathi kwe-anime eliphakeme

0x001c uint(32) Unknown 2

Ulwazi olungaziwa

0x0020 uint(32) Inani lemiqondo

Ikhombisa ukuthi zingaki izithombe zokuhlanganisa ezikulesi sithombe sokuhluza

0x0024 uint(32) Inani leWindows

Kukhomba ukuthi bangaki amawindi okufanele asetshenziswe lapho kudweba

Idatha yeqhuzu eliphezulu, leye-animation, ikakhulu iyidatha yokuphatha - Boundingbox ibonisa ama-coordinates okubeka uphawu emotweni/nemoto, nxa lokho kukhethwe futhi iphinde ibonise ukuthi iyiphi ingxenye okufanele ikhethwe.

Offset ikakhulu ichaza "iphuzu lokuqala"; iphuzu, elidinga ukuhunyushwa kuma-coordinates okudlala. Ungathi futhi ngokwentengiso: i-offset ibonisa lapha umsuka we-coordinates.

I-Windows ihluke, njengokwe-offset, ibe (ngokwe-Windows) 4 uint(32)-amanani, abeka isikhala esithile esivunyelwe ukusetshenziswa kuma-subframes. Ngaphandle kwe-Windows, uma kwenzelwe i-Bitmap, akufanele kudwetshwe.

Isikhala

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(8) Inani le-Subframe kanye ne-Toggle ye-Optional 1, 2

Le msebenzi uqukethe:

  • 0x7F (Bitmask): Inani lezi subframes ezisetshenziswe kulolu hlobo
  • 0x80: Ulwazi lokuthi ingabe Optional 1 kanye no-2 zikhona
0x0001 uint(8) Ungaziwa 1 kanye ne-Toggle ye-Optional 3, 4

Le msebenzi uqukethe:

  • 0x7F (Bitmask): Ayaziwa - Ngicabanga kakhulu ukuthi lokhu kubhekisela enanini le-Gameticks elidlula, kuze kube sekufikeni kwe-frame elandelayo
  • 0x80: Ulwazi lokuthi Ingabe Okukhethekile 3 no-4 kuyatholakala
0x0002 uint(8) Okukhethwa 1

Ingaziwa

0x0003 uint(8) Okwesibili okukhethwayo

Ingaziwa

0x0004 uint(8) Okwenza 3

Ingaziwa

0x0005 uint(8) Okukhethwa 4

Ingaziwa

iSubframe

I-Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF ubcharacter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
I-Offset Uhlobo lwedatha Igama leDatha Incazelo
0x0000 uint(16) Bitmap-Id

Khombisa ukuthi iyiphi i-Bitmap okufanele isetshenziswe kulesi Subframe

0x0002 uint(8) Unknown 1

Akukaziwa - kodwa ngicabanga kakhulu ukuthi lokhu kubhekisela kwi-Render-Priorität (Z-Layer).

0x0003 uint(8) Subframe-Id

Khombisa ukuthi sikhona kuphi ku-subframe

0x0004 sint(16) Ukukhishwa - Okuhamba eceleni

Ikhombisa ukuthi kuphi ngaphakathi kwe-Frame okufanele kubekwe khona i-Subframe, noma ukuthi kufanele kushintshwe ama-pixel angakanani ngokuqondile i-Bitmap.

0x0006 sint(16) Offset - I-Vertical

Khombisa ukuthi kuphi ngaphakathi kwefremu okufanele kufakwe khona i-subframe, noma ukuthi kufanele kushintshe kangakanani i-Bitmap ngaphezulu noma phansi ngamaphikseli.

Ngalokhu, singakwazi ukuhlela ama-frames athile, kanye nezithombe eziphelele ngokuhambisana, lapha kukhombisa njengomfanekiso owodwa wokuhamba, ukukhethwa kokuhamba okukhombisa i-index 500.

Ukuhamba 500

Animation 500 ikhombisa indlela i-Plymouth-Transporter, elayishwe ngensimbi ejwayelekile, ekhishwa ngayo. Le yinye ye-animation ezimbalwa ezisebenzisa ukusebenza kwe-Windowing.

Futhi ngakho-ke i-animation ephelele ingahlanganiswa.
Ngokudabukisayo, kusekhona inkinga ngethuluzi eliphezulu lokulayisha, njengoba ibhithi efanele ingasethwanga kulwazi lwe-grafikhi.

Nansi eminye imifanekiso emihle, ehlanzekile ye-sprites evela emidlalweni:

Ukuhlanganiswa kwe-Animation 500 kuboniswa

Animation 500 iphelele ihlanganisiwe

Ibhilidi yePlymouth

I-Eden Spaceport

I-Eden Medical Center

SCAT

I-Plymouth Spaceport

I-Easteregg:
USanta

I-Easteregg:
IDog kaDans

Umsebenzisi-Webhu

Manje sekukhona i-User-Interface yomdlalo, ebukeka njenge metal ebhakiwe.

Kepha futhi lapha kubonakala ukuthi Dynamix akufanele aphinde akhe iwheel; lapha akuphumeleli nje ukukhipha i-User32 ne-GDI32-APIs ezitholakala ku-Windows - ikakhulukazi, kuhlelwa futhi ukuphathwa kwezinsiza ze-User32.

Lokhu kungenziwa ngokwesibonelo ngezimoto ezifana nale etholwe ku Angus Johnson njengelungelo lokusebenzisa Resource Hacker, noma - uma ungathandi ukusebenzisa i-Wine ku-Linux / Mac OS - ngokusebenzisa i-wrestool etholakala ku-icoutils.

Igama Lefa Okuqukethwe
Outpost2.exe Contains only the game's icon, which shows the space station in front of New Terra
op2shres.dll Contains graphics for controls such as borders, buttons, radio buttons, and checkboxes, as well as dialog backgrounds, accompanying images for the story mission texts, and the main menu background graphic
out2res.dll Contains in-game window decorations, icons for regular and special metal, the loading screen, graphics for dialogues, as well as other cursor graphics, in addition to the animated ones in the game directory