标题: 三国5深层次修改笔记大公开
性别:未知-离线 飞鸟无

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 4
编号 70618
注册 2006-5-30


发表于 2006-5-31 11:25 资料 短消息 只看该作者
三国5深层次修改笔记大公开

三国5深层次修改笔记大公开


本人现在没有精力继续修改三国5了,那些修改笔记留在我这里浪费掉可惜,鉴于很多玩家对三国5的热情,我决定公开给大家看,以造福广大三国5玩家。

我是边修改边做笔记的,没有系统整理,所以有些乱,这里先给个例子解释:

比如 水计的作用范围 94aa4(win 6cba3)

94aa4 是dos普通版的地址,括号里面的6cba3是其在win版的相应地址
我用的是静态修改工具:myHiew和W32Dasm,主要是myHiew,W32Dasm只在走头无路的情况下才用

因为直接修改win版极容易出错,所以我都先修改dos版,再dos版中试验成功之后,才敢去动win版。所以我的笔记大多是dos版的,win的只有很重要的地方我才记,我都记在括号里面。


我的三国5修改笔记
=========================================
技能列表:
00 火计 01 混乱 02 内讧 03 收拾 04 仙术 05 鼓舞 06 治疗 07 祈雨
08 天变 09 灭火 0A 落石 0B 占卜 0C 伏兵 0D 幻术 0E 妖术 0F 激励
10 水计 11 火箭 12 奋发 13 乱射 14 速攻 15 藤甲 16 无双 17 远箭
18 强行 19 沉着 1A 布阵 1B 水神 1C 反计 1D 落沙 1E 回射 1F 骑射

查找相应技能代码的方法 :搜索9a8808f20a(16进制,一个技能标识函数)
激励 94872 消耗体力值 , 94868 经验值
仙术 9380f 经验值增量(每回复一只部队增长100), 936d3 体力
落石 955dc 体力 , 955d2 经验 , 95561 威力
乱射 95080 体力 , 9506d 口号 两字节
奋发 94d63 体力 ,94dcb 经验增量
鼓舞 939ec 体力 , 939f8 经验
水计 94bb9 体力 , 作用范围 94aa5(win 6cba3) , 显示作用范围948e9(win 6c937)
伏兵 94134 体力 , 9412a经验 , 作用范围 93f31
治疗 93b1e 体力 , 93b28经验
骑射 8dd96 技能代号
内杠 933a5 技能代号 , 934d0 ***934bf(作用范围,待考证), 基本成功率 93344 , 降士气932fb,着火以后的成功率93325
混乱 着火以后的成功率9305d win 6a7b4
速攻 95164 体力 ,9515a 经验
灭火 93ea8 技能代号
火计 92fcc 经验
幻术 94461 体力 显示作用范围 941ef(win 6bf24) , 实际作用范围 9425b(win 6bfbe)
妖术 9470f 体力, 攻击范围 94569(win 6c419) 显示作用范围 944ff(win 6c381)
农民暴动 8d925 口号
突击动画 90b26 ************************************
藤甲口号 90d80
回射 92975 口号
无双代码位置(有待研究) 80d0c 8ec66
一齐动画 90a2e **********************************************
000570C2: 01 移动消耗指令数
00055BD7: 01 赏赐消耗指令数

占卜代码修改:
9743f: E84AFA CALL 94E8C 敌军着火
97448:E841FA CALL 94E8C 敌军着火
97475:E814FA CALL 94E8C 敌军着火
97487: E902FA CALL 94E8C 敌军着火
9745A: E82FFA CALL 94E8C 敌军着火
奋发代码修改:
94D14:9AA005F20A CALL 00AF2:005A0 我方所受伤害为0
94d2d: bb0800 mov bx 0008 改为64
无双与藤甲替换:
10077:mov dx 00016 改为00015
藤甲代码修改:
90e5c call af2:00956 可能是提取技能的函数 win call 764e3
or ax ax
jne 90eec
90eed mov ax 00064 火箭着火率100%,改为64以下的值 (win:61f3E)
92b4e mov ax 00064 火计着火率100%,改为64以下的值 (win:69fce)
8f08f 对弓箭免疫
8f0b6 火箭,烈火对藤甲的伤害力 win 65489

射箭动画:90d1f d7b:00a8c
着火动画 9a10077209 972:00710
射箭加经验 90e0b
普通加经验909b6
着火伤害函数 92f33 90f2b
火箭增加经验值 90fd2 win 6205f
电脑藤甲策略 9beba
电脑火箭天气策略 f6c1

伏兵代码修改:
伏兵口号:mov ax 09c50 中计口号:09c51
伏兵画面:call d7b:8dc
成功率判断:94078 call a6d:00054

体力为多少时出现伏兵选项 :93f69 call 972:00b48
敌军损失兵力 94071 call 00093f86

幻术代码修改:
幻术画面:call d7b:bdc
幻术不混乱 9437d
必中 9432d
只攻击一个部队 9436c
降士气94359
攻击范围 9425b 显示作用范围 941ef 函数9ad00b7b0d d7b:bd0

