从这一期开始要变得精彩了,我们终于要见到一些游戏资源了, 这里要特别感谢 gamebase 骨灰集散地的青杉大大, 没有他的帮助我估计还在摸索中
本系列已完结,以下为整理目录方便查阅
这类文件有一个特点,每个文件的头部四位数字在文件中会重复出现很多次,
而且分布非常均匀,以 CARD.BLK 文件为例,这个文件以 15 00 e0 00
开头,
共 26 处,所以把文件分割为 26 个 18820 大小的区块,
这么看来我们可以推测 blk 就是 block 的意思。
15 00 e0 00
其实也有其含义, 00 15
代表宽度(21,但是并不等于宽度),
00 e0
表示图像的高度(224),如果你有手工截取过游戏中的卡片截图,
就更清楚这两个数字的意思:
卡片的大小是 168 x 224,结合前面的数字,我们不难发现, 168 正好是 21 的 8 倍,所以 0x15 确实代表宽度,但为何要乘以 8, 我们还不得而知。
既然卡片大小是 168 x 224,我们又知道对于 16 色图像, 一个 byte 可以表示两个颜色,那么所需的空间就是 168 x 224 / 2 = 18816, 加上四字节的尺寸信息,正好是 18820!是不是很令人激动, 现在我们基本可以确定,文件保存的就是完整的卡片图像。
于是我就尝试直接读取文件内容然后依据长宽来直接绘制卡片了, 不过很遗憾,没有成功:
无论横竖都被切成了四块,不过虽然没有成功,我们也可以确实是改建卡没错, 因为基本还是看得出形状的。
这个问题困扰我好久了之后,我选择去 gamebase 问了青衫大大, 没想到他很快就认出了这是 4plane 的图像格式。
所谓 4plane,是针对 16 色图片,由于颜色数可以用 4 个 bit 表示,
那么就可以把一张图拆成四层,每一层都只记录 1 个 bit 的颜色信息,
四层颜色信息叠加在一起,才是实际的颜色,
所以如果直接绘制就会横竖都四等份,而且颜色错误,
这也是为何宽度要用 0x15
来表示, 0x15 * 0xe0
就是一层的尺寸。
这时我们就可以还原很多图片出来啦, 卡片、日历、机会和新闻都是采用这种格式:
三幅图分别是机会、日历、新闻的第一张图, 感觉机会和新闻都没有见过对不对,这就是福利内容了, 应该是开发测试用但后期未采纳的图片吧, 新闻还玩了 flying windows 屏保的梗,老玩家可能会会心一笑, 看来大宇虽然那时还在坚守 dos 平台,但是 windows 其实他们也在用。 为什么中元节是日历第一张, 那就不得而知了。