Томa · 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.

Объемы представляют собой контейнеры данных для игры, аналогичные архивным форматам, таким как 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)[] Список имен файлов

Это список имен файлов, завершенный нулевым байтом, который - по крайней мере, в данном компоненте данных - ожидает только 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) Флаги?

Предоставляет, похоже, дополнительную информацию о кодировке файла.

  • 0x03 установлен, если файл сжат. Здесь, очевидно, используется дерево Хаффмана.
  • 0x80, похоже, всегда установлен.

Объёмный блок

Адр 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) Флаги

Объемный блок представляет собой контейнер, который содержит файлы. Он включает в себя только еще раз - из-за формата блока - избыточный размер файла, и затем сразу же следуют полезные данные.