《英雄无敌》2-小回城术修改成大回城术

news/2024/11/19 8:22:41/文章来源:https://www.cnblogs.com/dark-f/p/18432634

一、前言

回城术,是西方魔术世界的基本魔术元素之一。玩过现代一些具有地图场景的游戏,都有回城术,例如《暗黑破坏神》里面的回城卷轴。

《英雄无敌》1代回城术

《英雄无敌》从1代就有回城术,它只能让英雄在野外陆地上,回到离他最近的城堡。

《英雄无敌》2代回城术

到了《英雄无敌》2代,回城术从1代的只能回到最近城堡,升级到2种回城术,即大小回城术。小回城术与1代一样,也只能回到最近城堡,而大回城术则可以回到己方任意一个无人的城堡。自然,大小回城术的魔法等级是不一样的,小回城术是4级魔法而大回城术则是5级魔法。
这是大小回城术的魔法图标

选择大回城术时,会出现对话框以选择要去的城堡

《英雄无敌》3代回城术

到了《英雄无敌》3代后,回城术不再分大小,而是根据英雄的土系魔法的掌握程度决定是小回城术还是大回城术,当英雄土系魔法达到专家级后,就可以施展大回城术。

达到专家级后使用回城术就会有城堡选择

这次修改就是把2代的小回城术改成大回城术。本次修改是在下面这篇博文基础上进行的:
https://www.cnblogs.com/dark-f/p/18381542

二、修改过程

首先用32xdbg打开游戏程序,来到用户代码段

再搜索字符串,找到回城术相关文字提示如下

双击字符串来到回城术对应的子程序,可以看到下面两行代码:
····
0045420A |> 837D 08 3A cmp dword ptr ss:[ebp+8],3A
0045420E |. 0F85 75010000 jnz HEROES2W.00454389
···

上面的[ebp+8]正是调用程序时输入的第一个参数,它代表的是《英雄无敌》2里的各种魔法编号。

