Outpost 2 формати датотека · bei.pm
Формати датотека описани на овој страници засновани су на техничкој анализи интелектуалне својине Dynamix, Inc. и Sierra Entertainment.
Интелектуална својина је данас део Activision Publishing, Inc.- / Activision Blizzard, Inc.- имовине и тренутно је у власништву Microsoft Corp..
Информације су прикупљене помоћу Реверзног инжењеринга и анализа података у сврху архивирања и интероперабилности са историјским подацима.
Нису коришћене никакве власничке или поверљиве спецификације.
Iгра се тренутно може купити као преузимање на gog.com.
Следећа серија чланака документује моја сазнања о формату података у реално-временској стратегији "Outpost 2: Divided Destiny", која је 1997. године објављена од стране Sierra, а развила је Dynamix.
Од 01. новембра 2015. до 14. новембра 2015. године, углавном сам се бавио анализом података игре - и шта се с њима ради.
Према информацијама које сам до сада могао да добијем, Dynamix - као и многе комерцијалне компаније - није развио неке формате података специјално за Outpost 2, већ их је користио и у другим развојима, као што је серија Mechwarrior (модификовани).
Без обзира на то, може се такође приметити да иновацијска моћ формата података практично има ограничења и често се ослања на дуго постојеће концепте из уобичајених формата као што су JFIF и RIFF.
За тумачење табела и формата података доступне су додатне информације на Шта је шта?.
Овде наведени подаци се генерално разумеју као Little Endian.
На крају, може се рећи да је реверзно инжењерство било веома забавно, иако није потпуно.
Наравно, могу само да препоручим да играте саму игру, јер нуди интересантне механике игре.
Увод
Подаци које користи Outpost 2 имају структуру која подсећа на JFIF / PNG - поједини подаци блокови увек имају 8-бајтни хедер. Зато ћу изоставити документацију појединачних хедера на одговарајућим специфичним местима и документацију ћу спровести само за одступања.
Формат је увек следећи; стварни подаци су затим уграђени у њега:
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | Садржи информације о томе шта се може очекивати у следећем блоку података. Познате вредности:
|
0x0004 | uint(24) | Дужина блока | Садржи информацију о томе колико је велики (у бајтовима) следећи блок података. При томе се мисли на чисте корисничке податке - 8 бајтова заглавља није укључено. |
0x0007 | uint(8) | Заставе? | Није познато чему тачно служи овај блок. У волуменима је овај вредност често 0x80, а у другим фајловима често 0x00. То указује да се ради о скупу флага. |
Запремине
Запремине су контејнери података за игру, слично архивском формату као што је, на пример, Tarball. Најмање у Outpost 2, формат познаје само датотеке - ниједан фасцикл. Могуće је да су ови фасцикли могли бити симулирани одговарајућим именима датотека.
Запремина се састоји од заглавља запремине и више блока запремине, који одговарају конкретним датотекама.
"Запремине" су датотеке са екстензијом 'vol'
у директоријуму игре.
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 4f | 4c | 20 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | O | L | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Наслов запремине
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 68 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | h | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Хедер волумена не садржи никакве корисне податке.
Служи само као контејнер.
Као први податак у хедеру волумена налазе се волумен стрингови; затим следе информације о волумену.
Запремински низови
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 73 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | s | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе | |
0x0008 | uint(32) | Дужина терета | Наводите колико бајтова од следећих података је заиста корисно. Остали преостали подаци са листе Volume-Strings очигледно су за класификацију као отпад. У датотекама са каснијим датумом ови 'преостали подаци' су 0x00, што може указивати на недостатке у алатима током развоја игре, односно, да се тек касно један програмер бавио исправном иницијализацијом бафера, јер нема утицаја на игру да ли су подаци иницијализовани или не. |
0x000c | uint(8)[] | Листа имена датотека | Ово је листа имена датотека терминрана нултим байтом, која - бар у овом делу података - очекује само ASCII знакове. Није потребно детаљније анализирати овај блок података током парсирања, јер се у информацијама о волумену директно реферишу офсети имена датотека. |
Тиме се ради о листи имена фајлова који се налазе унутар волумена.
Информације о томовима
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Информације о обиму садрже детаљније информације о датотекама. То је на неки начин слично уносу у FAT директоријум (FAT = Табела расподеле датотека)
Bрој датотека добија се делјењем величине блока са дужином уноса у директоријум - 14 бајтова.
Појединачни уноси у директоријуму имају следећу структуру:
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Име датотеке - офсет | Означава на којем офсету (!) унутар листе имена датотека (Volume-Strings) се налази име датотеке. Оно се односи на почетак блока корисних података. |
0x0004 | uint(32) | Датотечни офсет | Показује на којем офсету унутар целокупне Volume датотеке се налази датотека. |
0x0008 | uint(32) | Величина датотеке | Показује колика је величина датотеке у бајтовима. |
0x000c | uint(16) | Заставе? | Очигледно даје додатне информације о кодујењу датотека.
|
Запремински блок
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 42 | 4c | 48 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | B | L | H | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Објекат волумена је контејнер који прима фајлове. Он садржи само једном - због формата блока - редундантно величину фајла, а затим следе одмах корисни подаци.
Плочице
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 50 | 42 | 4d | 50 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | P | B | M | P | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Тилови се специфичан формат Bitmap графике за игру Outpost-2.
Обухватају 13 Tileseta, названих "вели" (well0000.bmp
до well0012.bmp
),
који се налазе унутар записа maps.vol.
Тилсети / Вели садрже следеће:
Име датотеке | Садржај |
---|---|
well0000.bmp | Графика величине 32x32px, плаве боје - идеална за тестирање да ли ваш учитавач слика функционише |
well0001.bmp | Садржи светлу камену површину, планинске ланце на светлом камену и безброј варијанти кратера на светлом камену |
well0002.bmp | Садржи 'Doodads' од светлог камена - елементи који се могу поставити на светлом камену ради разређивања (или свесно као структура, као што су зидови), укључујући и вегетацију |
well0003.bmp | Садржи кору сличну структуру на светлом камену |
well0004.bmp | Садржи тамно камење, планинске ланце на тамном камену и безброј варијанти кратера на тамном камену |
well0005.bmp | Садржи 'Doodads' од тамног камена - елементи који се могу поставити на тамном камену ради разређивања (или свесно као структура, као што су зидови) |
well0006.bmp | Садржи кору сличну структуру на тамном камену, као и прелазе између светлог и тамног камена |
well0007.bmp | Садржи лаву укључујући по 4-5 фрејмова анимације |
well0008.bmp | Садржи песак и безброј варијанти кратера у песку |
well0009.bmp | Садржи 'Doodads' од песка - елементи који се могу поставити на песку ради разређивања (или свесно као структура, као што су зидови) |
well0010.bmp | Садржи по 48 прелаза између песка и светлог и тамног камена |
well0011.bmp | Садржи поларне капе мапе, са тамним каменом као подлогом |
well0012.bmp | Садржи поларне капе мапе, са светлим каменом као подлогом |
Препоручује се да се плочице не рендерују унапред ради кеширања, јер подаци за циклус дана/ноћи још увек морају да се обраде - и било би изузетно много података.
Плочице су 8bpp графике са индексираном палетом резолуције 32x32 пиксела, које су распоређене једна испод друге. У тако добијеном сету плочица могу бити значајно више
Главни контејнер се састоји од 2 секције: head
и data
.
Наслов плочица
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 68 | 65 | 61 | 64 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | h | e | a | d | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе | |
0x0008 | uint(32) | Верзија / Заставе? | Ово би могло бити означавање верзије формата датотеке; у свим датотекама које имам, стоји вредност |
0x000c | uint(32) | Ширина (Хоризонтална резолуција) | Наведите колико је широка слика (у пикселима). За све бунаре у Outpost 2 овде ће вредност бити |
0x0010 | uint(32) | Висина (Вертикална резолуција) | Указује колико је висока слика (у пикселима). За све бунаре из Outpost 2 овде ће се очекивати вредност |
0x0014 | uint(32) | Дубина боје? | Значај ове вредности је непознат. Пошто у свим провереним датотекама садржи вредност |
0x0018 | uint(32) | Боја дубина 2? | Значај ове вредности је непознат. Могуће је да се ради о 'целјној' дубини боје. |
Након ових података, следи још један фајл палете у стандардизованом RIFF формату. Тачна спецификација се налази - пошто се палете појављују и на другим местима - под Палете.
Подаци о плочицама
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 64 | 61 | 74 | 61 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | d | a | t | a | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
konačno sledi čista piksel-data, redom od leva prema desnom donjem uglu.
Vrednost podataka kod grafika koje su obično u formatu 8bpp-bitmape odgovara indeksu boje u paleti boja.
Играчка енджин црта Тиле *вероватно* на захтев.
Ово изгледа да је, између осталог, последица циклуса дана и ноћи, који познаје 32 нијансе појединачних Тила. Очигледно се од вредности осветљености 'мало' одузима. Тачне вредности још нису утврђене, радићу на основи израчуна
v *= (daylight / 48) + 0.25;
са HSV подацима пиксела, при чему је daylight вредност од 0-31, а v вредност између 0-1. Поред тога, треба имати у виду да на мапи постоји и руб од 16 Тила с леве и десне стране (који служи за невидљиво појављивање јединица).
Додатно, циклус дана и ноћи изгледа да у сваком игрицном циклусу ажурира само један стубац мапе.
Убрзани циклус дана и ноћи изгледа на следећи начин:
ПРТ
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 43 | 50 | 41 | 4c | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | C | P | A | L | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина палете | Уместо стандардног формата блока, указује број палета које се налазе у овом фајлу - а не дужину блока у бајтовима. |
0x0007 | uint(8) | Заставе | Вероватно, као и обично, флагови. Међутим, нису ми познати никакви флагови; пошто сви мени познати вредности одговарају |
Za šta tačno PRT
stoji, nije mi poznato; moguće je, na primer, da znači 'Tabela paleta i resursa' - pošto se radi o ovom fajlu - koji se nalazi kao op2_art.prt u maps.vol - koji zapravo predstavlja takvu tabelu, odnosno to bi dobro opisalo funkciju.
Ovaj fajl sadrži listu paleta, tabelu svih korišćenih bitmapa, sve definicije animacija i još niz nepoznatih podataka. Slijedi dosadašnji format kontejnera labavo, pošto ne svi podaci prate ovu šemu.
CPAL
sekcija (verovatno označava kontejner paleta) obuhvata samo podatke o paletama, navodeći koliko od uobičajenih 1052 bajta velikih 8-bitnih paleta je prisutno.
Informacija o 1052 bajta se ne smatra obaveznom, pošto format paleta potencijalno predviđa različite veličine paleta. Ona važi samo za podatke koji se isporučuju sa Outpost 2.
Posle liste paleta odmah i bez uvodnog naslova sledi lista bitmapa; odmah nakon toga slede liste animacija.
Obe liste se započinju sa uint(32) (ili ponovo uint24+uint8 oznake?) koji sadrži broj podataka.
Палете
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 50 | 50 | 41 | 4c | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | P | P | A | L | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина палете | Уместо стандардног блок формата, наводи број палета које се могу наћи у овом фајлу - а не дужину блока у байтовима. |
0x0007 | uint(8) | Заставе | Вероватно, као и обично, флаге. Међутим, нису ми познате никакве флаге; пошто сви мени познати вредности одговарају |
Информације о палетама су веома једноставне за читање.
Састоје се од хедера и сегмента података.
Заглавље палета
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 68 | 65 | 61 | 64 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | h | e | a | d | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина палете | Уместо стандардног блок формата, наводи број палета које се могу наћи у овом фајлу - а не дужину блока у байтовима. |
0x0007 | uint(8) | Заставе | Вероватно, као и обично, флаге. Међутим, нису ми познате никакве флаге; пошто сви мени познати вредности одговарају |
0x0008 | uint(32) | Верзија формата палета? | Вероватно дефинише коју верзију формата палета палета следи. Све Outpost2 палете чине се да имају верзију |
Подаци о палетама
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 64 | 61 | 74 | 61 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | d | a | t | a | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Магични бајтови | |
0x0004 | uint(24) | Дужина блока | |
0x0007 | uint(8) | Заставе |
Секција података обухвата појединачне уносе палета. Број уноса палета добија се делјењем дужине блока / 4.
Појединачни уноси имају следећу, једноставну структуру;
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | 04 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(8) | Црвена компонента | Наводи проценат црвене боје |
0x0001 | uint(8) | Зелена компонента | Наводи зелени део боје |
0x0002 | uint(8) | Плава компонента | Дава проценат плаве боје |
0x0003 | uint(8) | Непознато - Заставе? | Није јасно шта овај вредност значи, пошто је она изгледа основно |
Što se tiče paleta, može se reći da za palete koje se koriste za animacije važe sledeća pravila:
- prva boja je UVEK transparentna, bez obzira na vrednost koja je navedena.
-
Unosi u paletama 1-24 se u paletama 1-8 smatraju bojama igrača.
Odakle tačno dolaze boje osim od igrača 1 nije mi jasno.
Sumnjam da su preostale boje hardkodirane.
Битмапови
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Управљена ширина | Дефинише ширину редова података у пикселима у бајтовима - пошто су ови поравнати на 4-бајтне границе. Тако је брзо могуће приступити одређеном реду слике. Зашто се ова вредност чува одвојено, иако би могла бити израчуната, није јасно. |
0x0004 | uint(32) | Оффсет | Дефинише одступање првог реда у битмапу |
0x0008 | uint(32) | Висина | Означава висину слике у пикселима |
0x000c | uint(32) | Ширина | Дефинише ширину слике у пикселима |
0x0010 | uint(16) | Тип | Указује на тип слике. Чини се да је у питању битмаска:
|
0x0012 | uint(16) | Палета | Дефинише која палета из PRT фајла треба да се користи |
Ova podataka struktura PRT datoteke pokazuje kako su bitmapi koji se koriste za sprite-ove strukturirani. Ove bitmape služe kao pojedinačni delovi, od kojih se više sastavlja jedan animacijski okvir sprite-a.
Konkretniji podaci o slici nalaze se u
op2_art.BMP u direktorijumu igre.
Zašto ova bitmap datoteka ima (pretežno ispravan) RIFF bitmap header,
nije jasno. Verovatno Outpost 2 koristi sistemske API-je za učitavanje grafike,
uzimajući ovaj header privremeno i prepisujući odgovarajuća, varijabilna polja.
Piksel podaci se nalaze u BMP datoteci na poziciji Offset + uint32-Offset, koji se u BMP datoteci može naći na adresi 0x000A (RIFF-Bitmap podaci offset), i ponovo odgovaraju rednom rasporedu od gornjeg levog ka donjem desnom.
Monohromatske 1bpp grafike mogu se nacrtati tako da boja 0 predstavlja potpunu transparentnost, dok boja 1 je polutransparentna crna/siva, budući da se monohromatske grafike obično koriste za senke vozila i zgrada u animacijama.
Tako se može sastaviti mnogo grafika.
Анимације
Сада прелазимо на краљевску класу дисциплина унутар Outpost 2 формата података:
Анимацијама.
Листе анимација почињу глобалним заглављем, које служи углавном за верификацију података. Након тога следе конкретне дефиниције анимација, које се деле на 3 нивоа:
-
Анимација
Анимација је највиша инстанца; она представља анимацију јединице, зграде или 'честичне анимације' (удар комете, време, експлозија) у одређеној почетној позицији. -
Фрејм
Фрејм је један слика унутар анимације. Анимација може да садржи један или више фрејмова. -
Субфрејм
Субфрејм је информација о томе да одређена битмап треба да се нацрта на одређену позицију фрејма под одређеним критеријумима. Фрејм може да садржи један или више субфрејмова.
Након тога следе већ конкретне дефиниције анимација.
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Број анимација | Колико анимационих података има? |
0x0004 | uint(32) | Број фрејмова | Колико укупно фрејмова треба да буде присутно |
0x0008 | uint(32) | Број подоквира | Колико укупно треба да буде подоквира |
0x000c | uint(32) | Број опционалних уноса | Колико "опционалних записа" постоји. |
Анимација
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0020 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(32) | Непознат 1 | Непознате информације |
0x0004 | uint(32) | Ограничена кутија: Линкови | Дефинише леви почетак (у пикселима) Bounding Box. |
0x0008 | uint(32) | Ограничена кутија: Горња | Дефинише горњи почетак (у пикселима) Bounding Box. |
0x000c | uint(32) | Ограничена кутија: Ширина | Наводи ширину (у пикселима) Bounding Box. |
0x0010 | uint(32) | Ограничена кутија: Висина | Наводи висину (у пикселима) Bounding Box. |
0x0014 | uint(32) | Отступ: X | Означава хоризонталну средину анимације |
0x0018 | uint(32) | Оффсет: Y | Указује на вертикалну средину анимације |
0x001c | uint(32) | Непознато 2 | Непозната информација |
0x0020 | uint(32) | Број фрејмова | Наведите колико анимационих фрејмова садржи ова анимација |
0x0024 | uint(32) | Број прозора | Наводи колико прозора треба применити приликом цртања |
Подаци највишег слоја, анимације, су пре свега управни подаци - Boundingbox означава координате ознаке око возила/зграде, када је исто изабрано и такође указује који простор треба да буде кликабилан.
Офсет пре свега одређује "нулту тачку"; тачку која се мора одузети или додати на интерне координате игре. Може се рећи и математички: офсет овде означава координатно порекло.
Када су у питању прозори, они су, као и офсет, представљени са по 4 uint(32) вредности које указују на подручје које је доступно за поједине подфреймове. Изван прозора не сме да се слика, осим ако то није предвиђено за битмап.
Оквир
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(8) | Број подоквира и прекидач за Опционално 1, 2 | Ова вредност садржи:
|
0x0001 | uint(8) | Непознат 1 и прекидач за Опционално 3, 4 | Ова вредност садржи:
|
0x0002 | uint(8) | Опционално 1 | Непознато |
0x0003 | uint(8) | Опционално 2 | Непознато |
0x0004 | uint(8) | Опциони 3 | Непознато |
0x0005 | uint(8) | Опционал 4 | Непознато |
Подоквир
Адреса | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | симболи | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Позиција | Тип података | Ознака | Објашњење |
---|---|---|---|
0x0000 | uint(16) | Bitmap-ИД | Наводи која битмап слика треба да се користи за овај подфрейм |
0x0002 | uint(8) | Непознат 1 | Није познато - међутим, снажно сумњам да се ради о рендер-приоритету (Z-слоју). |
0x0003 | uint(8) | Подоквира-ИД | Наведите у којем подоквиру се налазимо |
0x0004 | sint(16) | Офсет - Хоризонтално | Показује где унутар фрејма треба да буде постављен подфрејм, односно колико пиксела треба да буде померена битмахorizontalно. |
0x0006 | sint(16) | Офсет - Вертикално | Наведите где унутар фрејма треба да буде постављен подсистем, односно колико пиксела треба да буде вертикално померена битма |
Тако можемо сада саставити појединачне оквире, као и комплетне анимације, овде ћемо то демонстрирати на пример једне сложеније анимације, анимације са индексом 500
Анимација 500
Анимација 500 показује како се Plymouth транспортера, који је оптерећен обичним рудом, истовара. Ово је једна од ретких анимација која користи функционалност прозора.
И тако се комплетна анимација може саставити.
Нажалост, још увек постоји проблем са горњим отвором за учитавање, јер овде одговарајући бит у информацијама о графичком типу није постављен.
Ево још неколико, прелепо анимираних спрајтова из игре:
Кориснички интерфејс
Сада недостаје само кориснички интерфејс игре, који је у четканом металном стилу.
Али и овде је видљиво да Dynamix није морао да изнова пронађе точак; овде се не користе само једноставно API-ји User32 и GDI32 које пружа Windows - посебно се користи и управљање ресурсима из User32.
Они се, на пример, могу екстраховати помоћу програма као што је Resource Hacker, који је развио Angus Johnson као бесплатни софтвер, или - ако се неко плаши употребе Wine-а под Linux-ом / Mac OS-ом - помоћу wrestool, који је укључен у icoutils.
Име датотеке | Садржај |
---|---|
Outpost2.exe | Садржи само икону игре, која приказује свемирску станицу испред New Terra |
op2shres.dll | Садржи графике за контроле као што су оквири, дугмићи, радио дугмићи и кућице за потврду, као и позадине за дијалоге, слике за текстове мисија и позадинску графику главног менија |
out2res.dll | Садржи декорацију ин-гамe прозора, иконе за обично и специјално метале, учитавања екрана, графике за дијалоге, као и додатне графике курсора, поред анимираних у директоријуму игре |