Том · bei.pm
Описані на цій сторінці формати файлів базуються на технічному аналізі інтелектуальної власності Dynamix, Inc. та Sierra Entertainment.
Інтелектуальна власність сьогодні є частиною маси Activision Publishing, Inc. / Activision Blizzard, Inc. і наразі належить Microsoft Corp..
Інформація була зібрана за допомогою реверс-інженерії та аналізу даних з метою архівування та взаємодії з історичними даними.
Не використовувалися жодні власницькі або конфіденційні специфікації.
Гру наразі можна придбати на gog.com як завантаження.
Обсяги - це контейнери даних для гри, схожі на архівний формат, наприклад, Tarball. Принаймні в Outpost 2 цей формат містить лише файли - без папок. Напевно, їх можна було б симулювати за допомогою відповідних імен файлів.
Обсяг складається з заголовка обсягу та кількох блоків обсягу, які відповідають конкретним файлам.
"Обсяги" - це файли з розширенням '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) | Довжина корисних даних | Вказує, скільки байтів з наведених даних насправді є корисними даними. Залишкові дані списку рядків томів, очевидно, слід вважати сміттям. У файлах з пізніми датами ці 'залишкові дані' становлять 0x00, що може свідчити про недоліки в інструментах під час розробки гри, а саме, що розробник почав піклуватися про правильну ініціалізацію буферів лише дуже пізно, оскільки це не впливає на гру, чи дані ініціалізовані, чи ні. |
0x000c | uint(8)[] | Список імен файлів | Це 0-байтний термінований список імен файлів, який - принаймні в даному фрагменті даних - очікує лише ASCII-символи. Не потрібно при парсингу даних більш детально оцінювати цей блок даних, оскільки в інформації про томи безпосередньо посилаються на офсети імен файлів. |
Обсягові рядки є списком імен файлів, які містяться в обсязі.
Інформація про об'єм
Адр | 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) | Зсув імен файлів | Вказує, на якому офсеті (!) у списку імен файлів (рядки томів) знаходиться ім'я файлу. Це стосується початку блоку корисних даних. |
0x0004 | uint(32) | Файл-офсет | Вказує, на якому зсуві в межах усієї об'ємної файлу знаходиться файл. |
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) | Прапори |
Об'ємний блок - це контейнер, який містить файли. Він містить лише ще раз - через формат блоку - редундантний розмір файлу, а потім безпосередньо слідують корисні дані.