第三部分 效果函数
一、直接伤害和吸收MP
004256FE |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425701 |. C681 54020000 >MOV BYTE PTR DS:[ECX+254],40
00425708 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0042570B |. E8 2EDAFFFF CALL 0042313E
00425710 |. E9 81020000 JMP 00425996
直接伤害(非砂暴的四类策略、诱惑、晕眩、朱雀)是从这里过来的
00425715 |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00425718 |. C682 54020000 >MOV BYTE PTR DS:[EDX+254],50
0042571F |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425722 |. E8 17DAFFFF CALL 0042313E
00425727 |. E9 6A020000 JMP 00425996
吸收MP(谍报)是从这里过来的
0042313E /$ 55 PUSH EBP
0042313F |. 8BEC MOV EBP,ESP
00423141 |. 83EC 10 SUB ESP,10
00423144 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
这里输入进来的ECX就是497AF8
00423147 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0042314A |. 8A08 MOV CL,BYTE PTR DS:[EAX]
0042314C |. 51 PUSH ECX ; /Arg4
0042314D |. 6A 02 PUSH 2 ; |Arg3 = 00000002
0042314F |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; |
00423152 |. 8A82 C9020000 MOV AL,BYTE PTR DS:[EDX+2C9] ; |
00423158 |. 50 PUSH EAX ; |Arg2
00423159 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
0042315C |. 8A51 01 MOV DL,BYTE PTR DS:[ECX+1] ; |
0042315F |. 52 PUSH EDX ; |Arg1
00423160 |. B9 50424B00 MOV ECX,004B4250 ; |
00423165 |. E8 D3210300 CALL 0045533D ; \0045533D
45533D(一共四个参数 + 一个ECX=4B4250的数据输入)确定被策略攻击的目标武将,穿透型策略就是第一个被攻击的武将。
0042316A |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0042316D |. 8841 0C MOV BYTE PTR DS:[ECX+C],AL
45533D输出的AL值存入497AF8+0CH中
00423170 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
00423173 |. 33C0 XOR EAX,EAX
00423175 |. 8A42 0C MOV AL,BYTE PTR DS:[EDX+C]
00423178 |. 3D FF000000 CMP EAX,0FF
0042317D |. 75 05 JNZ SHORT 00423184
0042317F |. E9 D3010000 JMP 00423357
检查一下497AF8+CH是否为0FF,即有没有攻击目标,0FF就是没有,跳到最后返回。
00423184 |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423187 |. 8B91 A8040000 MOV EDX,DWORD PTR DS:[ECX+4A8]
0042318D |. 52 PUSH EDX ; /Arg4
0042318E |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; |
00423191 |. 8A48 0C MOV CL,BYTE PTR DS:[EAX+C] ; |
00423194 |. 51 PUSH ECX ; |Arg3
00423195 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; |
00423198 |. 8A42 01 MOV AL,BYTE PTR DS:[EDX+1] ; |
0042319B |. 50 PUSH EAX ; |Arg2
0042319C |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
0042319F |. 8A11 MOV DL,BYTE PTR DS:[ECX] ; |
004231A1 |. 52 PUSH EDX ; |Arg1
004231A2 |. E8 7BD2FFFF CALL 00420422 ; \00420422
004231A7 |. 83C4 10 ADD ESP,10
004231AA |. 85C0 TEST EAX,EAX
004231AC |. 75 05 JNZ SHORT 004231B3
004231AE |. E9 A4010000 JMP 00423357
420422(一共四个参数输入)是第二个策略限制,包括地形、使用的对象(例如回归不能指向使用策略的武将)。输出的EAX为零表示不可使用,跳到最后返回。
004231B3 |> 6A 00 PUSH 0 ; /Arg1 = 00000000
004231B5 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
004231B8 |. E8 8C210000 CALL 00425349 ; \00425349
425349是根据穿透范围将全部被攻击武将的战场编号按顺序存入497AF8+DH开始的74H*1个内存中。
004231BD |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
004231C1 |. EB 08 JMP SHORT 004231CB
[EBP-4]是循环计数器,这里先将BYTE位清零。(如果是我就将整个DWORD清零,下面会省好多字节)
004231C3 |> 8A45 FC /MOV AL,BYTE PTR SS:[EBP-4]
004231C6 |. 04 01 |ADD AL,1
004231C8 |. 8845 FC |MOV BYTE PTR SS:[EBP-4],AL
004231CB |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004231CE |. 81E1 FF000000 |AND ECX,0FF
004231D4 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004231D7 |. 33C0 |XOR EAX,EAX
004231D9 |. 8A440A 0D |MOV AL,BYTE PTR DS:[EDX+ECX+D]
004231DD |. 3D FF000000 |CMP EAX,0FF
004231E2 |. 0F84 52010000 |JE 0042333A
按顺序从497AF8+DH开始的74H*1个内存地址中读出战场编号,等于0FF即已经没有被攻击武将了,跳出这个循环。
004231E8 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
004231EB |. 81E1 FF000000 |AND ECX,0FF
004231F1 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004231F4 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004231F7 |. 8A4C08 0D |MOV CL,BYTE PTR DS:[EAX+ECX+D]
004231FB |. 884A 0C |MOV BYTE PTR DS:[EDX+C],CL
计数器数值+497AF8+DH输出来,存入497AF8+CH中,作为计算伤害的时候使用。
004231FE |. 6A 00 |PUSH 0
00423200 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
00423203 |. 8A02 |MOV AL,BYTE PTR DS:[EDX]
00423205 |. 50 |PUSH EAX
00423206 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423209 |. 33D2 |XOR EDX,EDX
0042320B |. 8A51 0C |MOV DL,BYTE PTR DS:[ECX+C]
0042320E |. 8BCA |MOV ECX,EDX
00423210 |. 6BC9 24 |IMUL ECX,ECX,24
00423213 |. 81C1 502C4B00 |ADD ECX,004B2C50
00423219 |. E8 52C40300 |CALL 0045F670
0042321E |. 6BC0 48 |IMUL EAX,EAX,48 ; |
00423221 |. 05 681B4A00 |ADD EAX,004A1B68 ; |
00423226 |. 50 |PUSH EAX ; |Arg2
00423227 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8] ; |
0042322A |. 33C9 |XOR ECX,ECX ; |
0042322C |. 8A48 0C |MOV CL,BYTE PTR DS:[EAX+C] ; |
0042322F |. 6BC9 24 |IMUL ECX,ECX,24 ; |
00423232 |. 81C1 502C4B00 |ADD ECX,004B2C50 ; |
00423238 |. 51 |PUSH ECX ; |Arg1
00423239 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8] ; |
0042323C |. 8B4A 08 |MOV ECX,DWORD PTR DS:[EDX+8] ; |
0042323F |. E8 668D0100 |CALL 0043BFAA ; \0043BFAA
43BFAA是策略伤害计算,重要,一共四个参数 + ECX=497AF8+8H的值 输入。其中14栈为0时才是实际计算伤害,为1时是平时鼠标移过去显示伤害用的;10栈是策略编号;0C栈是当前被攻击武将的DATA内存;08栈是当前被攻击武将的战场内存。输出的EAX为策略伤害,最低为1,为0的时候表示没有命中。
00423244 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00423247 |. 81E1 FF000000 |AND ECX,0FF
0042324D |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
00423250 |. 89848A 8400000>|MOV DWORD PTR DS:[EDX+ECX*4+84],EAX
将伤害存入497AF8+计数器*4+84H的内存中。
00423257 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0042325A |. 25 FF000000 |AND EAX,0FF
0042325F |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423262 |. 83BC81 8400000>|CMP DWORD PTR DS:[ECX+EAX*4+84],0
0042326A |. 75 16 |JNZ SHORT 00423282
0042326C |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
0042326F |. 81E2 FF000000 |AND EDX,0FF
00423275 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423278 |. C68410 5502000>|MOV BYTE PTR DS:[EAX+EDX+255],0
00423280 |. EB 1C |JMP SHORT 0042329E
判断伤害值是否为0,为0就要将497AF8+计数器+255H的效果标识置为0,表示最后没有效果出现,即MISS。
00423282 |> 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00423285 |. 81E1 FF000000 |AND ECX,0FF
0042328B |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
0042328E |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423291 |. 8A80 54020000 |MOV AL,BYTE PTR DS:[EAX+254]
00423297 |. 88840A 5502000>|MOV BYTE PTR DS:[EDX+ECX+255],AL
有伤害值,就要将497AF8+254H的策略效果标识存入到497AF8+计数器+255H里,让每一个被攻击武将都出现策略效果以及动画。谍报是50,其他是40。
0042329E |> 8A4D FC |MOV CL,BYTE PTR SS:[EBP-4]
004232A1 |. 51 |PUSH ECX ; /Arg1
004232A2 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
004232A5 |. E8 51DCFFFF |CALL 00420EFB ; \00420EFB
004232AA |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004232AD |. 3B82 D0020000 |CMP EAX,DWORD PTR DS:[EDX+2D0]
004232B3 |. 76 11 |JBE SHORT 004232C6
004232B5 |. 8A45 FC |MOV AL,BYTE PTR SS:[EBP-4]
004232B8 |. 50 |PUSH EAX ; /Arg1
004232B9 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
004232BC |. E8 3ADCFFFF |CALL 00420EFB ; \00420EFB
004232C1 |. 8945 F4 |MOV DWORD PTR SS:[EBP-C],EAX
004232C4 |. EB 0C |JMP SHORT 004232D2
004232C6 |> 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004232C9 |. 8B91 D0020000 |MOV EDX,DWORD PTR DS:[ECX+2D0]
004232CF |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
004232D2 |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004232D5 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004232D8 |. 8988 D0020000 |MOV DWORD PTR DS:[EAX+2D0],ECX
420EFB是武将使用策略所获得的个人经验,计数器作为参数和ECX=497AF8H输入,第一次出来的数值与497AF8+2D0H的内存中的数值进行比较,大于则存入497AF8+2D0H中,小于等于则将497AF8+2D0H的数值读出再重新存入(其实就是跳过)。
004232DE |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004232E1 |. E8 A5DFFFFF |CALL 0042128B
004232E6 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004232E9 |. 3B82 D4020000 |CMP EAX,DWORD PTR DS:[EDX+2D4]
004232EF |. 76 0D |JBE SHORT 004232FE
004232F1 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004232F4 |. E8 92DFFFFF |CALL 0042128B
004232F9 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX
004232FC |. EB 0C |JMP SHORT 0042330A
004232FE |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423301 |. 8B88 D4020000 |MOV ECX,DWORD PTR DS:[EAX+2D4]
00423307 |. 894D F0 |MOV DWORD PTR SS:[EBP-10],ECX
0042330A |> 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
0042330D |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
00423310 |. 8982 D4020000 |MOV DWORD PTR DS:[EDX+2D4],EAX
42128B是使用策略所获得的武器经验,只要ECX=497AF8H输入即可,输出来的数值跟前面的个人经验相同的处理方式,存入到497AF8+2D4H中。
00423316 |. 8A4D FC |MOV CL,BYTE PTR SS:[EBP-4]
00423319 |. 51 |PUSH ECX ; /Arg1
0042331A |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
0042331D |. E8 81E0FFFF |CALL 004213A3 ; \004213A3
00423322 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00423325 |. 81E2 FF000000 |AND EDX,0FF
0042332B |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
0042332E |. 898491 D802000>|MOV DWORD PTR DS:[ECX+EDX*4+2D8],EAX
4213A3是被策略攻击的武将所获得的防具经验,计数器作为参数和ECX=497AF8输入,输出来的数值跟前面的个人经验相同的处理方式,存入到497AF8+计数器*4+2D8H中。
00423335 |.^E9 89FEFFFF \JMP 004231C3
跳回前面,将计数器+1再继续循环一次。
0042333A |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0042333D |. E8 7DE1FFFF CALL 004214BF
动画处理,不分析了。
00423342 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423345 |. E8 5EF1FFFF CALL 004224A8
这条才是真真正正的策略效果,最后再分析。
0042334A |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0042334D |. C782 AC040000 >MOV DWORD PTR DS:[EDX+4AC],1
将 497AF8+4ACH 赋值为1,结束武将行动。
00423357 |> 8BE5 MOV ESP,EBP
00423359 |. 5D POP EBP
0042335A \. C3 RETN
直接伤害是相当简单,也可以算是一个基础,其他的效果函数基本与这条相同。
二、砂暴式全屏伤害
0042572C |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0042572F |. C680 54020000 >MOV BYTE PTR DS:[EAX+254],40
00425736 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425739 |. E8 FCEAFFFF CALL 0042423A
0042573E |. E9 53020000 JMP 00425996
砂暴式全屏伤害是从这里过来的
0042423A /$ 55 PUSH EBP
0042423B |. 8BEC MOV EBP,ESP
0042423D |. 83EC 18 SUB ESP,18
00424240 |. 56 PUSH ESI
00424241 |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
00424244 |. C645 F8 00 MOV BYTE PTR SS:[EBP-8],0
00424248 |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
0042424C |. EB 08 JMP SHORT 00424256
[EBP-4]是循环计数器,[EBP-8]是用来统计有多少敌人被攻击,这里一起先将BYTE位清零。
0042424E |> 8A45 FC /MOV AL,BYTE PTR SS:[EBP-4]
00424251 |. 04 01 |ADD AL,1
00424253 |. 8845 FC |MOV BYTE PTR SS:[EBP-4],AL
00424256 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00424259 |. 81E1 FF000000 |AND ECX,0FF
0042425F |. 83F9 73 |CMP ECX,73
00424262 |. 0F8D 80000000 |JGE 004242E8
00424268 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0042426B |. 81E1 FF000000 |AND ECX,0FF
00424271 |. 6BC9 24 |IMUL ECX,ECX,24
00424274 |. 81C1 502C4B00 |ADD ECX,004B2C50
0042427A |. E8 114AFFFF |CALL 00418C90
0042427F |. 25 FF000000 |AND EAX,0FF
00424284 |. 83F8 02 |CMP EAX,2
00424287 |. 75 5A |JNZ SHORT 004242E3
418C90是判断计数器当前的数值对应的战场编号的出场武将是否可见(未撤退,未隐藏),输出的EAX=2就是可见。
00424289 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0042428C |. 81E1 FF000000 |AND ECX,0FF
00424292 |. 6BC9 24 |IMUL ECX,ECX,24
00424295 |. 81C1 502C4B00 |ADD ECX,004B2C50
0042429B |. E8 7024FEFF |CALL 00406710
004242A0 |. 8BF0 |MOV ESI,EAX
004242A2 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
004242A5 |. 8B4A 08 |MOV ECX,DWORD PTR DS:[EDX+8]
004242A8 |. E8 6324FEFF |CALL 00406710
004242AD |. 3BF0 |CMP ESI,EAX
004242AF |. 74 32 |JE SHORT 004242E3
406710是武将在战场中属于哪一方,上面这部分代码是先读出计数器当前的数值对应的战场编号的出场武将属于哪一方,然后再读出使用策略的武将属于哪一方的数值,两者进行比较,相同表示为同属一阵营,跳到最后面再返回前面计数器+1再循环,不相同才继续执行代码。
004242B1 |. 8A45 FC |MOV AL,BYTE PTR SS:[EBP-4]
004242B4 |. 50 |PUSH EAX ; /Arg2
004242B5 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C] ; |
004242B8 |. 8A11 |MOV DL,BYTE PTR DS:[ECX] ; |
004242BA |. 52 |PUSH EDX ; |Arg1
004242BB |. E8 BAC6FFFF |CALL 0042097A ; \0042097A
004242C0 |. 83C4 08 |ADD ESP,8
004242C3 |. 85C0 |TEST EAX,EAX
004242C5 |. 75 02 |JNZ SHORT 004242C9
004242C7 |.^EB 85 |JMP SHORT 0042424E
42097A是前二十个策略(即四类策略)才用的,根据被攻击者所在地形是否当前策略是否可以在此地形中使用,输出的EAX为0则不可用,跳回计数器+1再继续循环。
004242C9 |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004242CC |. 25 FF000000 |AND EAX,0FF
004242D1 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004242D4 |. 8A55 FC |MOV DL,BYTE PTR SS:[EBP-4]
004242D7 |. 885401 0D |MOV BYTE PTR DS:[ECX+EAX+D],DL
将计数器当前数值存入到497AF8+当前可以攻击的敌人数量+0DH的内存中。
004242DB |. 8A45 F8 |MOV AL,BYTE PTR SS:[EBP-8]
004242DE |. 04 01 |ADD AL,1
004242E0 |. 8845 F8 |MOV BYTE PTR SS:[EBP-8],AL
004242E3 |>^E9 66FFFFFF \JMP 0042424E
当前可以攻击的敌人数量+1后,跳回计数器+1再继续循环。
当循环计数器>=73H的时候就跳到下面这里,因为一场战役中最多有74H个出场人物,从0到73H,上面一大段循环计算是要判断全部出场人物中有多少是可以攻击的相对敌人(所谓相对敌人就是指当我友军攻击的时候,敌军和援军就是敌人,当敌军和援军攻击的时候,我军和友军就是敌人)。
004242E8 |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
004242EB |. 81E1 FF000000 AND ECX,0FF
004242F1 |. 85C9 TEST ECX,ECX
004242F3 |. 0F85 81000000 JNZ 0042437A
可以攻击的敌人数量是否为0,不为0跳到后面。
004242F9 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
004242FC |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
004242FF |. 8A48 01 MOV CL,BYTE PTR DS:[EAX+1]
00424302 |. 884A 0D MOV BYTE PTR DS:[EDX+D],CL
00424305 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
00424308 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0042430B |. 8A48 0D MOV CL,BYTE PTR DS:[EAX+D]
0042430E |. 884A 0C MOV BYTE PTR DS:[EDX+C],CL
00424311 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
00424314 |. C782 84000000 >MOV DWORD PTR DS:[EDX+84],0
0042431E |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00424321 |. 25 FF000000 AND EAX,0FF
00424326 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
00424329 |. C68401 5502000>MOV BYTE PTR DS:[ECX+EAX+255],0
00424331 |. 6A 00 PUSH 0 ; /Arg1 = 00000000
00424333 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] ; |
00424336 |. E8 C0CBFFFF CALL 00420EFB ; \00420EFB
0042433B |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
0042433E |. 3B82 D0020000 CMP EAX,DWORD PTR DS:[EDX+2D0]
00424344 |. 76 0F JBE SHORT 00424355
00424346 |. 6A 00 PUSH 0 ; /Arg1 = 00000000
00424348 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] ; |
0042434B |. E8 ABCBFFFF CALL 00420EFB ; \00420EFB
00424350 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
00424353 |. EB 0C JMP SHORT 00424361
00424355 |> 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00424358 |. 8B88 D0020000 MOV ECX,DWORD PTR DS:[EAX+2D0]
0042435E |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX
00424361 |> 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
00424364 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00424367 |. 8982 D0020000 MOV DWORD PTR DS:[EDX+2D0],EAX
0042436D |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
00424370 |. E8 61D5FFFF CALL 004218D6
00424375 |. E9 7F010000 JMP 004244F9
上面这一大段是指没有可以被攻击的敌人,因此将使用策略武将的战场编号分别存入497AF8+0CH和497AF8+0DH中,然后497AF8+84H和+255H的伤害值和效果标识都置0,相当于没有命中策略,接着计算个人经验的获得,最后再一个动画处理,跳到最后面结束,返回后结束武将行动(因为砂暴一点击使用就马上执行,所以就算没有敌人被攻击,一样会结束武将行动)。
0042437A |> C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
0042437E |. EB 09 JMP SHORT 00424389
再次清空[EBP-4]的BYTE位,用作另外一个计数器使用。
00424380 |> 8A4D FC /MOV CL,BYTE PTR SS:[EBP-4]
00424383 |. 80C1 01 |ADD CL,1
00424386 |. 884D FC |MOV BYTE PTR SS:[EBP-4],CL
00424389 |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0042438C |. 81E2 FF000000 |AND EDX,0FF
00424392 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
00424395 |. 33C9 |XOR ECX,ECX
00424397 |. 8A4C10 0D |MOV CL,BYTE PTR DS:[EAX+EDX+D]
0042439B |. 81F9 FF000000 |CMP ECX,0FF
004243A1 |. 0F84 4A010000 |JE 004244F1
004243A7 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
004243AA |. 81E2 FF000000 |AND EDX,0FF
004243B0 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
004243B3 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004243B6 |. 8A5411 0D |MOV DL,BYTE PTR DS:[ECX+EDX+D]
004243BA |. 8850 0C |MOV BYTE PTR DS:[EAX+C],DL
004243BD |. 6A 00 |PUSH 0
004243BF |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
004243C2 |. 8A08 |MOV CL,BYTE PTR DS:[EAX]
004243C4 |. 51 |PUSH ECX
004243C5 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
004243C8 |. 33C0 |XOR EAX,EAX
004243CA |. 8A42 0C |MOV AL,BYTE PTR DS:[EDX+C]
004243CD |. 8BC8 |MOV ECX,EAX
004243CF |. 6BC9 24 |IMUL ECX,ECX,24
004243D2 |. 81C1 502C4B00 |ADD ECX,004B2C50
004243D8 |. E8 93B20300 |CALL 0045F670
004243DD |. 6BC0 48 |IMUL EAX,EAX,48 ; |
004243E0 |. 05 681B4A00 |ADD EAX,004A1B68 ; |
004243E5 |. 50 |PUSH EAX ; |Arg2
004243E6 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C] ; |
004243E9 |. 33D2 |XOR EDX,EDX ; |
004243EB |. 8A51 0C |MOV DL,BYTE PTR DS:[ECX+C] ; |
004243EE |. 6BD2 24 |IMUL EDX,EDX,24 ; |
004243F1 |. 81C2 502C4B00 |ADD EDX,004B2C50 ; |
004243F7 |. 52 |PUSH EDX ; |Arg1
004243F8 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C] ; |
004243FB |. 8B48 08 |MOV ECX,DWORD PTR DS:[EAX+8] ; |
004243FE |. E8 A77B0100 |CALL 0043BFAA ; \0043BFAA
00424403 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00424406 |. 81E1 FF000000 |AND ECX,0FF
0042440C |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
0042440F |. 89848A 8400000>|MOV DWORD PTR DS:[EDX+ECX*4+84],EAX
00424416 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
00424419 |. 25 FF000000 |AND EAX,0FF
0042441E |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
00424421 |. 83BC81 8400000>|CMP DWORD PTR DS:[ECX+EAX*4+84],0
00424429 |. 75 16 |JNZ SHORT 00424441
0042442B |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
0042442E |. 81E2 FF000000 |AND EDX,0FF
00424434 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
00424437 |. C68410 5502000>|MOV BYTE PTR DS:[EAX+EDX+255],0
0042443F |. EB 14 |JMP SHORT 00424455
00424441 |> 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00424444 |. 81E1 FF000000 |AND ECX,0FF
0042444A |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
0042444D |. C6840A 5502000>|MOV BYTE PTR DS:[EDX+ECX+255],40
00424455 |> 8A45 FC |MOV AL,BYTE PTR SS:[EBP-4]
00424458 |. 50 |PUSH EAX ; /Arg1
00424459 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C] ; |
0042445C |. E8 9ACAFFFF |CALL 00420EFB ; \00420EFB
00424461 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
00424464 |. 3B81 D0020000 |CMP EAX,DWORD PTR DS:[ECX+2D0]
0042446A |. 76 11 |JBE SHORT 0042447D
0042446C |. 8A55 FC |MOV DL,BYTE PTR SS:[EBP-4]
0042446F |. 52 |PUSH EDX ; /Arg1
00424470 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C] ; |
00424473 |. E8 83CAFFFF |CALL 00420EFB ; \00420EFB
00424478 |. 8945 EC |MOV DWORD PTR SS:[EBP-14],EAX
0042447B |. EB 0C |JMP SHORT 00424489
0042447D |> 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
00424480 |. 8B88 D0020000 |MOV ECX,DWORD PTR DS:[EAX+2D0]
00424486 |. 894D EC |MOV DWORD PTR SS:[EBP-14],ECX
00424489 |> 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
0042448C |. 8B45 EC |MOV EAX,DWORD PTR SS:[EBP-14]
0042448F |. 8982 D0020000 |MOV DWORD PTR DS:[EDX+2D0],EAX
00424495 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
00424498 |. E8 EECDFFFF |CALL 0042128B
0042449D |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004244A0 |. 3B81 D4020000 |CMP EAX,DWORD PTR DS:[ECX+2D4]
004244A6 |. 76 0D |JBE SHORT 004244B5
004244A8 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004244AB |. E8 DBCDFFFF |CALL 0042128B
004244B0 |. 8945 E8 |MOV DWORD PTR SS:[EBP-18],EAX
004244B3 |. EB 0C |JMP SHORT 004244C1
004244B5 |> 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
004244B8 |. 8B82 D4020000 |MOV EAX,DWORD PTR DS:[EDX+2D4]
004244BE |. 8945 E8 |MOV DWORD PTR SS:[EBP-18],EAX
004244C1 |> 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004244C4 |. 8B55 E8 |MOV EDX,DWORD PTR SS:[EBP-18]
004244C7 |. 8991 D4020000 |MOV DWORD PTR DS:[ECX+2D4],EDX
004244CD |. 8A45 FC |MOV AL,BYTE PTR SS:[EBP-4]
004244D0 |. 50 |PUSH EAX ; /Arg1
004244D1 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C] ; |
004244D4 |. E8 CACEFFFF |CALL 004213A3 ; \004213A3
004244D9 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
004244DC |. 81E1 FF000000 |AND ECX,0FF
004244E2 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
004244E5 |. 89848A D802000>|MOV DWORD PTR DS:[EDX+ECX*4+2D8],EAX
004244EC |.^E9 8FFEFFFF \JMP 00424380
004244F1 |> 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
004244F4 |. E8 C6CFFFFF CALL 004214BF
004244F9 |> 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
004244FC |. E8 A7DFFFFF CALL 004224A8
00424501 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00424504 |. C780 AC040000 >MOV DWORD PTR DS:[EAX+4AC],1
0042450E |. 5E POP ESI
0042450F |. 8BE5 MOV ESP,EBP
00424511 |. 5D POP EBP
00424512 \. C3 RETN
后面这一段跟直接伤害42313E的是一样的,所以就不作注解了。
三、异常状态类,包括产生异常状态和取消异常状态
004257A7 |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004257AA |. C682 54020000 >MOV BYTE PTR DS:[EDX+254],70
004257B1 |. 6A 00 PUSH 0
004257B3 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004257B6 |. E8 8EDDFFFF CALL 00423549
004257BB |. E9 D6010000 JMP 00425996
004257C0 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004257C3 |. C680 54020000 >MOV BYTE PTR DS:[EAX+254],71
004257CA |. 6A 00 PUSH 0
004257CC |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004257CF |. E8 75DDFFFF CALL 00423549
004257D4 |. E9 BD010000 JMP 00425996
004257D9 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004257DC |. C681 54020000 >MOV BYTE PTR DS:[ECX+254],72
004257E3 |. 6A 00 PUSH 0
004257E5 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004257E8 |. E8 5CDDFFFF CALL 00423549
004257ED |. E9 A4010000 JMP 00425996
004257F2 |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004257F5 |. C682 54020000 >MOV BYTE PTR DS:[EDX+254],74
004257FC |. 6A 00 PUSH 0
004257FE |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425801 |. E8 43DDFFFF CALL 00423549
00425806 |. E9 8B010000 JMP 00425996
004258B6 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004258B9 |. C681 54020000 >MOV BYTE PTR DS:[ECX+254],0BF
004258C0 |. 6A 01 PUSH 1
004258C2 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004258C5 |. E8 7FDCFFFF CALL 00423549
004258CA |. E9 C7000000 JMP 00425996
异常状态类从上面五个位置过来,由于有产生(对敌方)和取消(对己方)效果,所以要加上一个参数作为区分,08栈中0为产生(对敌方),1为取消(对己方)。
00423549 /$ 55 PUSH EBP
0042354A |. 8BEC MOV EBP,ESP
0042354C |. 83EC 10 SUB ESP,10
0042354F |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
00423552 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00423555 |. 8A08 MOV CL,BYTE PTR DS:[EAX]
00423557 |. 51 PUSH ECX ; /Arg4
00423558 |. 33D2 XOR EDX,EDX ; |
0042355A |. 837D 08 00 CMP DWORD PTR SS:[EBP+8],0 ; |
0042355E |. 0F95C2 SETNE DL ; |
00423561 |. 83C2 02 ADD EDX,2 ; |
00423564 |. 52 PUSH EDX ; |Arg3
00423565 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; |
00423568 |. 8A88 C9020000 MOV CL,BYTE PTR DS:[EAX+2C9] ; |
0042356E |. 51 PUSH ECX ; |Arg2
0042356F |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; |
00423572 |. 8A42 01 MOV AL,BYTE PTR DS:[EDX+1] ; |
00423575 |. 50 PUSH EAX ; |Arg1
00423576 |. B9 50424B00 MOV ECX,004B4250 ; |
0042357B |. E8 BD1D0300 CALL 0045533D ; \0045533D
跟直接伤害类一样,45533D确定被策略攻击的目标武将,其中根据08栈的数值决定目标对象是否敌方或己方。
00423580 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423583 |. 8841 0C MOV BYTE PTR DS:[ECX+C],AL
45533D输出的AL值存入497AF8+0CH中
00423586 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
00423589 |. 33C0 XOR EAX,EAX
0042358B |. 8A42 0C MOV AL,BYTE PTR DS:[EDX+C]
0042358E |. 3D FF000000 CMP EAX,0FF
00423593 |. 75 05 JNZ SHORT 0042359A
00423595 |. E9 ED010000 JMP 00423787
检查一下497AF8+CH是否为0FF,即有没有攻击目标,0FF就是没有,跳到最后返回。
0042359A |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0042359D |. 8B91 A8040000 MOV EDX,DWORD PTR DS:[ECX+4A8]
004235A3 |. 52 PUSH EDX ; /Arg4
004235A4 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; |
004235A7 |. 8A48 0C MOV CL,BYTE PTR DS:[EAX+C] ; |
004235AA |. 51 PUSH ECX ; |Arg3
004235AB |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; |
004235AE |. 8A42 01 MOV AL,BYTE PTR DS:[EDX+1] ; |
004235B1 |. 50 PUSH EAX ; |Arg2
004235B2 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
004235B5 |. 8A11 MOV DL,BYTE PTR DS:[ECX] ; |
004235B7 |. 52 PUSH EDX ; |Arg1
004235B8 |. E8 65CEFFFF CALL 00420422 ; \00420422
004235BD |. 83C4 10 ADD ESP,10
004235C0 |. 85C0 TEST EAX,EAX
004235C2 |. 75 05 JNZ SHORT 004235C9
004235C4 |. E9 BE010000 JMP 00423787
420422(一共四个参数输入)是第二个策略限制,包括地形、使用的对象(例如回归不能指向使用策略的武将)。输出的EAX为零表示不可使用,跳到最后返回。
004235C9 |> 33C0 XOR EAX,EAX
004235CB |. 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
004235CF |. 0F95C0 SETNE AL
004235D2 |. 50 PUSH EAX ; /Arg1
004235D3 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
004235D6 |. E8 6E1D0000 CALL 00425349 ; \00425349
425349是根据穿透范围将全部被攻击武将的战场编号按顺序存入497AF8+DH开始的74H*1个内存中,同样根据08栈的数值决定目标对象是否敌方或己方。
004235DB |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
004235DF |. EB 09 JMP SHORT 004235EA
[EBP-4]是循环计数器,这里先将BYTE位清零。(如果是我就将整个DWORD清零,下面会省好多字节)
004235E1 |> 8A4D FC /MOV CL,BYTE PTR SS:[EBP-4]
004235E4 |. 80C1 01 |ADD CL,1
004235E7 |. 884D FC |MOV BYTE PTR SS:[EBP-4],CL
004235EA |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004235ED |. 81E2 FF000000 |AND EDX,0FF
004235F3 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004235F6 |. 33C9 |XOR ECX,ECX
004235F8 |. 8A4C10 0D |MOV CL,BYTE PTR DS:[EAX+EDX+D]
004235FC |. 81F9 FF000000 |CMP ECX,0FF
00423602 |. 0F84 62010000 |JE 0042376A
按顺序从497AF8+DH开始的74H*1个内存地址中读出战场编号,等于0FF即已经没有被攻击武将了,跳出这个循环。
00423608 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
0042360B |. 81E2 FF000000 |AND EDX,0FF
00423611 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423614 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423617 |. 8A5411 0D |MOV DL,BYTE PTR DS:[ECX+EDX+D]
0042361B |. 8850 0C |MOV BYTE PTR DS:[EAX+C],DL
计数器数值+497AF8+DH输出来,存入497AF8+CH中,作为是否产生或取消异常状态以及计算伤害的时候使用。
0042361E |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423621 |. 8A08 |MOV CL,BYTE PTR DS:[EAX]
00423623 |. 51 |PUSH ECX ; /Arg3
00423624 |. 6A 02 |PUSH 2 ; |Arg2 = 00000002
00423626 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8] ; |
00423629 |. 33C0 |XOR EAX,EAX ; |
0042362B |. 8A42 0C |MOV AL,BYTE PTR DS:[EDX+C] ; |
0042362E |. 6BC0 24 |IMUL EAX,EAX,24 ; |
00423631 |. 05 502C4B00 |ADD EAX,004B2C50 ; |
00423636 |. 50 |PUSH EAX ; |Arg1
00423637 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
0042363A |. 8B49 08 |MOV ECX,DWORD PTR DS:[ECX+8] ; |
0042363D |. E8 6E7E0100 |CALL 0043B4B0 ; \0043B4B0
00423642 |. 85C0 |TEST EAX,EAX
00423644 |. 74 1E |JE SHORT 00423664
43B4B0是先计算出策略命中率,再判断是否有发生此概率,输出EAX=0则没有发生。
00423646 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00423649 |. 81E2 FF000000 |AND EDX,0FF
0042364F |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423652 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423655 |. 8A89 54020000 |MOV CL,BYTE PTR DS:[ECX+254]
0042365B |. 888C10 5502000>|MOV BYTE PTR DS:[EAX+EDX+255],CL
00423662 |. EB 14 |JMP SHORT 00423678
策略命中了,根据对应的策略效果将497AF8+254H的效果标识存入到497AF8+计数器+255H里,让每一个被攻击武将都出现策略效果以及动画。
00423664 |> 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00423667 |. 81E2 FF000000 |AND EDX,0FF
0042366D |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423670 |. C68410 5502000>|MOV BYTE PTR DS:[EAX+EDX+255],0
策略没有命中,所以效果标识置0。
以上只是是否产生和取消异常状态,但有中毒和麻痹会附加产生伤害,所以下面接下来还要继续计算策略伤害。
00423678 |> 6A 00 |PUSH 0
0042367A |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
0042367D |. 8A11 |MOV DL,BYTE PTR DS:[ECX]
0042367F |. 52 |PUSH EDX
00423680 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423683 |. 33C9 |XOR ECX,ECX
00423685 |. 8A48 0C |MOV CL,BYTE PTR DS:[EAX+C]
00423688 |. 6BC9 24 |IMUL ECX,ECX,24
0042368B |. 81C1 502C4B00 |ADD ECX,004B2C50
00423691 |. E8 DABF0300 |CALL 0045F670
00423696 |. 6BC0 48 |IMUL EAX,EAX,48 ; |
00423699 |. 05 681B4A00 |ADD EAX,004A1B68 ; |
0042369E |. 50 |PUSH EAX ; |Arg2
0042369F |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8] ; |
004236A2 |. 33C0 |XOR EAX,EAX ; |
004236A4 |. 8A42 0C |MOV AL,BYTE PTR DS:[EDX+C] ; |
004236A7 |. 6BC0 24 |IMUL EAX,EAX,24 ; |
004236AA |. 05 502C4B00 |ADD EAX,004B2C50 ; |
004236AF |. 50 |PUSH EAX ; |Arg1
004236B0 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
004236B3 |. 8B49 08 |MOV ECX,DWORD PTR DS:[ECX+8] ; |
004236B6 |. E8 EF880100 |CALL 0043BFAA ; \0043BFAA
计算策略伤害
004236BB |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
004236BE |. 81E2 FF000000 |AND EDX,0FF
004236C4 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004236C7 |. 898491 8400000>|MOV DWORD PTR DS:[ECX+EDX*4+84],EAX
伤害值存入+84H中,不用再判断是否命中了。
004236CE |. 8A55 FC |MOV DL,BYTE PTR SS:[EBP-4]
004236D1 |. 52 |PUSH EDX ; /Arg1
004236D2 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
004236D5 |. E8 21D8FFFF |CALL 00420EFB ; \00420EFB
004236DA |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004236DD |. 3B81 D0020000 |CMP EAX,DWORD PTR DS:[ECX+2D0]
004236E3 |. 76 11 |JBE SHORT 004236F6
004236E5 |. 8A55 FC |MOV DL,BYTE PTR SS:[EBP-4]
004236E8 |. 52 |PUSH EDX ; /Arg1
004236E9 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
004236EC |. E8 0AD8FFFF |CALL 00420EFB ; \00420EFB
004236F1 |. 8945 F4 |MOV DWORD PTR SS:[EBP-C],EAX
004236F4 |. EB 0C |JMP SHORT 00423702
004236F6 |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004236F9 |. 8B88 D0020000 |MOV ECX,DWORD PTR DS:[EAX+2D0]
004236FF |. 894D F4 |MOV DWORD PTR SS:[EBP-C],ECX
00423702 |> 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
00423705 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
00423708 |. 8982 D0020000 |MOV DWORD PTR DS:[EDX+2D0],EAX
0042370E |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423711 |. E8 75DBFFFF |CALL 0042128B
00423716 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423719 |. 3B81 D4020000 |CMP EAX,DWORD PTR DS:[ECX+2D4]
0042371F |. 76 0D |JBE SHORT 0042372E
00423721 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423724 |. E8 62DBFFFF |CALL 0042128B
00423729 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX
0042372C |. EB 0C |JMP SHORT 0042373A
0042372E |> 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
00423731 |. 8B82 D4020000 |MOV EAX,DWORD PTR DS:[EDX+2D4]
00423737 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX
0042373A |> 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
0042373D |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10]
00423740 |. 8991 D4020000 |MOV DWORD PTR DS:[ECX+2D4],EDX
00423746 |. 8A45 FC |MOV AL,BYTE PTR SS:[EBP-4]
00423749 |. 50 |PUSH EAX ; /Arg1
0042374A |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
0042374D |. E8 51DCFFFF |CALL 004213A3 ; \004213A3
00423752 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
00423755 |. 81E1 FF000000 |AND ECX,0FF
0042375B |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
0042375E |. 89848A D802000>|MOV DWORD PTR DS:[EDX+ECX*4+2D8],EAX
00423765 |.^E9 77FEFFFF \JMP 004235E1
0042376A |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0042376D |. E8 4DDDFFFF CALL 004214BF
00423772 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423775 |. E8 2EEDFFFF CALL 004224A8
0042377A |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0042377D |. C780 AC040000 >MOV DWORD PTR DS:[EAX+4AC],1
00423787 |> 8BE5 MOV ESP,EBP
00423789 |. 5D POP EBP
0042378A \. C2 0400 RETN 4
后面的计算经验,动画处理,真正效果就不用说了。
四、上升下降类(非气合霸气)
00425743 |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425746 |. C681 54020000 >MOV BYTE PTR DS:[ECX+254],62
0042574D |. 6A 00 PUSH 0
0042574F |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425752 |. E8 04DCFFFF CALL 0042335B
00425757 |. E9 3A020000 JMP 00425996
0042575C |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0042575F |. C682 54020000 >MOV BYTE PTR DS:[EDX+254],64
00425766 |. 6A 00 PUSH 0
00425768 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0042576B |. E8 EBDBFFFF CALL 0042335B
00425770 |. E9 21020000 JMP 00425996
00425775 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00425778 |. C680 54020000 >MOV BYTE PTR DS:[EAX+254],60
0042577F |. 6A 00 PUSH 0
00425781 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425784 |. E8 D2DBFFFF CALL 0042335B
00425789 |. E9 08020000 JMP 00425996
0042578E |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425791 |. C681 54020000 >MOV BYTE PTR DS:[ECX+254],61
00425798 |. 6A 00 PUSH 0
0042579A |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0042579D |. E8 B9DBFFFF CALL 0042335B
004257A2 |. E9 EF010000 JMP 00425996
00425839 |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0042583C |. C682 54020000 >MOV BYTE PTR DS:[EDX+254],0A8
00425843 |. 6A 01 PUSH 1
00425845 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425848 |. E8 0EDBFFFF CALL 0042335B
0042584D |. E9 44010000 JMP 00425996
00425852 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00425855 |. C680 54020000 >MOV BYTE PTR DS:[EAX+254],0A2
0042585C |. 6A 01 PUSH 1
0042585E |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425861 |. E8 F5DAFFFF CALL 0042335B
00425866 |. E9 2B010000 JMP 00425996
0042586B |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0042586E |. C681 54020000 >MOV BYTE PTR DS:[ECX+254],0A4
00425875 |. 6A 01 PUSH 1
00425877 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0042587A |. E8 DCDAFFFF CALL 0042335B
0042587F |. E9 12010000 JMP 00425996
00425884 |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00425887 |. C682 54020000 >MOV BYTE PTR DS:[EDX+254],0A0
0042588E |. 6A 01 PUSH 1
00425890 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00425893 |. E8 C3DAFFFF CALL 0042335B
00425898 |. E9 F9000000 JMP 00425996
0042589D |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004258A0 |. C680 54020000 >MOV BYTE PTR DS:[EAX+254],0A1
004258A7 |. 6A 01 PUSH 1
004258A9 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004258AC |. E8 AADAFFFF CALL 0042335B
004258B1 |. E9 E0000000 JMP 00425996
非气合霸气的上升下降类从上面九个位置过来,由于有下降(对敌方)和上升(对己方)效果,所以要加上一个参数作为区分,08栈中0为下降(对敌方),1为上升(对己方)。
0042335B /$ 55 PUSH EBP
0042335C |. 8BEC MOV EBP,ESP
0042335E |. 83EC 10 SUB ESP,10
00423361 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
00423364 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00423367 |. 8A08 MOV CL,BYTE PTR DS:[EAX]
00423369 |. 51 PUSH ECX ; /Arg4
0042336A |. 33D2 XOR EDX,EDX ; |
0042336C |. 837D 08 00 CMP DWORD PTR SS:[EBP+8],0 ; |
00423370 |. 0F95C2 SETNE DL ; |
00423373 |. 83C2 02 ADD EDX,2 ; |
00423376 |. 52 PUSH EDX ; |Arg3
00423377 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; |
0042337A |. 8A88 C9020000 MOV CL,BYTE PTR DS:[EAX+2C9] ; |
00423380 |. 51 PUSH ECX ; |Arg2
00423381 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; |
00423384 |. 8A42 01 MOV AL,BYTE PTR DS:[EDX+1] ; |
00423387 |. 50 PUSH EAX ; |Arg1
00423388 |. B9 50424B00 MOV ECX,004B4250 ; |
0042338D |. E8 AB1F0300 CALL 0045533D ; \0045533D
00423392 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423395 |. 8841 0C MOV BYTE PTR DS:[ECX+C],AL
00423398 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0042339B |. 33C0 XOR EAX,EAX
0042339D |. 8A42 0C MOV AL,BYTE PTR DS:[EDX+C]
004233A0 |. 3D FF000000 CMP EAX,0FF
004233A5 |. 75 05 JNZ SHORT 004233AC
004233A7 |. E9 97010000 JMP 00423543
004233AC |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
004233AF |. 8B91 A8040000 MOV EDX,DWORD PTR DS:[ECX+4A8]
004233B5 |. 52 PUSH EDX ; /Arg4
004233B6 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; |
004233B9 |. 8A48 0C MOV CL,BYTE PTR DS:[EAX+C] ; |
004233BC |. 51 PUSH ECX ; |Arg3
004233BD |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; |
004233C0 |. 8A42 01 MOV AL,BYTE PTR DS:[EDX+1] ; |
004233C3 |. 50 PUSH EAX ; |Arg2
004233C4 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
004233C7 |. 8A11 MOV DL,BYTE PTR DS:[ECX] ; |
004233C9 |. 52 PUSH EDX ; |Arg1
004233CA |. E8 53D0FFFF CALL 00420422 ; \00420422
004233CF |. 83C4 10 ADD ESP,10
004233D2 |. 85C0 TEST EAX,EAX
004233D4 |. 75 05 JNZ SHORT 004233DB
004233D6 |. E9 68010000 JMP 00423543
004233DB |> 33C0 XOR EAX,EAX
004233DD |. 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
004233E1 |. 0F95C0 SETNE AL
004233E4 |. 50 PUSH EAX ; /Arg1
004233E5 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ; |
004233E8 |. E8 5C1F0000 CALL 00425349 ; \00425349
004233ED |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
004233F1 |. EB 09 JMP SHORT 004233FC
004233F3 |> 8A4D FC /MOV CL,BYTE PTR SS:[EBP-4]
004233F6 |. 80C1 01 |ADD CL,1
004233F9 |. 884D FC |MOV BYTE PTR SS:[EBP-4],CL
004233FC |> 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004233FF |. 81E2 FF000000 |AND EDX,0FF
00423405 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423408 |. 33C9 |XOR ECX,ECX
0042340A |. 8A4C10 0D |MOV CL,BYTE PTR DS:[EAX+EDX+D]
0042340E |. 81F9 FF000000 |CMP ECX,0FF
00423414 |. 0F84 0C010000 |JE 00423526
0042341A |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
0042341D |. 81E2 FF000000 |AND EDX,0FF
00423423 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423426 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423429 |. 8A5411 0D |MOV DL,BYTE PTR DS:[ECX+EDX+D]
0042342D |. 8850 0C |MOV BYTE PTR DS:[EAX+C],DL
00423430 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423433 |. 8A08 |MOV CL,BYTE PTR DS:[EAX]
00423435 |. 51 |PUSH ECX ; /Arg3
00423436 |. 6A 02 |PUSH 2 ; |Arg2 = 00000002
00423438 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8] ; |
0042343B |. 33C0 |XOR EAX,EAX ; |
0042343D |. 8A42 0C |MOV AL,BYTE PTR DS:[EDX+C] ; |
00423440 |. 6BC0 24 |IMUL EAX,EAX,24 ; |
00423443 |. 05 502C4B00 |ADD EAX,004B2C50 ; |
00423448 |. 50 |PUSH EAX ; |Arg1
00423449 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
0042344C |. 8B49 08 |MOV ECX,DWORD PTR DS:[ECX+8] ; |
0042344F |. E8 5C800100 |CALL 0043B4B0 ; \0043B4B0
00423454 |. 85C0 |TEST EAX,EAX
00423456 |. 74 1E |JE SHORT 00423476
00423458 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
0042345B |. 81E2 FF000000 |AND EDX,0FF
00423461 |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423464 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
00423467 |. 8A89 54020000 |MOV CL,BYTE PTR DS:[ECX+254]
0042346D |. 888C10 5502000>|MOV BYTE PTR DS:[EAX+EDX+255],CL
00423474 |. EB 14 |JMP SHORT 0042348A
00423476 |> 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00423479 |. 81E2 FF000000 |AND EDX,0FF
0042347F |. 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
00423482 |. C68410 5502000>|MOV BYTE PTR DS:[EAX+EDX+255],0
0042348A |> 8A4D FC |MOV CL,BYTE PTR SS:[EBP-4]
0042348D |. 51 |PUSH ECX ; /Arg1
0042348E |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
00423491 |. E8 65DAFFFF |CALL 00420EFB ; \00420EFB
00423496 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
00423499 |. 3B82 D0020000 |CMP EAX,DWORD PTR DS:[EDX+2D0]
0042349F |. 76 11 |JBE SHORT 004234B2
004234A1 |. 8A45 FC |MOV AL,BYTE PTR SS:[EBP-4]
004234A4 |. 50 |PUSH EAX ; /Arg1
004234A5 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
004234A8 |. E8 4EDAFFFF |CALL 00420EFB ; \00420EFB
004234AD |. 8945 F4 |MOV DWORD PTR SS:[EBP-C],EAX
004234B0 |. EB 0C |JMP SHORT 004234BE
004234B2 |> 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004234B5 |. 8B91 D0020000 |MOV EDX,DWORD PTR DS:[ECX+2D0]
004234BB |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
004234BE |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004234C1 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C]
004234C4 |. 8988 D0020000 |MOV DWORD PTR DS:[EAX+2D0],ECX
004234CA |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004234CD |. E8 B9DDFFFF |CALL 0042128B
004234D2 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004234D5 |. 3B82 D4020000 |CMP EAX,DWORD PTR DS:[EDX+2D4]
004234DB |. 76 0D |JBE SHORT 004234EA
004234DD |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
004234E0 |. E8 A6DDFFFF |CALL 0042128B
004234E5 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX
004234E8 |. EB 0C |JMP SHORT 004234F6
004234EA |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
004234ED |. 8B88 D4020000 |MOV ECX,DWORD PTR DS:[EAX+2D4]
004234F3 |. 894D F0 |MOV DWORD PTR SS:[EBP-10],ECX
004234F6 |> 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004234F9 |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
004234FC |. 8982 D4020000 |MOV DWORD PTR DS:[EDX+2D4],EAX
00423502 |. 8A4D FC |MOV CL,BYTE PTR SS:[EBP-4]
00423505 |. 51 |PUSH ECX ; /Arg1
00423506 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; |
00423509 |. E8 95DEFFFF |CALL 004213A3 ; \004213A3
0042350E |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00423511 |. 81E2 FF000000 |AND EDX,0FF
00423517 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8]
0042351A |. 898491 D802000>|MOV DWORD PTR DS:[ECX+EDX*4+2D8],EAX
00423521 |.^E9 CDFEFFFF \JMP 004233F3
00423526 |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423529 |. E8 91DFFFFF CALL 004214BF
0042352E |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00423531 |. E8 72EFFFFF CALL 004224A8
00423536 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
00423539 |. C782 AC040000 >MOV DWORD PTR DS:[EDX+4AC],1
00423543 |> 8BE5 MOV ESP,EBP
00423545 |. 5D POP EBP
00423546 \. C2 0400 RETN 4
非气合霸气的上升下降类跟异常状态类的代码是基本一样的,只是少了计算伤害部分,也就是说下降类策略是永远不会对敌人产生伤害。
[ 本帖最后由 godtype 于 2010-4-12 10:50 编辑 ]
|