Volymer · bei.pm

Publicerad den 19/11/2015·Uppdaterad den 13/02/2025·Svenska
Denna text har automatiskt översatts av OpenAI GPT-4o Mini.

De filformat som beskrivs på denna sida är baserade på teknisk analys av immateriella rättigheter från Dynamix, Inc. och Sierra Entertainment.
Det immateriella rättigheterna är idag en del av Activision Publishing, Inc.- / Activision Blizzard, Inc.-massan och ägs för närvarande av Microsoft Corp..

Informationen har sammanställts genom Reverse Engineering och dataanalys för syftet att arkivera och säkerställa interoperabilitet med historiska data.
Inga proprietära eller konfidentiella specifikationer har använts.

Spelet kan för närvarande köpas som nedladdning på gog.com.

Volymer är en databehållare för spelet, liknande ett arkivformat som till exempel Tarball. Åtminstone i Outpost 2 känner formatet endast till filer - inga mappar. Det är troligt att dessa ändå skulle kunna simuleras genom motsvarande filnamn.

Ett volym består av volymhuvudet samt flera volymblock som motsvarar de konkreta filerna.

"Volymer" är filerna med ändelsen 'vol' i spelmappen.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Magiska byte
0x0004 uint(24) Blocklängd
0x0007 uint(8) Flaggor

Volymhuvud

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Magiska byte
0x0004 uint(24) Blocklängd
0x0007 uint(8) Flaggor

Volymhuvudet innehåller i sin tur inga användardata.
Det fungerar bara som en behållare.

Det första datumet i volymhuvudet bör vara volymsträngarna; följt av volyminformationen.

Volymsträngar

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Magiska byte
0x0004 uint(24) Blocklängd
0x0007 uint(8) Flaggor
Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Magiska byte
0x0004 uint(24) Blocklängd
0x0007 uint(8) Flaggor
0x0008 uint(32) Payload-längd

Anger vilken mängd bytes av följande data som faktiskt är nyttolaster.

De återstående data i listan över volymsträngar verkar tydligen vara att betrakta som skräp.

I filer med senare datum är dessa 'återstående data' 0x00, vilket kan tyda på brister i verktygskedjan under utvecklingen av spelet, det vill säga att en utvecklare först mycket sent har tagit hand om korrekt initialisering av buffrarna, eftersom det inte påverkar spelet om datan är initierad eller inte.

0x000c uint(8)[] Filnamn-lista

Detta är en 0-byte-terminerad lista av filnamn som - åtminstone i den aktuella datakomponenten - endast förväntar sig ASCII-tecken.

Det är inte nödvändigt att noggrant utvärdera denna datablok vid parsning av data, eftersom offset för filnamnen ändå refereras direkt i volyminformationen.

Volume-strängarna är en lista med filnamn som ingår i volymen.

Volyminformation

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Magiska byte
0x0004 uint(24) Blocklängd
0x0007 uint(8) Flaggor

Volyminformationerna tar detaljerad information om filerna. Det handlar på ett sätt om en slags FAT-katalogpost (FAT = File Allocation Table).

Antalet filer beräknas genom blockstorleken dividerat med längden på katalogposterna - 14 byte.

De enskilda katalogposterna har följande struktur:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Filnamns-offset

Anger vilket offset (!) inom filnamnslistan (volymsträngar) filnamnet på filen finns.

Detta avser början av datablocket.

0x0004 uint(32) Filoffset

Anger att filen befinner sig vid vilken offset inom hela volymfilen.

0x0008 uint(32) Filstorlek

Anger hur stor filen är i byte.

0x000c uint(16) Flaggor?

Tycks ge ytterligare information om filkodningen.

  • 0x03 är satt om filen är komprimerad. Här används uppenbarligen ett Huffman-träd.
  • 0x80 verkar alltid vara satt.

Volymblock

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tecken
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Förskjutning Datatyp Beteckning Förklaring
0x0000 uint(32) Magiska byte
0x0004 uint(24) Blocklängd
0x0007 uint(8) Flaggor

En volymblock är en behållare som tar emot filer. Den innehåller ytterligare en gång - på grund av blockformatet - redundant filstorleken och därefter följer direkt användardata.