Outpost 2 формати датотека · bei.pm

Овај текст је аутоматски преведен помоћу OpenAI GPT-4o Mini.

Формати датотека описани на овој страници засновани су на техничкој анализи интелектуалне својине 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) Магични бајтови

Садржи информације о томе шта се може очекивати у следећем блоку података.

Познате вредности:

  • 0x204C4F56 ('VOL '):
    Запремина
  • 0x686C6F76 ('VOLH'):
    Хедер запремине
  • 0x736C6F76 ('VOLS'):
    Стрингови запремине
  • 0x696C6F76 ('VOLI'):
    Информације о запремини
  • 0x4B4C4256 ('BLCK'):
    Блок запремине
  • 0x504D4250 ('PBMP'):
    Графички подаци
  • 0x4C415050 ('PPAL'):
    Боја палета
  • 0x4C415043 ('CPAL'):
    Контејнер бојних палета
  • 0x64616568 ('head'):
    Хедер
  • 0x61746164 ('data'):
    Корисни подаци
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) Заставе?

Очигледно даје додатне информације о кодујењу датотека.

  • 0x03 је постављен када је датотека компримована. Очигледно се овде користи Huffman-ово дрво.
  • 0x80 изгледа да је увек постављен.

Запремински блок

Адреса 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) Верзија / Заставе?

Ово би могло бити означавање верзије формата датотеке; у свим датотекама које имам, стоји вредност 0x02

0x000c uint(32) Ширина (Хоризонтална резолуција)

Наведите колико је широка слика (у пикселима).

За све бунаре у Outpost 2 овде ће вредност бити 0x20 односно 32.

0x0010 uint(32) Висина (Вертикална резолуција)

Указује колико је висока слика (у пикселима).

За све бунаре из Outpost 2 овде ће се очекивати вредност 0x20 односно 32.

0x0014 uint(32) Дубина боје?

Значај ове вредности је непознат.

Пошто у свим провереним датотекама садржи вредност 8, могло би се радити о информацији о дубини боје.

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.

Piksel podaci počinju u gornjem levom uglu i završavaju u donjem desnom uglu.

Играчка енджин црта Тиле *вероватно* на захтев.
Ово изгледа да је, између осталог, последица циклуса дана и ноћи, који познаје 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) Заставе

Вероватно, као и обично, флагови.

Међутим, нису ми познати никакви флагови; пошто сви мени познати вредности одговарају 0x00, могло би бити и да је број палета једноставно uint(32).

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) Заставе

Вероватно, као и обично, флаге.

Међутим, нису ми познате никакве флаге; пошто сви мени познати вредности одговарају 0x00, такође би потенцијално могло бити да је број палета једноставно uint(32).

Информације о палетама су веома једноставне за читање.
Састоје се од хедера и сегмента података.

Заглавље палета

Адреса 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) Заставе

Вероватно, као и обично, флаге.

Међутим, нису ми познате никакве флаге; пошто сви мени познати вредности одговарају 0x00, такође би потенцијално могло бити да је број палета једноставно uint(32).

0x0008 uint(32) Верзија формата палета?

Вероватно дефинише коју верзију формата палета палета следи.

Све Outpost2 палете чине се да имају верзију 0x01.

Подаци о палетама

Адреса 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) Непознато - Заставе?

Није јасно шта овај вредност значи, пошто је она изгледа основно 0x04.

Š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.

Referenca paleta

Битмапови

Адреса 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) Тип

Указује на тип слике. Чини се да је у питању битмаска:

  • 0x04 је постављен ако се ради о 1bpp графици.
  • 0x40 је постављен ако се ради о графици која мора да имплементира прозоре.
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.

Zaštićeni stambeni modul (Plymouth)

Анимације

Сада прелазимо на краљевску класу дисциплина унутар Outpost 2 формата података:
Анимацијама.

Листе анимација почињу глобалним заглављем, које служи углавном за верификацију података. Након тога следе конкретне дефиниције анимација, које се деле на 3 нивоа:

  1. Анимација
    Анимација је највиша инстанца; она представља анимацију јединице, зграде или 'честичне анимације' (удар комете, време, експлозија) у одређеној почетној позицији.
  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

Ова вредност садржи:

  • 0x7F (Битмаска): Број подфрејмова који се користе у овом фрејму
  • 0x80: Информацију о томе да ли су Опциони 1 и 2 присутни
0x0001 uint(8) Непознат 1 и прекидач за Опционално 3, 4

Ова вредност садржи:

  • 0x7F (Битна маска): Непознато - Сматрам да се ради о броју гаме тикова који пролазе пре него што се прикаже следећи фрејм
  • 0x80: Информација о томе да ли су Опционално 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 транспортера, који је оптерећен обичним рудом, истовара. Ово је једна од ретких анимација која користи функционалност прозора.

И тако се комплетна анимација може саставити.
Нажалост, још увек постоји проблем са горњим отвором за учитавање, јер овде одговарајући бит у информацијама о графичком типу није постављен.

Ево још неколико, прелепо анимираних спрајтова из игре:

Renderovanje анимације 500 илуструје

Анимација 500 завршена и састављена

Plymouth зграда-фабрика

Eden свемирска лука

Eden медицински центар

SCAT

Plymouth свемирска лука

Easteregg:
Деда Мраз

Easteregg:
Dans Dog

Кориснички интерфејс

Сада недостаје само кориснички интерфејс игре, који је у четканом металном стилу.

Али и овде је видљиво да 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 прозора, иконе за обично и специјално метале, учитавања екрана, графике за дијалоге, као и додатне графике курсора, поред анимираних у директоријуму игре