妖术代码修改
945e0 win 6c51e
攻击范围 94568(win 6c419) 显示作用范围 944fe(win 6c381)

突击代码修改:
90b5a jne 90b0b 改为9090 突击三次变为一次
90b38 call 7bd:a4a 为减兵力函数

call af2:0020a 无用


回射代码修改
92960 call a6d:162 回射

强行代码修改:
8d4f: 提前5天到达



单条代码修改:
单条加经验 91334 两字节
913a6: 屏蔽掉 call:000901d8 单条失败后不损失部队。(win 62535)

学会阵形几率
900a99 900fe (win 60c30 60c9c)
君主被捕后总部队不撤退 9005b 74改为eb 或者 90065 01改为00 (win 60be6)---------------------------------------------------***************************
总结 d7b为动画函数
士兵数浮动画面:d7b:0065a
战斗画面:d7b:00a5c
普通战斗画面:d7b:00a68 9a680a7b0d
调整阵形方向画面:af2:5a0
技能提示对话框 93b69 ff7:2748 ff7:ed40
93b04 伤兵恢复浮动画面:d7b:00930
选择要攻击的敌人 9a68142708 call 827:1468
城市恢复力修改:86335 (win:596b8)
攻击范围函数 94255 call 00a6d:00162 9a62016d0a 调用 9ac40b7b0d d7b:00bc4
显示作用范围 941ee<------94218 函数9ad00b7b0d d7b:bd0
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
修行获得的经验:6f25f
使敌军撤退的经验:51d8b
射箭加经验 909b4
加勇名函数 9ae655fc0f
使部队撤退函数 call:000901d8 0008:ca28 9个地方调用
指令体力函数 9a9c00a103
着火以后计谋成功率函数 93f91 af2:00a70
570C2移动
5cdf7 战争 win 1796f
55BD7赏赐
55e74 宝物赠送
56ab0重编
56beb酒宴
570c1担当
59224同盟
59227共同
598a5进贡
59d1d劝降
5a2f0
5a852援助
5b042研究
5cdfa
5d546
75657反间 win 28e0f
75b59造反
75f18煽动
76349工作
76805造谣
76c87埋伏
77021修行
77272交易
7733c巡查
56a0b
71241 比武赏赐 71247
78ac7
加经验函数0ffc: 5c2a 9a2a5cfc0f
加金钱函数0ffc: 07e6c 9a6c7efc0f
减金钱函数0ffc: 07eac 9aac7efc0f
加粮食函数0ffc: 07f12 9a127ffc0f
减名声函数0ffc:07be2 9ae27bfc0f
判断是否为电脑 call 000054a8e
杀敌将减名声 528d1

9ad6037209 可能是去勇猛值的函数
546f5 掠夺
54451 训练 (win 26661)
53e6b 募兵
540a9 征兵
5553d录用 win 27c21
54b84 搜索


顶部
性别:未知-离线 飞鸟无

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 4
编号 70618
注册 2006-5-30


发表于 2006-5-31 11:26 资料 短消息 只看该作者
回复 #1 飞鸟无 的帖子

下面简要说一下我的修改方法。
我的方法其实非常原始,主要可以归结为两个方面:

1 关键字

利用关键字搜索的方法,想方设法找到你要修改的那段代码附近。

什么是关键字呢? 就是一些关键的常数,比如某个技能消耗的体力值,得到的经验值,这些都是固定的,是关键的常数。在游戏中,你要注意观察,比如占领一座空城后,你的武将会得到固定的勇名和经验值,这些都是你修改游戏很重要的信息,一定要多收集。

2 万能的”屏蔽代码“方法

找到那段代码后,你不一定能够精确的定位你要修改的那个地方,比如你要找决定”奋发“威力的那个参数,你可能找到了”奋发“的那段代码,有3、4页长,那么此时就可以用万能的”屏蔽代码“的方法,一行一行的屏蔽掉,怎么屏蔽呢?改为90就可以了。然后每屏蔽掉一行代码后,马上回到游戏中看看,比如用关羽对吕布”奋发“一下,看看有什么异常,如果没有什么异常,说明你要找的不在这个地方,那就必须回到修改器中,还原改过的那行代码,接着屏蔽第二行,再进去游戏…… 如此地毯式的搜索,你一定能发现你想找的东西。

怎么样?看起来很笨吧,可是往往就是越原始的方法越有效!

我再详细讲讲“关键字”修改大法。

我悟出一个修改游戏的关键,就是无论如何,一定要想方设法来到你要修改的那段代码附近,只要找到大概的位置,可能误差2、3页甚至3、4页左右,那都不要紧,你总能用各种各样的手段(阴招)把它找出来。

一般来说,EXE文件很长,可能有几十万行代码左右,怎样来到你要修改的那段代码附近?有很多方法,你可以用动态修改工具,比如TRW,初学者不建议使用,因为你不熟悉程序,就算找到了你也识别不出来。

所以我建议初学者用立杆见影的“关键字”搜索方法。

