Coming Heart 资源分析(六)

好久没有更新了,一来最近工作忙到一个新高度,二来没有什么值得记录的东西,偶尔有了 半天的喘息的机会,想着干点啥,就把这个老家伙拎出来了,继续用我的阅历和现在的工 具,回答年轻时的问题

目录

  1. 环境准备
  2. Cutter、TDW、CreateFile
  3. 按位读取、调色板
  4. 图像读取(一)
  5. 图像读取(二)
  6. 脚本读取

课题

之前分析了游戏的图像资源,作为一个视觉小说的游戏,灵魂已经分析过了,那这个游戏讲 了个什么故事呢,年轻时的我连蒙带猜,大概知道这是个重考生的故事,但是细节就只能全 靠猜了,那猜肯定是不靠谱的,我们今天就来回答这个问题,这个小说的脚本是什么样的。

分析

ghidra

看过我几个系列的朋友应该了解我的套路:看一下文件是如何读取的,然后猜个七七八八。 那我们也不废话,直接用 ghidra 看哪里读取了文件,首先从导入函数中, 找打开文件的引用位置:

查一下 CreateFileA 的引用,往上几层,我们能找到 wfopen 函数,这个函数有四个引用:

第一个位置是 HHP 的读取:

第二个是读配置:

第三个:

我们看不出来是读取什么文件,看一下 DAT_004146d8:

感觉像是文字,问一下 gemini:

看了下解释,好像 gemini 自我发挥了一下,其实只到エンコーディング(encoding), 但是依然看不出是什么文件的读取,先看看第四个:

连个报错都没有,那么按道理我们应该一个个确认这两个打开文件是干啥的,不过我时间不 多,打算赌一把:看看第三个。

Gemini

我读了一会儿反编译的代码,觉得进度有点慢,索性我就丢给了 AI:

Gemini 说得头头是道,我打算让它解释下程序是如何解析文件头的,比如如何确定有几个 数据块,大小和偏移量如何确定,Gemini 继续给我打工:

我们看一下 STARTUP.MPX:

Gemini 认为文件有三段数据,虽然我对 3、4、5 还抱有怀疑,但是我觉得魔法数、偏移量 和大小的分析还是比较靠谱的,于是我进一步问它,程序包含几段数据的读取,其解密方式 是否都是异或,之前 gemini 有提到解密方式是异或:

我已经懒成这样了,不妨再懒一点,gemini 索性你帮我把解密的程序也写了吧,结果也没 什么问题,MPX 的文字部分轻松被解开,为了更可读一点,我加了点换行:

%i%m,ch02;%g,chtitle;
%n%y_     (C)1995,96 May-Be SOFT%k ゲーム開始 %d,0,0;
%d,1,1;%m,;%w,1000;%j,ch1; おまけ CG鑑賞 %c%m,ch05;
%g,black_a;%t%g,black_a;%m,ch02;%g,chtitle;%x 回想モード %j,ksel; 

总结

那看上去小说的文本部分我们已经可以解开了,那接下来我可以让 AI 帮我把脚本翻译成中 文了,估计这个游戏如果要做汉化,只剩下体力活了,不过我估计自己是不会开这个坑了, 首先是要花的时间太多,虽然难点可能没了,但是体力活也要不少时间,以我目前的状态是 拿不出这么多时间做汉化的。这游戏也不是什么大火的游戏,我年轻时也是碰巧遇到的而 已。花大把时间做了给我自己玩一下,没这个必要,不过说这个话可能也有点太早,也许我 退休了又会想起这一 part 呢。

目前这个状态,我的大部分疑问已经解开了,甚至还有额外的 bonus,比如,PC98 版的游戏 中还包含了开发人员写给玩家的文档,大概描述下自己的近况,其中脚本作者称自己是「%K 魔人」,打开解密后的脚本我们就会理解他的意思,因为脚本似乎是以 %K 当作对话文本的 分隔符的,解密的脚本中不含有任何实际的换行符,一个文件一行敲下来。估计当时老兄也 是对剧本对得头昏眼花,所以给自己取了这么一个称号。

不过,也不是全部疑问解开了,玩过的朋友应该都知道里面有一段考试的剧情,这段情节有 大量的选择题要做,脚本里有明确的题目和选项,但是似乎没有写明哪个是正确答案,虽说 我们可以去搜正确答案,但是我还是想看看游戏中的标准答案是怎么定义的,看上去答题的 脚本其实就是问题的堆叠,不过答题脚本的文本偏移量特别大,说明头部记录了不少东西, 可能答案在这里面,不过这个目前看上去很难猜,等退休再说吧。

好了,我去读文本了。