Volumes · bei.pm

Geplaatst op 19-11-2015·Bijgewerkt op 13-02-2025·Nederlands
Deze tekst is automatisch vertaald door OpenAI GPT-4o Mini.

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.

  • 0x03 is ingesteld wanneer het bestand gecomprimeerd is. Hier wordt blijkbaar een Huffman-boom gebruikt.
  • 0x80 is blijkbaar altijd ingesteld.

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.