Woluminy · bei.pm

Opublikowano 19.11.2015·Zaktualizowano 13.02.2025·Polski
Ten tekst został automatycznie przetłumaczony przez OpenAI GPT-4o Mini.

Opisywane na tej stronie formaty plików opierają się na analizie technicznej własności intelektualnej Dynamix, Inc. oraz Sierra Entertainment.
Własność intelektualna jest obecnie częścią majątku Activision Publishing, Inc. / Activision Blizzard, Inc. i jest aktualnie w posiadaniu Microsoft Corp..

Informacje zostały zebrane poprzez inżynierię odwrotną oraz analizę danych w celach archiwizacji i interoperacyjności z danymi historycznymi.
Nie wykorzystano żadnych zastrzeżonych ani poufnych specyfikacji.

Gra jest obecnie dostępna do zakupu jako pobranie na stronie gog.com.

Volume to kontener danych dla gry, podobny do formatu archiwum, takiego jak Tarball. Przynajmniej w Outpost 2 format ten zna jedynie pliki - bez folderów. Prawdopodobnie jednak można by je zasymulować za pomocą odpowiednich nazw plików.

Volume składa się z nagłówka Volume oraz z kilku bloków Volume, które odpowiadają konkretnym plikom.

"Volumes" to pliki z rozszerzeniem 'vol' w katalogu gry.

Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Bajty Magii
0x0004 uint(24) Długość bloku
0x0007 uint(8) Flagi

Nagłówek objętości

Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Bajty Magii
0x0004 uint(24) Długość bloku
0x0007 uint(8) Flagi

Nagłówek wolumenu sam w sobie nie zawiera żadnych danych użytkowych.
Jest jedynie kontenerem.

Pierwszymi danymi w nagłówku wolumenu powinny być ciągi wolumenu; następnie pojawiają się informacje o wolumenie.

Łańcuchy objętości

Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Bajty Magii
0x0004 uint(24) Długość bloku
0x0007 uint(8) Flagi
Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Bajty Magii
0x0004 uint(24) Długość bloku
0x0007 uint(8) Flagi
0x0008 uint(32) Długość ładunku

Podaje, ile bajtów z poniższych danych to rzeczywiste dane użytkowe.

Pozostałe, niewykorzystane dane na liście łańcuchów wolumenów są najwyraźniej traktowane jako śmieci.

W plikach z późniejszą datą te 'pozostałe dane' to 0x00, co może sugerować niedociągnięcia w narzędziach podczas rozwoju gry, a mianowicie, że programista zajął się poprawną inicjalizacją buforów dopiero na bardzo późnym etapie, ponieważ nie ma to wpływu na grę, czy dane są zainicjowane, czy nie.

0x000c uint(8)[] Lista nazw plików

Jest to lista nazw plików zakończona znakiem 0-bajtów, która - przynajmniej w bieżącej części danych - oczekuje jedynie znaków ASCII.

Nie ma potrzeby, aby przy analizie danych dokładniej oceniać ten blok danych, ponieważ w informacjach o woluminie i tak bezpośrednio odniesione są offsety nazw plików.

Volume Strings to lista nazw plików, które znajdują się w obrębie woluminu.

Informacje o wolumenie

Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Bajty Magii
0x0004 uint(24) Długość bloku
0x0007 uint(8) Flagi

Informacje o woluminie zawierają bardziej szczegółowe dane na temat plików. W pewnym sensie jest to rodzaj wpisu w katalogu FAT (FAT = Tablica Przydziału Plików).

Liczba plików wynika z wielkości bloku podzielonej przez długość wpisów katalogowych - 14 bajtów.

Pojedyncze wpisy katalogowe mają następującą strukturę:

Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Offset nazwy pliku

Określa, na którym offsetcie (!) w liście nazw plików (Volume-Strings) znajduje się nazwa pliku.

Odnoszą się do początku bloku danych użytkownika.

0x0004 uint(32) Offset pliku

Określa, na którym offsetcie w obrębie całego pliku wolumenu znajduje się plik.

0x0008 uint(32) Rozmiar pliku

Określa, jak duży jest plik w bajtach.

0x000c uint(16) Flagi?

Wygląda na to, że zawiera dodatkowe informacje o kodowaniu pliku.

  • 0x03 jest ustawione, gdy plik jest skompresowany. Wydaje się, że stosowany jest tutaj drzewo Huffmana.
  • 0x80 wydaje się być zawsze ustawione.

Blok objętości

Adres x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF znak
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Przesunięcie Typ danych Nazwa Wyjaśnienie
0x0000 uint(32) Bajty Magii
0x0004 uint(24) Długość bloku
0x0007 uint(8) Flagi

Blok woluminu to kontener, który przechowuje pliki. Zawiera on jedynie - ze względu na format bloku - redundantnie rozmiar pliku, a następnie bezpośrednio następują dane użytkowe.