Volumes · bei.pm
De op deze pagina beschreven bestandsformaten zijn gebaseerd op de technische analyse van intellectueel eigendom van Dynamix, Inc. en Sierra Entertainment.
Het intellectueel eigendom maakt vandaag de dag deel uit van de massa van Activision Publishing, Inc. / Activision Blizzard, Inc. en is momenteel in bezit van Microsoft Corp..
De informatie is verzameld door middel van Reverse Engineering en data-analyse met als doel archivering en interoperabiliteit met historische gegevens.
Er zijn geen eigendomsrechtelijke of vertrouwelijke specificaties gebruikt.
Het spel is momenteel verkrijgbaar als download op gog.com.
Volumes zijn een gegevenscontainer voor het spel, vergelijkbaar met een archiefformaat zoals bijvoorbeeld Tarball. In ieder geval kent het formaat in Outpost 2 alleen bestanden - geen mappen. Waarschijnlijk kunnen deze echter worden gesimuleerd door middel van de juiste bestandsnamen.
Een Volume bestaat uit de Volume-header en uit meerdere Volume-blokken die overeenkomen met de specifieke bestanden.
"Volumes" zijn de bestanden met de extensie 'vol'
in de spelmap.
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 4f | 4c | 20 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | O | L | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Magische Bytes | |
0x0004 | uint(24) | Bloklengte | |
0x0007 | uint(8) | Vlaggen |
Volume Header
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 68 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | h | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Magische Bytes | |
0x0004 | uint(24) | Bloklengte | |
0x0007 | uint(8) | Vlaggen |
De Volume Header bevat op zijn beurt geen nuttige gegevens.
Hij dient alleen als container.
Als eerste gegevens in de Volume Header zouden de Volume Strings moeten staan; daarop volgen vervolgens de Volume-informatie.
Volume Strings
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Magische Bytes | |
0x0004 | uint(24) | Bloklengte | |
0x0007 | uint(8) | Vlaggen |
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 73 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | s | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Magische Bytes | |
0x0004 | uint(24) | Bloklengte | |
0x0007 | uint(8) | Vlaggen | |
0x0008 | uint(32) | Payload-lengte | Geeft aan hoeveel bytes van de volgende gegevens daadwerkelijk nuttige gegevens zijn. De overige, resterende gegevens van de volume-strings-lijst worden blijkbaar als garbage beschouwd. In bestanden met een latere datum zijn deze 'resterende gegevens' 0x00, wat kan wijzen op tekortkomingen met de toolchain tijdens de ontwikkeling van het spel, met andere woorden, dat een ontwikkelaar pas laat zorg heeft gedragen voor de correcte initialisatie van de buffers, omdat het geen invloed heeft op het spel of de gegevens zijn geïnitialiseerd of niet. |
0x000c | uint(8)[] | Bestandsnaam-lijst | Dit betreft een nul-byte-terminerende lijst van bestandsnamen die - althans in de huidige dataset - alleen ASCII-tekens lijkt te verwachten. Het is niet nodig om bij het parseren van de gegevens deze datablok nauwkeuriger te evalueren, aangezien in de volume-informatie toch direct de offsets van de bestandsnamen worden gerefereerd. |
De Volume Strings zijn een lijst van bestandsnamen die binnen het volume bevat zijn.
Volume-informatie
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Magische Bytes | |
0x0004 | uint(24) | Bloklengte | |
0x0007 | uint(8) | Vlaggen |
De volume-informatie bevat gedetailleerdere informatie over de bestanden. Het is in zekere zin een soort FAT-directory-invoer (FAT = File Allocation Table)
Het aantal bestanden wordt berekend door de blokgrootte te delen door de lengte van de directory-invoeren - 14 byte.
De individuele directory-invoeren hebben elk de volgende structuur:
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Bestandsnaam-offset | Geeft aan op welke offset (!) binnen de lijst met bestandsnamen (volume-strings) de bestandsnaam van het bestand zich bevindt. Hierbij wordt verwezen naar het begin van het gegevensblok. |
0x0004 | uint(32) | Bestandsoffset | Geeft aan op welke offset binnen het gehele volume-bestand het bestand zich bevindt. |
0x0008 | uint(32) | Bestandsgrootte | Geeft aan hoe groot het bestand in bytes is. |
0x000c | uint(16) | Vlaggen? | Geeft blijkbaar aanvullende informatie over de bestandscodering.
|
Volume Blok
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 42 | 4c | 48 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | B | L | H | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Magische Bytes | |
0x0004 | uint(24) | Bloklengte | |
0x0007 | uint(8) | Vlaggen |
Een volume-blok is een container die bestanden opslaat. Het bevat alleen nogmaals - vanwege het blokformaat - redundante informatie over de bestandsgrootte, en daarachter volgen direct de bruikbare gegevens.