好友
阅读权限 10
听众
最后登录 1970-1-1
zmrn
发表于 2020-5-6 19:06
25 吾爱币
本帖最后由 zmrn 于 2020-5-12 21:29 编辑
这两天出于兴趣想要汉化一个文字游戏,于是开始撬游戏的程序。本人没有什么逆向经验,这是第一次正儿八经破解 程序。幸好程序也没有加壳。
其中.arc文件为游戏打包的文件,包含了各种图片,语音,音效等。
用了一个日本人写的提取器exoozoarc(http://asmodean.reverse.net/pages/exoozoarc.html),从.arc文件中提取出了.ws2格式的游戏脚本。发现ws2脚本是加密的。
从下面的文章里知道了ws2脚本是循环位移加密,顺便用了帖子里的程序来解密。(然后就顺便一直用Nodejs写的代码)
https://zhuanlan.zhihu.com/p/42466485
日本的文字游戏往往在中文系统的windows上不转区是无法直接玩的,因为打开以后文字是乱码。必须转到日区才能正常游玩。
这个游戏很独特的一点是,它不需要转区就可以正常打开显示日语。我本以为它脚本是utf-8写的,可是打开ws2以后可以看到,实际上脚本里的日文还是shift-jis编码的。
我试着写了个nodejs脚本提取文本,然后替换成utf-8的中文编码,然后根据exoozoarc的源代码和.arc文件的结构写了一个封包程序。
替换成utf-8的中文脚本,果然游戏无法正常显示,是乱码。
于是我用odb调试了一下源程序,发现程序会将shift-jis的脚本转化为Unicode。
图中红框部分原本是shift-jis的字符集代码,我改成了UTF-8。
我觉着这样,程序就会把读取的脚本里的utf-8编码的中文转换成Unicode显示了。
把部分文本导入替换掉以后,一切看起来都很好,字体虽然不好看但至少没错。文本也提取完了,可以正式开始汉化了。
本以为这样就万事大吉了。可是我完全无法处理,甚至找不到原因的玄学问题出现了。
游戏的文本分散在了数十个ws2脚本文件里,每个文件通常只有几十句台词。图上第一个文件便是游戏刚开始载入的脚本。该脚本的最后让游戏播放了片头动画,然后指定了下一个脚本的名字。
汉化了前两三句的时候,程序一切正常,当我导入更多的汉化之后,游戏开始出现问题了。我导入的文本的量不同,内容不同,游戏展现的问题都完全不同。那些替换掉原文的文本以不明的方式影响到了游戏的运行。
导入不同的汉化文本后,下面的问题都出现过。
问题1:片头动画无法跳过,本来看过一次以后就能跳过了。而且播放完之后白屏,并没有载入第二个脚本。
问题2:片头动画播放的时候,按一下鼠标应该可以跳过。可实际上按一下鼠标导致动画重播了一遍……播放完一次以后又重播一次。
问题3:游戏默认在快进模式,而且无法停止快进。快进一段时间后莫名其妙又停止快进了。
总之是一堆十分玄学的问题。我本来以为是我修改了shift-jis才出现的问题。
可是当我换回原版的程序,把日文原文提取出来,每句话只保留前几个日文字符,以shift-jis写入回去以后,依旧会发生问题。
那么是不是我写的打包程序有问题?于是我试着把脚本提取出来以后直接打包放回去,结果游戏可以正常运行。
也就是说……替换文本这件事本身就可能影响到游戏的运行,甚至你替换成日文文本都会出问题。而且很玄学,某些文本不会影响,某些文本会影响。调试了很久完全一头雾水。明明只是替换掉了几个字符串,为什么会影响到游戏的运行呢?而且还是以这种莫名其妙的方式出问题,闪退或者弹个框也好啊。
于是陷入了僵局。希望大佬们能帮帮我。
最佳答案
查看完整内容
毕竟已经很老的工具了,那个仓库乱七八糟的。试试https://github.com/marcussacana/WillPlusManager
或者
https://github.com/Amarillys/JSUtils/blob/master/advhd-mkz.js
如果全都不行,你只能do it for yourself了。
PS:汉化游戏有一万个坑。
Edit: 你也可以试试去问问代码作者
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。