Volume · bei.pm
Formatele de fișier descrise pe această pagină se bazează pe analiza tehnică a proprietății intelectuale de la Dynamix, Inc. și Sierra Entertainment.
Proprietatea intelectuală este astăzi parte a masei Activision Publishing, Inc. / Activision Blizzard, Inc. și este deținută în prezent de Microsoft Corp..
Informațiile au fost adunate prin Inginerie Inversă și Analiza Datelor în scopul arhivării și interoperabilității cu datele istorice.
Nu au fost folosite specificații proprietare sau confidențiale.
Jocul poate fi achiziționat în prezent de la gog.com ca descărcare.
Volițele sunt un container de date pentru joc, asemănător cu un format de arhivă, cum ar fi Tarball. În cel puțin Outpost 2, formatul cunoaște doar fișiere - fără foldere. Cel mai probabil, acestea ar putea fi simulate prin denumiri corespunzătoare ale fișierelor.
Un volum constă din antetul volumului, precum și din mai multe blocuri de volum, care corespund fișierelor concrete.
"Volumele" sunt fișierele cu extensia 'vol'
din directorul jocului.
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 4f | 4c | 20 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | O | L | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Bytes Magice | |
0x0004 | uint(24) | Lungimea blocului | |
0x0007 | uint(8) | Steaguri |
Antet Volum
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 68 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | h | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Bytes Magice | |
0x0004 | uint(24) | Lungimea blocului | |
0x0007 | uint(8) | Steaguri |
Antetul volumului nu conține date utile.
Acesta servește doar ca un container.
Primul element în antetul volumului ar trebui să fie șirurile volumului; urmate apoi de informațiile despre volum.
Șiruri de volum
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Bytes Magice | |
0x0004 | uint(24) | Lungimea blocului | |
0x0007 | uint(8) | Steaguri |
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 73 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | s | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Bytes Magice | |
0x0004 | uint(24) | Lungimea blocului | |
0x0007 | uint(8) | Steaguri | |
0x0008 | uint(32) | Lungimea payload-ului | Indică câte byte din datele următoare sunt de fapt date utile. Datele rămase din lista de volume-strings sunt evident de considerat gunoi. În fișierele cu dată ulterioară, aceste 'date rămase' sunt 0x00, ceea ce ar putea indica neajunsuri ale toolchain-ului în timpul dezvoltării jocului, adică, un dezvoltator s-ar fi ocupat de corecta inițializare a bufferelor abia foarte târziu, deoarece nu are impact asupra jocului dacă datele sunt inițializate sau nu. |
0x000c | uint(8)[] | Lista numelui fișierelor | Aici este vorba despre o listă de nume de fișiere terminată cu 0 bytes, care - cel puțin în componenta de date prezentată - pare să aștepte doar caractere ASCII. Nu este necesar să evaluăm mai în detaliu acest bloc de date în timpul parsării, deoarece în informațiile volumului sunt referite direct offset-urile numelui fișierelor. |
Volume Strings reprezintă o listă de nume de fișiere care sunt incluse în volum.
Informații despre volum
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 76 | 6f | 6c | 69 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | v | o | l | i | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Bytes Magice | |
0x0004 | uint(24) | Lungimea blocului | |
0x0007 | uint(8) | Steaguri |
Informațiile despre volum conțin detalii mai aprofundate despre fișiere. Acestea reprezintă, într-un fel, un fel de înregistrare în director FAT (FAT = File Allocation Table)
Numărul de fișiere rezultă din dimensiunea blocului împărțită la lungimea înregistrărilor din director - 14 octeți.
Fiecare înregistrare din director are următoarea structură:
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Offset nume fișier | Indică la ce offset (!) din lista de nume de fișiere (Volume-Strings) se găsește numele fișierului. Se referă la începutul blocului de date utile. |
0x0004 | uint(32) | Offset de fișier | Indică la ce offset din întreaga fișier de volum se află fișierul. |
0x0008 | uint(32) | Dimensiunea fișierului | Indică cât de mare este fișierul în byte. |
0x000c | uint(16) | Steaguri? | Se pare că oferă informații suplimentare despre codificarea fișierului.
|
Bloc de volum
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractere | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 56 | 42 | 4c | 48 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | V | B | L | H | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Tip de date | Denumire | Explicație |
---|---|---|---|
0x0000 | uint(32) | Bytes Magice | |
0x0004 | uint(24) | Lungimea blocului | |
0x0007 | uint(8) | Steaguri |
Un volum-block este un container care găzduiește fișiere. Acesta conține doar din nou - datorită formatului block - redundant dimensiunea fișierului, iar apoi urmează direct datele utilizatorului.