Плитки · bei.pm

Опубліковано 19.11.2015·Оновлено 13.02.2025·Українська
Цей текст був автоматично перекладений за допомогою OpenAI GPT-4o Mini.

Описані на цій сторінці формати файлів базуються на технічному аналізі інтелектуальної власності Dynamix, Inc. та Sierra Entertainment.
Інтелектуальна власність сьогодні є частиною маси Activision Publishing, Inc. / Activision Blizzard, Inc. і наразі належить Microsoft Corp..

Інформація була зібрана за допомогою реверс-інженерії та аналізу даних з метою архівування та взаємодії з історичними даними.
Не використовувалися жодні власницькі або конфіденційні специфікації.

Гру наразі можна придбати на gog.com як завантаження.

Адр 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 форматом bitmap-графіки. Вони охоплюють 13 тайлсетів, названих "колодязями" (well0000.bmp до well0012.bmp), які містяться у обсязі maps.vol.

При цьому тайлсети / колодязі містять наступне:

Ім'я файлу Зміст
well0000.bmp Графіка розміром 32x32px, синя - ідеальна для тестування роботи вашого завантажувача зображень
well0001.bmp Містить світле каміння, гірські хребти на світлому камінні та безліч варіантів кратерів від ударів на світлому камінні
well0002.bmp Містить "Doodads" зі світлого каміння - елементи, які можуть бути розміщені для розбавлення (або свідомо як структура, наприклад, стіни) на світлому камінні, серед яких також є рослинність
well0003.bmp Містить структуру, схожу на корку, на світлому камінні
well0004.bmp Містить темне каміння, гірські хребти на темному камінні і безліч варіантів кратерів від ударів на темному камінні
well0005.bmp Містить "Doodads" з темного каміння - елементи, які можуть бути розміщені для розбавлення (або свідомо як структура, наприклад, стіни) на темному камінні
well0006.bmp Містить структуру, схожу на корку, на темному камінні, а також переходи між світлим і темним камінням
well0007.bmp Містить лаву, включаючи по 4-5 кадрів анімації для неї
well0008.bmp Містить пісок і безліч варіантів кратерів від ударів у пісок
well0009.bmp Містить "Doodads" з піску - елементи, які можуть бути розміщені для розбавлення (або свідомо як структура, наприклад, стіни) на піску
well0010.bmp Містить по 48 переходів від піску до світлого і темного каміння
well0011.bmp Містить полярні шапки карти, з темним камінням як основою
well0012.bmp Містить полярні шапки карти, з світлим камінням як основою

Рекомендується для точної реалізації не рендерити тайли заздалегідь для кешування, оскільки дані для циклу день/ніч ще потрібно обробити - і виникне дуже-дуже багато даних.

Тайли - це 8bpp-графіки з індексованою палітрою розміром 32x32 пікселя, які розташовані один над одним. У такому утвореному тайлсеті, однак, може бути значно більше

Головний контейнер складається з 2 секцій: head та data.

Заголовок плитки

Адр x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF симв.
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Зсув Тип даних Назва Пояснення
0x0000 uint(32) Магічні байти
0x0004 uint(24) Довжина блоку
0x0007 uint(8) Прапори
0x0008 uint(32) Версія / Прапори?

Це може бути вказівка версії формату файлу; у всіх наявних у мене файлах тут значення було 0x02

0x000c uint(32) Ширина (Горизонтальний розділ)

Вказує, якою є ширина файлу зображення (в пікселях).

Для всіх колодязів з Outpost 2 тут слід очікувати значення 0x20 або 32.

0x0010 uint(32) Висота (Вертикальне розділення)

Вказує, яка висота зображення (в пікселях).

Для всіх колодязів з Outpost 2 тут слід очікувати значення 0x20 або 32.

0x0014 uint(32) Глибина кольору?

Значення цього параметра невідоме.

Оскільки він містить значення 8 в усіх перевірених файлах, це може бути вказівка на глибину кольору.

0x0018 uint(32) Глибина кольору 2?

Значення цього параметра невідоме.

Можливо, це 'цільова' глибина кольору.

Після цих даних буде надано ще файл палітри у стандартизованому форматі RIFF. Точну специфікацію можна знайти - оскільки палітри з'являються і в інших місцях - за посиланням Палітри.

Дані плитки

Адр x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF симв.
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Зсув Тип даних Назва Пояснення
0x0000 uint(32) Магічні байти
0x0004 uint(24) Довжина блоку
0x0007 uint(8) Прапори

Нарешті йдуть чисті піксельні дані, зліва зверху рядками донизу справа.
Значення даних у графіках, які зазвичай представлені у форматі 8bpp-бітмапи, відповідає індексу кольору в палітрі кольорів.

Піксельні дані починаються з верхнього лівого кута і закінчуються в нижньому правому.

Ігровий движок, ймовірно, малює тайли *на вимогу*.
Це, зокрема, пов'язано з циклом день-ніч, який має 32 ступені окремих тайлів. При цьому, очевидно, від значення яскравості 'трохи' віднімається. Точні значення ще не вдалося визначити, я працюю на основі розрахунків

v *= (daylight / 48) + 0.25;

з HSV-даними пікселів, де daylight – це значення від 0 до 31, а v – це значення між 0 і 1. Крім того, слід врахувати, що на карті є ще край з 16 тайлів зліва і справа (він служить для невидимого спавну одиниць).

Додатково, здається, що цикл день-ніч оновлює лише один стовпець карти за кожен ігровий цикл.
Прискорений цикл день-ніч виглядає наступним чином:

Візуалізація циклу день-ніч