“关键字”有很多种,在你对san5.exe一无所知的情况下,你能利用的只是一些攻略里知道的一些信息,比如“速攻”耗费25体力,加50点经验, 那么这个25和50就是你用来定位“速攻”这段代码的关键字。

你用myhiew打开dos版的 main.exe,按f5输入95164,就可以定位到速攻消耗的体力值那段代码
ba1900 mov dx,00019 (左边是16进制,右边是汇编代码)
call 00af2:002e4
这里19就是速攻消耗的体力值25,就算你不懂汇编,也很容易猜得出来,这个call 00af2:002e4就是调用减体力的函数。
你可能会问:你怎么知道95164是速攻消耗体力值的地址啊? 呵呵!这是我用阴招从补丁98中找出来的,罗在说明书提到他把速攻的体力从25改为50,我就是通过这个信息用比较命令把这个地址找出来了(你现在知道什么叫“瞬间功力大增”了吧)

修改游戏就像是玩扫雷游戏,只要找到一个突破口,后面战果会滚滚而来。找到
减体力的函数后,就把它当作关键字,f7搜索9ae402f20a(减体力的函数),你会搜索到几十个call 00af2:002e4,查看san5的电子书,比如想定位“落石”的代码,利用落石的体力30和经验值200作为参数,从这几十个call 00af2:002e4 中寻找,要找call 00af2:002e4的前面有mov dx,0001e的代码,再看看附近有没有 mov dx,000c8,这个最终符合这两个标准的可能只剩下几个地方,说明“落石”的代码就在这几个中间。

接下来用万能的“修改或者屏蔽代码”大法,精确定位目标,把体力和经验值改大或者改小,马上进入游戏,用刘备落石一下,如果消耗体力还是25,说明不在这个地方,再换一个……

这样你可以定位几个技能的代码位置,记下来。然后仔细观察这些代码,看看有什么共性,你会发现,这些代码的开头都有一个函数call 00af2:00888,它的前面是 mov dx,000XX,比如速攻是mov dx,00014,落石是mov dx,0000a, 14是什么意思?0a又是什么意思?如果你经常修改san5的武将数据的话,你会想起这个表:

00 火计 01 混乱 02 内讧 03 收拾 04 仙术 05 鼓舞 06 治疗 07 祈雨
08 天变 09 灭火 0A 落石 0B 占卜 0C 伏兵 0D 幻术 0E 妖术 0F 激励
10 水计 11 火箭 12 奋发 13 乱射 14 速攻 15 藤甲 16 无双 17 远箭
18 强行 19 沉着 1A 布阵 1B 水神 1C 反计 1D 落沙 1E 回射 1F 骑射

这是老鸟们从sndata 文件里总结出来的,你会惊讶的发现,14对应的是速攻,0a对应落石,你现在发现规律了吧,想不到exe文件也用这个表来识别技能,知道我为什么把这个表写在我的笔记的第一行了吧。你把14改为16,看看会发生什么事情……

好了,找到了00af2:00888这个标志性函数,你就可以将它作为更有效的关键字来定位技能函数了,再也不用体力和经验那种笨方法了。这样,你很快就把所有的技能代码的地址都定位下来,做好笔记。

接下来继续“读”那些代码,怎么读?不是要你像朗读课文那样去读它,而是屏蔽掉函数,call XXX改为9090909090(5个90),或者修改跳转语句,je(7407)改为jne(7507),进去游戏中看看有什么反应,这样才能明白这些函数的意义。就算你不懂汇编语言,用这种无赖的方法,你照样能“读”懂它。

一个函数一个函数的读下去,你会得到一个很重要的信息:技能的口号。比如奋发时,关羽会喊“杀杀杀!” 这就是奋发的口号。在代码中是mov ax 088e6,88e6就是口号的代码。在我没有发现技能标志函数之前,我就是用它作为关键字的。看看88e6 下面的函数,那些是输出口号的函数,利用它们作为关键字,你会发现更多的口号,比如“xx忠诚度下降了” “征了多少兵” “募集了……士兵” 等等,这样就可以来到内政的代码附近,从而扩大了战果。修改win版的文件的相应地方时,可以用口号来定位,win版和dos版的口号是一样的。

怎么样?是不是有点像玩扫雷游戏的那种感觉?


顶部
性别:未知-离线 crayfish

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 右将军
功绩 12
帖子 1200
编号 2011
注册 2003-11-10


发表于 2006-5-31 12:39 资料 文集 短消息 只看该作者
看了楼主那个帖子本想骂两句的,可是想想没必要,
可是看到楼主这个帖子,不得不赞,顶一个
顶部
性别:未知-离线 wlp_new

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 13
编号 35829
注册 2005-4-2


发表于 2006-6-29 17:10 资料 短消息 只看该作者
谢谢楼主,很有助益
顶部
性别:未知-离线 juqiang
(方枪枪)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 11
编号 546898
注册 2024-7-23


发表于 2024-7-25 13:47 资料 短消息 只看该作者
你这个调试方法是真功夫,点赞!
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-9-8 11:51
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.008275 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP