· 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上以下载形式购买。

卷是游戏的数据容器,类似于档案格式,如 Tarball。 至少在 Outpost 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目录项(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) 旗帜

卷块是一个容器,能够容纳文件。它仅仅是由于块格式而冗余地包含了文件大小,随后紧接着是实际数据。