Outpost 2 файл форматтары · bei.pm
Осы бетте сипатталған файл форматтары Dynamix, Inc. және Sierra Entertainment компанияларының интеллектуалдық меншік техникалық анализіне негізделген.
Интеллектуалдық меншік қазіргі уақытта Activision Publishing, Inc. / Activision Blizzard, Inc. мүлкіне кіреді және қазіргі уақытта Microsoft Corp. компаниясының меншігінде.
Ақпараттар Reverse Engineering және Деректерді талдау арқылы архивтеу және тарихи деректермен өзара әрекеттесу мақсатында жиналған.
Патенттелген немесе құпия спецификациялар қолданылған жоқ.
Ойын қазіргі уақытта gog.com сайтында жүктеп алу үшін сатып алынуы мүмкін.
Келесі мақалалар топтамасы менің "Outpost 2: Divided Destiny" реалды уақыттағы стратегия ойынының деректер форматтары туралы алған білімдерімді құжаттайды. Бұл ойын 1997 жылы Sierra компаниясы тарапынан шығарылып, Dynamix тарапынан әзірленді.
Мен 2015 жылғы 1 қарашадан 2015 жылғы 14 қарашаға дейін негізінен ойын деректерін талдаумен, сондай-ақ олармен не істеу керек екендігімен айналыстым.
Менің жинаған ақпараттарыма сәйкес, Dynamix - көптеген коммерциялық компаниялар сияқты - кейбір деректер форматтарын арнайы "Outpost 2" үшін емес, сонымен қатар, мысалы, Mechwarrior сериясы секілді басқа жобаларда (өзгертілген түрде) пайдаланған.
Сонымен қатар, деректер форматтарының инновациялық әлеуеті шектеулі болып табылады және жиі JFIF және RIFF секілді жалпы форматтардан алынған ұзақ уақыт бойы бар концепцияларға негізделген.
Кестелер мен деректер форматтарын интерпретациялау үшін қосымша ақпараттар Не нәрсе? бөлімінде қол жетімді.
Мұнда көрсетілген деректер жалпы алғанда Little Endian ретінде түсінілуі керек.
Соңында, реверсивті инжиниринг жасау өте қызықты болды, тіпті ол толық емес болса да.
Әрине, мен ойынды өзіңіз ойнауға кеңес беремін, себебі ол қызықты ойын механизмдерін ұсынады.
Кіріспе
Outpost 2 пайдаланатын деректер форматтары JFIF / PNG-ге ұқсас құрылымға ие - әрбір деректер блогында 8 байттық заголовок бар. Сондықтан мен тиісті нақты жерлердегі заголовоктарды құжаттаудан аулақпын және тек ауытқуларды құжаттаймын.
Формат әрдайым мынадай; нақты пайдалану деректері соларға енгізілген:
Adr | 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-де бұл формат тек файлдарды таниды - папкалар жоқ. Дегенмен, оларды сәйкес файл атаулары арқылы имитациялауға болады.
Том томның тақырыбынан және нақты файлдарға сәйкес бірнеше том блоктарынан тұрады.
"Томдар" - ойын каталогындағы 'vol'
кеңейтімі бар файлдар.
Adr | 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) | Тулар |
Көлем тақырыбы
Adr | 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) | Тулар |
Көлемдік тақырып (Volume Header) ешқандай пайдалы деректерді қамтымайды.
Ол тек контейнер ретінде қызмет етеді.
Көлемдік тақырыпта бірінші деректер ретінде көлемдік жолдар (Volume Strings) болуы тиіс; одан кейін көлемдік ақпараттар келеді.
Көлемдік жолдар
Adr | 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) | Тулар |
Adr | 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) | Payload ұзындығы | Келесі деректердің қанша байты нақты пайдалы деректер екенін көрсетіңіз. Көлемдік жолдар тізімінің қалған деректері, анық, қоқыс ретінде есептеледі. Кейінгі күні бар файлдарда бұл 'қалған деректер' 0x00, бұл ойынның дамуы барысында құралдар жиынының кемшіліктеріне меңзеп, яғни, әзірлеушінің буферлердің дұрыс инициализациясына тек өте кеш көңіл аударғанын білдіреді, себебі деректердің инициализацияланғаны немесе жоқтығы ойынға әсер етпейді. |
0x000c | uint(8)[] | Файл атаулары тізімі | Бұл 0-байтпен аяқталатын файл атауларының тізімі, ол - кем дегенде, осы дерек компонентінде - тек ASCII таңбаларын күтеді. Деректерді парсинг кезінде бұл дерек блогын толығырақ талдаудың қажеті жоқ, өйткені том ақпараттарында файл атауларының офсеттерлері тікелей көрсетілген. |
Көлемдік жолдар - бұл көлемнің ішінде орналасқан файл атауларының тізімі.
Көлем Ақпараты
Adr | 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 байтқа бөлу арқылы анықталады.
Әрбір каталог жазбасының келесі құрылымы бар:
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | символ | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Орталық | Деректер түрі | Атауы | Түсініктеме |
---|---|---|---|
0x0000 | uint(32) | Файл атауының офсеті | Файл атаулары тізіміндегі (Volume-Strings) файл атауының қай орын (Offset!) орналасқанын көрсетеді. Бұл пайдалы деректер блогының басына қатысты. |
0x0004 | uint(32) | Файл-орны | Барлық көлем файлының ішінде файлдың қай оффсеттің орналасқанын көрсетеді. |
0x0008 | uint(32) | Файлдың өлшемі | Файлдың көлемі байтпен қанша екенін көрсетеді. |
0x000c | uint(16) | Тулар? | Файл кодтауы туралы қосымша ақпарат береді.
|
Көлем блогы
Adr | 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) | Тулар |
Көлемдік блок - бұл файлдарды сақтайтын контейнер. Ол тек блок форматының арқасында файлдың өлшемін қайталайды және содан кейін тікелей пайдаланушы мәліметтері келе жатыр.
Тақталар
Adr | 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 тайлсетте,
"well" деп аталатын (well0000.bmp
ден well0012.bmp
дейін),
maps.vol көлемінде орналасқан.
Тайлсеттер / Уэллдер мынадай мәліметтерді қамтиды:
Файл атауы | Мазмұны |
---|---|
well0000.bmp | 32x32 пиксель өлшеміндегі көк графика - өзіңіздің бейнелеріңізді жүктеушінің жұмыс істеп жатқанын тексеру үшін тамаша |
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 | Картаның полюс қақпақтарын, жарқыраған тастарды негіз ретінде қамтиды |
Дұрыс жүзеге асыру үшін плиткаларды алдын ала рендерлеудің орнына кэштеу үшін, күн/түн циклына арналған деректерді өңдеу қажет, сондықтан өте көп деректер пайда болады.
Плиткалар 32x32 пиксель шешімі бар индексирленген палитрамен 8bpp графикалары болып табылады, олар бір-бірінің үстіне орналастырылған. Мұндай плиткалар жиынтығында әлдеқайда көп
Негізгі контейнер 2 бөлімнен тұрады: head
және data
.
Плиткалар тақырыбы
Adr | 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-дегі барлық Wells-ке мұнда |
0x0010 | uint(32) | Биіктік (Тік шешім) | Сурет файлының биіктігін (пиксельмен) көрсетеді. Outpost 2-дегі барлық құдықтар үшін мұнда |
0x0014 | uint(32) | Түстің тереңдігі? | Бұл мәннің мағынасы белгісіз. Өйткені ол тексерілген барлық файлдарда |
0x0018 | uint(32) | Түс тереңдігі 2 ме? | Бұл мәннің мағынасы белгісіз. Мүмкін, бұл 'мақсат' түс тереңдігі болуы мүмкін. |
Осы мәліметтерден кейін стандартталған RIFF форматында палитра файлы беріледі. Нақты спецификация Палитралар бөлімінде, себебі палитралар басқа жерде де кездеседі.
Таспалардың деректері
Adr | 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-битмаптар түрінде берілетін графиктердегі деректердің мәні – түсті палитрадағы түстің индексі.
Ойын қозғалтқышы плиткаларды *мүмкін* сұраныс бойынша сызады.
Бұл, соның ішінде, 32 деңгейлі плиткалардың күн мен түн циклінің әсерінен болуы мүмкін. Мұнда әрқашан жарықтық мәнінен 'біраз' кемітіледі. Дәл мәндер әлі анықталмады, мен есептеу негізінде жұмыс істеп жатырмын
v *= (daylight / 48) + 0.25;
пиксельдердің HSV деректерімен, мұнда daylight 0-31 аралығындағы мән, ал v 0-1 аралығындағы мән. Сондай-ақ, картаның екі жағында (бұл бірліктердің көрінбейтін пайда болуы үшін) 16 плитканың шетінде барын ескеру керек.
Сондай-ақ, күн мен түн циклы әр ойын айналымында картаның тек бір бағанын жаңартады.
Жылдамдатылған күн мен түн циклы былай көрінеді:
ПРТ
Adr | 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
не үшін нақты қолданылатынын білмеймін; мысалы, 'Palette and Ressource Table' болуы мүмкін - себебі бұл файл op2_art.prt ретінде maps.vol ішінде орналасқан, яғни бұл файл дәл осындай функцияны атқарады немесе бұл анықтаманы жақсы сипаттайды.
Бұл файл палитралардың тізімін, қолданылатын барлық битмаптар туралы кестені, барлық анимация анықтамаларын және басқа да белгісіз деректерді қамтиды. Ол бұрынғы контейнер форматында еркін түрде жүреді, себебі барлық жазбалар бұл схеманы орындамайды.
CPAL
бөлімі (палитра контейнері дегенді білдіреді) тек палитра деректерін қамтиды, әрқайсысы әдетте 1052 байт болатын 8-биттік палитралардың қаншасы бар екенін көрсетеді.
1052 байттық көрсеткіш міндетті емес, себебі палитра форматы әр түрлі палитра өлшемдерін қарастыруы мүмкін. Бұл тек Outpost 2 жеткізілетін деректер жиынтығына қатысты.
Палитра тізімдерінен кейін тікелей, кіріспе тақырыпсыз, битмаптар тізімі келеді; одан кейін анимация тізімдері тікелей келеді.
Екеуі де әрқайсысы uint(32) (немесе қайтадан uint24+uint8 флагтары?) арқылы басталады, бұл деректер жазбаларының санын қамтиды.
Палитралар
Adr | 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) | Тулар | Мүмкін, әдеттегідей, Ту. Дегенмен, менде Тулар туралы ақпарат жоқ; себебі мен білетін барлық мәндер |
Паллеттер туралы ақпаратты оқу өте оңай.
Олар әрқайсысы заголовоктан және деректер сегментінен тұрады.
Палеталар тақырыбы
Adr | 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 палеттері |
Паллеттер туралы деректер
Adr | 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 бөлуден алынған.
Жеке жазбалардың құрылымы келесідей, қарапайым;
Adr | 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-ден басқа жерден қайдан алынатыны мен үшін түсініксіз.
Мен қалған түстердің алдын ала кодталған деп ойлаймын.
Битмаптар
Adr | 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-файлының осы деректер құрылымы спрайттар үшін пайдаланылатын битмаптардың қалай құрылатынын көрсетеді. Бұл битмаптар спрайттың анимациялық кадрына жиналатын жеке компонент ретінде қызмет етеді.
Нақты кескін деректері ойын каталогындағы
op2_art.BMP файлында жасырынып жатыр.
Неге бұл битмап файлы (көбінесе дұрыс) RIFF-битмап басқышына ие екені белгісіз. Мүмкін, Outpost 2 графиканы жүктеу үшін жүйелік API-лерді пайдалана отырып, бұл басқыштың уақытша қабылдануы және сәйкес өзгермелі өрістердің қайта жазылуы болып табылады.
Пиксель деректері BMP-файлының Offset + uint32-Offset позициясында, BMP-файлының 0x000A адресінде орналасқан (RIFF-битмап деректерінің офсеті) табылады - және бұл қайтадан жоғарыдан төменге, солдан оңға қарай жолдармен орналасады.
Монохромды 1bpp графиктерді осылайша салуға болады, мұнда түс 0 толық мөлдірлік, ал түс 1 жартылай мөлдір қара/сұр болып табылады, себебі монохромды графиктер негізінен анимацияларда көлік пен ғимараттардың көлеңкелері үшін қолданылады.
Осылайша, көптеген графиктерді жинақтауға болады.
Анимациялар
Енді Outpost 2 деректер форматындағы пәндердің корольдік класына келейік:
Анимациялар.
Анимация тізімдері деректерді тексеру үшін негізінен қолданылатын глобалдық тақырыппен басталады. Одан кейін нақты анимация анықтамалары 3 деңгейге бөлінеді:
-
Анимация
Анимация - бұл ең жоғарғы инстанция; ол бірлік, ғимарат немесе 'бөлшек анимациясы' (комета соққысы, ауа райы, жарылыс) белгілі бір бастапқы күйдегі анимацияны білдіреді. -
Кадр
Кадр - бұл анимация ішіндегі бір жалғыз сурет. Анимацияда бір немесе бірнеше кадр болуы мүмкін. -
Субкадр
Субкадр - бұл белгілі бір битмаптың белгілі бір критерийлер бойынша кадрдың белгілі бір орнына салынуы туралы ақпарат. Бір кадрда бір немесе бірнеше субкадр болуы мүмкін.
Кейін тікелей жеке анимация анықтамалары жалғасады.
Adr | 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) | Опционалды жазбалардың саны | Қанша "қосымша жазбалар" бар. |
Анимация
Adr | 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) | Оffset: X | Анимацияның горизонталь орталығын көрсетеді |
0x0018 | uint(32) | Офсет: Y | Анимацияның вертикалдық орталығын көрсетеді |
0x001c | uint(32) | Белгісіз 2 | Белгісіз ақпарат |
0x0020 | uint(32) | Кадрлар саны | Бұл анимацияда қанша анимациялық кадр бар екенін көрсетеді |
0x0024 | uint(32) | Терезелер саны | Сызу кезінде қанша терезе қолданылатынын көрсетеді |
Жоғарғы қабаттың, анимацияның, деректері негізінен басқару деректері болып табылады - Boundingbox көліктің/ғимараттың айналасындағы белгінің координаттарын көрсетеді, егер ол таңдалса, және сонымен қатар қай аймақтың басу үшін жарамды екенін білдіреді.
Смещение негізінен "нөлдік нүктені" анықтайды; ойын ішіндегі координаттарға қосылатын немесе алынып тасталатын нүкте. Математикалық тұрғыдан алғанда, смещение мұнда координата бастауын білдіреді.
Windows-тар, смещение секілді, әрқайсысы (әр Windows үшін) 4 uint(32) мәндерінен тұрады, олар жеке субфреймдер үшін қолдануға болатын аймақты көрсетеді. Windows-тан тыс, егер Bitmap үшін тиісті түрде белгіленген болса, сызуға болмайды.
Шеңбер
Adr | 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 | Белгісіз |
Субрамка
Adr | 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) | Оffset - Горизонтальді | Фрейм ішінде субфрейм қай жерде орналастырылуы керектігін немесе битмапты қанша пиксельге көлденең жылжытылуы керектігін көрсетеді |
0x0006 | sint(16) | Offset - Вертикаль | Фрейм ішінде субфреймнің қай жерде орналасатынын немесе битмаптың вертикалды түрде қанша пиксельге жылжытылатынын көрсетеді |
Осы арқылы біз енді жеке фреймдерді, сондай-ақ толық анимацияларды тиісті түрде жинақтай аламыз, мұнда күрделі анимацияның мысалында, индекс 500 бар анимация көрсетіледі
Анимация 500
Анимация 500 Плимут жүк көлігінің кәдімгі кенмен жүктеліп, түсірілгенін көрсетеді. Бұл терезе функционалын пайдаланатын бірнеше анимациялардың бірі.
Сондықтан толық анимацияны жинақтауға болады.
Өкінішке орай, жоғарғы жүк люгасы бойынша мәселе бар, себебі графикалық тип туралы ақпаратта сәйкес бит орнатылмаған.
Ойыннан тағы бірнеше тамаша анимирленген спрайттар:
Пайдаланушы интерфейсі
Енді ойынның бұралған металл стиліндегі пайдаланушы интерфейсі жетіспейді.
Бірақ мұнда да Dynamix жаңалық ойлап табудың қажеті жоқ екені байқалады; мұнда тек Windows-тың User32 және GDI32 API-лерін пайдаланып қоймай, сонымен қатар User32-нің ресурстарды басқару жүйесі де қолданылған.
Оларды, мысалы, Angus Johnson әзірлеген Resource Hacker ретінде тегін бағдарламалар арқылы немесе Linux / Mac OS жүйесінде Wine қолданудан қашқан жағдайда icoutils құрамындағы wrestool көмегімен шығаруға болады.
Файл атауы | Мазмұны |
---|---|
Outpost2.exe | Тек New Terra алдындағы ғарыш станциясының белгішесін қамтиды |
op2shres.dll | Шекаралар, батырмалар, радио-батырмалар және чекбокстар сияқты басқару элементтеріне арналған графиктермен қатар, диалог фоны, сюжет миссия мәтіндеріне арналған қосымша суреттер және басты мәзір фондық графикасын қамтиды |
out2res.dll | Ойын ішіндегі терезе безендіруі, кәдімгі және арнайы металл үшін белгішелер, жүктеу экраны, диалогтар үшін графиктер, сондай-ақ ойын қалтасында анимацияланғандарға қосымша басқа курсор графиктерін қамтиды |