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

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

Форматите на датотеки опишани на оваа страница се базирани на техничката анализа на интелектуалната сопственост на Dynamix, Inc. и Sierra Entertainment.
Интелектуалната сопственост денес е дел од Activision Publishing, Inc. / Activision Blizzard, Inc. и моментално е во сопственост на Microsoft Corp..

Информациите се собрани преку обратен инжинеринг и анализа на податоци со цел архивирање и интероперабилност со историски податоци.
Не се користени никакви сопствени или доверливи спецификации.

Играчката може моментално да се купи како преземање на gog.com.

Уметничко дело од играта

Следната серија на статии документира моите сознанија за форматите на податоците во играта во реално време "Outpost 2: Divided Destiny", која беше објавена од Sierra во 1997 година и развиена од 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, форматот познава само фајлови - без папки. Веројатно би можеле да се симулираат преку соодветни имиња на фајлови.

Едно Volume се состои од Volume-Header и неколку Volume блокови, кои одговараат на конкретните фајлови.

"Volumes" се фајловите со завршеток '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)[] Листа на имиња на фајлови

Ова е список на имиња на датотеки завршен со 0-бајт, кој - барем во овој дел од податоците - очекува само ASCII знаци.

Не е потребно при парсирањето на податоците поопширно да се анализира овој блок на податоци, бидејќи во информациите за волумените директно се референцираат офсетите на имињата на датотеките.

Во Volume Strings се работи за листата на имиња на датотеки што се вклучени во волуменот.

Информации за волумен

Адреса 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 = Табела за распределба на фајлови)

Бројот на фајлови се добива од големината на блокот поделена со должината на записите во директориумот - 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 е поставен ако датотеката е компресирана. Очигледно се користи Хаффманов дрво.
  • 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) Знамиња

Тиловите се специфичен формат на битмап графика за Outpost-2. Тие се протегаат преку 13 сетови на тилови, наречени "воду" (well0000.bmp до well0012.bmp), кои се наоѓаат во обемот maps.vol.

При тоа, сетовите на тилови / Води содржат следново:

Име на датотека Содржина
well0000.bmp Графика големина 32x32px, синја - идеална за тестирање на сопствениот image-loader
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) Знамиња

Конечно, следуваат чистите пиксел податоци, од лево-горе по редови до десно-долу.
Вредноста на податоците кај графиките кои обично се во формат 8bpp-Bitmap одговара на индексот на бојата во палетата на бои.

Pиксел податоците започнуваат од горе лево и завршуваат долу десно.

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

За што точно значи PRT не ми е познато; возможно е, на пример, 'Табела на палети и ресурси' - бидејќи оваа датотека - може да се најде како op2_art.prt во maps.vol - е таква, односно тоа добро би ја опишало функцијата.

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

Секцијата CPAL (веројатно значи контејнер на палети) опфаќа само податоците за палетите, наведувајќи колку од секоја обично присутна палета од 1052 байта постојат.

Подавањето на 1052 байта не се смета за обврзувачко, бидејќи форматот на палетите потенцијално предвидува различни големини на палети. Тоа важи само за податоците со кои се испорачува Outpost 2.

По листите на палети веднаш, без воведна хедер, следи листата на битмапи; исто така веднаш следат и листите на анимации.
Двете се воведуваат со uint(32) (или повторно uint24+uint8 флагови?) кој ја содржи бројот на записи.

Палети

Адреса 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).

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

Заглавие на палети

Адреса 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) Знамиња

Податоците во секцијата ги содржат поединечните записи за палетите. Bројот на записи за палетите произлегува од должината на блокот / 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.

За палетите, инаку, може да се каже само дека за палетите што се користат за анимации важат следните правила:

  • Првата боја ЕВЕГА е секогаш транспарентна, без оглед на тоа каква вредност е наведена таму.
  • Записите на палетата 1-24 се сметаат за боја на играч во палетите 1-8.
    Каде точно доаѓаат боите, освен од играч 1, ми е непознато.
    Сметам дека преостанатите бои се тврдо кодирани.

Референца за палети

Битмапи

Адреса 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-датотеката треба да се користи

Структурата на податоците од PRT-файлот укажува на тоа како се изградени BITMAP-ите користени за спритовите. Овие BITMAP-и служат како единствена компонента, од која неколку се собираат во анимациска рамка на спритот.

Конкретните сликарски податоци се наоѓаат во op2_art.BMP во директориумот на играта.
Зошто овој битмап-фајл има (претежно точен) RIFF битмап хедер, не е јасно. Веројатно Outpost 2 користи системски API за вчитување на графики, применувајќи го овој хедер времено и променувајќи ги соодветните, варијабилни полиња.

Пикселските податоци се наоѓаат во BMP-фајлот на позиција Офсет + uint32-Офсет, кој може да се најде во BMP-фајлот на адреса 0x000A (RIFF битмап податоци офсет), и повторно одговара на редоследот на редовите од горе лево надесно.

Монохроматски 1bpp графики може да се нацртаат така, што бојата 0 е целосна транспарентност, а бојата 1 е полупрозирна црна/сива, бидејќи монохроматските графики обично се користат за сенки на возила и згради во анимациите.

На тој начин може да се состават многу графики.

Заштитен станбен модул (Плимут)

Анимации

Сега преминуваме кон кралската класа на дисциплините во форматите на податоци на 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-ID

Посочете која битмап да се користи за овој подрамка

0x0002 uint(8) Непознат 1

Не е познато - но силно сум сомнева, дека станува збор за приоритет на рендерирање (Z-слој).

0x0003 uint(8) Субрамка-ИД

Покажува во кој субфрејм се наоѓаме

0x0004 sint(16) Отстапување - Хоризонтално

Наведете каде во рамката треба да се постави потрамката, односно за колку пиксели треба да се помести битмапот хоризонтално.

0x0006 sint(16) Офсет - Вертикален

Укажува каде внатре во рамката треба да биде поставен подрамката, односно за колку пиксели треба вертикално да се помести битмапот

На тој начин можеме да составиме поединечни фрејмови, како и целосни анимации, тука ќе покажеме на пример на една покомплексна анимација, анимацијата со индексот 500.

Анимација 500

Анимација 500 прикажува како се празни Plymouth-товарникот, кој е натоварен со обично руда. Станува збор за една од малкуте анимации кои ја користат функционалноста на прозорците.

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

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

Рендерирање на анимација 500 илустрирано

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

Plymouth Зграда-Фабрика

Eden Вселенски Порт

Eden Медицински Центар

SCAT

Plymouth Вселенски Порт

Easteregg:
Дедо Мраз

Easteregg:
Танцувачко куче

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

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

Но и тука е видливо дека Dynamix не морало да го измислуваат точката одново; тука не се користат само простите User32 и GDI32 API-и обезбедени од Windows - особено се користи и управувањето со ресурси од User32.

Овие можат да се извлечат, на пример, преку програми како што е Resource Hacker, развиен од Angus Johnson како freeware, или - ако не сакате да користите Wine под Linux / Mac OS - со помош на wrestool вклучен во icoutils.

Име на датотека Содржина
Outpost2.exe Содржи само иконата на играта, која го прикажува вселенскиот центар пред New Terra
op2shres.dll Содржи графики за контроли како рамки, копчиња, радио-копчиња и чекбоксови, исто така дијалошки позадини, слики за приказ на приказните мисии и позадинска графика за главното мени
out2res.dll Содржи декорација на прозорците во играта, икони за вообичаен и специјален метал, екран за вчитување, графики за дијалози, како и дополнителни графики за курсори, покрај анимираните во директориумот на играта