Volumener · bei.pm
De filformater, der er beskrevet på denne side, er baseret på den tekniske analyse af intellektuel ejendom fra Dynamix, Inc. og Sierra Entertainment.
Den intellektuelle ejendom er i dag en del af Activision Publishing, Inc. / Activision Blizzard, Inc. og ejes i øjeblikket af Microsoft Corp..
Oplysningerne er indsamlet gennem Reverse Engineering og dataanalyse med henblik på arkivering og interoperabilitet med historiske data.
Der er ikke anvendt nogen proprietære eller fortrolige specifikationer.
Spillet kan i øjeblikket købes som download på gog.com.
Volumener er en databeholder til spillet, svarende til et arkivformat som f.eks. Tarball. I det mindste i Outpost 2 kender formatet kun filer - ingen mapper. Det er sandsynligt, at disse dog kan simuleres gennem passende filnavne.
Et volume består af volume-headeren samt flere volume blokke, der svarer til de konkrete filer.
"Volumes" er filerne med endelsen 'vol'
i spilmappen.
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 4f | 4c | 20 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | O | L | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Magiske bytes | |
0x0004 | uint(24) | Bloklængde | |
0x0007 | uint(8) | Flagger |
Volume Overskrift
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 68 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | h | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Magiske bytes | |
0x0004 | uint(24) | Bloklængde | |
0x0007 | uint(8) | Flagger |
Volume-headeret indeholder i sig selv ingen nyttedata.
Det fungerer kun som en container.
Som det første element i volume-headeret skal der findes volume-strenge; derefter følger volume-oplysningerne.
Volumen Strenge
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Magiske bytes | |
0x0004 | uint(24) | Bloklængde | |
0x0007 | uint(8) | Flagger |
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 73 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | s | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Magiske bytes | |
0x0004 | uint(24) | Bloklængde | |
0x0007 | uint(8) | Flagger | |
0x0008 | uint(32) | Payload-længde | Angiver hvor mange bytes af de følgende data der faktisk er nyttige data. De resterende data fra volume-strenglisten skal åbenbart betragtes som affald. I filer med senere datoer er disse 'resterende data' 0x00, hvilket kan indikere mangler i værktøjskæden under udviklingen af spillet, med andre ord, at en udvikler først meget sent har taget sig af korrekt initialisering af buffere, da det ikke har nogen indflydelse på spillet, om dataene er initialiseret eller ej. |
0x000c | uint(8)[] | Filnavn-liste | Dette er en 0-byte-termineret liste over filnavne, der - i det mindste i denne datakomponent - kun forventer ASCII-tegn. Det er ikke nødvendigt at analysere denne datablok nærmere, når man parser dataene, da filnavnenes offsets allerede refereres direkte i volumenoplysningerne. |
Volume Strings er en liste over filnavne, der er indeholdt i volumenet.
Volumeinformationer
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Magiske bytes | |
0x0004 | uint(24) | Bloklængde | |
0x0007 | uint(8) | Flagger |
Volume-oplysningerne indeholder mere detaljerede oplysninger om filerne. Det drejer sig på en måde om en slags FAT-katalogpost (FAT = File Allocation Table)
Antallet af filer beregnes ved at dividere blokstørrelsen med længden af katalogposterne - 14 byte.
De enkelte katalogposter har følgende opbygning:
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Filnavn-offset | Angiver, ved hvilken offset (!) inden for filnavnslisten (volume-strenge), filnavnet på filen findes. Dette henviser til begyndelsen af datablokken. |
0x0004 | uint(32) | Fil-offset | Angiver, hvilken offset inden for hele volume-filen filen befinder sig. |
0x0008 | uint(32) | Filstørrelse | Angiver, hvor stor filen er i byte. |
0x000c | uint(16) | Flagger? | Angiver åbenbart yderligere oplysninger om filkodningen.
|
Volume Blok
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | tegn | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 42 | 4c | 48 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | B | L | H | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datatype | Betegnelse | Forklaring |
---|---|---|---|
0x0000 | uint(32) | Magiske bytes | |
0x0004 | uint(24) | Bloklængde | |
0x0007 | uint(8) | Flagger |
En volume-block er en beholder, der indeholder filer. Den indeholder blot endnu en gang - på grund af blokformatet - redundant filstørrelsen, og derefter følger direkte brugerdataene.