【去片头】汉化gba游戏简单的去片头教程!By a君

来源说明

该文章转载自《【去片头】汉化gba游戏简单的去片头教程!By a君》,进行了简单排版与文字的编辑,做存档之用途。

软件提及的工具:

序言

GBA 平台有很多很有趣的游戏,其中不少都有汉化组进行了汉化,非常感谢无私的汉化组给我们带来了这么多优秀的汉化作品。但汉化组出于宣传自家汉化组或是投放广告等目的,往往在GBA 游戏的 ROM 中添加了片头,本来这是无可厚非的事情,但某些情况下会给我们运行游戏时带来一些影响。

关于 GBA 游戏,我们现在可以使用模拟器、烧录卡等手段进行游戏。一些游戏由于片头的存在,会导致游戏无法正常运行。例如《光明之魂1》有个版本就是因为片头跳转出错,用模拟器就会卡在片头那。片头对于烧录卡的影响更大了 —— 很多烧录卡游戏时出现的 Bug 都是添加了片头导致,比如《星之卡比-梦之泉》在打了 PSRAM 存档补丁后进入游戏会花屏死机。

鉴于这些原因,我们很有必要对 ROM 进行去片头的处理。应某个女管理的要求,下面就简单教教大家这个冷技术吧。

准备工作

要去除片头,需要一些工具辅助,gbata是一款不错的工具,可以对rom进行一系列操作,打补丁,减肥,打时钟补丁(口袋玩家的福音)等等,不过不建议使用这个工具进行去除片头的处理。

关于gbata这个工具,这个工具确实能简单的去除片头,但是由于软件的bug,会把游戏里汉化好的文本也去除掉,文本就会黑乎乎的一片,不建议使用。

GBATA 的主界面

既然 GBATA 有缺陷,怎么办呢?我们可以使用十六进制编辑器对 ROM 进行跳转指令的修复,这个方法能去除 80% 以上的游戏的片头。某些汉化组或是盗版卡商人技术实在太厉害,写入的片头比较复杂,需要 No$GBA 模拟器对内存进行动态追踪,找出片头所在的位置进而进行修改,这比较麻烦,还是忽略这方法吧(其实是我也不会)。

比较常用的十六进制编辑器,有 UltraEdit、WinHEX、010Editor 等工具。本文使用 WinHEX 举例,工具已经提供在压缩包里 ※ 注:原压缩包含有商业软件,因此不提供。

许多 GBA 游戏添加片头都是修改了跳转指令,使游戏开始的时候指向汉化组在 ROM 里放的片头图片。

这里分为两种情况,一种是修改了 00 位置指令的,GBATA 这个工具去除片头的原理就是把 00 位置指令还原到 080000C0 偏移值。据周哥统计,60% 的 ROM 片头都是这种形式。要去除也很简单,只要用 16进制编辑器 修改 00 偏移处的指令为 080000C0(对应十六进制为:2E 00 00 EA)就行,具体下面再讲。

第二种情况是,00 没被修改,修改了 C0 位置的指令,或者00修改了,下面 C0 处一样修改了(比如 CGP汉化组 汉化的《逆转裁判2》,存在两个片头)。这类型的片头,只还原 00 处的 gbata 工具就没辙了,不过我们还有十六进制编辑器,手动还原 C0 处为原始的指令:12 00 A0 E3,如此就大功告成了。

实战演练

下面用《逆转裁判 1》和《逆转裁判 2》来举例进行实战演练。

首先是《逆转裁判 1》,这是典型的第一种类型加片头的 ROM。

如下图所示,它是一个静态图片的片头,按 A 就能跳转。不过由于这个片头的存在,也给我们带来了一点小小的 bug:存档之后再开游戏、跳过片头就会跳转到删除存档的选择界面。一个手滑,辛苦玩了许久的存档就GG了(泪崩,屎张政治,我不要再看到你了)。

NZACE 汉化的《逆转裁判1》

我们来调教这款游戏吧,首先是打开 WinHEX,把《逆转裁判1》的 ROM 拖进去,得到如下让人头大的十六进制代码:


看看跟我们关心的去片头操作部分的代码大图:

看 offset 那一列,都是16进制的数字,如果你打开看到的不是 16 进制(没有 ABCD 等字母)那就在这一列上不断用鼠标左键点击切换显示,直到显示的数字是如图的16进制数。

首先我们看到第一行,也就是 0000000 位置,即 0 到 3 的区域内,指令是:FE 3F 1F EA,其实这就是汉化组做的片头跳转指令。我们将它恢复成原版指令 2E 00 00 EA,操作的方法是鼠标左键点到要修改的代码,然后直接在键盘上输入要修改的数字或字母,修改完后保存即可。

修改完毕我们看看效果,很好,恼人的片头消失了。

再来是CGP汉化组汉化的《逆转裁判2》,这是一款添加了双片头的游戏,一个静态的汉化组宣传图片和一个动态的 CGP TEAM 短视频。我们来看看他们的片头。

Uploading: 65150 of 65150 bytes uploaded.

同样,用 WinHEX 打开这个 ROM 查看代码。

首先是跟之前一样的步骤,修改 00,还原为 2E 00 00 EA

可以看到,静态的图片被去掉了,但动态的短视频还在。

我们再看到 000000C0 位置的代码:

这里的 7E F1 1F EA 就是第二个片头的跳转指令,所以我们把它还原成原始的指令:12 00 A0 E3。保存查看效果:


可以看到两个片头都成功去除了,可喜可贺。

总结

GBA 添加片头主要就有这两种情况,我们去除片头的步骤总结下来就是两步走:用 WinHEX 打开 ROM,查看 00 处的指令,若不是 2E 00 00 EA,那就把他还原到这个值;再看 C0 处的指令,若不是 12 00 A0 E3 或 12 00 A0 E0 的话,对比原始 ROM 还原成对应的值。之后保存退出,基本上就大功告成了。是不是很简单?

然而前边也说了,这只能去除 80% 的游戏片头。有些汉化组或者盗版商的片头跳转指令隐藏的更深,没有更改 00 和 C0 处指令,但还是存在片头。这就需要动态跟踪内存才能找出来,这个太麻烦了,就不研究了。

那么,冷技术教程结束了,写的有点磨叽,毕竟是想到什么写什么,没打过草稿,感兴趣的同学凑合看吧。

评论

此博客中的热门博文