Volumes

The volumes are a data container for the game, similar to an archive format like Tarball. At least in Outpost 2 the format only knows files - no folders.

Published on 06/10/2018, updated on 06/10/2018

Probably these could be simulated however by appropriate file names.

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 56 4F 4C 20 xx xx xx xx  

A volume consists of the volume header and several volume blocks that correspond to the specific files.

"Volumes" are the files with the extension 'vol' in the game directory.

Volume Header

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 76 6F 6C 68 xx xx xx xx  

The volume header does not contain any user data. It only serves as a container.

The first date in the volume header should be the volume strings, followed by the volume information.

Volume Strings

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 76 6F 6C 73 xx xx xx xx xx xx xx xx
payload length Data type: uint32
Specifies how many bytes of the following data are actually user data.
The remaining data in the volume string list is obviously garbage.
In files with later dates, this 'remaining data' is 0x00, which could indicate shortcomings with the toolchain during game development, i.e. that a developer took care of the correct initialization of the buffers very late, since it has no influence on the game whether the data is initialized or not.
filenames Data type: uint8[]
This is a 0-byte terminated list of file names which - at least in the present data component - only allows ASCII characters to be expected.
It is not necessary to evaluate this data block more precisely when parsing the data, since the offsets of the file names are directly referenced in the volume information anyway.

The volume strings are a list of file names contained within the volume.

Volume Information

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 76 6F 6C 69 xx xx xx xx  

The volume information contains more detailed information about the files. In a way, it is a kind of FAT directory entry (FAT = File Allocation Table).

The number of files results from the block size divided by the length of the directory entries - 14 bytes.

The directory entries have the following structure:

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 xx xx xx xx xx xx xx xx xx xx xx xx xx xx  
File name offset Data type: uint32
Specifies the offset (!) within the file name list (volume strings) at which the file name of the file is found.
Refers to the beginning of the user data block.
file offset Data type: uint32
Specifies the offset within the entire volume file at which the file is located.
file size Data type: uint32
Specifies how large the file is in bytes.
Flags? Data type: uint16
Apparently provides additional information about the file encoding.
0x03 is set if the file is compressed. Apparently a Huffmann tree is used here.
0x80 is apparently always set.

Volume Block

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 56 42 4C 4B xx xx xx xx  

A volume block is a container that holds files. Due to the block format, it only contains the file size redundantly once more and then the user data directly follows.

comments

add a comment

Your comment may not be displayed immediately and will be moderated for spam prevention reasons.