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

事件、动态,我们都有了,但是如何把动态图和底图结合起来, Redevent.paf 中似乎没有这个信息。换句话说,一定有另一个文件保存了两者的关联关系。

目录

本系列已完结,以下是各章节说明,17 之前是 dos 版相关,之后是 2001 版:

  1. 背景、简单分析
  2. 显存位置
  3. 事件图保存算法: LZW
  4. 调色板
  5. MGP2
  6. 结局图
  7. 事件图中的眼睛
  8. 音频文件
  9. 按位读取
  10. 循环之前
  11. 读取循环
  12. 重现 LZW
  13. PAT 的图形格式
  14. STAFF 调色板
  15. 字体文件
  16. 脚本解密
  17. 版本比较
  18. 第一张图
  19. 调色板1
  20. 第二张图
  21. 调色板2
  22. 调色板处理
  23. 静态事件图、结局图
  24. 动态图、鉴赏模式

Event.DAT

这应该也不是什么问题,DOS 版也是这么做的,重新检查一下启动游戏时的读取文件日志, 我们就可以很快找到怀疑目标:

起这么一个名字,那么多半就是你了:

第一个数字应该是数据的数量,123 这个数字也对得上事件图个数, 后面的部分就是加密的了,同样是类似 ROT13 的做法, 根据一定规则对每个 byte 做一个转换,需要解密一下:

let content = read::from_bin(path);
let count = u32_from_vec_u8(&content, 0x0) as usize;
// FUN_0040f510
let mut parsed_content = vec![];
let mut secret = 0x11;
let len = 0xd4;
for i in 0..count {
    let offset = 4 + i * len;
    let mut piece_vec = vec![];
    for j in 0..len {
        secret = (j as u8).wrapping_mul(secret).wrapping_add(1);
        let c = content[offset + j] ^ secret;
        parsed_content.push(c);
        piece_vec.push(c);
    }
}

这样我们就有了解密后的数据,对应的结构我也写了出来:

一共 123 组,对应 123 个事件图,每组四个眼睛,是的,和 dos 的资源完全一样, index 如果是 0xffffffff 表示这个眼睛没有用到,其他数字的话, 就是用到了从 index 开始的 count 个眼睛图,注意这个编号是从 0 开始的,也就是说, 我们从 Redevent.paf 中提取出三组资源(事件、动态、结局), 编号 0 对应动态资源的第一个。

全部的细节都已经有了,画图就很轻松了。2001 版的图与原版图有多相似, 其实用四美图就可以说明了:

对,宝钗脸上的抖动依然没修,我们之前分析过这个问题, 因为后三张动态比第一张宽了一个像素,之前我是认为可能是疏忽,对错了一个像素, 后来发现类似这样的情况不止一处,所以可能是作者故意用这个位移来表达面部的动作。 我现在觉得红楼梦 2001 应该算是原版的 windows 移植版,七彩狼可能只出了一个程序, 就完成了这个作品,程序老哥借此机会掌握了 windows 下的编程技术, 不要小看轻描淡写的一句「掌握了 windows 下的编程技术」,这个其实很难, 经历过的人都知道,或者我举个例子,仙剑的姚仙,可能就没有跨过这个门槛, 因为传闻仙剑 95/98 和大富翁 4 的程序是外包。

One more thing

事情到了这里,我对红楼梦 2001 的研究应该是完全结束了, 总体 windows 版的难度要比 dos 版高出不少,但是收获却和之前差不多, 说起来还有些失望,代码部分我还在整理, 可能后面哪天就没声没响地出现在我的 gitlab 上了,不过对代码感兴趣的可能还是少数, 很多看我这个系列的朋友可能还是冲着「十二金钗全 CG 图档」来的,别着急, 图档我是不会给的,而且网络上所有的图档都没做出来自然的眼睛特效,所以我给大家提供 了另一份东西:

替换掉游戏原始文档(注意备份),你会发现,游戏中多了鉴赏的部分。

这部分包含了全事件图、全结局图,以及所有攻略对象事件, 完全是使用游戏提供的脚本功能实现的,应该比图档有意思多了吧。 不过脚本部分我没有做完整的测试,所以可能会有些地方会有问题, 如果有遇到问题可以联系我修复。

眼睛部分的分析内容其实大概一个月前我就已经完成了,这段时间一直在准备这个鉴赏功能, 平时空闲不多,目前两个版本的事件鉴赏都弄完了,总体说来,我的看法是画面 dos 版占优, 游戏脚本 2001 版占优。

好了,这个系列差不多也该结束了,对于两个版本的十二金钗,我的系列停在二十四, 我想再合适不过了,我们就下个游戏见吧。