热血系列吧 关注:3,506贴子:29,180

【研究】热血物语EX2007个人汉化尝试(多图预警)

只看楼主收藏回复


假期在尝试汉化GBA上的热血物语EX2007


IP属地:广东1楼2017-02-05 14:30回复
    楼主先自我介绍一下,楼主是计算机专业的大三学生,有一定编程基础,也了解一点gba的基础知识。高中那会有段时间常玩GBA,热血物语EX和热血物语EX2007是最喜欢的GBA游戏之一,毕竟热血系列也是童年的回忆。当时找了许久都未发现EX2007的汉化版,不免有点遗憾。


    IP属地:广东2楼2017-02-05 14:31
    收起回复
      现在也差不多10年了,可能研究的人也少了。自己有了点基础,所以想假期尝试自己汉化一下。而且有热血物语EX汉化rom做参考,想着会减少了些难度。下面是一些经过和一点小成果。


      IP属地:广东3楼2017-02-05 14:32
      收起回复
        学校放假比较晚,上学期末复习之余便开始着手准备,准备了EX的汉化版、EX的日版、EX2007的ROM。花了三天时间,用no$gba的调试功能,找到了3个rom的字模、编写对应的码表,同时记录一些asm追踪结果,测试发掘一些控制码表。在找到它们的文本指针表后,用Python写了一些工具脚本来导出了3个rom的文本。
        因为EX和EX2007大多数文本是相同的,楼主也没有日文基础,于是想通过EX的日版ROM,批量替换相同的文本。同时直接用EX中的中文字模。但后面发现EX汉化版和日版文本指针表内文本数量和顺序似乎不大一样。
        这两张是EX汉化版的字模


        EX2007内的文本除字母数字和一些符号外,都是平假名和片假名,所有字符都能用一个字节的字码表示,而EX汉化版中除人名外的中文用两字节表示,第一个字节是C1~C7。所以还得先用arm asm修改EX2007内读取字码相关的程序。
        这个EX2007的字模


        IP属地:广东4楼2017-02-05 14:37
        回复
          EX2007导出的文本

          EX导出的文本

          萌萌的长谷部


          IP属地:广东5楼2017-02-05 14:43
          回复
            用no$gba调试发现,EX汉化版在00375000~0037F1A8部分(字模的前面)是拓展的程序,一开始我想参考其中部分代码,在no$gba中手写asm来修改,但发现关联较大,要修改的地方很多且容易出错(超过20处)。而且EX汉化版、EX日版容量都是4M,原来程序和拓展的程序直接跳转可以直接用bl指令,只用4字节。而EX2007因为增加了不少东西,在rom之后追加的程序,和原来程序已经超过了bl+-4M的跳转距离。


            IP属地:广东6楼2017-02-05 14:44
            回复
              幸运的是得到了羽_名前辈的帮助,他告诉了我一些hack技巧,先把跳转地址ldr到寄存器,再mov到r15实现任意长度跳转,但最少要占用8字节。同时他引导我用ida pro去分析gba程序,教我如何把gba生成elf文件,用ida pro打开。ida pro是真的方便,很大地提高了效率。
              (ps,之前还用ida pro去调试no$gba,找到了no$gba的gba内存区基址,VisualBoyAdvance同理。然后用C++写模块,能直接读写no$gba和VisualBoyAdvance的rom内存,供Python调用。这样热修改,不用修改rom文件再运行,提高了生产效率)
              同时我用的编辑器Sublime Text也起到了很大的作用,它有Python插件机制,我之前写了一套自己用的插件,可以在其中编写Python代码,选中部分内容后按快捷键直接运行,还能使结果常驻内存,结合上面提到的Python模块,能减少许多工作量。


              IP属地:广东7楼2017-02-05 14:45
              回复
                放假回家后,结合no$gba和ida pro,我参考EX汉化版的拓展代码,着手编写适合EX2007的asm hack代码,这个花了一个多星期,过年时也间断了几天。上面提到过的mov到r15实现任意长度跳转,如果地址没有对齐4,要占用10个字节,而有几处原asm代码能改动的太小,还要考虑寄存器冲突,费了不少功夫。之后用devkitpro的devkitARM编译成arm机器码,弄到rom上。加之EX汉化版有些参数是在原程序上直接改的,没有在扩展的那部分提现出来,调试了几天,经历了数次失败,比如花屏,GB0加载不正确等。





                IP属地:广东8楼2017-02-05 14:47
                回复
                  最后终于功夫不负有心人,patch后看起来还能正常运行。但由于字模是从EX汉化版移植过来的,而单字节的那部分,字码和EX2007的不一样,这样未汉化的部分就会显示成乱码。


                  IP属地:广东9楼2017-02-05 14:48
                  回复
                    并且EX汉化版两套字模都是带有阴影效果的,还改了背景色调色板,不然文字会看不清楚,我改了调色板后文字清楚了,但发现有些地方颜色不太对。于是我花了一个晚上,单字节部分的字模采用EX2007原来的,汉字部分再用EX汉化版的,同时把EX汉化版单字节的人名插入到其他中文中,重新排序字模,同时去掉字模阴影。但原来EX2007双字节中文字模分了C1~C7,7个区,每个区低字节字码从0x02~0xBF,把单字节字码插入后,就变成0x02~0xC9,比如“店”字的新字码C1C1,这样不知后面会不会造成不良影响。改造字模之后,未汉化的文本仍能正确显示,而且要是之后我没时间把汉化做完,也能发出来,让有兴趣的人接着完成。


                    IP属地:广东10楼2017-02-05 14:49
                    回复
                      现在似乎后面只是替换文本,或修改指针表的工作,没难度很大的坑,但经验告诉我肯定没这么顺利,肯定会有幺蛾子,而且如果图片要汉化又是一个坑,要完成汉化还任重而道远。在汉化着EX2007的同好者肯定不只我一个,因为各种各样的原因没能做完或没能发布。汉化是很幸苦的工作,感谢无偿为大家汉化游戏的汉化组,感谢汉化热血物语EX的Air Team。


                      IP属地:广东11楼2017-02-05 14:50
                      回复
                        此贴完,呼,写这些文字就花了一早上了...最后



                        IP属地:广东12楼2017-02-05 14:51
                        收起回复
                          顶一个,楼主,相比于2007,其实我更期待楼主汉化ex风,因为2007大概剧情已经都了解了,楼主可以试试


                          来自Android客户端13楼2017-02-05 16:22
                          回复
                            貌似ex是基于美版汉化的吧 会不会有不一样的地方


                            IP属地:新疆来自Android客户端14楼2017-02-06 01:02
                            收起回复
                              楼主辛苦了,其实我就想知道淞沪说的话,和关于神秘研究所的剧情


                              来自Android客户端15楼2017-02-06 01:47
                              回复