动画 · bei.pm
此页面所描述的文件格式基于对Dynamix, Inc.和Sierra Entertainment知识产权的技术分析。
该知识产权现属于Activision Publishing, Inc. / Activision Blizzard, Inc.,目前由Microsoft Corp.持有。
这些信息是通过逆向工程和数据分析收集的,目的是为了档案保存和与历史数据的互操作性。
没有使用任何专有或机密的规格。
该游戏目前可以在gog.com上以下载形式购买。
现在我们来到了Outpost 2数据格式中最高级别的学科:
动画。
动画列表以一个全球头部开始,该头部主要用于数据验证。 随后是具体的动画定义,这些定义分为3个层次:
-
动画
动画是最高级别的实例;它表示单位、建筑或“粒子动画”(陨石撞击、天气、爆炸)在特定起始状态下的动画。 -
帧
帧是动画中的单个图像。一段动画可以包含一个或多个帧。 -
子帧
子帧是关于在帧的特定位置以特定条件绘制特定位图的信息。一个帧可以包含一个或多个子帧。
接下来是各个动画定义。
地址 | 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(32) | 可选条目的数量 | 目前有多少个 "可选项"。 |
动画
地址 | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | 字符 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0020 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
偏移量 | 数据类型 | 名称 | 解释 |
---|---|---|---|
0x0000 | uint(32) | 未知 1 | 未知信息 |
0x0004 | uint(32) | 边界框:左侧 | 给出边界框的左侧起始位置(以像素为单位)。 |
0x0008 | uint(32) | 边界框:上方 | 指定边界框的上部起始位置(以像素为单位)。 |
0x000c | uint(32) | 边界框:宽度 | 指定边界框的宽度(以像素为单位)。 |
0x0010 | uint(32) | 边界框:高度 | 指定 边界框 的高度(以像素为单位)。 |
0x0014 | uint(32) | 偏移量:X | 指定动画的水平中心点 |
0x0018 | uint(32) | 偏移量:Y | 指定动画的垂直中心点 |
0x001c | uint(32) | 未知 2 | 未知信息 |
0x0020 | uint(32) | 帧数 | 指明此动画中包含多少个动画帧 |
0x0024 | uint(32) | 窗口数量 | 指明在绘制时应使用多少个窗口 |
最高层的数据,即动画,主要是管理数据 - 边界框 指的是在选择车辆/建筑物时标记的坐标,并同时指明哪个区域可以点击。
偏移量主要确定“零点”;即需要在游戏内部坐标上进行加或减的点。可以更加数学地说:这里的偏移量指定了坐标原点。
窗口与偏移量一样,每个窗口都有4个 uint(32) 值,表示可用于单个子帧的区域。除非位图特别指定,否则不应在窗口外绘制。
框架
地址 | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | 字符 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
偏移量 | 数据类型 | 名称 | 解释 |
---|---|---|---|
0x0000 | uint(8) | 子框架数量和可选项 1, 2 的切换 | 该值包含:
|
0x0001 | uint(8) | 未知 1 和 可选 3, 4 的切换 | 此值包含:
|
0x0002 | uint(8) | 可选 1 | 未知 |
0x0003 | uint(8) | 可选 2 | 未知 |
0x0004 | uint(8) | 可选 3 | 未知 |
0x0005 | uint(8) | 可选 4 | 未知 |
副框架
地址 | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | 字符 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
偏移量 | 数据类型 | 名称 | 解释 |
---|---|---|---|
0x0000 | uint(16) | 位图ID | 指定要为此子框架使用的位图 |
0x0002 | uint(8) | 未知 1 | 尚不清楚 - 不过我强烈怀疑这与渲染优先级(Z层)有关。 |
0x0003 | uint(8) | 子框架ID | 指明我们当前处于哪个子框架 |
0x0004 | sint(16) | 偏移 - 水平 | 指明子框架在框架内的位置,或者位图应水平移动多少像素 |
0x0006 | sint(16) | 偏移 - 垂直 | 指定子框架在框架内的位置,或者位图应垂直移动多少像素 |
这样我们就可以将单个帧以及完整的动画进行组合,下面以索引 500 的复杂动画为例进行演示。
动画 500
动画500展示了如何卸载一辆装载普通矿石的普利茅斯运输车。这是少数利用窗口功能的动画之一。
因此,完整的动画可以组合在一起。
遗憾的是,上方的装载舱门仍然存在问题,因为在图形类型信息中没有设置相应的位。
这里还有一些游戏中的其他美丽动画精灵: