Volumes

Bei den Volumes handelt es sich um einen Datencontainer für das Spiel, ähnlich zu einem Archivformat wie zB Tarball. Zumindest in Outpost 2 kennt das Format dabei lediglich Dateien - keine Ordner.

Veröffentlicht am 10.06.2018, aktualisiert am 10.06.2018

Wahrscheinlich ließen sich diese allerdings über entsprechende Dateinamen simulieren.

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  

Ein Volume besteht dabei aus dem Volume-Header sowie aus mehreren Volume Blöcken, die den konkreten Dateien entsprechen.

"Volumes" sind die Dateien mit der Endung 'vol' im Spielverzeichnis.

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  

Der Volume Header enthält seinerseits keinerlei Nutzdaten. Er dient lediglich als Container.

Als erstes Datum im Volume Header sollten sich die Volume Strings finden; darauf folgen die Volume-Informationen.

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-Länge Datentyp: uint32
Gibt an, wieviele Bytes der folgenden Daten tatsächlich Nutzdaten sind.
Die restlichen, verbleibenden Daten der Volume-Strings-Liste sind offenbar als garbage zu werten.
In Dateien mit späterem Datum sind diese 'verbleibenden Daten' 0x00, was auf Unzulänglichkeiten mit der Toolchain während der Entwicklung des Spieles deuten könnte, sprich, dass sich erst sehr spät ein Entwickler um die korrekte Initialisierung der Puffer gekümmert hat, da es keinen Einfluss auf das Spiel hat, ob die Daten initialisiert sind oder nicht.
Dateinamen Datentyp: uint8[]
Hierbei handelt es sich um eine 0-Byte-Terminierte Liste von Dateinamen, die - zumindest im vorliegenden Datenbestandteil - lediglich ASCII-Zeichen erwarten lässt.
Es ist nicht nötig, beim Parsen der Daten diesen Datenblock genauer auszuwerten, da in den Volume-Informationen ohnehin direkt die Offsets der Dateinamen referenziert werden.

Bei den Volume Strings handelt es sich um eine Liste von Dateinamen, die innerhalb des Volumes enthalten sind.

Volume Informationen

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  

Die Volume-Informationen nehmen detailliertere Informationen zu den Dateien auf. Dabei handelt es sich in gewisser Weise um eine Art FAT-Verzeichniseintrag (FAT = File Allocation Table)

Die Anzahl an Dateien ergibt sich aus der Blockgröße geteilt durch die Länge der Verzeichniseinträge - 14 Byte.

Die Verzeichniseinträge haben dabei folgenden Aufbau:

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  
Dateinamen-Offset Datentyp: uint32
Gibt an, an welchem Offset (!) innerhalb der Dateinamensliste (Volume-Strings) der Dateiname der Datei findet.
Bezieht sich dabei auf den Anfang des Nutzdatenblocks.
Datei-Offset Datentyp: uint32
Gibt an, an welchem Offset innerhalb der gesamten Volume-Datei sich die Datei befindet.
Dateigröße Datentyp: uint32
Gibt an, wie groß die Datei in Byte ist.
Flags? Datentyp: uint16
Gibt offenbar zusätzliche Informationen über die Dateikodierung an.
0x03 ist gesetzt, wenn die Datei komprimiert ist. Hier kommt offenbar ein Huffmann-Baum zum Einsatz.
0x80 ist scheinbar immer gesetzt.

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  

Bei einem Volume-Block handelt es sich um einen Container, der Dateien aufnimmt. Er enthält lediglich noch einmal - aufgrund des Blockformates - redundant die Dateigröße und anschließend folgen direkt die Nutzdaten.

Kommentare

Kommentar hinzufügen

Dein Kommentar wird möglicherweise nicht sofort dargestellt werden. Kommentare werden aus Spamschutzgründen moderiert.