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

地址 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 字符
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
偏移量 数据类型 名称 解释
0x0000 uint(32) 魔法字节
0x0004 uint(24) 区块长度
0x0007 uint(8) 旗帜

这些图块是针对Outpost-2的特定位图图形格式。它们分为13个图块集,称为“wells”(well0000.bmpwell0012.bmp),这些文件位于maps.vol中。

这些图块集/Wells包含以下内容:

文件名 内容
well0000.bmp 一张32x32像素的蓝色图形 - 适合作为测试图像加载器是否正常工作
well0001.bmp 包含浅色岩石、在浅色岩石上的山脉和无数种浅色岩石上的撞击坑变体
well0002.bmp 包含浅色岩石的装饰物 - 即可以放置在浅色岩石上以增添装饰(或故意作为结构,如墙壁)的元素,包括植物
well0003.bmp 包含在浅色岩石上的一种表皮状结构
well0004.bmp 包含深色岩石、在深色岩石上的山脉和无数种深色岩石上的撞击坑变体
well0005.bmp 包含深色岩石的装饰物 - 即可以放置在深色岩石上以增添装饰(或故意作为结构,如墙壁)的元素
well0006.bmp 包含深色岩石上的表皮状结构,以及浅色岩石和深色岩石之间的过渡
well0007.bmp 包含熔岩以及每个4-5帧的动画
well0008.bmp 包含沙子和无数种沙子上的撞击坑变体
well0009.bmp 包含沙子的装饰物 - 即可以放置在沙子上以增添装饰(或故意作为结构,如墙壁)的元素
well0010.bmp 包含48个沙子与浅色岩石和深色岩石之间的过渡
well0011.bmp 包含地图的极地冰盖,底下是深色岩石
well0012.bmp 包含地图的极地冰盖,底下是浅色岩石

为了准确的实现,建议不要提前渲染瓷砖以进行缓存,因为日夜循环的数据仍需处理,并且会产生大量数据。

这些瓷砖是8bpp的图形,具有32x32像素分辨率的索引调色板,并且是相互排列的。然而,在这样形成的瓷砖集中,可以有更多的内容。

主容器由两个部分组成:headdata

瓷砖标题

地址 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 字符
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
偏移量 数据类型 名称 解释
0x0000 uint(32) 魔法字节
0x0004 uint(24) 区块长度
0x0007 uint(8) 旗帜
0x0008 uint(32) 版本 / 标志?

这可能是文件格式的版本标识;在我所拥有的所有文件中,这里显示的值为 0x02

0x000c uint(32) 宽度(横向分辨率)

表示图像文件的宽度(以像素为单位)。

在Outpost 2的所有井中,这里预期的值是 0x2032

0x0010 uint(32) 高度(垂直分辨率)

指明图像文件的高度(以像素为单位)。

在所有 Outpost 2 的井中,预计该值为 0x2032

0x0014 uint(32) 色深?

该值的意义未知。

由于它在所有检查过的文件中都包含值 8,这可能是一个颜色深度的指示。

0x0018 uint(32) 颜色深度 2?

该值的意义未知。

这可能是一个“目标”色深。

根据这些信息,还会提供一个以标准化RIFF格式存在的调色板文件。具体规格可以在这里找到 - 由于调色板在其他地方也出现过 - 在 调色板

瓷砖数据

地址 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF 字符
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
偏移量 数据类型 名称 解释
0x0000 uint(32) 魔法字节
0x0004 uint(24) 区块长度
0x0007 uint(8) 旗帜

最后是原始像素数据,从左上角按行向右下角排列。
通常以8bpp位图格式存在的图形中的数据值对应于颜色调色板中的颜色索引。

像素数据从左上角开始,右下角结束。

游戏引擎在需求时*可能*绘制瓷砖。
这似乎与昼夜循环有关,该循环有32个瓷砖的细分。在此过程中,亮度值显然会被“稍微”减少。确切的数值尚未确定,我正在基于以下计算进行工作。

v *= (daylight / 48) + 0.25;

使用像素的HSV数据,其中daylight是0到31之间的值,v是0到1之间的值。此外,还需考虑地图的左右各有16个瓷砖的边缘(用于单位的隐形生成)。

此外,昼夜循环似乎每个游戏周期只更新地图的一列。
加速的昼夜循环如下所示:

昼夜循环的可视化