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

上次我们大致对 PVS 档案的格式有了个思路,接下来我们就继续进行完整的分析吧

文件结构

反过来看 PVS 的文件结构,其实很简单,文件分为三个部分,头部标记、调色板、以及 图形部分

头部标记

每个 PVS 文件都以 30 00 00 08 开头

调色板

接下来的 48 个字节就是调色板了,读取方式和 16.PAT 的读取方式相同,这个 以前 有介绍过,也不再多讲。之前分析绘图过程时,调色板的信息是被我忽略的,因为觉得 可以直接使用 16.PAT 后来发现,PASS*.PVS 的颜色不对,才确认需要用到其他的调色板, 不过那时已经猜到,调色板就在头部。

图形部分

接下来的部分就是动画帧了,每帧都是由四字节长度再加背景图内容的「长度-值」模式 构成的,一直到文件尾,背景图的解码方式直接参考 青衫 就好,不过这部分由于每帧都是基于之前绘制的结果,所以第一帧的数据量最多,其他帧 只写入变化部分,所以绘制时需要保留上一帧的结果,再加上变化内容。

各 PVS 档内容

文件名 内容 创建时间
ACA.PVS 法官敲槌 Jan 19, 1996 6:41 AM (GMT)
MARK.PVS 开场动画 May 21, 1996 8:48 PM (GMT)
MOA.PVS 各位客户辛苦了-旗袍版 Jan 28, 1996 5:34 AM (GMT)
MOB.PVS 公布本月排行榜-旗袍版 Jan 28, 1996 5:36 AM (GMT)
MSA.PVS 各位客户辛苦了-制服版 Jan 28, 1996 5:39 AM (GMT)
MSB.PVS 公布本月排行榜-制服版 Jan 28, 1996 5:41 AM (GMT)
PASS1-1.PVS 台北通关-孙小美 Jan 31, 1996 2:01 PM (GMT)
PASS1-10.PVS 台北通关-小丹尼 Jan 30, 1996 11:22 PM (GMT)
PASS1-11.PVS 台北通关-沙隆巴斯 Jan 31, 1996 12:49 PM (GMT)
PASS1-12.PVS 台北通关-阿土 Jan 30, 1996 10:27 PM (GMT)
PASS1-2.PVS 台北通关-钱夫人 Jan 31, 1996 2:12 PM (GMT)
PASS1-3.PVS 台北通关-珍妮佛 Jan 31, 1996 9:10 AM (GMT)
PASS1-4.PVS 台北通关-石桥贵子 Jan 30, 1996 11:02 PM (GMT)
PASS1-5.PVS 台北通关-玛格丽特 Jan 30, 1996 11:43 PM (GMT)
PASS1-6.PVS 台北通关-林娇娇 Jan 30, 1996 10:06 PM (GMT)
PASS1-7.PVS 台北通关-金凯子 Jan 30, 1996 10:41 PM (GMT)
PASS1-8.PVS 台北通关-安德烈 Jan 31, 1996 11:45 AM (GMT)
PASS1-9.PVS 台北通关-白瑞德 Jan 31, 1996 5:52 PM (GMT)
PASS2-1.PVS 台湾通关-孙小美 Jan 31, 1996 2:26 PM (GMT)
PASS2-10.PVS 台湾通关-小丹尼 Jan 30, 1996 11:33 PM (GMT)
PASS2-11.PVS 台湾通关-沙隆巴斯 Jan 31, 1996 1:11 PM (GMT)
PASS2-12.PVS 台湾通关-阿土 Jan 31, 1996 4:46 PM (GMT)
PASS2-2.PVS 台湾通关-钱夫人 Jan 31, 1996 7:56 AM (GMT)
PASS2-3.PVS 台湾通关-珍妮佛 Jan 31, 1996 9:43 AM (GMT)
PASS2-4.PVS 台湾通关-石桥贵子 Jan 31, 1996 11:12 PM (GMT)
PASS2-5.PVS 台湾通关-玛格丽特 Jan 31, 1996 2:18 PM (GMT)
PASS2-6.PVS 台湾通关-林娇娇 Jan 31, 1996 3:07 PM (GMT)
PASS2-7.PVS 台湾通关-金凯子 Jan 31, 1996 7:09 AM (GMT)
PASS2-8.PVS 台湾通关-安德烈 Jan 31, 1996 12:06 PM (GMT)
PASS2-9.PVS 台湾通关-白瑞德 Jan 30, 1996 10:01 PM (GMT)
PASS3-1.PVS 大陆通关-孙小美 Jan 31, 1996 1:36 PM (GMT)
PASS3-10.PVS 大陆通关-小丹尼 Jan 30, 1996 11:13 PM (GMT)
PASS3-11.PVS 大陆通关-沙隆巴斯 Jan 31, 1996 12:28 PM (GMT)
PASS3-12.PVS 大陆通关-阿土 Jan 31, 1996 3:08 PM (GMT)
PASS3-2.PVS 大陆通关-钱夫人 Feb 1, 1996 12:33 AM (GMT)
PASS3-3.PVS 大陆通关-珍妮佛 Jan 30, 1996 10:04 PM (GMT)
PASS3-4.PVS 大陆通关-石桥贵子 Jan 31, 1996 10:02 PM (GMT)
PASS3-5.PVS 大陆通关-玛格丽特 Jan 31, 1996 6:51 PM (GMT)
PASS3-6.PVS 大陆通关-林娇娇 Jan 31, 1996 10:09 AM (GMT)
PASS3-7.PVS 大陆通关-金凯子 Jan 30, 1996 10:19 PM (GMT)
PASS3-8.PVS 大陆通关-安德烈 Jan 31, 1996 11:24 AM (GMT)
PASS3-9.PVS 大陆通关-白瑞德 Jan 31, 1996 5:19 PM (GMT)
SS16.PVS 大宇 LOGO Jan 18, 1996 7:23 AM (GMT)

ACA、MOA、MOB、MSA、MSB 使用 16.PAT 也可以画出来,但是 PASS 系列就要用专用的 调色板了,SS16 么,留给大家验证吧

只有 PASS2-12 在解析时遇到了问题,有一桢的长度数据是错的,特殊处理了一下,遇到 错误长度终止解析,导致这个动画会短一点,我不清楚是我这个版本的问题,还是原厂 数据就错了。

总结

现在回头看 PVS 格式,感觉很简单,但是实际回顾整个摸索的时间,其实还是付出了不少 的精力,首先要学会用 dosbox 调试程序,然后要看懂简单的汇编,最后是了解 VGA 的 绘图方法,还好没有时程的压力,从我开始对 PVS 文件产生好奇,到真正解出来已经 好几个月过去了,当然期间也不是一直有时间来研究这个,很多时候也是根据疑问看了一堆 资料,结果当初的疑问没有解决,还产生了更多的疑问,挫败感还是很多的。感觉现在 大富翁 3 这个心结我已经基本解开了,希望这个系列也能帮到其他想要了解那个时代游戏 资源的朋友,我也把解析的代码放了一份到 gitlab, 供大家参考,如果有任何疑问,还请联系我,这个系列先告一段落吧。