这可能是一个不寻常的问题,但我将不胜感激。
首先,我不是程序员,也从不学习编程,但我有一些Visual Basic和Java的业余知识。
我一直试图修改一个名为“古墓丽影III”的旧视频游戏。
这是一款3D游戏,其中一位名叫Lara的女士与一些生物作战。您可以在this video clip中看到游戏(滚动到分钟5:00,看看她如何与老虎打架)。
我想做的是修改游戏,以便敌人生物在击中时可以对Lara的健康造成更大的伤害。
运行游戏的文件名为“tomb3.exe”。我用反汇编程序OllyDbg打开了这个文件。我非常幸运地找到了一个命令行,显然是当她被敌人击中时对Lara的健康造成伤害。当我用“NOP'S”取代这一行(即删除它)时,Lara变得无敌。她不再受到敌人罢工的伤害。老虎(例如)会继续打她,但她的健康不会受到影响。
This image显示了我正在谈论的界限。它位于004205EC。
004205BD和004205CF之间的代码负责让敌人击中Lara。当我删除这段代码时,老虎会向Lara跑去,好像它正在袭击她,但它不会咬她或抓她。
似乎对敌人袭击造成的伤害负责的线路是:
CMP WORD PTR DS:[ESI+12],AX
MOV WORD PTR DS:[ESI+E],AX
我尝试(在很多方面)编辑这些行,但是在编辑它们之后我无法使它们工作。我只是不知道这么做。
我想要的是增加由敌人的攻击造成的伤害(比如加倍或三倍)。我认为AX可能包含损害的价值(或者也许是Lara健康的价值?)。我试图通过使用诸如“imul AX,2”之类的命令来改变AX的值,但这只会导致游戏在敌人出现在Lara时崩溃。
我知道这是一个奇怪的问题,但任何建议都会受到赞赏。
提前致谢。
更新:我想解释一下。我在这个问题中提到的代码负责地球敌人在攻击Lara时可以做的不同动画。我强调的具体路线是地球敌人在攻击劳拉时所做的终极行动。对于有枪的男人来说,这种行为的代表是枪弹从拉枪的身体向拉拉的身体移动。因此,禁用此行将禁用子弹动画,而Lara不会受到伤害。此代码是关于陆地敌人处于攻击模式时的动画。我不认为它对劳拉的健康或敌人的攻击力量负责。我还没有发现负责这些事情的代码。
答案 0 :(得分:3)
看起来好像代码正在使用查找表告诉它每种类型的敌人造成多大的伤害。您可以尝试更改该表。它在前一行mov ax, word ptr ds:[eax+6]
中访问。此时eax
似乎包含一个指向敌人结构的指针,其中损坏值是偏移量为6的单词。停止执行该行,然后你应该看到eax+6
是什么,然后编辑该地址的内存中的值。
<强>更新强>
如果您在其他地方有空格,则用CMP
覆盖MOV
和JMP elsewhere
,然后在elsewhere
覆盖AX
ADD AX, AX
CMP WORD PTR DS:[ESI+12],AX
MOV WORD PTR DS:[ESI+E],AX
JMP 004205F0