欢迎来到我的博客,希望各位能在此找到喜爱的资源。

★当前已经将点点博文全部导入乐乎★

1,请点击左侧栏☞【归档】查找所需资源或左下角☞【搜索栏】查找。

2,可以点击下方的☞【资源整合目录】Ctrl+F搜索关键字查找相关博文。

3,也可以点击☞【个人资源论坛】查看本人发布的资源

【教程】一个外网找到的提取游戏文本的小工具HAT,ppsspp可用

原帖:https://tieba.baidu.com/p/5709348521


这是以防帖子被删的备份情况准备的.


================================

是这样,因为Fate Extra一直没有汉化,ccc目前虽然有个很靠谱的汉化组在进行汉化但是一时半会也不可能竣工,所以自己一直在尝试使用vnr机翻。之前在这里发的一个帖子

https://tieba.baidu.com/p/5529412467

解决了vnr不能用ocr扫描ppsspp的问题,这样可以用ocr读出来游戏文本然后vnr机翻,但是最后效果并不是很理想,一方面原因是psp游戏的字体放到电脑屏幕上有些模糊所以ocr识别率不是很好,另一方面FE里面的文本不只是对话框的形式还有FSN那种满屏都是字的形式,所以最终结果就是ocr识别不是很理想就没再折腾。



然后昨天又开始想折腾折腾,最终惊喜地发现一个外网的大大开发的的小工具叫HAT(全名是好像是有敏感字眼发不出来)可以直接提取ppsspp里的文本,而且提取出来文本自动复制到剪切板,这样就可以使用vnr进行同步翻译了,和vnr普通的那种提取文本然后翻译的效果没什么区别,所以把教程发到这里,希望能帮助到和我类似的想要玩vnr无法提取出来文本的游戏的同学。


这是最终的效果:


================================

首先列出需要的所有工具:

1.HAT

这是原作者发布帖[需科学上网]:

https://www.reddit.com/r/visualnovels/comments/3hbn6f/i_made_a_prototype_of_text_hooker_for_emulated/

这是作者的GitHub:

https://github.com/MX-Futhark/hook-any-text


工具的名字就是那个首字母为HAT的,大概是第一个单词是敏感词汇。因为链接里也带那个名字,所以只能转换成短网址。


2.Cheat Engine

这个算是这个教程里最重要的一个软件,主要用来读取程序的内存之类的,我用的是中文版所以教程里的截图也是中文的。


3.ocr软件

这部分主要是一开始用来提取一下游戏当前的日文对话文本,我用的是ABBYY,其他的也可以,只要是ocr就好。



4.把字符转换成十六进制的工具

我用的是Translation Aggregator,其他功能类似的也可以。



就这些,其他的vnr之类的都是必备的东西我就不写了。


================================

HAT和Translation Aggregator我分流一下,其他软件都很好找大家自己找下就好。


HookAnyText_v0.9.0

CT网盘:https://waecy2.ctfile.com/fs/770007-303382161

即可网盘:https://www.jkpan.cc/download/Fv3QYGob

yunfile网盘:https://filemarkets.com/fs/1w9aee6c8y823b0/

蓝奏云:https://www.lanzous.com/i1n71uh


Translation Aggregator 0.4.9.r171

CT网盘:https://waecy2.ctfile.com/fs/770007-303382167

即可网盘:https://www.jkpan.cc/download/VZwQ7bms

yunfile网盘:https://filemarkets.com/fs/2w8a5e0c9y226e9/

蓝奏云:https://www.lanzous.com/i1n71wj


================================

下面正式开始教程


1.准备工作

首先安装好Cheat Engine(以后简称CE)等软件,然后解压HAT的压缩文件,把解压出来的.jar和.lua文件放在Cheat Engine安装目录\autorun下


这样准备工作就完成了。看原作者说这个软件因为是基于java开发的所以电脑上要有java的环境,PATH里也要设置好jdk的路径。这个如果有不会弄的可以再百度或者回复问我。



2.让CE读取ppsspp模拟器程序

打开ppsspp模拟器,这里我用的版本是0.9.8,然后运行你要翻译的游戏,这里我是用的Fate Extra,进入游戏之后随便找一个能出来对话文本的地方,比如随便和一个npc对话。


