Volumes · bei.pm
Os formatos de arquivo descritos nesta página são baseados na análise técnica da propriedade intelectual de Dynamix, Inc. e Sierra Entertainment.
A propriedade intelectual faz parte da massa da Activision Publishing, Inc. / Activision Blizzard, Inc. e atualmente é de propriedade da Microsoft Corp..
As informações foram coletadas através de Engenharia Reversa e Análise de Dados para fins de arquivamento e interoperabilidade com dados históricos.
Nenhuma especificação proprietária ou confidencial foi utilizada.
O jogo pode ser adquirido atualmente como download em gog.com.
Os volumes são um contêiner de dados para o jogo, semelhante a um formato de arquivo como, por exemplo, Tarball. Pelo menos em Outpost 2, o formato reconhece apenas arquivos - sem pastas. Provavelmente, essas poderiam ser simuladas por meio de nomes de arquivos apropriados.
Um volume consiste no cabeçalho do volume e em vários blocos de volume, que correspondem aos arquivos concretos.
"Volumes" são os arquivos com a extensão 'vol'
no diretório do jogo.
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 4f | 4c | 20 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | O | L | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Bytes Mágicos | |
0x0004 | uint(24) | Comprimento do bloco | |
0x0007 | uint(8) | Bandeiras |
Cabeçalho de Volume
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 68 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | h | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Bytes Mágicos | |
0x0004 | uint(24) | Comprimento do bloco | |
0x0007 | uint(8) | Bandeiras |
O cabeçalho do volume não contém dados úteis.
Ele serve apenas como um contêiner.
Como primeira informação no cabeçalho do volume, devem estar as strings do volume; em seguida, vêm as informações do volume.
Strings de Volume
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Bytes Mágicos | |
0x0004 | uint(24) | Comprimento do bloco | |
0x0007 | uint(8) | Bandeiras |
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 73 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | s | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Bytes Mágicos | |
0x0004 | uint(24) | Comprimento do bloco | |
0x0007 | uint(8) | Bandeiras | |
0x0008 | uint(32) | Comprimento da carga útil | Indica quantos bytes dos dados a seguir são realmente dados úteis. Os dados restantes da lista de strings de volume devem ser considerados como lixo. Em arquivos com data posterior, esses 'dados restantes' são 0x00, o que pode indicar falhas na ferramenta durante o desenvolvimento do jogo, ou seja, pode ser que um desenvolvedor só tenha se preocupado com a correta inicialização dos buffers muito tarde, já que não há impacto no jogo se os dados estão ou não inicializados. |
0x000c | uint(8)[] | Lista de nomes de arquivos | Trata-se de uma lista de nomes de arquivos terminada em 0 bytes, que - pelo menos no componente de dados apresentado - parece esperar apenas caracteres ASCII. Não é necessário avaliar mais detalhadamente este bloco de dados ao analisar os dados, uma vez que nas informações do volume os offsets dos nomes dos arquivos são referenciados diretamente. |
Os Volume Strings são uma lista de nomes de arquivos que estão contidos dentro do volume.
Informações de Volume
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Bytes Mágicos | |
0x0004 | uint(24) | Comprimento do bloco | |
0x0007 | uint(8) | Bandeiras |
As informações de volume contêm detalhes adicionais sobre os arquivos. De certa forma, isso é uma espécie de entrada de diretório FAT (FAT = Tabela de Alocação de Arquivos).
O número de arquivos é determinado pelo tamanho do bloco dividido pelo comprimento das entradas de diretório - 14 bytes.
Cada uma das entradas de diretório tem a seguinte estrutura:
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Deslocamento do Nome do Arquivo | Indica em qual offset (!) dentro da lista de nomes de arquivo (strings de volume) o nome do arquivo é encontrado. Refere-se ao início do bloco de dados úteis. |
0x0004 | uint(32) | Deslocamento do arquivo | Indica em qual deslocamento dentro do arquivo de volume total a arquivo se encontra. |
0x0008 | uint(32) | Tamanho do arquivo | Indica o tamanho do arquivo em bytes. |
0x000c | uint(16) | Bandeiras? | Parece haver informações adicionais sobre a codificação do arquivo.
|
Bloco de Volume
Endereço | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 42 | 4c | 48 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | B | L | H | . | . | . | . | . | . | . | . | . | . | . | . |
Deslocamento | Tipo de dado | Designação | Explicação |
---|---|---|---|
0x0000 | uint(32) | Bytes Mágicos | |
0x0004 | uint(24) | Comprimento do bloco | |
0x0007 | uint(8) | Bandeiras |
Um bloco de volume é um contêiner que armazena arquivos. Ele contém apenas mais uma vez - devido ao formato do bloco - a redundância do tamanho do arquivo e, em seguida, seguem-se diretamente os dados úteis.