ボリューム · bei.pm

公開日 2015年11月19日·更新日 2025年02月13日·日本語
このテキストはOpenAI GPT-4o Miniによって自動的に翻訳されました。

このページに記載されているファイル形式は、Dynamix, Inc.Sierra Entertainment の知的財産に関する技術分析に基づいています。
この知的財産は現在、Activision Publishing, Inc. / Activision Blizzard, Inc. に属しており、現在は Microsoft Corp. に所有されています。

情報は、アーカイブと歴史的データとの相互運用性を目的とした リバースエンジニアリングデータ分析 によって収集されました。
独自の機密仕様は使用されていません。

現在、このゲームは gog.com でダウンロード購入できます。

ボリュームは、ゲームのためのデータコンテナで、アーカイブ形式のようなものです。例えば、タールボールのように。 少なくともアウトポスト2では、この形式はファイルだけを扱い、フォルダーはありません。 ただし、適切なファイル名を使うことで、これを模倣することができるでしょう。

ボリュームは、ボリュームヘッダーと、特定のファイルに対応するいくつかのボリュームブロックで構成されています。

「ボリューム」は、ゲームディレクトリ内の'vol'という拡張子を持つファイルです。

アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) マジックバイト
0x0004 uint(24) ブロックの長さ
0x0007 uint(8)

ボリュームヘッダー

アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) マジックバイト
0x0004 uint(24) ブロックの長さ
0x0007 uint(8)

ボリュームヘッダーには、実際のデータは含まれていません。
これは単なるコンテナとして機能します。

ボリュームヘッダーの最初のデータにはボリューム文字列があり、その後にボリューム情報が続きます。

ボリューム文字列

アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) マジックバイト
0x0004 uint(24) ブロックの長さ
0x0007 uint(8)
アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) マジックバイト
0x0004 uint(24) ブロックの長さ
0x0007 uint(8)
0x0008 uint(32) ペイロードの長さ

以下のデータのうち、実際にどれだけのバイトが有効データであるかを示します。

ボリューム文字列リストの残りのデータは、明らかにゴミと見なされます。

新しい日付のファイルでは、これらの「残りのデータ」は0x00であり、これはゲームの開発中にツールチェーンに欠陥があったことを示しているかもしれません。つまり、データが初期化されているかどうかはゲームに影響しないため、開発者がバッファの正しい初期化に気を配ったのは非常に遅くなった可能性があります。

0x000c uint(8)[] ファイル名リスト

これは、ファイル名の0バイト終端リストであり、少なくとも現在のデータ部分ではASCII文字のみが期待されます。

データを解析する際に、このデータブロックをより詳しく評価する必要はありません。なぜなら、ボリューム情報の中でファイル名のオフセットが直接参照されているからです。

ボリューム文字列は、ボリューム内に含まれている ファイル名のリストです。

ボリューム情報

アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) マジックバイト
0x0004 uint(24) ブロックの長さ
0x0007 uint(8)

ボリューム情報は、ファイルに関する詳細な情報を含みます。 これは、ある意味でFAT(ファイルアロケーションテーブル)の ディレクトリエントリのようなものです。

ファイルの数は、ブロックサイズをディレクトリエントリの長さ(14バイト)で割ったものになります。

各ディレクトリエントリは、以下の構成を持っています:

アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) ファイル名オフセット

ファイル名リスト(ボリューム文字列)のどのオフセット (!) にファイル名があるかを示します。

これはデータブロックの開始を指します。

0x0004 uint(32) ファイルオフセット

ファイルが全体のボリュームファイル内のどのオフセットに位置しているかを示します。

0x0008 uint(32) ファイルサイズ

ファイルのサイズがバイトでどれくらいかを示します。

0x000c uint(16) 旗?

ファイルのエンコーディングに関する追加情報があるようです。

  • 0x03 はファイルが圧縮されている場合に設定されます。ここではおそらくハフマン木が使用されています。
  • 0x80 は常に設定されているようです。

ボリュームブロック

アドレス x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 文字
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
オフセット データタイプ 名称 説明
0x0000 uint(32) マジックバイト
0x0004 uint(24) ブロックの長さ
0x0007 uint(8)

ボリュームブロックは、ファイルを格納するコンテナです。 ブロック形式のため、ファイルサイズが冗長にもう一度含まれ、 その後に直接利用データが続きます。