1、Fishlabs(魔鱼)游戏汉化 这个很久以前就有这个想法写一个魔鱼的修改教程,一直觉得很麻烦就一直耽搁着。 这篇文章首先感谢kim1997在魔掌的教程,这里相当于只是给大家细说一下如何去修改。 首先,这个修改需要自己去重新编写游戏里的一个class(就是显示字符用的class),所以你需要准备Netbeans或者是Eclipse之类的工具。本文使用的是Netbeans。 现在开始说一下正式过程(以附件中的Powerboat Challenge_full_240x320.jar为例)下载地址: 首先用Halo打开游戏,这里只是相当于解包jar的一个过程,然后可以关掉Hal
2、o。进入.\Halo\games\Powerboat Challenge\src中,逐个反编译各个class,在反编译到bu.class后可以发现一些细节。 public bu(String s, Graphics g, byte byte0, int i, int j) { c = 0; a_javax_microedition_lcdui_Graphics_static_fld = g; f = byte0; try { a_javax_microeditio
3、n_lcdui_Image_fld = Image.createImage(s); //传入字体图片 a_short_array1d_fld = new short[i * j];//i图片中字符纵向个数,j横向个数 b_short_array1d_fld = new short[a_short_array1d_fld.length];// a_short_array1d_fld.length即i*j,字符的总个数 a_byte_array1d_fld = new byte[a_short_array1d_fld.l
4、ength]; b_byte_fld = a_byte_fld = (byte)(a_javax_microedition_lcdui_Image_fld.getHeight() / i);//这里可以看到a_byte_fld和b_byte_fld等于字体图片的高度除以i,即每个字符的高度 d = (byte)(a_javax_microedition_lcdui_Image_fld.getWidth() / j);//这里d等于字体图片的宽度除以j,即每个字符的宽度 ……以下忽略; a_byte_array1d_
5、fld这个存储了每个字符对应的宽度,在后面的方法中可以看到起用途 } ……继续忽略 public final int a(String s)//这个就是返回字符串长度的方法 { …… } public final int a(String s, int i, int j)//这里只不过多了一个i(Index起始位置)和j(Length长度)。意思就是说返回字符串s从第i个字符到第i+j个字符所形成的新字符串的长度。 比如说a(“Hello world!”,6,6)就是返回”world!”的长度。 { ……
6、 } private int a(char c1)//返回字符在图片中所在的位置 { …… } ……继续忽略 public final void a(String s, int i, int j)//从左至右画字,意思就是说先在初始坐标画第一个字符,然后横坐标加上前一个字符的宽度,再画后一个字符 { …… } public final void b(String s, int i, int j) //从右至左画字,这个正好相反,横坐标减去前一个字符的宽度 { …… }
7、 ……继续忽略 从上面可以看到下面的变量哪些在后面的修改有用,哪些没有用 private Image a_javax_microedition_lcdui_Image_fld = null; private short a_short_array1d_fld[] = null; private short b_short_array1d_fld[] = null; private byte a_byte_array1d_fld[] = null; public byte a_byte_fld = 0;字符高度,保留 public
8、 byte b_byte_fld = 0; 字符高度,保留 private byte d = 0; 字符宽度,保留 private static Graphics a_javax_microedition_lcdui_Graphics_static_fld = null; 图像,保留 private byte e = 0; private byte f = 0; public byte c = 0;绘制字符时,调整纵坐标用,保留 } 然后,开始对其中的代码就行修改,打开Netbeans,新建一个Java ME->Mobile 应用程序,
9、下一步,随便取个项目名,创建Hello MiDlet勾取消。下一步 然后点击完成就行了。 然后新建文件 下一步,类名改为bu。 然后把DJ反编译的代码全部复制进去,发现会提示一个错误。 这里暂时把public final void a(String s, int i, int j)改成public final void a1(String s, int i, int j),到时候在Halo里再改回去。好了现在没有错误了,我们开始修改。 我们先在最底下添加一个字体变量和一个颜色变量,删除之前说的没有用的变量。如下图所示: public Font font = nul
10、l; public int color = 0; 这是发现Font这里出现了问题,转到开头 import javax.microedition.lcdui.Image; 因为没有用到这个了,修改为import javax.microedition.lcdui.Font; 然后逐个修改各个方法,具体修改见附件bu.java(建议用UltraEdit 32打开,能够自动语法着色,具体修改原因可看注释) 为了在Halo方便修改,又避免有重名的变量,可以统一将 a_javax_microedition_lcdui_Graphics_static_fld替换成a b_byte_fld
11、替换为b 而a_byte_fld则在Halo里面再处理。点击bu.java,右键选择“编译文件”。然后在 我的文档\NetBeansProjects\项目名\build\compiled里可以找到bu.class。反编译看看,是不是已经修改好了。这个现在可不能直接打包进jar里。 这时我们需要建一个空jar包,随便复制一个游戏,用Winrar打开,比如依然复制Powerboat Challenge 3D by Fishlabs SE 240x320.jar这个游戏改名为“test.jar”,Winrar打开,删除所有文件,仅留下META-INF。 进入META-INF目录,可以看到
12、MANIFEST.MF,然后修改这个文件,可以把这个文件拖出来,然后用记事本打开进行修改。 修改以下蓝色的两处为其他名字,例如test之类的: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 1.5.0_12-b04 (Sun Microsystems Inc.) MIDlet-1: test,/data/icon_26x26.png,Main.MainMIDlet Nokia-MIDlet-Category: Game MIDlet-Vendor: MIDlet-Icon: /data/icon
13、26x26.png MIDlet-Version: 1.0.1 MIDlet-Name: test MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0 然后保存,拖回去覆盖原文件。 然后不要忘记把之前生成的bu.class打包进去。 然后打开Halo,打开这个文件,bu.class右键选择Edit Class,首先先修改a_byte_fld之类的名字,可以在全文查找里搜索a_byte_fld,然后看到两个结果,双击这一行,然后再双击蓝色这一行 把a_byte_fld改成a,然后确定
14、类型的修改所有结果,别忘了保存方法。 重要的是,不要忘记修改以下地方: 1.点击 右侧修改a1为a,然后保存方法 2.点击 右边修改a_byte_fld为a,然后保存域。 然后“编译”,就可以在.\Halo\games\test\build目录下得到修改好的class了。 复制一份原游戏,然后把这个修改好的class打包进去,然后运行看看。 是不是就OK了呢,游戏修改大致就是这样,你可以对颜色或者坐标在Halo里面或者Netbeans里进行调整,已达到最佳效果。 至于文本汉化,文本一般为在data目录里,然后用Halo里自带的BladeAndMagic插件打开即可。 图片中的字体重叠可以减小byte变量a和b,或者使用点阵字体。关于点阵在以后再讲。 加一张修改成点阵字体的图:
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818