标题: 接受咨询,解释原版代码 [打印本页]
作者:
godtype 时间: 2011-1-30 17:44 标题: 接受咨询,解释原版代码
快过年了,就大发一下慈悲。
对原版代码有什么疑问的,可以在本帖发问,只要是我了解的,都可以解答(当然不是第一时间,而且是否详细解答也由我来决定)。
注意:
1、只限原版引擎。
2、问新特效的请出门。
3、不会看代码的也请出门。
4、问UE地址的同样请出门。
5、灌水可以……有请版主重扣。
6、本帖暂停中,再开时间未定。
[ 本帖最后由 godtype 于 2011-4-17 08:33 编辑 ]
作者:
summer3965 时间: 2011-2-6 23:05
問一下阿毅
原版地形恢復hp和使用道具恢復hp的函數在哪裡?
不知道能不能改成像武聖傳那樣的百分比恢復,謝謝
[ 本帖最后由 summer3965 于 2011-2-6 23:07 编辑 ]
作者:
godtype 时间: 2011-2-6 23:13
地形恢复HP
具体恢复量
0043D0C1 /$ 55 PUSH EBP
0043D0C2 |. 8BEC MOV EBP,ESP
0043D0C4 |. 51 PUSH ECX
0043D0C5 |. 33C0 XOR EAX,EAX
0043D0C7 |. 8A45 08 MOV AL,BYTE PTR SS:[EBP+8]
[EBP+8]是地形编号
0043D0CA |. 83E8 12 SUB EAX,12 ; Switch (cases 12..16)
0043D0CD |. 83F8 04 CMP EAX,4
0043D0D0 |. 77 1C JA SHORT 0043D0EE
地形编号减去12后判断是否大于4。注意前面0—11的地形减去12后会变成“FFFFFFEE—FFFFFFFF”,使用JA来判断系统就会认为这些数值是很大的数值,就可以跳过,如果使用JG来判断,系统就会认为这些数值是负数,而不会跳过
0043D0D2 |. FF2485 F4D04300 JMP DWORD PTR DS:[EAX*4+43D0F4]
根据减去12后的EAX值以及下面43D0F4的分支表来进行跳转。比如13(关隘),减12后等于1,1*4+43D0F4=43D0F8,系统就会读取43D0F8所在位置的代码——0043D0E0,然后跳到43D0E0这个位置继续运行
0043D0D9 |> B8 19000000 MOV EAX,19 ; Case 12 of switch 0043D0CA ---12城池恢复25%
0043D0DE |. EB 10 JMP SHORT 0043D0F0
0043D0E0 |> B8 14000000 MOV EAX,14 ; Cases 13,14,16 of switch 0043D0CA ---13关隘14鹿砦16兵营恢复20%
0043D0E5 |. EB 09 JMP SHORT 0043D0F0
0043D0E7 |> B8 0F000000 MOV EAX,0F ; Case 15 of switch 0043D0CA ---15村庄恢复15%
0043D0EC |. EB 02 JMP SHORT 0043D0F0
以上就是下面的分支表具体跳转后的内容,输出的EAX值就是恢复HP的百分比值
0043D0EE |> 33C0 XOR EAX,EAX ; Default case of switch 0043D0CA
非恢复地形全部都清空EAX输出
0043D0F0 |> 8BE5 MOV ESP,EBP
0043D0F2 |. 5D POP EBP
0043D0F3 \. C3 RETN
0043D0F4 . D9D04300 DD 0043D0D9 ; Switch table used at 0043D0D2
0043D0F8 . E0D04300 DD 0043D0E0
0043D0FC . E0D04300 DD 0043D0E0
0043D100 . E7D04300 DD 0043D0E7
0043D104 . E0D04300 DD 0043D0E0
下面一段是是否显示出“可以恢复”字样
00435182 /$ 55 PUSH EBP
00435183 |. 8BEC MOV EBP,ESP
00435185 |. 83EC 08 SUB ESP,8
00435188 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0043518B |. 25 FF000000 AND EAX,0FF
[EBP+8]是地形编号
00435190 |. 83F8 12 CMP EAX,12
00435193 |. 7C 17 JL SHORT 004351AC
比较是否小于12(城池),小于就跳到下面输出0
00435195 |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00435198 |. 81E1 FF000000 AND ECX,0FF
0043519E |. 83F9 16 CMP ECX,16
004351A1 |. 7F 09 JG SHORT 004351AC
比较是否大于16(兵营),大于就跳到下面输出0
004351A3 |. C745 F8 01000000 MOV DWORD PTR SS:[EBP-8],1
004351AA |. EB 07 JMP SHORT 004351B3
是12-16之间的地形,则属于可恢复地形,输出1
004351AC |> C745 F8 00000000 MOV DWORD PTR SS:[EBP-8],0
004351B3 |> 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
004351B6 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
004351B9 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
最后输出的值在其他地方进行判断,1就显示“可以恢复”,0就没有显示。
004351BC |. 8BE5 MOV ESP,EBP
004351BE |. 5D POP EBP
004351BF \. C3 RETN
以前有帖过的:http://www.xycq.net/forum/thread-170644-1-1.html
[ 本帖最后由 godtype 于 2011-2-7 09:20 编辑 ]
作者:
godtype 时间: 2011-2-7 10:28
恢复HP道具的恢复量
调用函数位置
0041CD9E |> 6A 00 PUSH 0 ; /Arg2 = 00000000
0041CDA0 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
0041CDA3 |. 8A11 MOV DL,BYTE PTR DS:[ECX] ; |
0041CDA5 |. 52 PUSH EDX ; |Arg1
0041CDA6 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; |
0041CDA9 |. 8B48 08 MOV ECX,DWORD PTR DS:[EAX+8] ; |
0041CDAC |. E8 7DF60100 CALL 0043C42E ; \0043C42E
43C42E这条函数有四个地方调用到,恢复HP、恢复MP、显示恢复HP量和显示恢复MP量,这里只帖恢复HP的调用位置。
0C栈为0时,就是真正使用道具,为1时,是未正式使用道具,而将光标移到某人头上时显示的恢复量;08栈是所使用道具的物品编号,byte型(即单字节);还有一个受用者的战场内存地址作为ECX值输入。
当然了,实际上0C栈的值并没有在函数里面使用过。
0043C42E /$ 55 PUSH EBP
0043C42F |. 8BEC MOV EBP,ESP
0043C431 |. 83EC 1C SUB ESP,1C
0043C434 |. 894D EC MOV DWORD PTR SS:[EBP-14],ECX
受用者的战场内存地址保存到[EBP-14]中
0043C437 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
0043C43A |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0043C43C |. 6BC9 48 IMUL ECX,ECX,48
0043C43F |. 81C1 681B4A00 ADD ECX,004A1B68
0043C445 |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX
计算出受用者的武将内存地址,保存到[EBP-10]中
0043C448 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0043C44B |. 81E2 FF000000 AND EDX,0FF
0043C451 |. 6BD2 19 IMUL EDX,EDX,19
0043C454 |. 81C2 40114A00 ADD EDX,004A1140
0043C45A |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX
计算出所使用道具的物品内存地址,保存到[EBP-C]中
0043C45D |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0043C460 |. E8 DBD0FCFF CALL 00409540
0043C465 |. 8845 FC MOV BYTE PTR SS:[EBP-4],AL
读取所使用道具的特效号,单字节保存到[EBP-4]中。409540实际上就是MOV AL,BYTE PTR DS:[ECX+11],读取ECX值所在地址+11H位置的数值(byte型,即单字节),而辅助品和消耗品的物品内存地址里面的第11H位就是特效号,武器和防具则是物品类型(即剑、枪、弓等)
0043C468 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0043C46B |. E8 0019FEFF CALL 0041DD70
0043C470 |. 25 FF000000 AND EAX,0FF
0043C475 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
读取所使用道具的效果值,扩展后保存到[EBP-8]中。41DD70是MOV AL,BYTE PTR DS:[ECX+15] ,原理同上,消耗品的第15H位是效果值,而武器和防具是初始能力,辅助品则无作用
0043C478 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0043C47B |. 25 FF000000 AND EAX,0FF
0043C480 |. 83F8 3F CMP EAX,3F
0043C483 |. 75 58 JNZ SHORT 0043C4DD
判断所使用道具的特效号是否3F,即恢复HP,不是的就跳到后面
0043C485 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0043C488 |. 81E1 FF000000 AND ECX,0FF
0043C48E |. 81F9 FF000000 CMP ECX,0FF
0043C494 |. 75 13 JNZ SHORT 0043C4A9
判断所使用道具的效果值是否为FF,不是的就跳到后面,是的就表示完全恢复
0043C496 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C499 |. E8 7DADFCFF CALL 0040721B
根据输入的ECX值(武将内存地址)计算出包括辅助装备在内的武将总HP值
0043C49E |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0043C4A1 |. 2B42 10 SUB EAX,DWORD PTR DS:[EDX+10]
0043C4A4 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0043C4A7 |. EB 32 JMP SHORT 0043C4DB
总HP值减去当前HP值(Hpcur),战场内存的第10H位就是Hpcur,得到实际恢复HP量,保存到[EBP-8]中
这里开始是所使用道具的效果值不是FF的情况:
0043C4A9 |> 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C4AC |. E8 6AADFCFF CALL 0040721B
取出总HP值
0043C4B1 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043C4B4 |. 2B41 10 SUB EAX,DWORD PTR DS:[ECX+10]
0043C4B7 |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8]
0043C4BA |. 73 13 JNB SHORT 0043C4CF
总HP值减去当前HP值(Hpcur),再比较一下所使用道具的效果值,如果大于或等于效果值就跳到后面,由道具的效果值作为实际恢复量
0043C4BC |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C4BF |. E8 57ADFCFF CALL 0040721B
0043C4C4 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0043C4C7 |. 2B42 10 SUB EAX,DWORD PTR DS:[EDX+10]
0043C4CA |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0043C4CD |. EB 06 JMP SHORT 0043C4D5
如果小于效果值,就直接由总HP值减去Hpcur所得出的数值作为实际恢复量
0043C4CF |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0043C4D2 |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0043C4D5 |> 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18]
0043C4D8 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
0043C4DB |> EB 62 JMP SHORT 0043C53F
以下部分是恢复MP的,原理一样,其中40724A是取出总MP值,DS:[ECX+14]是当前MP值(Mpcur)
0043C4DD |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0043C4E0 |. 81E2 FF000000 AND EDX,0FF
0043C4E6 |. 83FA 40 CMP EDX,40
0043C4E9 |. 75 54 JNZ SHORT 0043C53F
0043C4EB |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0043C4EE |. 25 FF000000 AND EAX,0FF
0043C4F3 |. 3D FF000000 CMP EAX,0FF
0043C4F8 |. 75 13 JNZ SHORT 0043C50D
0043C4FA |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C4FD |. E8 48ADFCFF CALL 0040724A
0043C502 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043C505 |. 2B41 14 SUB EAX,DWORD PTR DS:[ECX+14]
0043C508 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0043C50B |. EB 32 JMP SHORT 0043C53F
0043C50D |> 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C510 |. E8 35ADFCFF CALL 0040724A
0043C515 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0043C518 |. 2B42 14 SUB EAX,DWORD PTR DS:[EDX+14]
0043C51B |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8]
0043C51E |. 73 13 JNB SHORT 0043C533
0043C520 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C523 |. E8 22ADFCFF CALL 0040724A
0043C528 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043C52B |. 2B41 14 SUB EAX,DWORD PTR DS:[ECX+14]
0043C52E |. 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
0043C531 |. EB 06 JMP SHORT 0043C539
0043C533 |> 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0043C536 |. 8955 E4 MOV DWORD PTR SS:[EBP-1C],EDX
0043C539 |> 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C]
0043C53C |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0043C53F |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0043C542 |. 8BE5 MOV ESP,EBP
0043C544 |. 5D POP EBP
0043C545 \. C2 0800 RETN 8
总的来说,消耗道具的效果值并不是完全的恢复量,效果值加上当前HP/MP后不能大于总HP/MP量,超出部分就必须减去,否则会出错。
===========
如果要将效果值改成占总HP量的百分比,全恢复的FF就不管了,改这段
0043C4A9 |> 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C4AC |. E8 6AADFCFF CALL 0040721B
0043C4B1 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043C4B4 |. 2B41 10 SUB EAX,DWORD PTR DS:[ECX+10]
0043C4B7 |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8]
0043C4BA |. 73 13 JNB SHORT 0043C4CF
0043C4BC |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C4BF |. E8 57ADFCFF CALL 0040721B
0043C4C4 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0043C4C7 |. 2B42 10 SUB EAX,DWORD PTR DS:[EDX+10]
0043C4CA |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0043C4CD |. EB 06 JMP SHORT 0043C4D5
0043C4CF |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0043C4D2 |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0043C4D5 |> 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18]
0043C4D8 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
0043C4DB |> EB 62 JMP SHORT 0043C53F
改成:
0043C4A9 |> 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043C4AC |. E8 6AADFCFF CALL 0040721B
0043C4B1 50 PUSH EAX
0043C4B2 0FAF45 F8 IMUL EAX,DWORD PTR SS:[EBP-8]
0043C4B6 33D2 XOR EDX,EDX
0043C4B8 B9 64000000 MOV ECX,64
0043C4BD F7F1 DIV ECX
0043C4BF 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0043C4C2 58 POP EAX
0043C4C3 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043C4C6 2B41 10 SUB EAX,DWORD PTR DS:[ECX+10]
0043C4C9 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8]
0043C4CC 73 03 JNB SHORT 0043C4D1
0043C4CE 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0043C4D1 90 NOP
0043C4D2 90 NOP
0043C4D3 90 NOP
0043C4D4 90 NOP
0043C4D5 90 NOP
0043C4D6 90 NOP
0043C4D7 90 NOP
0043C4D8 90 NOP
0043C4D9 90 NOP
0043C4DA 90 NOP
作者:
summer3965 时间: 2011-2-7 13:35
解釋的真詳細
來試改看看
謝謝囉
作者:
3943169 时间: 2011-2-8 09:47
对话框想改成想瓦岗那样的,应该改那个代码?
作者:
godtype 时间: 2011-2-8 20:54
原帖由 3943169 于 2011-2-8 09:47 发表
对话框想改成想瓦岗那样的,应该改那个代码?
真彩头像?不属本帖范畴。
作者:
xk78765 时间: 2011-2-10 16:13
問題1. 原版中,策略命中上限影響的系數怎麼改呢?
問題2. 策略技能像是氣合、霸氣,這種只能對自己施放,如何讓他能指定對友?
[ 本帖最后由 xk78765 于 2011-2-10 18:39 编辑 ]
作者:
aaa132536 时间: 2011-2-12 15:56
毅兄,豆袋在起作用时有个吃豆的动画,如果将这个动画改成补血时那一圈圈的动画要怎么改,谢谢。
作者:
godtype 时间: 2011-2-13 11:44
原帖由 xk78765 于 2011-2-10 16:13 发表
問題1. 原版中,策略命中上限影響的系數怎麼改呢?
問題2. 策略技能像是氣合、霸氣,這種只能對自己施放,如何讓他能指定對友?
策略的看此帖:
http://www.xycq.net/forum/thread-206799-1-1.html
气合霸气修改类型,可以看第二部分的识别函数,修改一下使用的效果类型或调整一下运行函数即可。
作者:
godtype 时间: 2011-2-13 11:51
原帖由 aaa132536 于 2011-2-12 15:56 发表
毅兄,豆袋在起作用时有个吃豆的动画,如果将这个动画改成补血时那一圈圈的动画要怎么改,谢谢。
豆袋与一般使用恢复HP道具的动画的共用的:
0041CDB4 |. 68 FF000000 PUSH 0FF <--后续法术动画编号
0041CDB9 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0041CDBC |. E8 A1F9FFFF CALL 0041C762
如果单独改就要另外写代码,在这段改成:
CMP DWORD PTR SS:[EBP+8],0
JE **
PUSH 0FF
MOV ECX,DWORD PTR SS:[EBP-8]
CALL 0041C762
JMP ***
新代码…… <--JE **到这里
接原来代码 <--JMP ***到这里
至于新代码暂请自己先参考动画里面的代码,动画类我少研究,有时间再补充主要的部分。
作者:
aaa132536 时间: 2011-2-13 21:40
谢谢毅兄,我去试下。
作者:
aaa132536 时间: 2011-2-13 22:17
毅兄能不能帮忙做几个判断程序:
1.判断攻击方与被攻击方的朝向
输入攻击方及被攻击方,输出:0.面对面、1.面对背、2.其他
2.判断当前目标是否跟随特定武将
输入当前目标及特定武将,输出:0.跟随、1.没跟随
3.判断两者间的距离
输入当前目标及特定武将,输出两者间的距离
作者:
godtype 时间: 2011-2-13 22:19
原帖由 aaa132536 于 2011-2-13 22:17 发表
毅兄能不能帮忙做几个判断程序:
1.判断攻击方与被攻击方的朝向
输入攻击方及被攻击方,输出:0.面对面、1.面对背、2.其他
2.判断当前目标是否跟随特定武将
输入当前目标及特定武将,输出:0.跟随、1.没 ...
超出本帖范畴并超出能力范围。
作者:
aaa132536 时间: 2011-2-13 22:32
那毅兄能不能帮忙详细解释下穿透攻击的代码,特别是里面的区别敌我方。我想做一个特别的穿透效果:
攻击特定武将时有穿透效果,穿透目标为:被攻击特定武将的攻击范围中HP最少的攻方武将。
作者:
godtype 时间: 2011-2-14 09:47 标题: 回复 #15 aaa132536 的帖子
你是想要判断穿透攻击编号的代码?还是要实际的穿透攻击效果代码?
前者是判断是否有穿透装备或穿透兵种,后者是判断穿透范围内哪些敌人受到影响。如果是后者,虽然正好前段时间我在想一个新穿透范围,不过结果好不幸,没法实现。所以实际效果部分亦超出能力范围。
作者:
武骧金星 时间: 2011-2-14 10:17
请问以下功能应该如何实现为好:
当一个武将升级时,不管他的实际兵种是什么,都读取一个固定兵种的升级属性作为依据。
比如说:假如一个武将是步兵,但是他升级的时候我希望他用群雄的属性来升级。
实际升级依然要受到能力的制约,比如该武将的能力如果是70,60,70,70,60,那么实际成长就应该是32332(在原版中群雄所有成长都是3,然后70属于合格,所以能力达到70的话就3成长,不到70就是2成长)
谢谢毅大。
作者:
godtype 时间: 2011-2-14 10:40 标题: 回复 #17 武骧金星 的帖子
原版武将升级(我军):
0040741A |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
0040741D |. 25 FF000000 |AND EAX,0FF
00407422 |. 50 |PUSH EAX
00407423 |. 8B4D E8 |MOV ECX,DWORD PTR SS:[EBP-18]
00407426 |. 33D2 |XOR EDX,EDX
00407428 |. 8A51 2B |MOV DL,BYTE PTR DS:[ECX+2B]
0040742B |. 8BCA |MOV ECX,EDX
0040742D |. 6BC9 1B |IMUL ECX,ECX,1B
00407430 |. 81C1 A0BF4A00 |ADD ECX,004ABFA0
00407436 |. E8 65210000 |CALL 004095A0
0040743B |. 25 FF000000 |AND EAX,0FF
00407440 |. 8945 FC |MOV DWORD PTR SS:[EBP-4],EAX
00407443 |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
00407446 |. 25 FF000000 |AND EAX,0FF
0040744B |. 83F8 04 |CMP EAX,4
0040744E |. 7F 21 |JG SHORT 00407471
00407450 |. 8B4D F0 |MOV ECX,DWORD PTR SS:[EBP-10]
00407453 |. 81E1 FF000000 |AND ECX,0FF
00407459 |. 51 |PUSH ECX
0040745A |. 8B4D E8 |MOV ECX,DWORD PTR SS:[EBP-18]
0040745D |. E8 9AFEFFFF |CALL 004072FC
[EBP-18]是武将能力内存地址
[EBP-10]是循环计数器,用来判断现在升级是哪项能力,0攻1防2精……6MP
[EBP-4]是提升能力的量
4ABFA0是部队能力内存地址的起始点
4095A0是读取部队七围的提升量
4072FC是读取武将五围的提升量
如果要指定某个武将升级的时候按指定的兵种提升量来提升,就将
00407423 |. 8B4D E8 |MOV ECX,DWORD PTR SS:[EBP-18]
00407426 |. 33D2 |XOR EDX,EDX
00407428 |. 8A51 2B |MOV DL,BYTE PTR DS:[ECX+2B]
0040742B |. 8BCA |MOV ECX,EDX
这一段改成:
MOV ECX,DWORD PTR SS:[EBP-18]
CALL 409500
CMP EAX,0XX <--填武将编号
JNZ *01
MOV ECX,0XXX <--填兵种编号
JMP *02
MOV ECX,DWORD PTR SS:[EBP-18] <==JNZ *01到这里
MOVZX ECX,BYTE PTR DS:[ECX+2B]
IMUL ECX,ECX,1B <==JMP *02到这里
下面继续接上即可。
这里只是我军的,如果想要友敌军也是这样,就将其他调用过4072FC的地方,都参考着上面的代码来改就是了。
作者:
武骧金星 时间: 2011-2-14 11:25
好的,谢谢毅大的指点,我先自己尝试一下,如果有问题再来问。
作者:
aaa132536 时间: 2011-2-14 19:28 标题: 回复 #16 godtype 的帖子
我要的是穿透攻击效果的代码。
那毅兄能否把那段代码的地址给我,我自己去慢慢研究下。
作者:
godtype 时间: 2011-2-14 19:53 标题: 回复 #20 aaa132536 的帖子
CALL 00435D06就是穿透的实际效果。
作者:
513633522 时间: 2011-2-15 11:27
最近改原曹操传的引擎 ,发现引擎突然可以在WIN7下运行,DATA其他的都未修改,不知道原引擎哪些地方修改可以兼容各系统
[ 本帖最后由 513633522 于 2011-2-15 11:30 编辑 ]
作者:
godtype 时间: 2011-2-15 11:37 标题: 回复 #22 513633522 的帖子
问STAR吧。
作者:
狂赵云 时间: 2011-2-17 23:39
扩展部队地形显示怎么扩展?就是扩展到显示部队27个!
地形加成显示那个◎▲位置在什么地方?
图片附件:
[1]
QQ截图未命名.jpg (2011-2-17 23:39, 3.1 K) / 该附件被下载次数 83
http://xycq.org.cn/forum/attachment.php?aid=106037
作者:
yjr3426619 时间: 2011-2-18 18:22
毅大。
暴击颜色函数在哪里?
作者:
godtype 时间: 2011-2-18 22:40 标题: 回复 #24 狂赵云 的帖子
代码在46C53B,以及里面调用的函数,这个很难解释,当时改的时候都要问别人才能解决。请自行参考我发布过的引擎和作品来对照参考。
作者:
godtype 时间: 2011-2-18 22:41 标题: 回复 #25 yjr3426619 的帖子
http://www.xycq.net/forum/thread-222036-1-1.html
作者:
狂赵云 时间: 2011-2-19 01:03 标题: 回复 #26 godtype 的帖子
直接拿你的5.0进行修改!
0046C58A |. 6A 1C PUSH 1C(28)实际是27 是部队上限
改为30个或者多点!
修改这部分是显示出来了!
但是修改出来的部队地形效果和消耗机动的图就错乱了!
无法和原版一样的显示!
那么那段地形和消耗机动力在什么地方修改?代码是什么?
还有另外的问题是地形效果的位置是什么地方!8D160?
作者:
godtype 时间: 2011-2-19 10:35 标题: 回复 #28 狂赵云 的帖子
那个已经是极限了,再改会有问题。如果非要改,就要参考STAR5.7版。
作者:
狂赵云 时间: 2011-2-20 01:54 标题: 回复 #29 godtype 的帖子
谢谢
作者:
憂鬱王子 时间: 2011-2-24 11:46
嚯……好厉害,看得我眼都花了……
作者:
WHITESHIP 时间: 2011-2-25 03:47
嗯……问一下关于等级计算的问题,载入存档的档案前面有个"LV“,原版是使用0号武将的等级,这个等级也影响战利品金钱的获得。请问判断这个等级的代码在哪里呢?
作者:
norton 时间: 2011-2-25 14:55
如何扩展内景人物形象数?
作者:
godtype 时间: 2011-2-25 20:42
原帖由 WHITESHIP 于 2011-2-25 03:47 发表
嗯……问一下关于等级计算的问题,载入存档的档案前面有个"LV“,原版是使用0号武将的等级,这个等级也影响战利品金钱的获得。请问判断这个等级的代码在哪里呢?
1、载入存档的档案前面有个"LV“
0041B236 |. B9 681B4A00 MOV ECX,004A1B68
0041B23B |. E8 90B3FEFF CALL 004065D0
就是这里输出0号武将等级。
2、战利品金钱
004169FB |. B9 681B4A00 MOV ECX,004A1B68
00416A00 |. E8 CBFBFEFF CALL 004065D0
00416A05 |. 25 FF000000 AND EAX,0FF
00416A0A |. 6BC0 64 IMUL EAX,EAX,64
00416A0D |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
00416A10 |. 8D9408 BC02000>LEA EDX,DWORD PTR DS:[EAX+ECX+2BC]
同样是输出0号武将等级后乘以100,再加上700。
作者:
godtype 时间: 2011-2-25 20:47
原帖由 norton 于 2011-2-25 14:55 发表
如何扩展内景人物形象数?
你是指在同一内场景中R形象数(非人物数)超过15就会重复的那个问题吗?
作者:
WHITESHIP 时间: 2011-2-26 13:12 标题: 回复 #34 godtype 的帖子
话说要改成新引擎那样似乎比较难……
于是我用一个粗劣方法解决了。总之问题解决了~^ ^谢谢毅大啦~
作者:
513633522 时间: 2011-2-26 19:46
原曹操传引擎里存放整形变量的位置在哪里……最大是多啊
作者:
godtype 时间: 2011-2-26 19:57
原帖由
513633522 于 2011-2-26 19:46 发表
原曹操传引擎里存放整形变量的位置在哪里……最大是多啊
旧引擎何来整形变量?
作者:
513633522 时间: 2011-2-26 23:47 标题: 回复 #38 godtype 的帖子
我说怎么找不到呢
增加一个呗
作者:
norton 时间: 2011-2-28 09:01 标题: 回复 #35 godtype 的帖子
对,对.没说清楚,呵呵!
作者:
godtype 时间: 2011-2-28 09:24 标题: 回复 #40 norton 的帖子
那个……以前曾经问过STAR怎样改,他提供了几个地址,我研究了一轮没成功就放弃了,而那些地址不知道扔到哪里了,现在找不回来,所以抱歉了。或者问一下STAR拿地址,现在他的版本都已经扩展了,参考一下应该就可以了。
作者:
godtype 时间: 2011-2-28 09:26 标题: 回复 #39 513633522 的帖子
要增加存档,要增加指令,跟改成新引擎没什么分别。
作者:
513633522 时间: 2011-2-28 19:20
毅大 穿透攻击那些代码能给讲讲吗?
就是如果要加穿透三格…… 但不理解是怎么实习穿透
作者:
godtype 时间: 2011-2-28 20:48 标题: 回复 #43 513633522 的帖子
21楼有地址,这个只能靠自己了。
作者:
吴下小蒙 时间: 2011-2-28 21:03
请教毅大,将一转兵种增加至三转要如何改,在不触及其它一转兵的情况下
[ 本帖最后由 吴下小蒙 于 2011-2-28 21:05 编辑 ]
作者:
godtype 时间: 2011-2-28 21:06 标题: 回复 #45 吴下小蒙 的帖子
扩展兵种涉及的工作量太大,代码又多,很难帖出来。
作者:
WHITESHIP 时间: 2011-3-10 15:44
毅大,关于打开仓库说话“XXX,打开仓库”这一段,
我看了岱瀛的帖子:
(原帖,61L)
http://www.xycq.net/forum/viewth ... horuid=0&page=3
大致意思是检测0号武将是否在内场景,是则0号武将说话。
但是我改了几个我认为是测试0号武将的地方,都没有效果。
想问一下毅大,能否改成,测试0号武将,若在,则让0号说话,不是---再测试1号武将,让1号武将说“XX,打开仓库”?
我这里贴一小段:
0046776A /. 55 PUSH EBP
0046776B |. 8BEC MOV EBP,ESP
0046776D |. 83EC 70 SUB ESP,70
00467770 |. 53 PUSH EBX
00467771 |. 56 PUSH ESI
00467772 |. 894D 98 MOV DWORD PTR SS:[EBP-68],ECX
00467775 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00467778 |. 8B48 08 MOV ECX,DWORD PTR DS:[EAX+8]
0046777B |. 51 PUSH ECX ; /Arg1
0046777C |. 8B4D 98 MOV ECX,DWORD PTR SS:[EBP-68] ; |
0046777F |. E8 18C8FFFF CALL Ekd5.00463F9C ; \Ekd5.00463F9C
00467784 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00467787 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0046778A |. 83C2 1C ADD EDX,1C
0046778D |. 8B02 MOV EAX,DWORD PTR DS:[EDX]
0046778F |. 8945 C0 MOV DWORD PTR SS:[EBP-40],EAX
00467792 |. 8B4A 04 MOV ECX,DWORD PTR DS:[EDX+4]
00467795 |. 894D C4 MOV DWORD PTR SS:[EBP-3C],ECX
00467798 |. 8B42 08 MOV EAX,DWORD PTR DS:[EDX+8]
0046779B |. 8945 C8 MOV DWORD PTR SS:[EBP-38],EAX
0046779E |. 8B4A 0C MOV ECX,DWORD PTR DS:[EDX+C]
004677A1 |. 894D CC MOV DWORD PTR SS:[EBP-34],ECX
004677A4 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
004677A7 |. 52 PUSH EDX
004677A8 |. 8B45 98 MOV EAX,DWORD PTR SS:[EBP-68]
004677AB |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
004677AD |. 8B4D 98 MOV ECX,DWORD PTR SS:[EBP-68]
004677B0 |. FF52 18 CALL DWORD PTR DS:[EDX+18]
004677B3 |. C745 A0 01000>MOV DWORD PTR SS:[EBP-60],1
004677BA |. 6A 02 PUSH 2 ; /lParam = 2
004677BC |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; |
004677BF |. 8B48 08 MOV ECX,DWORD PTR DS:[EAX+8] ; |
004677C2 |. 51 PUSH ECX ; |wParam
004677C3 |. 68 2C100000 PUSH 102C ; |Message = MSG(102C)
004677C8 |. 8B55 98 MOV EDX,DWORD PTR SS:[EBP-68] ; |
004677CB |. 8B42 10 MOV EAX,DWORD PTR DS:[EDX+10] ; |
004677CE |. 50 PUSH EAX ; |hWnd
004677CF |. FF15 F4624800 CALL DWORD PTR DS:[<&USER32.SendMessageA>; \SendMessageA
004677D5 |. 33C9 XOR ECX,ECX
004677D7 |. 83F8 02 CMP EAX,2
004677DA |. 0F94C1 SETE CL
004677DD |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
004677E0 |. C745 9C FFFFF>MOV DWORD PTR SS:[EBP-64],-1
004677E7 |. C745 F0 00000>MOV DWORD PTR SS:[EBP-10],0
004677EE |. EB 09 JMP SHORT Ekd5.004677F9
004677F0 |> 8B55 F0 /MOV EDX,DWORD PTR SS:[EBP-10]
004677F3 |. 83C2 01 |ADD EDX,1
004677F6 |. 8955 F0 |MOV DWORD PTR SS:[EBP-10],EDX
004677F9 |> 8B45 98 MOV EAX,DWORD PTR SS:[EBP-68]
004677FC |. 33C9 |XOR ECX,ECX
004677FE |. 8A48 14 |MOV CL,BYTE PTR DS:[EAX+14]
00467801 |. 394D F0 |CMP DWORD PTR SS:[EBP-10],ECX
00467804 |. 0F8D 11060000 |JGE Ekd5.00467E1B
0046780A |. 8D55 A0 |LEA EDX,DWORD PTR SS:[EBP-60]
0046780D |. 52 |PUSH EDX ; /lParam
0046780E |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10] ; |
00467811 |. 50 |PUSH EAX ; |wParam
00467812 |. 68 19100000 |PUSH 1019 ; |Message = MSG(1019)
00467817 |. 8B4D 98 |MOV ECX,DWORD PTR SS:[EBP-68] ; |
0046781A |. 8B51 10 |MOV EDX,DWORD PTR DS:[ECX+10] ; |
0046781D |. 52 |PUSH EDX ; |hWnd
0046781E |. FF15 F4624800 |CALL DWORD PTR DS:[<&USER32.SendMessage>; \SendMessageA
00467824 |. C745 F4 24800>|MOV DWORD PTR SS:[EBP-C],8024
0046782B |. 8B45 A4 |MOV EAX,DWORD PTR SS:[EBP-5C]
0046782E |. 83E0 03 |AND EAX,3
00467831 |. 8945 94 |MOV DWORD PTR SS:[EBP-6C],EAX
00467834 |. 837D 94 00 |CMP DWORD PTR SS:[EBP-6C],0
00467838 |. 74 0E |JE SHORT Ekd5.00467848
0046783A |. 837D 94 01 |CMP DWORD PTR SS:[EBP-6C],1
0046783E |. 74 10 |JE SHORT Ekd5.00467850
00467840 |. 837D 94 02 |CMP DWORD PTR SS:[EBP-6C],2
00467844 |. 74 15 |JE SHORT Ekd5.0046785B
00467846 |. EB 1D |JMP SHORT Ekd5.00467865
00467848 |> 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
0046784B |. 894D F4 |MOV DWORD PTR SS:[EBP-C],ECX
0046784E |. EB 1B |JMP SHORT Ekd5.0046786B
00467850 |> 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
00467853 |. 83CA 02 |OR EDX,2
00467856 |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
00467859 |. EB 10 |JMP SHORT Ekd5.0046786B
0046785B |> 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
0046785E |. 0C 01 |OR AL,1
00467860 |. 8945 F4 |MOV DWORD PTR SS:[EBP-C],EAX
00467863 |. EB 06 |JMP SHORT Ekd5.0046786B
00467865 |> 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
00467868 |. 894D F4 |MOV DWORD PTR SS:[EBP-C],ECX
0046786B |> 6A 00 |PUSH 0 ; /lParam = 0
0046786D |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10] ; |
00467870 |. 52 |PUSH EDX ; |wParam
00467871 |. 68 1D100000 |PUSH 101D ; |Message = MSG(101D)
00467876 |. 8B45 98 |MOV EAX,DWORD PTR SS:[EBP-68] ; |
00467879 |. 8B48 10 |MOV ECX,DWORD PTR DS:[EAX+10] ; |
0046787C |. 51 |PUSH ECX ; |hWnd
0046787D |. FF15 F4624800 |CALL DWORD PTR DS:[<&USER32.SendMessage>; \SendMessageA
00467883 |. 8B55 C0 |MOV EDX,DWORD PTR SS:[EBP-40]
00467886 |. 8D4402 FB |LEA EAX,DWORD PTR DS:[EDX+EAX-5]
0046788A |. 8945 C8 |MOV DWORD PTR SS:[EBP-38],EAX
0046788D |. 8B4D C0 |MOV ECX,DWORD PTR SS:[EBP-40]
00467890 |. 83C1 05 |ADD ECX,5
00467893 |. 894D C0 |MOV DWORD PTR SS:[EBP-40],ECX
00467896 |. 8B55 98 |MOV EDX,DWORD PTR SS:[EBP-68]
00467899 |. 8B42 18 |MOV EAX,DWORD PTR DS:[EDX+18]
0046789C |. 8B4D F0 |MOV ECX,DWORD PTR SS:[EBP-10]
0046789F |. 8B1488 |MOV EDX,DWORD PTR DS:[EAX+ECX*4]
004678A2 |. 8955 90 |MOV DWORD PTR SS:[EBP-70],EDX
004678A5 |. 837D 90 0C |CMP DWORD PTR SS:[EBP-70],0C
004678A9 |. 0F87 28050000 |JA Ekd5.00467DD7
请问一下判断0号武将有关的代码是哪个……本人汇编技术太差,敬请谅解。
谢谢~^ ^
[ 本帖最后由 WHITESHIP 于 2011-3-10 15:45 编辑 ]
作者:
godtype 时间: 2011-3-10 16:40 标题: 回复 #47 WHITESHIP 的帖子
你贴这个是仓库界面,正确的叫某人打开仓库之类的是在41973C里面。至于循环测试武将是否在场,要研究一下R场景相关的再回复。
作者:
tydea 时间: 2011-3-12 17:23 标题: 回复 #1 godtype 的帖子
原版引擎仙人过后的兵种,攻击声音移动速度等,都找不到。
有什么办法?
作者:
godtype 时间: 2011-3-12 17:25 标题: 回复 #49 tydea 的帖子
雪芸教程里面都有改法,不需要再解释吧。
作者:
tydea 时间: 2011-3-12 22:11
游戏中我把宝物图片改掉了。
可是宝物升级的时候,显示出来的图片,还是之前那个。
请问咋解决。。。
[ 本帖最后由 tydea 于 2011-3-12 22:13 编辑 ]
图片附件:
1.jpg (2011-3-12 22:13, 5.44 K) / 该附件被下载次数 81
http://xycq.org.cn/forum/attachment.php?aid=106979
图片附件:
2.jpg (2011-3-12 22:13, 10.82 K) / 该附件被下载次数 75
http://xycq.org.cn/forum/attachment.php?aid=106980
作者:
godtype 时间: 2011-3-13 09:05 标题: 回复 #51 tydea 的帖子
1、ITEM.E5没改
2、不属于本帖范畴,去其他地方提问。
作者:
513633522 时间: 2011-3-16 07:13
原曹操传有没有像瓦岗发动绝招时那样,屏幕出现半透明的红色,然后出现绝招名字的函数,如果有,毅大能告诉我位置和用法吗
作者:
godtype 时间: 2011-3-16 08:57 标题: 回复 #53 513633522 的帖子
http://www.xycq.net/forum/viewth ... 2744&highlight=
作者:
tydea 时间: 2011-3-17 13:23
原版中获得兵器的等级算法,如何改成瓦岗那样的算法?
作者:
godtype 时间: 2011-3-19 16:11
原帖由 tydea 于 2011-3-17 13:23 发表
原版中获得兵器的等级算法,如何改成瓦岗那样的算法?
代码涉及太多,只写出原版相关的代码,根据自己的实际情况来改动。
普通装备:
00408069 |. B9 0C000000 MOV ECX,0C
00408088 |. B9 0C000000 MOV ECX,0C
004080B5 |. B9 0C000000 MOV ECX,0C
00407F15 |. B9 0C000000 MOV ECX,0C
00414571 |. B9 0C000000 MOV ECX,0C
00416C1C |. B9 0C000000 |MOV ECX,0C
初级升中级、中级升高级装备所需要等级。
004080BC |. C1EA 02 SHR EDX,2
00407F1C |. C1EA 02 SHR EDX,2
00414578 |. C1EA 02 SHR EDX,2
00416C23 |. C1EA 02 |SHR EDX,2
SHR ***,2是除以4,即武将每4级装备升1级
004080A0 |. 83F9 24 CMP ECX,24
00407EFE |. 83FA 24 CMP EDX,24
0041455C |. 83F8 24 CMP EAX,24
00416C03 |. 83F8 24 |CMP EAX,24
36开始全部装备3级的高级装备。
宝物装备:
00414521 |. C1F8 02 SAR EAX,2
00414543 |. C1F8 02 SAR EAX,2
00416BC4 |. C1F8 02 |SAR EAX,2
00416BE6 |. C1F8 02 |SAR EAX,2
00407EC3 |. C1F8 02 SAR EAX,2
00407EE5 |. C1F8 02 SAR EAX,2
武将每4级装备升1级。
如果要修改武将每N级装备升1级的级数,需要调整前后的代码。
作者:
3943169 时间: 2011-3-20 19:36
宝物可以提升某各地形的适性,类似与岳飞传破浪的效果。请问如何做这种效果?
作者:
godtype 时间: 2011-3-20 20:06 标题: 回复 #57 3943169 的帖子
已经超出本帖范畴了,给你神之奖励版的,自己去参考一下。
00451526 |. E8 90DD0700 CALL 004CF2BB
0045152B |. 85C0 TEST EAX,EAX
0045152D |. 0F85 E8010000 JNZ 0045171B
00451533 |. 90 NOP
00451534 |. 90 NOP
00451751 |. E8 65DB0700 CALL 004CF2BB
00451756 |. 85C0 TEST EAX,EAX
00451758 |. 0F85 90010000 JNZ 004518EE
0045175E |. 90 NOP
0045175F |. 90 NOP
004CF2BB 55 PUSH EBP
004CF2BC 8BEC MOV EBP,ESP
004CF2BE 51 PUSH ECX
004CF2BF E8 0E170000 CALL 004D09D2
004CF2C4 894D FC MOV DWORD PTR SS:[EBP-4],ECX
004CF2C7 6A 2C PUSH 2C
004CF2C9 E8 F2160000 CALL 004D09C0
004CF2CE E8 3687F3FF CALL 00407A09
004CF2D3 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004CF2D6 8BE5 MOV ESP,EBP
004CF2D8 5D POP EBP
004CF2D9 C3 RETN
作者:
WHITESHIP 时间: 2011-3-26 01:05
问一个可能会有些麻烦的问题:
指令 6B:法术。使用时会等一法术释放完才会执行下一条指令,可以通过修改EXE让它不延迟,施放Meff动画的同时就执行下一条指令么?
于是这样就做到在地图上多个点同时展示法术效果了。如果需要延迟,则用指令“延时”,更加方便。
鉴于毅大也研究过MCall和Meff,特此请教,谢谢~^ ^
作者:
godtype 时间: 2011-3-26 08:40 标题: 回复 #59 WHITESHIP 的帖子
不可能的事。
作者:
tydea 时间: 2011-3-26 10:48
怎样让敌方,不用焦灼这个策略?
作者:
godtype 时间: 2011-3-26 10:55 标题: 回复 #61 tydea 的帖子
雪芸的EXE修改教程有写,AI使用策略部分。
作者:
tydea 时间: 2011-3-26 11:07 标题: 回复 #62 godtype 的帖子
找到了……不过不知道焦灼的地址在哪……
作者:
godtype 时间: 2011-3-26 11:19 标题: 回复 #63 tydea 的帖子
按策略顺序排列。
作者:
tydea 时间: 2011-4-4 18:27
毅哥……无论什么职业,用物理攻击和策略都增加武器经验的,在哪改?
记得问过你,突然找不到了……
作者:
godtype 时间: 2011-4-4 18:38 标题: 回复 #65 tydea 的帖子
00403A06 |. 74 05 JE SHORT 00403A0D
改成JMP
作者:
tydea 时间: 2011-4-9 17:05 标题: 回复 #66 godtype 的帖子
多谢毅大,不过这个只是文官用普通攻击的时候,增加武器经验。
请问武将用策略的时候,也增加武器经验,哪个。。
作者:
godtype 时间: 2011-4-9 17:34 标题: 回复 #67 tydea 的帖子
004212EA |. 74 08 JE SHORT 004212F4
改成JMP
作者:
aaa132536 时间: 2011-4-15 19:06
00406539 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0040653C |. E8 C2F8FFFF |CALL Ekd5.00405E03 攻击伤害函数
毅兄这是输入攻击伤害函数的入口,这个函数我只知道传入一个参数ECX:内存地址004927F0,那攻击方武将代码与被攻击方武将代码有没有作为参数传入哦。
[ 本帖最后由 aaa132536 于 2011-4-15 19:08 编辑 ]
作者:
godtype 时间: 2011-4-15 19:24 标题: 回复 #69 aaa132536 的帖子
http://www.xycq.net/forum/thread-124674-1-1.html
如果没有看过,先看一下;如果看过,看不明白我再解释。
作者:
aaa132536 时间: 2011-4-15 20:05
这个看过了,我上面代码就是从那边来的,不过里面只有岱大有解释的代码看明白,其他的都是一知半解的,呵呵。
作者:
godtype 时间: 2011-4-16 09:51
AI攻击
0043AC2F |. 8A45 F8 MOV AL,BYTE PTR SS:[EBP-8]
0043AC32 |. 50 PUSH EAX <——被攻击方的战场编号压入0C栈
0043AC33 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0043AC36 |. 8A51 04 MOV DL,BYTE PTR DS:[ECX+4]
0043AC39 |. 52 PUSH EDX <——攻击方的战场编号压入08栈
0043AC3A |. B9 F0274900 MOV ECX,004927F0
0043AC3F |. E8 ADB8FCFF CALL 004064F1
玩家点击攻击
0043DB3E |. 8A45 F8 MOV AL,BYTE PTR SS:[EBP-8]
0043DB41 |. 50 PUSH EAX <——被攻击方的战场编号压入0C栈
0043DB42 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0043DB45 |. 8A51 04 MOV DL,BYTE PTR DS:[ECX+4]
0043DB48 |. 52 PUSH EDX <——攻击方的战场编号压入08栈
0043DB49 |. B9 F0274900 MOV ECX,004927F0
0043DB4E |. E8 9E89FCFF CALL 004064F1
反击
004064DA |. 8A02 MOV AL,BYTE PTR DS:[EDX]
004064DC |. 50 PUSH EAX <——原攻击方的战场编号压入0C栈变成被攻击方
004064DD |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
004064E0 |. 8A51 01 MOV DL,BYTE PTR DS:[ECX+1]
004064E3 |. 52 PUSH EDX <——原被攻击方的战场编号压入08栈变成攻击方
004064E4 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] <——4927F0
004064E7 |. E8 05000000 CALL 004064F1
另外还有两个地方是引导攻击的,不贴了,分别在AI攻击和玩家点击攻击的下面。
004064F1 /$ 55 PUSH EBP
004064F2 |. 8BEC MOV EBP,ESP
004064F4 |. 51 PUSH ECX
004064F5 |. 894D FC MOV DWORD PTR SS:[EBP-4],ECX
004064F8 |. 8A45 0C MOV AL,BYTE PTR SS:[EBP+C]
004064FB |. 50 PUSH EAX ; /Arg2
004064FC |. 8A4D 08 MOV CL,BYTE PTR SS:[EBP+8] ; |
004064FF |. 51 PUSH ECX ; |Arg1
00406500 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] ; |
00406503 |. E8 F4FCFFFF CALL 004061FC
4061FC会将攻防双方的战场编号存入4927F0开始的各个内存位置中,再经过各种计算算出攻击处理所需要的一系列数据存进内存中,后面的各种处理就可以直接从4927F0+XX中读出使用。
00406508 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0040650B |. C682 08060000 >MOV BYTE PTR DS:[EDX+608],0
00406512 |. EB 15 JMP SHORT 00406529
00406514 |> 8B45 FC /MOV EAX,DWORD PTR SS:[EBP-4]
00406517 |. 8A88 08060000 |MOV CL,BYTE PTR DS:[EAX+608]
0040651D |. 80C1 01 |ADD CL,1
00406520 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00406523 |. 888A 08060000 |MOV BYTE PTR DS:[EDX+608],CL
00406529 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040652C |. 33C9 |XOR ECX,ECX
0040652E |. 8A88 08060000 |MOV CL,BYTE PTR DS:[EAX+608]
00406534 |. 83F9 02 |CMP ECX,2
00406537 |. 7D 28 |JGE SHORT 00406561
00406539 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0040653C |. E8 C2F8FFFF |CALL 00405E03
00406541 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00406544 |. E8 FBF1FFFF |CALL 00405744
00406549 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0040654C |. E8 38F3FFFF |CALL 00405889
00406551 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00406554 |. E8 28FCFFFF |CALL 00406181
00406559 |. 85C0 |TEST EAX,EAX
0040655B |. 75 02 |JNZ SHORT 0040655F
0040655D |. EB 02 |JMP SHORT 00406561
0040655F |>^EB B3 \JMP SHORT 00406514
00406561 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00406564 |. E8 03F7FFFF CALL 00405C6C
00406569 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0040656C |. E8 29FEFFFF CALL 0040639A
00406571 |. 8BE5 MOV ESP,EBP
00406573 |. 5D POP EBP
00406574 \. C2 0800 RETN 8
[ 本帖最后由 godtype 于 2011-4-16 09:52 编辑 ]
作者:
aaa132536 时间: 2011-4-16 12:05
谢谢毅兄,我好好学习下
作者:
tydea 时间: 2011-4-16 23:21
曹操传里面的自动存档,读档后都是在结束回合前的状态上继续的。
若是都行动过了,再读档,觉得很没意义。
所以能不能把它改成:读档后是从我方行动前开始。这样就有意义多了。。
作者:
godtype 时间: 2011-4-17 08:30
原帖由 tydea 于 2011-4-16 23:21 发表
曹操传里面的自动存档,读档后都是在结束回合前的状态上继续的。
若是都行动过了,再读档,觉得很没意义。
所以能不能把它改成:读档后是从我方行动前开始。这样就有意义多了。。
没有研究过,理论上可行,等有时间再说。
作者:
godtype 时间: 2011-4-17 08:31
谢谢各位一直以来的支持,暂时停止解释,再开时间待定。
作者:
513633522 时间: 2011-4-17 08:56
谢谢毅大对我们的帮助,等待再开的时间
作者:
okokwori 时间: 2024-9-30 10:15
灌水刷权限
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) |
Powered by Discuz! 5.0.0 |