NS版暗黑破坏神3金手指开发教程(7)

上一节,我们讲解了通过代码Hack的方式修改人物的魔法物品获取率和金币获取量等属性,这一节,我们将一鼓作气,拿下移速攻速等更复杂的属性修改

1. 我们在原始版本里搜索移速英文movespeed得到一个结果,双击打开伪代码

2. 转到汇编代码,尝试搜索附近的一些指令,尝试了几次,结果在2.6.6版本中搜索02 16 82 52 A2 00 A0 72只有一个搜索结果,我们点进去看下,发现附近汇编指令和原版本比较相似,基本确定这个就是2.6.6里对应的CPlayerGetMoveSpeedForStickInput函数

3. 拉到这段函数代码的末尾,从MOV             V0.16B, V9.16B 这条指令,得知S9就是最后算得的移速,最后传给S0作为函数返回值,因此就在这条指令上加hack

4. 找空白地址编写代码如下

5. 写成金手指代码

6. 测试移动速度,飞一般的感觉,至此,动态移速修改完成,接下来我们讲解动态攻速修改,这个要比移速复杂一些,原因就是攻速涉及到的功能比较多,我们搜索攻速英文attackspeed, 选择PowerGetAttackSpeed,里面再选择PowerGetAttackSpeedAtLevel,如果你右击这个函数选择跳转到外部应用,会发现计算动画的速度也会调用这个函数,说明我找的函数就是攻速获取函数

7. PowerGetAttackSpeedAtLevel函数代码里我们又发现了另一个重要函数PowerGetFormulaValue,根据名字就可以知道是通过公式计算属性值的,攻速也是通过这个函数计算得到的,我们继续点进去,拉到最后,终于找到了要hack的地方

8. 我们转到汇编代码,往上看一下,发现修改_Z27PowerGetFormulaValueAtLeveliPK15ActorCommonDataiPhii的返回值就可以了,也就是下图中那一行,顺便根据以前的方法,我们也找到了2.6.6版本的地址

9. 别着急,先看下这段伪代码,我之前在测试的时候发现只有武僧的基础技能攻速不生效,后来才发现了combo攻速和普通攻速的某个参数值不一样,所以我们在hack的时候不但要判断攻速标志参数是否等于0x50860,还要判断

0x50861<=标志w20<=0x50864,因为这些范围也属于攻速标志

10. 接下来就简单了,我们在2.6.6main里找一个空白区开始编写hack代码,值得注意的是,因为攻速公式是敌我通用的,也就是说改攻速的时候要判断是我方人物角色还是怪物,否则相当于也修改了怪物攻速,x21是我方角色的ActorCommonData对象,偏移0x38则是一个hGB,通过大部分代码可知,一般只有我方人物和装备的ActorCommonData的hGB才有正常值,怪物和NPC的hGB都是-1,因此可以通过判断hGB来区分敌我,代码如下(16倍攻速)

11. 但这还没有结束,我们只是修改了实时攻速,面板攻速还没变,我们可以在populateinfolist函数里找到

12. 转到这里对应的汇编代码,然后再找到2.6.6对应的地址

13. 这里的LDR S0,[X21]就是我们要hack的指令,我们需要把S0也乘以16倍,这样面板攻速就和我们的实际攻速对应上了,其实面板攻速可改可不改,并不影响实际攻速,不过为了完美的金手指,我们就把这里也改了,找空白区域编写代码如下

14. 现在终于到最后的阶段了,我们把两段代码写成金手指格式合在一起,顺便也要把被hack的指令改成跳转指令

15. 大功告成,现在启动游戏,开启攻速的金手指,看看面板攻速,是不是变成16倍啦?另外放几个技能,看看人物实际攻速,瞬间爆炸!!!

16. 好了,本节到此结束,修改攻速的内容稍微复杂一些,不过完成了也有很大成就感,下一节我们将介绍人物的其他重要属性的动态修改,包括暴击,爆伤,冷却,无敌,经验值,一击必杀等,这些金手指制作相对会容易一些,重在程序逻辑上的分析

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值