发表在
原创文章
2015-8-9 18:13:51
|
查看全部
| 阅读模式
本帖最后由 Mitjavaz 于 2015-8-9 18:19 编辑
平时,我们玩游戏,都会遇到这样的情况,爆破了收费,但是只是将游戏买断了罢了,而游戏没有其他增值,以至于很多时候,我们玩游戏还是觉得不那么简单,反而很困难。从而,又出现了爆破加修改版这样形式的游戏出现。
不过对于玩家的需求,市场上普遍的金钱修改,已经无法满足,甚至于将游戏的可玩性大大降低,甚至于令游戏直接无挑战性,也就失去了娱乐意义。
举例:
游戏类型:模拟经营类
游戏名称:开罗百货商店开店日记
像这款游戏,游戏经营只是一种模式,而更多的是挑战游戏的经营极限,挑战最终的那个排行榜。而在市场上能找到的,则是存档式的修改,而这样就会严重导致最终排行榜的成绩失去了最终的挑战意义。
下面,我就以这款游戏,做一个此方面的小修改。
目的:
1、让游戏的上手难度降低的同时,又不失去过多的游戏趣味。
2、让新手知道数据类型的取值范围。
下面,开始进入我们的主题。
首先,进入游戏得到一些关键词,我这里找到的是“狂热期结束”这个关键词。
这款游戏,当人气累加到100的时候,游戏内的客户就会进入狂热期,从而进行大肆购买的状态。
然后,我们用Android Killer将游戏反编译打开,通过字符串搜索,找到关键词所在的类。
进入到所在的类,并且通过软件提供的JAVA源码查看工具查看源码。
此时我们进行源码分析:
首先,我们先把关键词所在的条件语句圈画出来,然后才进一步去分析整个程序是如何执行运作下去的。
if (A == 1) //第一句IF条件语句
{
int i2 = 1 + B;
B = i2;
if (i2 >= 1200) //第二句IF条件语句
{
A = 0;
B = 0;
b.f.a();
int i3 = b.f.h();
if (i3 == 0) {
i3 = 1;
}
x = 100 * (b.n.a(100 * this.n / i3, 0, 2000, 0, 35, true) + b.n.a(0, 0, 5, 0, 15, true));
this.au.d.a("狂热期结束。", 15);
this.au.d(3);
}
}
我们第一眼望过去,就是离狂热期结束最近的这个IF语句,即:第二句IF条件语句,意思非常明确,就是条件满足,狂热期就结束。
那么第一句IF条件语句,我们第一眼看不出来,但是分析一下,还是能猜得出,这是一个判断状态的条件,若条件满足,则代表进入了狂热期这个状态,紧接着就是到第二条IF语句,去判断狂热期是否到了结束的时候。
归纳一下程序大致流程:
1、通过第一条IF语句去判断购物状态是否为狂热期购物状态。
2、通过第二条IF语句去判断狂热状态的时间是否为结束狂热期购物状态。
既然第二条是判断后执行结束狂热期状态的语句,那么我们看一下这第二条IF条件语句是怎么写判断条件的。
if (i2 >= 1200)
原来条件是判断一个变量名为i2的变量是否大于等于(>=)常量1200。
那么,思路就出来了,既然是1200,既然是一个常量,那么我扩大这个常量的数值,是否就意味着延长了狂热期,让将执行“狂热期结束”这个操作就往后推延了。
得到思路,那么就进入Android Killer,往里面找到1200这个数值,因为在android这个反编译的字节码里面,1200是以16进制显示,而1200是十进制的方式,十进制转十六进制后,1200就变为:0x4b0。
将这个数值扩大即可,然后保存编译。
最终测试情况就是这样:
下面,留一个近似于作业的话吧,就是说,除了这种方式,还有没有其他方式去实现延长甚至永久保留此种状态的操作。
另外,还有一点,就是在本文之中,各位有没有去注意在最后修改数值的一点细节问题。
这个细节,有兴趣或者是发现了又或者是其他情况,想知道的,麻烦回复一下吧,谢谢各位支持了。
好了,本文就到此结束了。
希望各位爱好修改的朋友们,能在修改的同时,尽量别影响了游戏的娱乐性和趣味性,不然游戏会失去了游戏必有的存在价值和意义了。
致谢:逆向未来技术社区
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
-
查看全部评分
总评分:
NB +5
荣获致谢 +2
|