【问题标题】:How can I change this assembly code to mod this video game?如何更改此汇编代码以修改此视频游戏?
【发布时间】:2014-04-18 07:08:55
【问题描述】:

这可能是一个不寻常的问题,但我将不胜感激。

首先,我不是程序员,也没有学过编程,但是对Visual Basic和Java有一些业余的了解。

我一直在尝试修改一款名为“古墓丽影 III”的旧电子游戏。

这是一个 3D 游戏,一个叫 Lara 的女人与一些生物战斗。你可以在this video clip看到比赛(滚动到5:00分钟,看看她是如何与老虎战斗的)。

我想做的是修改游戏,以便敌方生物在击中劳拉时对她的健康造成更多伤害。

运行游戏的文件名为“tomb3.exe”。我用反汇编程序 OllyDbg 打开了这个文件。我很幸运地找到了一个命令行,当她被敌人击中时,它显然会对 Lara 的健康造成损害。当我用“NOP'S”替换这一行时(即删除它),劳拉变得无敌了。她不再受到敌人袭击的伤害。老虎(例如)会继续打她,但她的健康不会受到影响。

This image 显示了我正在谈论的那一行。它位于 004205EC。

004205BD 和 004205CF 之间的代码负责让敌人攻击 Lara。当我删除这段代码时,老虎会像攻击她一样跑向拉拉,但它不会咬或抓她。

似乎对敌人攻击造成的伤害负责的线条是:

CMP WORD PTR DS:[ESI+12],AX

MOV WORD PTR DS:[ESI+E],AX

我尝试(以多种方式)编辑这些行,但在编辑后我无法使它们工作。我只是不知道怎么做。

我想要的是增加敌人攻击造成的伤害(比如双倍或三倍)。我认为 AX 可能包含伤害值(或者可能包含 Lara 的健康值?)。我试图通过使用诸如“imul AX, 2”之类的命令来更改 AX 的值,但这只会在 Lara 出现敌人时导致游戏崩溃。

我知道这是一个奇怪的问题,但任何建议都将不胜感激。

提前致谢。

更新:我想解释一下。我在这个问题中提到的代码负责地面敌人在攻击 Lara 时可以做的不同动画。我突出显示的特定行负责地面敌人在攻击 Lara 时所做的最终动作。对于持枪的人来说,这种行为表现为子弹从枪中射向劳拉的身体。因此,禁用这条线将禁用子弹动画,劳拉不会受到伤害。这段代码是关于地面敌人在攻击模式下的动画。我认为这与劳拉的健康或敌人攻击的强度无关。我还没有发现负责这些事情的代码。

【问题讨论】:

    标签: assembly 3d ollydbg


    【解决方案1】:

    代码看起来好像在使用查找表来告诉它每种类型的敌人造成多少伤害。您可以尝试更改该表。它在前一行中访问,mov ax, word ptr ds:[eax+6]。此时eax 似乎包含一个指向敌人结构的指针,其中伤害值是偏移量 6 处的一个单词。在该行停止执行,然后您应该看到eax+6 是什么,并编辑内存中的值在那个地址。

    更新 如果您在其他地方有空间,则用JMP elsewhereelsewhere 覆盖CMPMOV,您可以将AX 加倍

    ADD AX, AX
    CMP WORD PTR DS:[ESI+12],AX
    MOV WORD PTR DS:[ESI+E],AX
    JMP 004205F0
    

    【讨论】:

    • 非常感谢您的有用回答。不幸的是,我不知道如何使用 OllyDbg 运行游戏。当我运行调试时,游戏将无法启动。如果我按f8,调试会移动几行,然后进入一个循环并且不会退出。
    • 在有问题的行上放一个断点,然后让它运行。
    • 我在该行切换了一个断点,但是当我运行它时,它会从头开始,尽管有断点。我设法通过调试运行“tomb3.exe”,但出现的是游戏设置屏幕(分辨率设置等)。当我按确定退出该屏幕时,游戏崩溃。当我在 OllyDbg 之外启动它时不会发生这种情况。
    • 你能告诉我我应该在哪里看到 eax+6 吗?在注册表面板中有 EAX。它有 8 位数字。 eax+6 是左数后两位吗?
    • 不,eax+6 就是这样。将6 添加到您看到的eax 的值中。
    猜你喜欢
    • 2011-09-13
    • 2011-06-24
    • 2016-04-16
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多