红楼梦十二金钗游戏资源分析(五)

现在这个「MGP2」格式应该不会对我们再造成什么障碍了吧, 我们这次完整检查一下 MGP2 的文件结构

文件头

文件头以 MGP2 开头,一直到 1ch 结束:

Untitled

04h 05h 不太明确,其他应该就是普通字符串,可以直接读取 。接下来 00 00 00 7c 推测是图片数(124),然后 3d 03 推测是图片的索引起始位置。接下来 23h3ch 的意义不明。

主调色板

主调色板从 3dh 开始,到 033ch 结束,这个我们上一次有讲到,主要用于人物的绘制,其他调色板会在此基础上替换部分颜色。

Untitled

Untitled

图片索引

从 033dh 开始就是图片位置的索引了,索引数据按以下顺序排列:

  1. 四字节:文件位置索引,例如 1d 07 00 00 表示第一个文件位置在 0000071dh
  2. 双字节:图像宽度,例如 80 02 表示宽度 640
  3. 双字节:图像高度,例如 67 01 表示高度 359

每个索引数据共 8 字节,而我们又知道了第一个文件在 071dh,这样我们可以算出索引的数目,索引的总长度为 071dh - 033dh = 3e0h = 992,992 / 8 = 124,正好对应图片数 7c

图片数据

接下来的部分就是图片数据了,对于单一图片来说我们不知道图片的大小,只能通过下一图片位置减去当前图片位置来计算得出,原因现在我们也知道了,因为图像的解析是通过控制字符结束的,当解析到 0101h,就意味着图形内容结束了,接下来紧跟着的是 112 色调色板,用来表示图像的特殊颜色,所以图片数据是按如下顺序保存:

  1. 压缩后图像数据,无固定长度
  2. 336 字节调色板数据

EVENT.PAT

EVENT.PAT 确实是严格按照上面格式组织的数据,但是这也不代表解析时没有遇到问题,又有未想到的情况发生了。

我们在第三篇的解析中,有一个假设,允许程序插入不存在的索引,但是,也加入一个限定,不允许插入的索引高于当前未插入的索引,现在,这个例外也来了,我没有去追实际程序是怎么处理的,只是默默把程序改成了连续插入不存在的索引:

Untitled

这样解析出的图像似乎也没什么问题,就没有再深究。另外事件图确实是 124 张,比我这里的看图档多了一张,不过我只瞄了一眼,没有仔细比对,而且还感觉有些图有重复。

其他 PAT

EVENT.PAT 我们已经搞定了,那么其他 PAT 文档呢,我也全部测试了一下

  1. AREA.PAT: 可以解析,但是 106 会报错
  2. END.PAT: 无法解析
  3. EVENT.PAT:可以解析
  4. EVENTEYE.PAT: 无法解析
  5. FACE.PAT: 部分可以解析
  6. ITEM.PAT:无法解析
  7. MAP.PAT:可以解析
  8. MARK.PAT:非 MGP2,vlc 可以直接打开
  9. MOUSE.PAT:无法解析
  10. OPEN.PAT:非 MGP2,vlc 可以直接打开
  11. PERSON.PAT:无法解析
  12. SAREA.PAT:无法解析
  13. SETUP.PAT:非 MGP2,vlc 可以直接打开
  14. STAFF.PAT:可以解析,但是调色板有误
  15. SYSTEM.PAT:无法解析
  16. TITLE.PAT:无法解析
  17. WINICON.PAT:无法解析

总结

我们注意到了一些挂羊头卖狗肉的情况,有些文件虽然不是 MGP2 的格式,也被命名为 PAT,除去这些,剩余文件虽以 MGP2 格式打包,但是实际内容格式如何解析,恐怕需要具体问题具体分析。