Outpost 2 файл форматтары · bei.pm

Бұл мәтін OpenAI GPT-4o Mini арқылы автоматты түрде аударылды.

Осы бетте сипатталған файл форматтары 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) Сиқырлы байттар

Келесі деректер блогында не күту керектігі туралы ақпаратты қамтиды.

Белгілі мәндер:

  • 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-де бұл формат тек файлдарды таниды - папкалар жоқ. Дегенмен, оларды сәйкес файл атаулары арқылы имитациялауға болады.

Том томның тақырыбынан және нақты файлдарға сәйкес бірнеше том блоктарынан тұрады.

"Томдар" - ойын каталогындағы '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) Тулар?

Файл кодтауы туралы қосымша ақпарат береді.

  • 0x03 файл сжатылған кезде орнатылған. Мұнда, көрініп тұрғандай, Хаффман ағашы қолданылады.
  • 0x80 әрқашан орнатылған сияқты.

Көлем блогы

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) Нұсқа / Ту?

Бұл файл форматының нұсқасын көрсететін болуы мүмкін; менде бар барлық файлдарда бұл жерде 0x02 мәні болды

0x000c uint(32) Ені (Горизонталды шешім)

Сурет файлының ені (пиксельмен) қанша екенін көрсетеді.

Outpost 2-дегі барлық Wells-ке мұнда 0x20 немесе 32 мәні берілуі керек.

0x0010 uint(32) Биіктік (Тік шешім)

Сурет файлының биіктігін (пиксельмен) көрсетеді.

Outpost 2-дегі барлық құдықтар үшін мұнда 0x20 немесе 32 мәнін күтуге болады.

0x0014 uint(32) Түстің тереңдігі?

Бұл мәннің мағынасы белгісіз.

Өйткені ол тексерілген барлық файлдарда 8 мәнін қамтиды, бұл түс тереңдігі туралы ақпарат болуы мүмкін.

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-битмаптар түрінде берілетін графиктердегі деректердің мәні – түсті палитрадағы түстің индексі.

Pixeldatalar сол жақ жоғарынан басталып, оң жақ төменде аяқталады.

Ойын қозғалтқышы плиткаларды *мүмкін* сұраныс бойынша сызады.
Бұл, соның ішінде, 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) Тулар

Мүмкін, әдеттегідей, Туындылар.

Маған белгілі Туындылар жоқ; өйткені мен білемін барлық мәндер 0x00 сәйкес келеді, палитра саны жай ғана uint(32) болуы да мүмкін.

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) Тулар

Мүмкін, әдеттегідей, Ту.

Дегенмен, менде Тулар туралы ақпарат жоқ; себебі мен білетін барлық мәндер 0x00 сәйкес келеді, сондықтан палеткалардың саны жай ғана uint(32) болуы ықтимал.

Паллеттер туралы ақпаратты оқу өте оңай.
Олар әрқайсысы заголовоктан және деректер сегментінен тұрады.

Палеталар тақырыбы

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) Тулар

Мүмкін, әдеттегідей, Ту.

Дегенмен, менде Тулар туралы ақпарат жоқ; себебі мен білетін барлық мәндер 0x00 сәйкес келеді, сондықтан палеткалардың саны жай ғана uint(32) болуы ықтимал.

0x0008 uint(32) Палет форматындағы нұсқа?

Палетаның қай формат нұсқасына сәйкес келетінін анықтайды.

Барлық Outpost2 палеттері 0x01 нұсқасына ие сияқты.

Паллеттер туралы деректер

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) Белгісіз - Тулар?

Бұл мәннің не білдіретіні анық емес, себебі ол негізінен 0x04 болып көрінеді.

Палеталарға қатысты тағы бір нәрсе айту керек, анимацияларда қолданылатын палеталар үшін мынадай ережелер қолданылады:

  • Бірінші түс ӘРҚАШАН мөлдір, ол жерде қандай мән көрсетілсе де.
  • Палеталардағы 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) Топ

Суреттің түрін көрсетеді. Мұнда бұл биттік маска болуы мүмкін:

  • 0x04 1bpp графикасы болса, орнатылған.
  • 0x40 терезе жасау керек графика болса, орнатылған.
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 деңгейге бөлінеді:

  1. Анимация
    Анимация - бұл ең жоғарғы инстанция; ол бірлік, ғимарат немесе 'бөлшек анимациясы' (комета соққысы, ауа райы, жарылыс) белгілі бір бастапқы күйдегі анимацияны білдіреді.
  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 үшін Тогл

Бұл мән мыналарды қамтиды:

  • 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

Белгісіз

Субрамка

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 Плимут жүк көлігінің кәдімгі кенмен жүктеліп, түсірілгенін көрсетеді. Бұл терезе функционалын пайдаланатын бірнеше анимациялардың бірі.

Сондықтан толық анимацияны жинақтауға болады.
Өкінішке орай, жоғарғы жүк люгасы бойынша мәселе бар, себебі графикалық тип туралы ақпаратта сәйкес бит орнатылмаған.

Ойыннан тағы бірнеше тамаша анимирленген спрайттар:

Анимация 500-дің рендерленуі көрсетілген

Анимация 500 толық жиналған

Plymouth ғимараты-заводы

Eden ғарыш порты

Eden медициналық орталығы

SCAT

Plymouth ғарыш порты

Easteregg:
/Миколай

Easteregg:
Dans Dog

Пайдаланушы интерфейсі

Енді ойынның бұралған металл стиліндегі пайдаланушы интерфейсі жетіспейді.

Бірақ мұнда да Dynamix жаңалық ойлап табудың қажеті жоқ екені байқалады; мұнда тек Windows-тың User32 және GDI32 API-лерін пайдаланып қоймай, сонымен қатар User32-нің ресурстарды басқару жүйесі де қолданылған.

Оларды, мысалы, Angus Johnson әзірлеген Resource Hacker ретінде тегін бағдарламалар арқылы немесе Linux / Mac OS жүйесінде Wine қолданудан қашқан жағдайда icoutils құрамындағы wrestool көмегімен шығаруға болады.

Файл атауы Мазмұны
Outpost2.exe Тек New Terra алдындағы ғарыш станциясының белгішесін қамтиды
op2shres.dll Шекаралар, батырмалар, радио-батырмалар және чекбокстар сияқты басқару элементтеріне арналған графиктермен қатар, диалог фоны, сюжет миссия мәтіндеріне арналған қосымша суреттер және басты мәзір фондық графикасын қамтиды
out2res.dll Ойын ішіндегі терезе безендіруі, кәдімгі және арнайы металл үшін белгішелер, жүктеу экраны, диалогтар үшін графиктер, сондай-ақ ойын қалтасында анимацияланғандарға қосымша басқа курсор графиктерін қамтиды