然后打开CE,打开的时候HAT也会跟着启动


先不用管HAT,点击CE的文件-->打开程序(或者点击左上角那个小电脑),选择并打开ppsspp




3.用ocr软件读取当前游戏里的对话文本,转换成十六进制

看不懂啥意思没关系,照着做就好。打开ABBYY和Translation Aggregator,然后用ABBYY读取当前游戏里的对话文本,ABBYY会自动复制到粘贴板所以也会自动到Translation Aggregator里



然后在Translation Aggregator出现游戏文本的地方右键,选择SJIS to Hex(SJIS是游戏文本编码,这个根据实际情况来,如果编码是utf-16就选utf16 to hex,FE是sjis),这样刚才那个日文文本字符就转换成了十六进制





4.用CE搜索ppsspp程序里的那个十六进制字符串所在的地址


还是一样,看不懂啥意思没关系,照做就好。这里要提醒一下,ABBYY读取的那句日文文本一定要是正确的,请仔细和游戏里显示的文本进行对照。还有ppsspp里的那个对话不要关掉,放那就行。

复制那个Translation Aggregator转换好的十六进制字符串,然后CE里要设置几个小地方,首先在编辑->设置->扫描设置里要把这个勾上:


然后回到CE主界面,这里的数值类型要改成byte数组:


然后把那个十六进制字符串粘贴到那个输入框里,点击首次扫描:


如果顺利的话左边就会出现和几条地址的结果:



最理想的情况是只有一条结果,有多条也没事,一会我们可以筛选。如果一条都没有说明你在刚才的游戏文本字符处理的地方出了问题,要么是读取的游戏文本不对,要么是编码没选对。还有再提醒一下游戏里的对话不要关上,要一直放在那。


5.筛选CE搜索出来的地址结果


如果只有2条或者4条左右的结果的话就可以继续下一步了,如果有很多结果的话那么要先再筛选一次。方法是CE先不用管,到ppsspp游戏里结束刚才的对话,然后找另一个npc进行对话,重复教程的第3步,把对话文本转换成十六进制字符串,然后回到CE里把这个新的字符串粘到刚才的输入框里,点击“再次扫描”,然后看看结果,应该没意外的话可以筛到只有2条或4条左右,还不行的话就再来一次。反正也不是非得筛选到只剩几条结果,只不过结果越少我们接下来的工作越好进行


到这里我们得到了几条地址结果,把这几条地址全部选中,点击“加入选择的地址到地址清单”,这几条地址就会跑到下面:

我们可以观察一下这个列表,【地址】一栏就是我们找出来的地址,我这里是4条,【数值】一栏就是当前我们搜索的那个十六进制字符串,我这里是89FCE28282B782E98148,对应游戏里的文本是“改竄する?”。意思就是现在游戏的内存中里哪些地方有“改竄する?”这句话。在内存里这句话是以十六进制进行表示,所以我们刚才先把这句日语转成了十六进制然后搜索。

所以我们现在要做的工作就是找到,到底哪个地址是真正用来显示当前游戏文本的,方法很简单,先盯着这几条【地址】,然后回到游戏里,找另一个npc对话,看看哪个【地址】的【数值】发生了变化就好。

比如我这里,找到另一个npc对话,然后很明显发现这两条地址的数值发生了变化:


说明这两条地址是负责进行游戏文本显示的,有两条很正常,可能这两条都是负责这个的,我们只要对一条进行操作就好。

我们现在确定了哪个地址用来进行游戏文本显示,那么接下来我们的工作就是对这个地址进行操作,通过这个地址动态获取当前游戏里的对话文本。


6.使用HAT动态获取当前游戏里显示的对话文本

到这一步就比较简单了,因为很多工作都是这个叫HAT的小工具帮我们做了。

我们上一步找到了负责显示游戏文本的地址,我这里第1条和第3条都是,我对第1条进行操作。

右键这个地址,选择“浏览相关内存区域”,然后就会出现这个叫“内存查看器”的东西:


