GER和GE2RB的汉化感言
顺便在这写个煽情的东西.txt,是没有人看的汉化感言OVA:
虽然很多人都喊清羽佬万岁,但这次汉化真的是我出力出最大,而且是没有我就不可能做到的地步了。
与其说GE2RB像贴膏药一样清羽一个人熬药要熬到天昏地暗也熬不完我写了个生产线帮他熬,那GER这边就是我俩编出来一个再世华佗吐一口唾沫就能搞定一句中文文本了。
为什么我说非我不可,“明明在实质做汉化的是清羽,而且也是清羽一直以来在磨细节,怎么你一个程序猿在这里BB?!”
因为你清羽佬面对这屎山,只是想让我再建几条生产线罢了,所以看着我过去三个月写的那一大堆汉化GE2RB的工具,当时我就问了清羽一个问题:
“是继续在屎山上拉屎,还是把屎都吃了然后一劳永逸?”
因为只有我们一直拉,才能知道这个游戏的屎山代码有多高,然而就算汉化完GE2RB,我们也才发现GE2RB的屎山高度远远不及GER的三分之一……
所以面对这个问题,我俩谁也不敢言,这意味着清羽在未来分析游戏数据的过程中,只要有1个字节是不知道的,我们都只能选择停工,而对于我来说,从两手空空直接写出来一套噬神者游戏的资源包(这玩意还很复杂),更是一种大变活人的难度。
最终,我是不知道我这个愣子是为什么选择重写的,但我真的觉得那时候,我是可以相信清羽的,我相信他说是就是,他说对就肯定是对的(反正他以前说对最后也不对好几次了我不也这么暴躁的过来了吗)。
从这时开始,我放弃以前的所有编写的工具,新建一个.NET 8项目(老项目是.NET Framework做的,最早我本来以为可以搬动这个屎山但是处理GE的时候性能堪忧,哪怕我并发到龙信2的CPU利用率我都没有办法很快地处理文件),然后开始继续编写新的工具,
这一次,我剑走偏锋,我不再按照清羽的逆向思路去做,而是借着之前编写的工具的想法,还有他提供的结构,开始重新思考一个本质:“万代南梦宫为什么这么做?Shift为什么这么做?”
然后就是我漫长的编写过程,其实我现在去看我写的什么我基本上也就不知道了,我只记得我一个for最少要写三层,一个switch最少要做8个case,这样一套一套又一套,每一个都要套下去,套到最后根本不记得自己在做什么,只有这样,我们才能统一工作流,完整的解包打包。
然后要用一个指针,从头到尾把每一个字节都写下来,记下来每一个字节是什么,来自哪,这样我们才能够一个字节一个字节去和游戏资源对比,看我们的工具做出来的数据包为什么不能被加载。
这个过程相当枯燥,真的是一种要人性命的方式,因为文件很复杂,而且没有办法用现代操作系统表达这个文件结构,因为他有六种语言,一些文件是按照顺序对应特定的文件,所以这些文件的名字也是一样的,游戏只是加载顺序的时候把他们都对应上,而另一种内容是虚实引用,实际引用的文件在本地,虚引用的文件要等游戏运行才知道。
虚实混合在一起,加上六国语言六八一共四十八个数据包,我们都要处理,八种数据包还都不一样,甚至就到现在我们还不知道其中一个该怎么读,就是这种状态下,我们假设一个一个又一个,就如同爱因斯坦的黑洞猜想一样,基本上假设了绝大部分内容,最后一个一个去论证,其实走到这里,就算我俩有一个人出岔子了,我俩做的汉化工具也就彻底走错路了。
然后呢……当然不是一番顺利辣!我俩走错了很多条路,甚至我最暴躁的时候,让清羽一度产生了放弃GER汉化的办法(他本来也没想过能成功),因为我们没有任何办法处理十几万个文件,每个文件还有48个数据包,最复杂的还有上千个资源引用。
但我们俩还是坚持下来了,对于我这来说,我总觉得,好像每一次都接近了终点,如果终点不是成功而是失败,我也想走过去看一看,看一看我们究竟爬了多高的屎山,还是没有办法搞定这一切,也算是给期待的大家一个交代。
然而好在我写的垃圾代码是用了一个指针从头到尾(真是当时做这个决定太对了),让我俩能够修改每一块结构,因此,走错好几次路的我俩,一个字节一个字节的去看,去对比,每改一句工具的代码,我们就编译一次进游戏看,然后拿原始游戏文件去对比我写的工具产生的文件,就这样,一个字节一个字节的去看,去算——最终还是抠出来了一个完完整整的资源包,里面一共48个数据包,和游戏源文件一模一样。
这一天是2024年3月8日,从这时候开始,我们可以告诉大家,我们才能刚刚做GER汉化,也就是三大难题之一,由于我们不再贴膏药一样地汉化GER了,所以GER的汉化文件大小比GE2RB小了三分之一,也算是小小兑现了当时的承诺。
至此,GER最复杂的解包工具我们做出来了,没有人敢去重写的甚至是游戏开发组他们自己都没办法写出来的打包工具我们俩做出来了。
三大难题之二是另一个工具:TR2编辑,这个文件存储着游戏的文本和各种数据,虽然历来外国人们都会做各种各样的解包工具,但是TR2他们没搞明白。
第一,他们太聪明,不会像我们俩一样在大脑里模拟一个南梦宫娱乐来思考他们的脑瘫行为,所以他们写出来的工具,很优雅,很现代,但是不能用。
第二,他们不是中国人,不明白神秘的东方力量有多么可怕,因为我俩是按字节处理游戏数据的,所以事无巨细地把文件数据和游戏内存都给解析了。
第三,他们只是想着给自己做,由于游戏是亚洲语言,所以需要特殊文字的支持,他们没有做这一部分,因此黏在一起的游戏文件有的是不能被加载的。
从这时候开始,汉化速度直接翻倍,因为我们能完整的解析文件了,所以清羽汉化更难的GER比GE2RB还要快,甚至快到了不到一个月就已经把汉化都做了,(剩下时间他都在查BUG然后修修这个搞搞那个,在我眼里无关痛痒但对于他强迫症来说,他很想做到最好)。
所以,对于编写TR2编辑器的我来说,拿到了清羽分析的结果,重新的把TR2文件逆向出来了:
完完整整的可读性表格,自动多种转码的编辑器,能够原封不动的导出导入的功能,堪称把shift的内部工具偷了出来然后自己用。(但游戏编译时候优化掉的数据也能重建回来我是真厉害.jpg)
这也是为什么日本人后面会想让我们俩做日语移植的原因之一,他们不明白我俩做这个汉化有多狠。
当然,这个工具日后可以让所有人完整的知道游戏里的数据,比如子弹的伤害,怪物的肉质等等……也可以拿来做MOD,改数据。
然而,这也是汉化的三大难题之二,那么第三个难题是什么捏?
GER和GE2RB不一样,这个游戏在exe里加文本了!!!
exe是主程序,如果在中间修改汇编,exe必定会崩溃,因为exe是不可变的,
所以,我们需要一个像怪猎世界和崛起那样的dll,在游戏启动以后,引导游戏来访问我们修改过的汉化内存。
对于我来说,我是没写过C++的,我以为我这辈子都不会去写,但是我偶然能看到红警2的扩展平台(ARES)和CNCDDraw,我觉得,这个东西我还是可以实现的。
然后我选择了dinput8.dll开始操刀,其实……过程很顺利?基本上就是导出DirectInput8Create然后让游戏加载的时候把真dinput8.dll挂进来,后面的汉化插件然后那么一sethook最后write一个jmp到我dll里的function就结束啦。
然后又写了个小小的binpatch插件修改指定地址的内存数据,来扩展游戏功能。(这个插件被我拿去给文化做MOD用了,波兰佬已经开始抄我的代码了哈哈哈哈但是手写asm也好痛苦55555)
总之,到这里,GER汉化三大难题彻底解决。
简单来说,我们重头逆向了游戏资产为项目工程级别的状态,还做了一套完整界面的编辑器改数据,然后又给游戏做了个MOD加载器。
在这样的基础上,我们修复了许多BUG,先不提GE2RB我们修的语音问题是原来PC游戏就有的,GER这边,我们可是整整地把移植组丢掉的发型找回来了哦!
然后我写了一套噬神者的文件结构,供给其他人阅读,现今在我的网站上和Github上都可以查阅。
因为这个结构存在,所有人,都可以简简单单地读取游戏文件了。
因为这个结构存在,下一波人想要修改这个游戏,就不需要再吃屎了。
因为这个结构存在,任何一个难以解包打包的游戏,都可以来看一看我们的实现思路,从我们的开源解包工具抄一段屎山代码来处理自己的问题。
前人栽树,后人乘凉,至此,后人不再需要思考任何技术问题,他们可以做他们想的,他们要的,只关心贴图,语音,文本,游戏数据,而不需要关心,为什么这个字节要这么写,为什么那个字节在这。
以上,就是汉化的过程。
所以清羽做了一桌子菜,我实现了火,我俩真的搞了无米之炊,而且搞成了。
其实看到2代汉化以后,群里一天能来200个人的速度来体验汉化,我才知道俩这几个月寒冬岁月里孤军奋战的一切都是值得的,(也不知道以后能有更多人吗?但我想会的,看我俩能不能继续爆金币做别的)。
看到有人问“1代的汉化安装方式和2代一样吗”的时候,我其实陷入了恍惚:“原来真的……做到了?”(要掉小珍珠了。)
GE2RB给我的感觉是,只有做到了才知道自己能做到,而GER给我的感觉是,就算做到了,我也觉得自己没做到,这种难度我根本不看回溯去思考,因为这真的太难了(怎么可能有人徒手拿到一块晶圆然后就造了一台光刻机啊,算了还是别想这个了想的我都头大)。
这就是我的感想,与汉化在哪下载啊,为什么解压错误啊,汉化为什么这么大啊,其实很多问题我们都好好回复了,但这个问题我想回复的时候,我突然才意识到,我和清羽不过认识才4个月,我俩就做了这么多大动静。
4个月前,他在厂里当黑奴,手被夹了还在做汉化,大晚上拿手机跟我一个字一个字抠一边盯着机器干不干活,而我跟个铁FIVE一样倒霉着。
4个月后呢?我俩双双失业辣!一个是想啃老不想干IT的我,一个是病的几乎要知道自己哪天过清明的清羽,其实对我们来说,真的没什么变化,甚至还倒退了。
但我们俩真的很开心,很开心能做出来,对于两个善良脆弱的人,想活的真实活出自己的人,今天的一切,都是一种鼓励,一种印证,来告诉我俩,剑走偏锋也好,孤注一掷也好,我们都成功过了,虽说算不上英雄,虽说在大佬眼里也是沧海一粟的成果,但我们觉得,我们也有了英雄作风,也有了沧海一粟而不是空谈,对于我来说,这4个月的历程,非常激励了我的人生。(我突然发现我能手写汇编了是怎么回事啊,好怪,脑子里要长出来80386了,为什么是80386?因为AMD-64真的读不懂也写不出来啊啊啊啊)。
另外八卦一下清羽:他在我眼里会发光,一句话就让我写出来大大小小10多个工具20多个项目,因为他,我才能成功做出来这一切,把这个游戏的汉化完完整整的呈现出来。
许愿世界和平我俩能快快乐乐健健康康的,该吃吃该喝喝,不996无贷款有小钱赚下来能让我俩打游戏做汉化做MOD.jpg(还有祝他早日脱离单身祝我不分手?),这也是给所有玩汉化的玩家的愿望,也希望我们俩做的汉化能让你们开开心心的!
这就是,被百度和谐的汉化感言精简版!感谢大家的支持!请期待未来的新汉化!
🙂