FC 魂斗罗汉化日记 (第四日)

第四日 - 标题界面的游戏介绍

日文的游戏介绍界面

当你在标题界面什么都不干的时候,会已打字的形式显示这一串游戏介绍,然后跳转到游戏试玩界面。

用 YY-CHR 以及 FCEUX 的 PPU 查看器查看:
图层查看

当年的 ROM 卡槽相对来讲还是比较贵的,估计这也是为什么开发者选择了压缩图像。压缩的实现原理很简单:FC 对区块可以设定调色板,每个调色板可以选择四种颜色。一个背景色,一个共用色,以及两个独立的颜色。通过利用调色板的特性,可以储存双倍的单色图片/文字。

因为我不会操纵屏幕上的调色板,于是我选择把中文字模全部使用共用色导入到游戏内:
翻译后文字的字模

打开游戏观察:
Imgur

从 Name Table 可以看出,“乃” 这个文字的贴图编码为 02 03 12 13

在 Rom 内也能够正常搜索到结果:

搜寻数据

但是,从这里开始到结束位置的字符数目对不上,于是回到 FCEUX 的调试器,针对写出屏幕下断 (第一个“乃”字的左上角地址为 $2114 ):

屏幕写出断点

断下后发现:这不还是从 $0700 读缓冲区后写出嘛,

PrintNextChar:
>07:CB9B:8D 07 20  STA $2007 = #$00
 07:CB9E:B9 00 07  LDA $0700,Y @ $0704 = #$03
 07:CBA1:C8        INY
 07:CBA2:C9 FF     CMP #$FF
 07:CBA4:D0 F5     BNE PrintNextChar

地址    内存内容
0700    01 21 14 02 03 FF 01 21 34 12 13 FF

0703 下写入断点,看看数据怎么来的:

 04:906F:B9 57 91  LDA $9157,Y @ $915F = #$02
>04:9072:9D 03 07  STA $0703,X @ $0703 = #$02
 04:9075:B9 58 91  LDA $9158,Y @ $9160 = #$03
 04:9078:9D 04 07  STA $0704,X @ $0704 = #$03

缕一缕,简单来说,就是从 $915F 读数据然后写出去,而这里则是我们之前搜到的内容;点 Step Out 跳出函数,看上面一行的内容定位函数地址为 $9034,在此处下断。

重启游戏,运行,发现经过此函数的时候,寄存器的内容依次为:00 12 13 12 11

到文件搜索,发现这行内容刚好在刚才搜到的数据前面,数据如下:

          00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00011140     00 12 13 12 11 42 42 C3 04 05 06 07 22 08 09
00011150  09 0A 0A AB 0C 0C 05 04 0B 23 0D 0D 0B 0E 0E AB
00011160  0F 0F 08 10 10 81 FF

把数据与游戏的文字并列查看,效果如下:

而出现重复字符代码的地方,则刚好在相应的帖图块里包含这两个字符。

至于换行,通过观察换行处的字符,可以看见其二进制码的第一位都是 1

使用字库工具生成图库想办法导入到 rom,然后调整文字颜色为公用色。

最后,就是喜闻乐见的代码修改了:

编译后,把翻译后的数据也一并回写到游戏里看看:

翻译后的游戏介绍

完成啦~

Post your comments here