spcspcspcspcspc 发表于 2020-9-6 19:42

DXBALL2 打砖块游戏 简单分析修改

本帖最后由 spcspcspcspcspc 于 2020-9-9 16:24 编辑

周末闲来无事,偶然发现   [原创]DXBALL2 修改版(含776关) win10完美运行!好经典的游戏,仿佛回到了当年。。。貌似帖子里的链接失效了{:1_926:},上度娘 http://www.downxia.com/downinfo/283775.html 可下载。(感谢网友的提醒,又试了一下,原帖资源依然有效{:1_918:},两个地址都能下,游戏是一样的。)
哟,大神还制作了好多版本:


那就省事了,打开 Fairdell HexCmp2 软件,第一个文件选DXBall2.exe,第二个文件选DXBall2 无限命.exe,文件->保存不同部分为文件,输入文件名:无限命.txt,保存

打开“无限命.txt”发现00004A50 处 48 代码改为90,打开OD载入DXBall2.exe,ctrl+G 跳转,点offset ,输入00004A50,OK。

00405650|.48            dec eax   改为了 00405650      90            nop应该是死亡后减掉生命的代码被nop掉了。
同样的操作 找到火球的代码 00405339      FF05 B8845200            inc dword ptr ds:


以DXBall2 无限命满天星版.exe为基准加入火球功能,操作如下:
WinHex软件打开无限命满天星版.exe,发现OD的00401000和WinHex的00000400地址为程序开始位置,所以火球地址00405339 减去401000加上400(都是十六进制计算哦!)等于4739。

ALT+G转到偏移量,填写4739,确定。

光标位置修改为FF 05 B8 84 52 00,保存。打开测试会发现开局自带火球了。
--------------------------------------------第一阶段“偷代码”结束----------------------------------------------------------------


同样用比对文件方法找到满天星版代码为00409843   /0F85 310C0000         jnz 0040A47A   和   00409850   /0F85 240C0000         jnz 0040A47A
就以这两个地址开始分析:
OD载入 跳到00409850地址,向下翻。。。一直翻。。。。忽然眼前一亮:

00409C7F|.83FF 14       cmp edi,0x14                           ;Switch (cases 0..14)
0~14做判断?14翻译成十进制就是20,来看一看游戏开始时的界面:

正好20个星星功能块,巧合吗?那么再往下看看:

0是life?   1是level?
这就对的上了吧,哈哈!经过一番分类整理,翻译,猜想。。。。。整理成下表:

第一列序号,第二列OD中对应代码,第三列OD中的注释,第4列自己的猜想,第5列官方解释,最后是图标。
开始测试:我用"无限命火球版"进行测试,因为满天星的太多看不请。

00409C8F   直接改为      jmp 00409C96
就是所有星星改为加生命的星星。

运行测试,发现所有图标改成了+1,但是功能没改,那么这个跳转应该是图标的代码,还得继续找{:1_926:}。。。
我猜想功能的代码和图标的应该形式一样,OD重开程序,OD中右键-查找-所有分支。

发现了吗,第六行和第八行都是0~14做判断,第八行 00409C7F 是刚才分析的,那就进第六行看看呗!
同样 00407040 改为      jmp 00407047
运行测试,发现图标啥样的都有,但是功能都是加命了,每吃一个,右上角的挡板多一个,看来找对位置了{:1_918:}。
分裂星星代码C 位置:004072B9   > \E8 02E5FFFF   call DXBall2_.004057C0                   ;Case C of switch 00407037
死亡星星代码D 位置 0040734C   > \E8 DFE2FFFF   call DXBall2_.00405630                   ;Case D of switch 00407037
直接改为 jmp 004072B9 就是死亡改为分裂 
修改后代码:0040734C    E9 68FFFFFF   jmp DXBall2_.004072B9
0040734C-401000+400=674C,WinHex软件打开一阶段中改好的火球满天星版本,ALT+G转到偏移量,674C,确定,改为 E9 68 FF FF FF。

打开测试发现不在害怕骷髅头了{:1_918:}。
--------------------------------------------第二阶段“改星星”结束----------------------------------------------------------------


但是!小球分裂的太多!太多!太多!卡死了。。。还得继续努力!!!

打开火球版,祭出神器Cheat Engine,搜索数据1,因为开始就一个小球,慢慢打,吃到分裂球后按“P”键暂停,搜索数据2,然后多找几次找到小球数量的地址0052AEA4

多次实验发现这个地址是固定的,又省事啦:lol!
回到OD,004072B9   > \E8 02E5FFFF   call DXBall2_.004057C0                   ;Case C of switch 00407037
就是分裂球的代码位置,记下代码 call004057C0 ,还有下一行地址 004072BE 。
拖到程序最后,找到空代码的地方:

地址为00431536,回到分裂球位置004072B9 改为jmp 00431536
修改后代码:004072B9   /E9 78A20200   jmp DXBall2_.00431536
00431536处修改代码如下:

00431536      A1 A4AE5200   mov eax,dword ptr ds:            从52AEA4地址加载小球个数。
0043153B       BA 50000000    mov edx,0x50                                          小球数量50个,实际效果为最多50*2=100个,可自行修改数量。
00431540       3BC2               cmp eax,edx                                          比较数量。      
00431542       0F8F 1B5DFDFF   jg 00407263               当前小球数量大于50个则跳到火球代码处,否则向下运行。也可以调到别的代码,自行修改。
00431548      E8 7342FDFF      call 004057C0                分裂的第一步用来跳转了,此处来补全分裂代码第1步。
0043154D       E9 6C5DFDFF      jmp 004072BE                跳回到分裂代码第2步。

--------------------------------------------第三阶段“限制小球数量”结束----------------------------------------------------------------


经过一天折腾,发现 4增强火焰砖块、D 直接死亡、13八球连环,必须改为分裂,
4增强火焰砖块不改的话会一直分裂,比消除的还快,死循环了。
D 直接死亡必须改。
13八球连环不改的话也是会无限小球直接卡死,也可以增加数量限制,直接改掉更省事。
其他的看自己喜好,表格中标黄的我都改了。




终于写完了,实际在分析调试的时候一不留神各种出错,调试的时候还是多记录,多备份。


媳妇问我:你这样玩游戏还有意思吗?
我:,程序员的快乐你不懂!


有网友留言说希望楼主有空整个挂啊,这游戏超级想看某些画面的
我说个简单的办法吧
打开CE
加载5274E0地址,这个地址是关卡的数值
修改数据就可以跳关


不知道想看的是哪个画面?欢迎留言讨论!

shdily 发表于 2020-9-6 21:54

好吧,果然修改才是程序员的乐趣,而不是游戏本身{:1_918:}

天天涨停天天盈 发表于 2020-9-6 19:59

沙发~是乐趣。            

weidong002 发表于 2020-9-6 19:59

{:1_909:}牛逼从不v{:1_904:}

hghghg 发表于 2020-9-6 20:06

程序员的思维也是很独特的平时生活中就能看出来

Nyueyuan 发表于 2020-9-6 20:17

做的不错,鼓励就一下

whngomj 发表于 2020-9-6 21:07

谢谢分享,学习了.

lxzxcvbnmlx 发表于 2020-9-6 21:28

教程简单明了。谢谢楼主分享

Dboykey 发表于 2020-9-6 21:28

学习了!谢谢楼主!

Natu 发表于 2020-9-6 21:46

哈哈哈哈,程序员的快乐媳妇当然不懂啦{:1_918:}
页: [1] 2 3 4 5
查看完整版本: DXBALL2 打砖块游戏 简单分析修改