Outpost 2 Формати на датотеки · bei.pm
Форматите на датотеки опишани на оваа страница се базирани на техничката анализа на интелектуалната сопственост на 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) | Магични Бајти | Содржи информации за тоа што може да се очекува во следниот блок податоци. Познати вредности:
|
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) | Знамиња? | Очигледно дава дополнителни информации за кодирањето на датотеката.
|
Обем Блок
Адреса | 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) | Верзија / Знамиња? | Ова може да се однесува на верзијата на форматот на датотеката; во сите датотеки што ги имам, овде стоеше вредноста |
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) | Знамиња |
Конечно, следуваат чистите пиксел податоци, од лево-горе по редови до десно-долу.
Вредноста на податоците кај графиките кои обично се во формат 8bpp-Bitmap одговара на индексот на бојата во палетата на бои.
Играчката механика ги црта плочките *веројатно* на побарувачка.
Ова изгледа, меѓу другото, да се должи на циклусот на денот и ноќта, кој има 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) | Знамиња | Веројатно, како и обично, знамиња. Сепак, не ми се познати никакви знамиња; бидејќи сите познати вредности соодветствуваат на |
За што точно значи 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) | Знамиња | Веројатно, како и обично, флагови. Сепак, не ми се познати флагови; бидејќи сите вредности што ги познавам одговараат на |
Информациите за палетите се многу лесни за читање.
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) | Знамиња | Веројатно, како и обично, флагови. Сепак, не ми се познати флагови; бидејќи сите вредности што ги познавам одговараат на |
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) | Знамиња |
Податоците во секцијата ги содржат поединечните записи за палетите. 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) | Непознато - Знамиња? | Не е јасно што значи оваа вредност, бидејќи изгледа дека основно е |
За палетите, инаку, може да се каже само дека за палетите што се користат за анимации важат следните правила:
- Првата боја ЕВЕГА е секогаш транспарентна, без оглед на тоа каква вредност е наведена таму.
-
Записите на палетата 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) | Тип | Означува видот на сликата. Очигледно, станува збор за битна маска:
|
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 нивоа:
-
Анимација
Анимацијата е највисоката инстанца; таа претставува анимација на единица, зграда или 'партилска анимација' (удар на комета, време, експлозија) во одредена почетна позиција. -
Фрејм
Фрејмот е едно единствено слика во рамките на анимацијата. Анимацијата може да содржи еден или повеќе фрејмови. -
Субфрејм
Субфрејмот е информација дека одреден битмап треба да се нацрта на одредена позиција на фрејмот под одредени критериуми. Еден фрејм може да содржи еден или повеќе субфрејмови.
Потоа следат директно индивидуалните дефиниции на анимациите.
Адреса | 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-ID | Посочете која битмап да се користи за овој подрамка |
0x0002 | uint(8) | Непознат 1 | Не е познато - но силно сум сомнева, дека станува збор за приоритет на рендерирање (Z-слој). |
0x0003 | uint(8) | Субрамка-ИД | Покажува во кој субфрејм се наоѓаме |
0x0004 | sint(16) | Отстапување - Хоризонтално | Наведете каде во рамката треба да се постави потрамката, односно за колку пиксели треба да се помести битмапот хоризонтално. |
0x0006 | sint(16) | Офсет - Вертикален | Укажува каде внатре во рамката треба да биде поставен подрамката, односно за колку пиксели треба вертикално да се помести битмапот |
На тој начин можеме да составиме поединечни фрејмови, како и целосни анимации, тука ќе покажеме на пример на една покомплексна анимација, анимацијата со индексот 500.
Анимација 500
Анимација 500 прикажува како се празни Plymouth-товарникот, кој е натоварен со обично руда. Станува збор за една од малкуте анимации кои ја користат функционалноста на прозорците.
И така, целата анимација може да се состави.
За жал, постои уште еден проблем со горната товарна врата, бидејќи
соодветниот бит во информациите за типот на графиката не е поставен.
Еве уште неколку, прекрасно анимирани спрајтови од играта:
Кориснички интерфејс
Сега останува уште корисничкиот интерфејс на играта, кој е во избрусен метал-изглед.
Но и тука е видливо дека 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 | Содржи декорација на прозорците во играта, икони за вообичаен и специјален метал, екран за вчитување, графики за дијалози, како и дополнителни графики за курсори, покрај анимираните во директориумот на играта |