·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 特殊汉化 >> Funmobile公司游戏汉化浅谈——图片字库的汉化    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

Funmobile公司游戏汉化浅谈——图片字库的汉化

作者: kim1997 来源:迷你手游社区 时间:2007-02-24 点击:11593

Funmobile公司游戏一般画面比较精美,可玩性也很强,但是,大部分都是英文的,而且都使用了图片字库,基本不能简单汉化。最近对该公司游戏的汉化做了一定研究,现将研究心得写一下,希望对扩展大家的汉化思路有所帮助,并能够多多交流,能够汉化更多的优秀游戏。
首先看该公司的游戏代码,一般基本都含有以下几个类(以S60的幻想战争Fantasy Battle为例):
主midlet类:GameMidlet.class,主入口类。
游戏接口类:m.class,定义了常用的几个抽象方法,主要有:初始化操作,线程处理,按键按下处理,按键释放处理,音乐处理,绘图处理等
主canvas类:b.class,主要定义了基本的画面和按键操作还有线程的建立。
游戏canvas类:h.class,继承自b.class,主要建立了两个显示不同游戏状态的类:e.class,f.class的实例,另外建立接口m.class的系列实例。
游戏菜单操作类:e.class,继承了m.class接口,主要是菜单显示及切换的操作。
游戏画面类:f.class,继承了m.class接口,主要是主游戏画面的显示绘制及操作。
图形类:k.class,定义了所有该游戏中使用到的所有绘图方法,以及图片载入方法。
字体类:c.class,定义了字体的绘制方法。
其他的类还有地图类事件类,就不一一作描述了。
我们主要感兴趣的是字体类,它对应了一系列字母的绘制方法,它的构造函数为:
public c(short word0, byte abyte0[], byte byte0, char ac[])
通过查看,以上几个参数分别代表以下意思:
short word0:字体对应的图片号
byte abyte0[]:字体中每一个字符的宽度
byte byte0:字体的高度
char ac[]:字体中的字符
游戏中用来表示字体的图片有两张,19.png和20.png,我们在a.class中发现了两个字体类的实例:
e = new c((short)20, a, (byte)8, c);
f = new c((short)19, b, (byte)8, d);
而且,a.class中包括有:
public static final byte a[]
public static final byte b[]
public static final char c[]
public static final char d[]
byte a[]和char c[]是一一对应的,也就是c在表示字体的图片中的宽度就是a,同理byte b[]和char d[]也是如此。
在不反编译重新编译的情况下如果要实现汉化看起来几乎是不可能的,但是我们可以换个思路思考,可不可以通过对图片的修改来实现对字体类的修改。可能不好理解,这样解释:原来是“Enable sound?”的地方,

我们把它改成字母A,而把图片对应的A的地方改成图片:“新的游戏”再把图片宽度对应的地方修改成“新的游戏”的宽度,这样,该处不就完成了汉化了吗?先实现一下看看:
首先,我们用Hex Workshop软件打开e.class,Ctrl+F查找文本字串“Enable sound?”,

把它修改成“A”,记住要把字节数同时修改掉。

然后,我们需要把图片19.png

中A字母的地方改掉:

接下来把a.calss文件中的宽度和高度改掉:


  
原来:f = new c((short)19, b, (byte)8, d);
public static final byte b[] = {
        7, 7, 6, 7, 6, 6, 7, 6, 6, 6,
        6, 6, 7, 6, 7, 6, 7, 6, 6, 6,
        6, 6, 7, 7, 6, 5, 4, 4, 4, 4,
        4, 4, 4, 4, 2, 3, 4, 2, 8, 5,
        4, 4, 4, 4, 4, 3, 4, 4, 7, 4,
        4, 4, 6, 6, 6, 6, 6, 6, 6, 6,
        6, 6, 6, 6, 6, 6, 6, 6, 6, 5,
        6, 6, 6, 6
    };
修改后:f = new c((short)19, b, (byte)11, d);
public static final byte b[] = {
        80, 7, 6, 7, 6, 6, 7, 6, 6, 6,
        6, 6, 7, 6, 7, 6, 7, 6, 6, 6,
        6, 6, 7, 7, 6, 5, 4, 4, 4, 4,
        4, 4, 4, 4, 2, 3, 4, 2, 8, 5,
        4, 4, 4, 4, 4, 3, 4, 4, 7, 4,
        4, 4, 6, 6, 6, 6, 6, 6, 6, 6,
        6, 6, 6, 6, 6, 6, 6, 6, 6, 5,
        6, 6, 6, 6
    };
接下来,把修改好的图片和类文件拖回到jar文件中,运行试试:

坐标还有些问题,然后我们再把e.class文件中的坐标相应位置改掉:

原来:
s.a(k1, (c - 95) / 2, (d - 23) / 2 - 1, 95, 23);
b.f.a(k1, c / 2, d / 2 - 4, "A", (byte)1);

修改后:

s.a(k1, (c - 95) / 2, (d - 23) / 2 - 1, 95, 27);
b.f.a(k1, c / 2, d / 2 - 4, "A", (byte)1);
拖回去看看:

怎么样?一切OK了。接着其他地方也就一样处理了。这个方法就是比较麻烦,而且可能会出现字母不够用的情况,这里只是提供一种新的汉化思路,在文本不大的游戏和图片能够提取的情况下,还是值得考虑的。不过最好的汉化方法还是反编译,以后有时间会写一些其他方面的心得,希望大家支持!

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): JAR 图片字库

·上一篇: Halo汉化图文教程 ·下一篇: Setup Factory 7 制作补丁初探

· 版权申明: 本文引自《迷你手游社区》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《迷你手游社区》[ 作者: kim1997],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号