2代里的魔法与1代一样,也分作战斗类和冒险类
(有关这方面可以看我的博文:https://www.cnblogs.com/dark-f/p/18299637 )
其中战斗类魔法48个如下,前面的数字就是这个魔法的ID号

00-fireball
01-fireblast
02-lightning bolt
03-chain lightning
04-teleport
05-cure
06-mass cure
07-resurrect
08-resurrect True
09-haste
0A-mass haste
0B-slow
0C-mass slow
0D-blind
0E-bless
0F-mass bless
10-stoneskin
11-steelskin
12-curse
13-mass curse
14-holy word
15-holy shout
16-anti-Magic
17-dispel Magic
18-mass dispel
19-magic arrow
1A-berzerker
1B-armageddon
1C-elemental storm
1D-metar shower
1E-paralyze
1F-hypnotize
20-cold ray
21-cold rung
22-disrupting ray
23-death ripple
24-death wave
25-dragon slayer
26-blood lust
27-animate dead
28-mirror image
29-shield
2A-mass shield
2B-summon earth elemental
2C-summon air elemental
2D-summon fire elemental
2E-summon water elemental
2F-earthquake
```冒险类魔法17个

30-view mines
31-view resources
32-view Artifacts
33-view towns
34-view Heroes
35-view all
36-identify Hero
37-summon boat
38-dimension door
39-town gate
3A-town portal
3B-visions
3C-maunt
3D-set earth quardian
3E-set air quardian
3F-set fire quardian
40-set water quardian


对照上面的魔法ID可知,大回城术town portal的ID正是3A,所以上面两行代码中的第一行的把参数和3A比较,正是看看魔法ID是否等于3A。如果等于,则说明施放的是大回城术;如果不等,则施放的是小回城术,那就跳转。
搞懂了程序流程,修改就简单了。只要将上面2行不起作用,则不管施放的大回城术还是小回城术,都只是调用大回城术的流程,就达到目的了。所以,选中这两行,右键选择binary——edit
![](https://img2024.cnblogs.com/blog/3477685/202409/3477685-20240926040203315-120120696.png)
把数值改成如图所示即可
![](https://img2024.cnblogs.com/blog/3477685/202409/3477685-20240926040233850-2055003392.png)改成后是这样的
![](https://img2024.cnblogs.com/blog/3477685/202409/3477685-20240926040310256-37335950.png)
保存修改就行了。
# <font color=ff0000>检测一下效果</font>
游戏一下看看,使用小回城术
![](https://img2024.cnblogs.com/blog/3477685/202409/3477685-20240926040419404-961032322.png)
结果出现了选择城堡对话框
![](https://img2024.cnblogs.com/blog/3477685/202409/3477685-20240926040449794-700827176.png)
说明修改成功了。
# <font color=ff0000>修改后的程序下载</font>
[https://wwzd.lanzouk.com/i2fMI2av7gzc]()
密码:d05g

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/803812.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 - 数组

学习数组,需掌握其ADT定义。数组为同类型元素序列,具固定长度、连续内存、类型相同、索引从0起等特性。通过ADT定义数组,实现类包含内存管理和长度字段,支持初始化、获取/设置元素、插入/删除及释放内存等操作。掌握数据结构需理解其定义并实现。今天我们将开始第一个数据类…

【第3期】INFINI Easysearch 免费认证培训开放报名

探索 Easysearch 的无限可能,与 INFINI Labs 共赴搜索技术前沿! 随着数字化转型的加速,搜索技术已成为企业数据洞察的核心。INFINI Labs 作为搜索创新技术的引领者,诚邀所有对 Easysearch 搜索引擎感兴趣的开发者、技术爱好者及合作伙伴,参加我们即将于 2024 年 10 月 19 …

vscode使用g++编译代码中含有中文字符的程序运行后乱码

环境: 系统编码:不知道 mingw版本:https://nuwen.net/mingw.html 的 mingw-19.0.exe (60.5 MB) vscode版本:VSCodeUserSetup-x64-1.93.1问题出现: task.json里未配置任何编码转换: ——乱码 task.json 配置 "-fexec-charset=GBK” ——报错:cc1plus.exe: error: n…

PO、DTO、VO、BO 及其使用场景

基于 说清楚 PO、DTO、VO、BO 与使用场景简介PO(Persistent Object)/DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。 DTO(Data Transfer Object):数据传输对象。Service 或 Manager 向外传输的对象。 BO(Business Object):业务对象…

Java中到底有哪些锁

乐观锁和悲观锁 不是具体的锁,是指看待并发同步的角度 悲观锁:对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。 乐观…

Pyqt5 修改表格排序箭头

实现效果:代码from chatgptimport sys from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget from PyQt5.QtCore import Qtclass TableDemo(QWidget):def __init__(self):super().__init__()# 创建表格self.table_widget = QTabl…

day7[XTuner 微调个人小助手认知任务]

微调前用 internlm2-chat-1_8b 模型,通过 QLoRA 的方式来微调一个自己的小助手认知作为案例来进行演示

【算法】笔试题记录

哇今天做了道特别有意思的题。 编程就给了两道,第一题特别简单,a、b两个数,每次选其中一个数*2,这样操作两次,问最后得到的两数之和的期望值是多少。 简单吧?因为每次选择都有两种可能性,操作两次后就会有四种可能的结果(22)。其中有两个结果是重复的(2a, 2b),剩下两个…

使用AI进行需求分析的案例研究

生成式 AI 的潜在应用场景似乎无穷无尽。虽然这令人兴奋,但也可能让人不知所措。因此,团队在使用这项技术时需要有明确的目标:关键是要明确生成式 AI 在团队工作中能产生哪些实质性影响。 在软件工程中,一个引人注目的应用场景是需求分析。这是一个常常被忽视但充满挑战的环…

02 第三组(4个)进制转换

进制转换:二进制,十六进制、八进制、十进制 bin 二进制 oct 8进制 hex 十六进制 int 10进制二进制 和十进制#10进制转二进制 v1 = bin(48) print(v1)#二进制转10进制 v1 = 0b1010101 v2 = int(v1, base=2)八进制 和十进制#10进制转八进制 v1 = oct(48) print(v1)#八进制转1…

实验1_C语言输入输出和简单程序应用编程

任务一 1-1#include<stdio.h> int main() { printf(" O "); printf("<H>"); printf("I I"); printf(" O "); printf("<H>"); printf("I I"); return 0; }1-2#include<stdio.h> int main(…