苦b低穷挫吧 关注:9贴子:19
  • 7回复贴,共1

跟我用汇编修改游戏5:轩辕剑外传汉之云(续)转自52miji.com

只看楼主收藏回复

实例游戏:【轩辕剑外传:汉之云】
修改任务1:写CEAA脚本,实现我方主角无敌。
修改任务2:写CEAA脚本,实现我方主角无敌同时敌人一击必杀。
需要用到的汇编指令:mov、cmp、jne、jmp、push、pop。
本教程是一个很好的处理代码共用(敌我代码共用)的例子,看看是如何处理代码共用的。
首先讲解任务1.主角的当前生命地址是:7827c0.找出是什么改写了这个地址,在战斗中,主角被攻击后,生命值减少,找到了一条代码,如下图所示:

内存单元[eax+2c]的数值就是主角的当前生命值,由于是代码共用,所以[eax+2c]的数值也是敌人的生命值。要实现我方主角无敌,可以这样写CEAA脚本,写完后如下图所示:

我们来分析一下:指令mov ebx, [7827c0]是把主角的当前生命值送给ebx,指令cmp [eax+2c],ebx 是拿[eax+2c](生命值)与ebx作比较,指令jne originalcode是指当生命值不等于ebx时,转到标号originalcode处执行指令,生命值不等于ebx说明此时被攻击的是敌人,所以指令mov [eax+2c], ebx,执行后,敌人生命值正常减少,当生命值等于ebx时,jne指令不转移,生命值等于ebx说明此时被攻击的是主角,所以,指令jmp exit执行后,主角的生命值保持不变,从而实现无敌。
从上面的分析,我们看到,主角的生命值是一个值,比如是566,敌人的生命值一般不会这么巧,也是566,于是,我们就可以用jne指令,不相等则转移,让敌人的生命值正常减少,相等则不转移,让主角的生命值保持不变,从而实现无敌。由于借用了ebx,所以要用push指令将ebx的值压入栈中,用完后,用pop指令恢复ebx的值。分析结束,任务完成。
现在讲解任务2.要实现我方主角无敌同时敌人一击必杀,只需在上面写的CEAA脚本中,加上一条指令mov ecx, 0即可,这样敌人的生命值就变成0,从而实现一击必杀,见下图:

任务就完成了。
【跟我用汇编修改游戏系列教程】就到此完结了,这里用几个游戏实例讲解如何修改汇编指令,如何写CEAA脚本,起到启发读者的作用,主要你懂得如何灵活运用那些与游戏修改相关的汇编指令,并充分发挥你的想象力,就可以改出很多花样。
视频下载地址:http://pan.baidu.com/s/1i3sneDn


IP属地:陕西1楼2014-06-10 16:41回复
    路过


    IP属地:新加坡2楼2014-08-08 00:10
    回复
      再路过


      IP属地:新加坡3楼2014-08-20 20:46
      收起回复
        我想改操作白衣尊者代码怎么写


        IP属地:江苏来自Android客户端4楼2024-12-11 15:04
        回复