Томa · 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)[] | Список имен файлов | Это список имен файлов, завершенный нулевым байтом, который - по крайней мере, в данном компоненте данных - ожидает только 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) | Флаги |
Объемный блок представляет собой контейнер, который содержит файлы. Он включает в себя только еще раз - из-за формата блока - избыточный размер файла, и затем сразу же следуют полезные данные.