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

dos 版的资源层面,我们已经分析的差不多了。接下来我们索性看看游戏最难触发的事件。

目录

本系列已完结,以下是各章节说明,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. 动态图、鉴赏模式

最难触发的事件

正式游戏中,最难触发的自然是秦可卿终极事件了,这个事件宝玉会和秦一日游

想要触发这个事件,需要完成渺渺真人的寻宝任务,找到两件物品,并在接到寻宝任务的第五天,把物品交给真人。注意是第五天,而不是五天内,也不是五天后的任意一天:

// 渺渺真人寻宝任务片段
SAY 69,'渺渺真人','還有仙姑說不能告訴任何人,若說了就一切都沒用了!好了,我走了,五天後的亥時我會來這等你的。'
CLOSEPERSON
SAY 0,'寶玉','這叫我去哪找呢?'
PlayMusic 0
flag23=10
flag24=6
// 蓉珍叢 检查片段
IF flag23>=10 and flag24=1
  call gev1116
  exit
ENDIF
// 天数增加回调
IF flag24>0
  flag24=flag24-1
ENDIF

听上去也不难对不对,因为其实这个事件的难点在于如何触发渺渺真人的寻宝任务,这个任务需要见警幻超过七次,而见警幻有些事件也非常难以达成,比如与黛玉相关的凤翔,与主线相关的猿搏,而有攻略说梦到重复的事件没用,我没有去验证是否可以梦到重复事件,但是看脚本,每个警幻梦境的触发都有不同的固定冷却计数,所有梦境冷却计数过夜会减一,导致后续不可再次触发,所以如果能达成重复做梦,那一定是同一天多次睡觉,或者梦境的前置条件可以再次满足,不然都只会发生一次,当然,如果可以发生,也是会计入见面次数,反而对玩家有利。

不过对于研究了这么久的我们来说,直接「开始游戏」时调用 gev1117 即可。

PROC GEV0101
  Call gev1117
  SHOWSTAFF
  GAMEOVER
ENDP

这样可能会丧失游戏的乐趣,不过可以获得简单直接的快乐,起码我是没有时间和精力去一次次试错,游戏对于冷却计数过于严苛了,很多情况下,只有到冷却计数特定值才会触发事件,一旦错过,大概率需要重来。

游戏完成度

游戏脚本用 flag99 来记录游戏的完成度,基本上每个事件后,flag99 会自增一个数值。总计 flag99 会达到 156,这个数值会在显示片尾字幕前显示。

顺带一提,游戏有 00-99 共 100 个 flag,用来记录各事件进度,冷却计数。但是系统内似乎有一个机制来保护 flag 值不会超过 100。

所以导致了一个尴尬的局面,即使玩家拿到了所有的完成度点数,也依然是显示 99,不过这是我的推测,我没有去确认这个完成度只和 flag99 有关,所以这一点有可能翻车。不过另外还有一点,修订版的片尾字幕前没有完成度的显示了,所以很可能这个问题一直都有,后面索性不修了。

游戏脚本的版本

我们正式可以拿到的版本有三个,1.0.0 版(光盘中的 GAME.SCR),1.0.1 版(REDP.EXE 补丁包),以及后面的 Windows 版(Red2001\Game.dat)。Red2001 的加密方式与原版不同,这点可以理解,因为如果不换换格式的话,那理论上我们拿到 win 的程序,配上 dos 的资料就可以开玩了。2001 的脚本如何解密先放一放,我们主要以 1.0.1 版为基准,比较下三者的差异,后面我们会分别称三版为原版、补丁版、修订版。

1.0.0 vs 1.0.1

湘云事件中 if 没有对应 endif

鸳鸯漏了一张图:

其他有几个文字修复,所以基本上没有太多更新内容,但是原版 405kb,补丁版 408kb,为什么感觉多了很多?因为补丁版贴了一段 demo 进去:

印象中当时确实有这么一段 demo 影片,不过我没找到。可能没几个人能想到这个 demo 是游戏做出来然后录屏的,不过这段 demo 是跑不起来的,因为结局图没有这么多张,上来就是 15、16、17,就越界了。

所以为什么 101 补丁版会加上去这么一段,我有一个大胆的推测:这样显得补丁后的文件更大一点。

另外,其实 101 补丁版也没有完全解决 if endif 的配对问题,只是 if 都配上对了,但是 endif 没有:

PROC gev0507
  PlayMusic 19
  SAY 0,'寶玉','迎春姊姊,是我。'
  SHOWPERSON 5,0
  SAY 19,'迎春','寶玉是你啊!可有遇見你姊夫?'
  SAY 0,'寶玉','沒有!'
  SAY 0,'寶玉','最近他沒有再欺負迎春姊姊你了吧!'
  SAY 19,'迎春','他還是如此,而且最近還變本加厲了呢!'
  IF skill6>250 and flag96>60
    call gev0508
    EXIT
  ENDIF
  SAY 0,'寶玉','好,我一定會為妳想得法子的!'
  SAY 17,'迎春','謝謝寶玉,但你還是快點走吧!免得你又被他欺負。'
  SAY 0,'寶玉','嗯!請姊姊多多保重!'

  IF flag10=0
    flag10=1
    flag96=flag96 + skill6 / 75 +1
  ENDIF

  CLOSEPERSON
  GOTOAREA 14
  ENDIF
  PlayMusic 0
ENDP

一共有三处,就不一一列出了,推测是删 if 时没有删干净。

1.0.1 vs 2001

我看到之前很多人的意见是跟原来差不多,该修的都没修,其实两者的差距还是很大的,我们一点一点分开来说:

首先最大的差别在于,修订版为文字加入了更多颜色,用于强调某些事项,原版和补丁版都是没有的。

这个算是有利有弊,利大于弊,多数时候它能帮玩家抓到重点,有时也有误导的作用,你说你老是强调进京赶考算是个什么意思。

另外一个主要差别玩家体会不到,脚本逻辑的写法有了改变,例如 and 替换为 &&or 替换为 ||

然后很多情节补上了人物头像,脚本的演出顺序也有些调整。

我试了一下,实际上这些头像 dos 版应该是有的,只是脚本君偷懒了,没有用到。

第四,很多措辞、英文标点都做了修改。

第五,调整了迎春的触发判断,但是只影响对话。

与游戏逻辑有关的调整只有这个,而且也只是修改了判断的 flag 编号,推测是之前笔误写错 flag。

也因为这是唯一一个与逻辑相关的调整,所以,黛玉、秦可卿、主线是都没有调整的,换句话说,厂商并不觉得这三个情节的触发有问题。基于这一点,我是觉得 2001 修订版应该是现存问题最少的版本,当然,除非迁移到 windows 时又引入了新的 bug,这就另当别论了。

总结

不知不觉写多了,我们简单看了下秦的触发条件,比较了三个版本的游戏脚本,但是其实还是有很多没写进去,比如主线、警幻十梦、黛玉,站在上帝视角写攻略,感觉实在也是不同。