本修改法暂时适用于旧引擎及岱瀛的新引擎,旧版STAR175引擎的兵种相克修改请看此帖:
http://www.xycq.net/forum/thread-171037-1-1.html
以下是需要改动的地方在原版CCZ的原代码(摘抄自借岱瀛的《解读KOEI曹操传代码》):
0043BD81 |. E8 EAF6FFFF CALL Ekd5.0043B470 //获取攻击方的职业
0043BD86 |. 25 FF000000 AND EAX,0FF
0043BD8B |. 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX
0043BD8E |. 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
0043BD91 |. 83EA 01 SUB EDX,1
0043BD94 |. 8955 D0 MOV DWORD PTR SS:[EBP-30],EDX
0043BD97 |. 837D D0 04 CMP DWORD PTR SS:[EBP-30],4
0043BD9B |. 0F87 F7000000 JA Ekd5.0043BE98
0043BDA1 |. 8B45 D0 MOV EAX,DWORD PTR SS:[EBP-30]
0043BDA4 |. FF2485 96BF43>JMP DWORD PTR DS:[EAX*4+43BF96] 下面是个跳转表
0043BF96 . 35BE4300 DD Ekd5大白.0043BE35 01步兵
0043BF9A . ABBD4300 DD Ekd5大白.0043BDAB 02弓兵
0043BF9E . 98BE4300 DD Ekd5大白.0043BE98 3与大于4一样处理 03骑兵
0043BFA2 . ABBD4300 DD Ekd5大白.0043BDAB 04弓骑兵
0043BFA6 . \ABBD4300 DD Ekd5大白.0043BDAB 05炮兵
弓兵,弓骑兵,炮兵都跳转到这里:
0043BDAB |> 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043BDAE |. 81E1 FF000000 AND ECX,0FF
0043BDB4 . 83F9 03 CMP ECX,3 3,骑兵受到150%的远程伤害
---
0043BDD4 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0043BDD7 |. 6BC9 03 IMUL ECX,ECX,3
0043BDDA |. D1E9 SHR ECX,1
0043BDDC |. 894D FC MOV DWORD PTR SS:[EBP-4],ECX //伤害计算 先乘以3,再右移动一位(处以2)
0043BDDF |> 6A 3D PUSH 3D 3D减轻远距损伤的特殊效果代号
---
0043BE95 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0043BE98 |> 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043BE9B |. 81E1 FF000000 AND ECX,0FF
0043BEA1 |. 83F9 03 CMP ECX,3
0043BEA4 |. 75 4A JNZ SHORT Ekd5.0043BEF0 如果被攻击不是骑兵跳转
详细是什么意思我就不解释了,因为我也是一知半懂的,我只是通过反复对照岱瀛的新引擎里相同位置的内容,以及对照了瓦岗的兵种相克,确定了需要改动的地方:
0043BD97 . 83C2 01 ADD EDX,1
0043BD9A . 90 NOP
0043BD9B . 90 NOP
0043BD9C . 90 NOP
0043BD9D . 90 NOP
0043BD9E . 90 NOP
0043BD9F . 90 NOP
0043BDA0 . 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0043BDA3 . 81E1 FF000000 AND ECX,0FF
0043BDA9 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0043BDAC . 3E:FF2495 40214D00 JMP DWORD PTR DS:[EDX*4+4D2140]
0043BDB4 . E9 DF000000 JMP 未经同意不得转载.0043BE98
然后去到004D2140,从这里开始重写一个跳转表,
第一个是00群雄类,跳转去004D21C5,所以写入DD 004D21C5(这里实际的显示会变得很乱,无所谓的)
之后的兵种类每个+4写跳转就可以了。
接着Ctrl-G,跳到004D21BC,写入以下内容:
004D21BC 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
004D21BF 81E1 FF000000 AND ECX,0FF
(以上两条我不懂什么意思,照写可以了,反正岱大已经写好,我不改就是)
接下来从004D21C5开始,按照一定的格式自行写入就可以了。具体格式如下:
CMP ECX,** 比较被攻击的兵种
JE SHORT 00****** 等于就跳转到某位置
JNZ 00****** 不等于就跳转到某位置
JMP 00****** 无条件跳转
IMUL EAX,EAX,1
SHR EAX,1 以上两行乘以1除以2,即50%实际效果
IMUL EAX,EAX,3
SHR EAX,2 以上两行乘以3除以4,即75%实际效果
IMUL EAX,EAX,5
SHR EAX,2 以上两行乘以5除以4,即125%实际效果
IMUL EAX,EAX,3
SHR EAX,1 以上两行乘以3除以2,即150%实际效果
IMUL EAX,EAX,3
XOR EDX,EDX
MOV ECX,5
DIV ECX 以上四行乘以3除以5,即60%实际效果
IMUL EAX,EAX,7
XOR EDX,EDX
MOV ECX,5
DIV ECX 以上四行乘以7除以5,即140%实际效果
…………
写好相克后,记得要改上面的跳转表,并核对清楚该兵种的相克的起始位置是否与跳转表的相吻合,否则会出错。跳转表的写法“DD 实际起始
位置”,用十六进写入就要相反写入,即起始位置是004D21C5,用十六进写入就是C5 21 4D 00,不要错啊。
具体例子:
1、某非远距攻击兵种,对17、18兵种75%效果,对00、1A兵种50%效果,除此之外的兵种140%效果:
004D21C5 83F9 17 CMP ECX,17
————比较是否17兵种
004D21C8 74 2A JE SHORT 未经同意不得转载国.004D21F4
————等于17所以跳转到004D21F4
004D21CA 83F9 18 CMP ECX,18
004D21CD 74 25 JE SHORT 未经同意不得转载.004D21F4
004D21CF 83F9 00 CMP ECX,0
004D21D2 74 16 JE SHORT 未经同意不得转载.004D21EA
004D21D4 83F9 1A CMP ECX,1A
004D21D7 74 11 JE SHORT 未经同意不得转载.004D21EA
004D21D9 6BC0 07 IMUL EAX,EAX,7
————不等于以上四种兵种
004D21DC 33D2 XOR EDX,EDX
004D21DE B9 05000000 MOV ECX,5
004D21E3 F7F1 DIV ECX
——————计算结果(乘以7除以5,即140%实际效果)
004D21E5 -E9 AB9CF6FF JMP 未经同意不得转载.0043BE95
——然后跳回原来计算伤害
004D21EA 6BC0 01 IMUL EAX,EAX,1
————是00或1A就跳到这里
004D21ED D1E8 SHR EAX,1
————计算结果(乘以1除以2,即50%实际效果)
004D21EF -E9 A19CF6FF JMP 未经同意不得转载.0043BE95
——然后跳回原来计算伤害
004D21F4 6BC0 03 IMUL EAX,EAX,3
————是17或18就跳到这里
004D21F7 C1E8 02 SHR EAX,2
————计算结果(乘以3除以4,即75%实际效果)
004D21FA -E9 969CF6FF JMP 未经同意不得转载.0043BE95
——然后跳回原来计算伤害
上例中,如果只对四种兵种有相克,就在004D21D7这里改成JNZ 0043BE98(注意是BE98不是BE95),意思是不等于四种相克兵种,所以检测完毕,跳转回去0043BE98。
2、某远距攻击兵种,对03、04、10、11、12、0D、0E兵种150%效果,对17、18兵种175%效果:
004D2411 83F9 03 CMP ECX,3
004D2414 74 37 JE SHORT 未经同意不得转载.004D244D
004D2416 83F9 04 CMP ECX,4
004D2419 74 32 JE SHORT 未经同意不得转载.004D244D
004D241B 83F9 10 CMP ECX,10
004D241E 74 2D JE SHORT 未经同意不得转载.004D244D
004D2420 83F9 11 CMP ECX,11
004D2423 74 28 JE SHORT 未经同意不得转载.004D244D
004D2425 83F9 12 CMP ECX,12
004D2428 74 23 JE SHORT 未经同意不得转载.004D244D
004D242A 83F9 0D CMP ECX,0D
004D242D 74 1E JE SHORT 未经同意不得转载.004D244D
004D242F 83F9 0E CMP ECX,0E
004D2432 74 19 JE SHORT 未经同意不得转载.004D244D
004D2434 83F9 17 CMP ECX,17
004D2437 74 09 JE SHORT 未经同意不得转载.004D2442
004D2439 83F9 18 CMP ECX,18
004D243C -0F85 9D99F6FF JNZ 未经同意不得转载.0043BDDF
004D2442 6BC0 07 IMUL EAX,EAX,7
004D2445 C1E8 02 SHR EAX,2
004D2448 -E9 8F99F6FF JMP 未经同意不得转载.0043BDDC
004D244D 6BC0 03 IMUL EAX,EAX,3
004D2450 D1E8 SHR EAX,1
004D2452 -E9 8599F6FF JMP 梦幻三国.0043BDDC
基本原理与第1例相同,所以后面不做注解,但不同的是因为有减轻远距损伤的道具,所以跳回原来计算伤害的位置要推前,所以将已经计算过相克效果值的跳转到0043BDDC(可以理解为将跳转到BE95改跳到BDDC),检测过不属于相克兵种的就跳转到0043BDDF(可以理解为将跳转到BE98改跳到BDDF)。
欢迎各位指出不足之处。