RPG游戏对话框的修改
由于moto手机仅自带一种字体!即中字体!而诺机自带的却是小字体!!通常修改RPG游戏后!靠下边的对话框的对白文字会被挡着,无法看清!此教程就是教你如何修改RPG的对话框问题!
游戏画面修正教程
由于MOTO C系JAVA游戏那恨死人的116高度(屏幕128*128,但游戏屏幕是128*116),使得移植其他游戏时带来很多的麻烦,尤其是RPG的对白部分。而且由于每个游戏的编制手法都不同,所以没有一个统一的教程办法,这里仅举一例比较实用的对话框修改过程。有兴趣学习的朋友可以举一反三。
第一步其实应该来讲讲API里的drawstring()、substring()等函数,但是作为初级入门,方便大家理解……先跳过。简单的说drawstring是画字符串的一个重要标志,但因为游戏经过混淆,所以并不肯定能在反编译的源代码里能看到。
这里是韦小宝传奇II的画面,可以看到屏幕最下方的一行字被遮去了一半。这是因为原游戏的高度是128所致。
接着我们在h.class里找到一处代码,这是反编译后的:(怎样找到或者说找不找的到完全看经验搜索……)
// 后是注释说明
private void b(Graphics g1)
『 byte byte0 = 4;
//定义变量byte0的值为4
byte byte1 = 86;
//定义变量byte1的值为86
a.a(g1, 0, byte1, 128, 42);
//在 X坐标0、Y坐标byte1 = 86处画一个宽为128,高为42的矩形框
int i1 = 1;
//定义变量i1的值为1
int j1 = byte1 - 13 - 2;
// 定义变量ji = 86 - 13 - 2
//设置颜色为 6b3338(棕色) g1.fillRect(i1 + 1, j1 + 1, 58, 15);
//用棕色从X坐标i1 = 2,Y坐标 j1 = 71处起填充宽为58,高度15的矩形框
//设置颜色为 黑色
g1.drawRoundRect(i1, j1, 59, 14, 2, 2);
//用黑色从X坐标i1 = 2,Y坐标 j1 = 71处起画一个宽为59,高度14的圆角矩形框
// 设置颜色为全白
g1.drawSubstring("海公公 韦小宝 建宁公主小玄子 皇太后 书生嫖客陈近南 茅十八 小太监 小宫女 温家大哥温家二哥舍妃 冷宫后妃??? 御医 库管大人大内侍卫韦春花 ", a[(r << 1) + 1] * 4, 4, i1 + 3, j1 + 2, 20);
//这里的画字符串曝露了这一片代码是写对话的功能,否则真的是很难找到。
h _tmp = this;
//设置颜色为黑色
byte byte2 = a;h = 0;
int k1 = 9;
if(byte2 - k < 9)
k1 = byte2 - k;
h += k1;
// 以上几行猜测是处理字符是否超出边界用,恩,说明这个游戏界面还是比较高级的
g1.drawSubstring(c, A, k1, byte0 + 2, byte1 + 10, 20);//画第一行字符:在X坐标byte0 + 2 = 6、Y坐标byte1 + 10 = 86 +10 = 96 处开始画字符串。
int l1 = A + k1;
int i2 = k + k1;
if(byte2 == i2)
//判断第一行是否就把字符给显示完了,是的话返回,不是的话继续执行下面代码
return;
k1 = 9;
// 以下几行和上面的雷同
if(byte2 - i2 < 9)
k1= byte2 - i2;
h += k1;
g1.drawSubstring(c, l1, k1, byte0 + 2, byte1 + 10 + 13, 20);); //画第二行字符:在X坐标byte0 + 2 = 6、Y坐标byte1 + 10 + 13 = 86 + 10 + 13 = 109 处开始画字符串。
』
OK,分析结束,我们一般修改时要修改对话框,但是如果对话提高高度的话那么人名也就必须相应的提升,对不对?
实际上红色标出的是最关键的2句,然后从中可以得知 byte1 是关键参数,影响了好几处的高度,所以只要把 byte1 = 86 这个值修改掉后就好办了
虽然116和128相差了有12,但是一般修改时减去10就可以了,所以把 byte1 修改为 76 就好了,使用16进制工具打开h.class查找1056(86的16进制值=56),然后修改为104C,保存,OK!拖入压缩包中
用模拟运行看是否成功!
沙发...!
我的两分~
页:
[1]