大富翁 3 游戏文件分析(二)

我们首先从一些简单的文件开始分析吧

1 打算写的内容

2 简单文件分析

2.1 16.PAT

2.1.1 分析

这恐怕是最好分析的文件,不过要确定如何使用,还是有些难度。 从文件名我们就可以知道,这是一个 16 色的调色板文件, 而且文件大小是 48 个字节,由于我们知道每种颜色都是红绿蓝三原色组合而成的, 16 * 3 = 48,所以毫无疑问这是一个调色板文件。

2.1.2 文件内容

我们来看一下文件内容:

看上去最大的数值是 3F,也就是 63,这也不奇怪,那时候三原色的取值范围是 0 到 63, 现在我们一般是 0 到 255,所以如果不做转换的话,颜色会非常暗。 转换的方法简单一点的做法是左移两位,相当于乘以 4,不过这样的话 63 * 4 = 252, 并没有完全覆盖到 0 到 255 的范围,所以我建议用 c * 255 / 63 来转换。

2.1.3 调色板颜色

基于这样的思路,我们就可以把这个文件转换成 16 色调色板了,当 然这里有一个假设,就是颜色是按「红绿蓝」的格式排列的:

看上去游戏中常用的颜色也都有,这样感觉是不是还挺简单的? 其实到现在我也没有完全搞清楚这个调色板是要用到哪里……

2.1.4 题外话

我一直以为大富翁 3 应该是 256 色的,这个误解也一直影响我对游戏资源的分析, 因为我花了很久时间来寻找 256 色的调色板,结果当然是没找到, 后来看到这段话我才清楚自己搞错了方向:

从一代的单色、二代低解析256色、三代的高解析16色, 其显示模式一直随着电脑技术的发展不断进步着。

我不晓得这篇文章的出处在哪里,因为可以搜到很多相同的内容, 不过从「解析」这个词判断,可能是台湾同胞的介绍。

说这个题外话是为了赞叹大富翁 3 的美术出色,至少,它骗过了我这个美术外行人。

2.2 CALD.A

2.2.1 分析

这个也简单,文件名其实有点暗示,这是一个日历(Calenda), 从这个思路下看文件内容会变得非常简单。

2.2.2 文件内容

很整齐的格式,每行四个 cc 07 一直到文件末尾也是如此,而且有一个递增的数字, 首先 cc 07 是什么呢,有经验的同学可能知道,这个是小字节序, 正常表示应该是 0x07cc ,这个数字转换为十进制是 1996, 那么基本上我们可以确定这个文件的内容就是日期了,格式是 日月年, 根据维基百科,大富翁 3 的发售日是 1996 年 3 月 10 日, 文件内容从 1996-1-1 开始,也比较合理,也许你会好奇这个文件的最后一天是那一天呢, 拉到文件最后就知道了,最后一组数字是 1f0c e407 ,现在我们应该知道, 这个数字其实应该写作 0x07e4-0x0c-0x1f ,也就是 2020-12-31 日, 这一天既是年底,又正好补齐了 16 字节的长度。

2.3 CALD.B

2.3.1 分析

有了上面的分析经验,相信你一定能猜到这个文件是做什么用的,没错,农历日历。

2.3.2 文件内容

既然 cc 07 是 1996,那么 cb 07 一定就是 1995,所以尽管是农历, 关于年份,大富翁 3 采用的依然是西元纪年, 那么 1996-1-1 对应的农历日期就是 1995-11-11,我们查一下万年历:

所以这个文件保存的确定是农历日期。

由于 cald.a 和 cald.b 的文件长度完全相同, 所以游戏应该是根据阳历日期的索引去寻找对应的农历日期, 这个做法也可以理解,因为农历日期的计算是一个很复杂的过程, 一般简化的做法也是根据天文台计算的万年历来推算日期。

2.3.3 冷知识

看到这里你可能以为大富翁的农历日期可以显示到今年年底,但其实不是, 如果你现在开一盘新游戏,你会发现农历日期已经不存在了, 我记得去年玩的时候开始好像还是正常的,所以虽然文件中的日期排到了今年年底, 但游戏中并没有用到,具体是哪一天开始失效以及为什么失效,以后有空再研究吧。