是不是看着乱七八糟的有点懵逼?没事,其实我也一样看不懂……不用管别的,在我画圈的这里从左上第一个数值往右下拉,拉几行没有限制,尽量多拉点,这里最好把这个窗口最大化能多拉几行:

被拉到的数值就会从黑色变成红色。到此为止我们的工作差不多就结束了。诶,我们干了啥?现在你打开一直没用过的那个一开始跟着CE一起被打开的HAT的窗口看看,如果没意外的话应该会像这样:

显示出来刚才游戏里的对话文本了。回到ppsspp里,再和另一个npc对话,应该能看到HAT窗口里的文本动态地变成当前游戏的对话了,至此我们的目的,动态提取游戏的对话文本,基本达成了=w=


7.用vnr进行同步翻译

这里就很简单了,基本上玩vnr的同学都会。上一步里面HAT已经能动态读取当前游戏的文本了,而且他会自动把读取的文本复制到粘贴板里,这样我们打开vnr,右键选择文本阅读,然后右键设置一下这个显示文本的对话框,监听剪贴板,就可以了,然后在游戏里进行对话应该这个框里就能同步翻译了:

到此,工作已经完成啦。以下是一些注意事项。

================================

1.当关闭ppsspp再打开时

首先最重要的,这个显示游戏的内存地址可能每次关闭ppsspp再打开都会变化,所以我们需要每次重新打开ppsspp都重复:ABBYY读取游戏日语文本->日语文本转换成十六进制->CE搜索这个十六进制字符串所在的地址->右键地址,打开内存查看器从左上到右下拉一下那些数值。

其实习惯了的话可能把这个步骤简化的很方便,首先找一个游戏里对话基本永远不会改变的npc,比如一些商店的看板娘之类的,我在Fate Extra里习惯用教会的苍崎姐俩,然后保存一句她们的固定对话的日语文本和对应的十六进制字符串。

这样每次重新打开ppsspp的步骤就简化成了:找到那个固定npc并进行那个固定的对话->用CE搜索你保存好的这个对话对应的十六进制字符串->对地址进行操作。

而且好像不用每次都进内存查看器查看器拉一下,我现在基本上搜索到十六进制的地址的时候HAT已经可以读取文本了,大概是有纪录吧。



2.关于内存查看器里那个拉一下

这个拉取的动作应该就是把选取好游戏对话显示的区域,然后HAT会自动读取这个区域的十六进制字符串,并转换成普通日语字符串。所以如果你发现有文本读取不全的情况的话就进内存管理器里把这个区域再拉大一点就好。拉小了会读取文本不全,拉多了的话目前没发现什么副作用,不过也没必要拉太多,大家可以自己慢慢尝试。



3.关于这个教程里提取游戏文本方法的适用性

反正目前我测试的ppsspp的Fate Extra以及ccc没问题,其他ppsspp游戏没有尝试,大家有需要可以自己测试,反正方法都一样,记得不同游戏的编码可能是SJIS也可能是utf16就好。还有出来ppsspp之外可能别的一些gal之类的也能使用此方法,或许就能解决没有放出特殊码的gal文字提取的问题。我感觉有可能vnr的文字提取和这个的原理应该有点像,都是找到负责显示游戏文本的内存地址然后进行操作。没研究过这些东西就不乱说了,总之不止ppsspp,大家有需要的话可以用这个方法试试其他gal。







最后,目前vnr这块好像挺小众的,这个vnr贴吧也好像没多少的人气,所以我写了半天的东西可能也没人看。不过只要能帮助到像我一样苦于一些vnr没法提取文本的游戏的同学的话我就很满足了,因为我折腾FE好几个月了,昨天用这个方法能机翻FE的那一刻真的很激动,所以我很明白这种沙漠里发现绿洲的心情。



最后的最后,感谢这个HAT小插件的原作者,因为之前他发的那个帖子结贴了所以很遗憾没法过去留言感谢一下。



祝大家能顺利啃到想啃的生肉,我要去玩FE啦。



筑起吧,余之摩天,在此展示出至高的光芒,因而称赞吧,邀至心荡神驰的黄金剧场!

=w=



评论
热度 ( 14 )