致命一击的改良
  
以原版曹操传为例,当攻击武将的士气大于等于被攻击武将的士气的3倍时,致命一击的机率为100%,必定致命一击,必定攻击伤害是150%。 
士气再高,机率也是100%,伤害也是150%,个人认为有点浪费。所以我就对致命一击作出小小的改良,当致命一击的机率大于100时,致命一击的伤害为 致命一击伤害*致命一击机率。 
比如A武将对B武将的普通攻击伤害是100,A武将对B武将的致命一击机率为110%,以前的最终伤害是150,我改良后就是100*150%*110%=165。 
 
具体的修改是: 
00405D9B  |. 6A 29          PUSH 29 
00405D9D  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C] 
00405DA0  |. 8B48 08        MOV ECX,DWORD PTR DS:[EAX+8] 
00405DA3  |. E8 611C0000    CALL 00407A09 
00405DA8  |. 85C0           TEST EAX,EAX 
00405DAA  |. 74 04          JE SHORT 00405DB0 
00405DAC  |. B0 64          MOV AL,64 
00405DAE  |. EB 3E          JMP SHORT 00405DEE 
00405DB0  |> 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8] 
00405DB3  |. 6BC9 03        IMUL ECX,ECX,3 
00405DB6  |. D1E9           SHR ECX,1 
00405DB8  |. 394D FC        CMP DWORD PTR SS:[EBP-4],ECX 
00405DBB  |. 72 15          JB SHORT 00405DD2 
00405DBD  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4] 
00405DC0  |. 2BC1           SUB EAX,ECX 
00405DC2  |. 69C0 8C000000  IMUL EAX,EAX,8C 
00405DC8  |. 33D2           XOR EDX,EDX 
00405DCA  |. F775 F8        DIV DWORD PTR SS:[EBP-8] 
00405DCD  |. 83C0 1E        ADD EAX,1E 
00405DD0  |. EB 1C          JMP SHORT 00405DEE 
00405DD2  |> 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8] 
00405DD5  |. 394D FC        CMP DWORD PTR SS:[EBP-4],ECX 
00405DD8  |. 72 12          JB SHORT 00405DEC 
00405DDA  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4] 
00405DDD  |. 2BC1           SUB EAX,ECX 
00405DDF  |. 6BC0 1C        IMUL EAX,EAX,1C 
00405DE2  |. 33D2           XOR EDX,EDX 
00405DE4  |. F775 F8        DIV DWORD PTR SS:[EBP-8] 
00405DE7  |. 83C0 02        ADD EAX,2 
00405DEA  |. EB 02          JMP SHORT 00405DEE 
00405DEC  |> B0 01          MOV AL,1 
00405DEE  |> 8BE5           MOV ESP,EBP 
00405DF0  |. 5D             POP EBP 
00405DF1  \. C3             RETN 
上面是致命一击机率的计算,我这里是改成了岳飞传的爆击率,再将100的上限去掉了。下面的才是伤害的计算。 
 
00405E06   . 83EC 20     SUB ESP,20 
 
00405EFB   . E8 69FEFFFF    CALL 00405D69  -----获取致命一击的机率 
00405F00   . E9 12340000    JMP 00409317 
 
(注:如果是STAR175带必杀的引擎,这里要加一条 MOV DWORD PTR SS:[EBP-20],0) 
00409317     8945 E0        MOV DWORD PTR SS:[EBP-20],EAX 
0040931A     3C 64          CMP AL,64 
0040931C     76 02          JBE SHORT 00409320 
0040931E   . B0 64          MOV AL,64 
00409320   > 25 FF000000    AND EAX,0FF 
00409325   .^E9 DBCBFFFF    JMP 00405F05 
先将机率数值存入[EBP-20]里面,如果机率超过100,将机率改回100,接后面的机率测试函数;如果不超过100,直接接后面的机率测试函数。 
 
 
00405F4B   . 6BC0 03        IMUL EAX,EAX,3 
00405F4E   . 99             CDQ 
00405F4F   . 2BC2           SUB EAX,EDX 
00405F51   . E9 D4330000    JMP 0040932A 
 
0040932A   > D1F8           SAR EAX,1 
0040932C   . 33C9           XOR ECX,ECX 
0040932E   . 8B4D E0        MOV ECX,DWORD PTR SS:[EBP-20] 
00409331     83F9 64        CMP ECX,64 
00409334     76 0C          JBE SHORT 00409342 
00409336   . 0FAFC1         IMUL EAX,ECX 
00409339   . 33D2           XOR EDX,EDX 
0040933B   . B9 64000000    MOV ECX,64 
00409340   . F7F1           DIV ECX 
00409342   > 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4] 
00409345   .^E9 0CCCFFFF    JMP 00405F56 
计算最后的致命一击伤害。先取出存在[EBP-20]的数值,如果这个值不超过100就跳过,接回原来的;如果超过100,就在原来150%的伤害的基础上,再乘以这个数值 
 
实际的测试效果,A武将士气286,B武将士气131,A武将攻击B武将,普通的伤害是116,按上面的爆击率计算出来的爆击率是126%,原来的最终伤害是177(174+3),改良后就变成了217(219-2) 
 
经过改良后,士气越高,威力越大。 
 
[ 本帖最后由 godtype 于 2009-3-9 08:43 编辑 ] 
 
 |