现在这个「MGP2」格式应该不会对我们再造成什么障碍了吧, 我们这次完整检查一下 MGP2 的文件结构
本系列已完结,以下是各章节说明,17 之前是 dos 版相关,之后是 2001 版:
文件头以 MGP2 开头,一直到 1ch
结束:
04h
05h
不太明确,其他应该就是普通字符串,可以直接读取 。接下来 00 00 00 7c
推测是图片数(124),然后 3d 03
推测是图片的索引起始位置。接下来 23h
到 3ch
的意义不明。
主调色板从 3dh
开始,到 033ch
结束,这个我们上一次有讲到,主要用于人物的绘制,其他调色板会在此基础上替换部分颜色。
从 033dh 开始就是图片位置的索引了,索引数据按以下顺序排列:
1d 07 00 00
表示第一个文件位置在 0000071dh
80 02
表示宽度 64067 01
表示高度 359每个索引数据共 8 字节,而我们又知道了第一个文件在 071dh
,这样我们可以算出索引的数目,索引的总长度为 071dh - 033dh = 3e0h = 992,992 / 8 = 124,正好对应图片数 7c
接下来的部分就是图片数据了,对于单一图片来说我们不知道图片的大小,只能通过下一图片位置减去当前图片位置来计算得出,原因现在我们也知道了,因为图像的解析是通过控制字符结束的,当解析到 0101h
,就意味着图形内容结束了,接下来紧跟着的是 112 色调色板,用来表示图像的特殊颜色,所以图片数据是按如下顺序保存:
EVENT.PAT 确实是严格按照上面格式组织的数据,但是这也不代表解析时没有遇到问题,又有未想到的情况发生了。
我们在第三篇的解析中,有一个假设,允许程序插入不存在的索引,但是,也加入一个限定,不允许插入的索引高于当前未插入的索引,现在,这个例外也来了,我没有去追实际程序是怎么处理的,只是默默把程序改成了连续插入不存在的索引:
这样解析出的图像似乎也没什么问题,就没有再深究。另外事件图确实是 124 张,比我这里的看图档多了一张,不过我只瞄了一眼,没有仔细比对,而且还感觉有些图有重复。
EVENT.PAT 我们已经搞定了,那么其他 PAT 文档呢,我也全部测试了一下
我们注意到了一些挂羊头卖狗肉的情况,有些文件虽然不是 MGP2 的格式,也被命名为 PAT,除去这些,剩余文件虽以 MGP2 格式打包,但是实际内容格式如何解析,恐怕需要具体问题具体分析。