Steins;Gate PC版npa文件的解包与封包程序

我上个月才知道这个游戏,遂下载了pc版,结果找遍互联网也没有汉化包。
花了三天时间看完了KFC的中文影像,非常喜欢这个游戏的剧情。
貌似KFC去年就开始了汉化工作,感慨龟速的同时也非常同情一些像我一样对日文一窍不通的ACG FANs。
因此本着互联网分享的精神,我开始了汉化包的制作。

因为自己之前也从来没搞过汉化这方面的,网上也鲜有教程。
摸着石头过河,我写了一个流程。

1.解包资源文件。(使用exsgnpa.exe)
2.导出字幕。(使用nsb2txt.exe,这个程序只能简单的导出)
3.翻译。(需要翻译和输入大量的文字,我估计得有几十甚至上百万字,我一个人是没戏了)
4.制作并导回字幕。
5.打包资源文件。(使用pksgnpa.exe)

目前我进行到了2,翻译我不懂跳过。打包程序已经写好。
那么就剩下4这个关键步骤了。

要使字幕正常工作,我想到了三个方法。
1.敲字幕使用繁体字(因为大部分日语汉字都是繁体字,呵呵),然后转为Shift-JIS编码,利用Shift-JIS编码中的日语汉字来显示中文字幕。但是这个方法有很大的局限性。Shift-JIS中的日语汉字数量太少,很多字不能正常显示,在制制作字幕时还要经常考虑换一种表达方式来避过不能使用的汉字。
2.敲字幕使用简体字,保存为GBK编码。然后修改游戏,让游戏调用GBK字符集。这个方法显示最完美。但是首先这只是我的想法,并不知道这个方法能不能行得通,再者我不会逆向工程。
3.敲字幕使用简体字,保存为Shift-JIS编码。重新为游戏制作一个字库(扩展Shift-JIS,加入常用汉字),让游戏调用这个字库。不过貌似这个方法更玄乎也更麻烦了。

个人感觉第二种方法最省心,但是必须让游戏采用GBK编码。
以上均为我的yy,咱也没汉化过游戏,不知道汉化小组是怎么解决这个问题的。

还有就是就算解决了编码的问题,因为字幕数据块大小不同的原因不能正常载入nss.npa。
所以需要分析nsb和map文件格式,分别为字幕文件和字幕控制文件。
我也觉得像这个老外说的文件格式好像是xml,但是又不是。
貌似是N+模仿xml语法规则自己定义的。我在分析map文件时发现采用了和npa一样的数据排列手法,什么length,offset之类的。
官方已经发布了1.20升级补丁,应该是做了一些字幕的修复。可是使用1.10的破解主程序加载。

关于解包程序 exsgnpa.cpp
asmodean简直就是个HENTAI,竟然写了那么多解包程序:http://asmodean.reverse.net 逆向技术很强大啊。
我的打包程序就是根据其源代码分析了npa文件,完成了打包程序。
关于打包程序 pksgnpa.cpp
但是经过简单测试,其他三个npa文件包括cg.npa还是可以载入的,貌似主程序没有验证文件大小的步骤。
可以修改cg.npa里的图片完成图片的汉化。
当然你也可以修改system.npa文件,来去除窗口标题的乱码。
关于文件格式的分析
map文件格式没有加密,有一些正常的字符。所以我是根据16进制码来分析的,比较缓慢。
当然如果知道了文件的调用机制的话,就快多了,还是得会逆向工程啊。。。

附件为我破解过程中的一些文件,有兴趣的可以下载。
至于为什么我还没完成就发出来了。
一是让有兴趣汉化的同学可以少费点时间,
二是我马上要考试了,估计考试完了才能继续破解工程。


包括:
exsgnpa.cpp (by asmodean)
as-util.h
nsb2txt.cpp
pksgnpa.cpp
npa.png (npa文件格式分析)
map.png (map文件格式分析,未完成)


请用MinGW编译。

有技术的同学帮帮忙。
附邮箱一枚:blxode [AT] gmail.com

原文地址:https://www.cnblogs.com/bl4nk/p/2909132.html