孔明传攻击性策略和攻击性道具伤害分析
  相关求余随机数算法情况请看这个帖子: 
http://www.xycq.net/forum/thread-213636-1-1.html 
直接写结论吧: 
策略攻击不存在致命一击和连击,也没有天气和除了兵种地形适应性以外的地形的额外加成。 
策略只有火计和石计 
初级:焦热,大焦热,落石,大落石 
中级:火龙,大火龙,山崩,大山崩 
高级:猛火,大猛火,山洪,大山洪 
 
策略和道具基本威力系数跟策略范围是一个位置:
 
 原帖由 lewulezo 于 2010-5-28 13:53 发表 
策略施放范围:0x4D2B0~0x4d2df  
00 表示焦热范围 
01 表示火龙范围 
02 表示猛火范围 
03 表示小补给范围  一、策略伤害 
1、判断攻击是物理攻击还是策略攻击; 
具体位置:
 
 原帖由 ctermiii 于 2010-7-26 22:44 发表 
00423914  |.  8A48 12       MOV CL,BYTE PTR DS:[EAX+12] 
00423917  |.  83F9 01       CMP ECX,1          ;;  物理攻击1策略伤害2道具伤害3 
 
..... 
 
004239C1  |.  83F9 02       CMP ECX,2   ;2,策略攻击 
004239C4  |.  0F85 26000000 JNZ EKD2Win.004239F0  2、策略是否成功,策略倒是可以称为是否命中,可以计算一个命中率出来; 
命中要求: 
Random%攻击方智力>=防御方智力/5 
注:如果没有命中,伤害为0,则直接跳到第8步执行;
 
 原帖由 ctermiii 于 2010-7-26 22:44 发表 
00408827  |.  E8 E4080000   CALL <EKD2Win.GetZhiLi>                  ;  攻击方智力 
0040882C  |.  33C9          XOR ECX,ECX 
0040882E  |.  8AC8          MOV CL,AL 
00408830  |.  51            PUSH ECX                                 ; /Arg1 
00408831  |.  E8 F2EA0300   CALL <EKD2Win.Random%Arg1>               ; \Random%Arg1 
00408836  |.  83C4 04       ADD ESP,4 
00408839  |.  8BC8          MOV ECX,EAX 
0040883B  |.  33C0          XOR EAX,EAX 
0040883D  |.  8A45 F4       MOV AL,BYTE PTR SS:[EBP-C]               ;  防御方智力 
00408840  |.  BB 05000000   MOV EBX,5 
00408845  |.  99            CDQ 
00408846  |.  F7FB          IDIV EBX 
00408848  |.  3BC8          CMP ECX,EAX                              ;  攻击方智力随机数与防御方智力/5 
0040884A  |.  0F83 0F000000 JNB EKD2Win.0040885F 
00408850  |.  C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0   ;不满足条件伤害为0,直接跳出本函数计算,显示策略失败。 
00408857  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4] 
0040885A  |.  E9 A1000000   JMP EKD2Win.00408900  3、计算策略伤害: 
伤害公式为分3个: 
初级策略伤害=武将智力x2/5+策略基础伤害/2 
中级策略伤害=武将智力x3/7+策略基础伤害/2 
高级策略伤害=武将智力x4/5+策略基础伤害/2 
——————策略基础伤害———————— 
             火计         落石 
初级         50              75 
中级         100            125     
高级         200            250 
 
代码具体见:
 
  4、buffer、地形、兵种伤害修正 
A、有减伤buffer的话伤害减半
 
 原帖由 ctermiii 于 2010-7-26 22:44 发表 
004086BB  |.  6A 08         PUSH 8                                                  ; /策略伤害减状态 
004086BD  |.  8B4D F0       MOV ECX,DWORD PTR SS:[EBP-10]                          
004086C0  |.  E8 8B0A0000   CALL <EKD2Win.CheckIfSomeStatus>                         
004086C5  |.  85C0          TEST EAX,EAX 
004086C7  |.  0F84 04000000 JE EKD2Win.004086D1 
004086CD  |.  C16D 10 01    SHR DWORD PTR SS:[EBP+10],1    ;除以2  B、防御方所在地形修正 
a、防御方地形适应性DX<10 
伤害=伤害x(10-DX)/10+伤害 
【因为是整数除法,没有化简如果化简合并的话伤害结果会变化,下同】 
b、防御方地形适应性DX>10 
伤害=伤害-伤害x(DX-10)/10 
 
 
C、兵种修正: 
a、如果是藤甲兵,并且是火计伤害 
伤害=(策略威力基数/3+2)x伤害 
火计和石计的策略威力基数从低级到高级都是00,01,02 
b、如果是南蛮兵和南蛮骑兵 
伤害=伤害x3/2 
c、如果是军师、大军师、名军师、幻术师 
伤害=伤害x2/3 
 
B和C部分具体代码:
 
  5、防御方智力修正: 
伤害=伤害-防御方智力/2 
具体代码:
 
 原帖由 ctermiii 于 2010-7-26 22:44 发表 
00408894  |.  8A45 F4       MOV AL,BYTE PTR SS:[EBP-C] 
00408897  |.  C1F8 01       SAR EAX,1 
0040889A  |.  50            PUSH EAX                                                ; /Arg2 
0040889B  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]                            ; | 
0040889E  |.  50            PUSH EAX                                                ; |Arg1 
0040889F  |.  E8 27EA0300   CALL 004472CB                        ; \伤害-防御方智力/2 
004088A4  |.  83C4 08       ADD ESP,8  6、攻击方兵种修正: 
军师、大军师、名军师、运粮队、物资队、军乐队的伤害会另外算上武器伤害 
如果目前为止,伤害为0,则跳过第7条进入第8条判断 
 
 
7、下边就跟物理攻击一样了,但没有全力一击和连击就是了; 
以下为复制: 
等级相关的随机因素造成伤害变动: 
A、前边计算出基础伤害Abase; 
B、取得防御方等级Flevel,然后取得0~FLevel-1的随机值Frnd1; 
C、取得攻击方等级Glevel,然后取得0~Glelev-1的随机值Grnd1; 
D、比较Frnd1与Grnd1的大小; 
D、1如果Frnd1<Grnd1,或者产生了全力一击; 
那么伤害会随机增加(0~Glevel-1)%6之间的随机值Grnd2,结果为Abase=Abase+Grnd2 
D、2如果Frnd1>=Grnd1, 
那么伤害随机减少(0~Flevel-1)%6的随机值Frnd2,如果伤害为1,减少了2,那只能取0和1-2的最大值,即保证伤害不能为负数,结果为Abase=Max(Abase-Frnd2,0) 
 
8、确认防御方是我军(15个部队)还是敌军; 
如果是我军,那个会去确认游戏难度; 
难度为初级的话,我军受伤害为Abase=Abasex80%; 
难度为高级的话,我军受伤害为Abase=Abasex120%; 
注:没有中级难度计算,那明显伤害为Abase=Abasex100%; 
8部分的代码:
 
 原帖由 ctermiii 于 2010-7-26 22:44 发表 
00423AC9  |.  8B0C88        MOV ECX,DWORD PTR DS:[EAX+ECX*4] 
00423ACC  |.  E8 4F57FEFF   CALL <EKD2Win.CheckIfWoJun>              ;  防御方是我军还是敌军 
00423AD1  |.  83F8 01       CMP EAX,1 
00423AD4  |.  0F85 4A000000 JNZ EKD2Win.00423B24 
00423ADA  |.  B9 D0A64600   MOV ECX,EKD2Win.0046A6D0 
00423ADF  |.  E8 CC7FFEFF   CALL <EKD2Win.GetDifficultLevel>         ;  游戏难度00~02 
00423AE4  |.  85C0          TEST EAX,EAX 
00423AE6  |.  0F85 11000000 JNZ EKD2Win.00423AFD 
00423AEC  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  难度为初级00的时候敌军对我伤害只有80% 
00423AEF  |.  C1E0 03       SHL EAX,3 
00423AF2  |.  B9 0A000000   MOV ECX,0A 
00423AF7  |.  99            CDQ 
00423AF8  |.  F7F9          IDIV ECX 
00423AFA  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX 
00423AFD  |>  B9 D0A64600   MOV ECX,EKD2Win.0046A6D0 
00423B02  |.  E8 A97FFEFF   CALL <EKD2Win.GetDifficultLevel> 
00423B07  |.  83F8 02       CMP EAX,2 
00423B0A  |.  0F85 14000000 JNZ EKD2Win.00423B24 
00423B10  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  游戏难度为高级的时候对我军伤害为120% 
00423B13  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]         ;  没有计算中级难度,明显为100%,不加不减 
00423B16  |.  C1E0 02       SHL EAX,2 
00423B19  |.  B9 0A000000   MOV ECX,0A 
00423B1E  |.  99            CDQ 
00423B1F  |.  F7F9          IDIV ECX 
00423B21  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX  9、取得防御方当前耐久力,如果最终的ABase>=耐久力的话,伤害Abase=耐久力; 
如果伤害<耐久力的哈,Abase不变,这个是为了防止打出比当前耐久力还大的数; 
 
 
二、道具伤害,其实就是策略伤害的翻版,表现为伤害比较固定 
 
1、基本伤害:初级:50+0~15的随机值 
中级75+0~25的随机值 
高级:150+0~50的随机值 
跟兵种、等级、智力完全无关 
 
 
代码:
 
 原帖由 ctermiii 于 2010-7-26 22:44 发表 
0040897C   > /6A 10         PUSH 10                                 
0040897E   . |E8 A5E90300   CALL <EKD2Win.Random%Arg1>           
00408983   . |83C4 04       ADD ESP,4 
00408986   . |83C0 32       ADD EAX,32 
00408989   . |8945 FC       MOV DWORD PTR SS:[EBP-4],EAX 
0040898C   . |E9 54000000   JMP EKD2Win.004089E5 
00408991   > |6A 1A         PUSH 1A                             
00408993   . |E8 90E90300   CALL <EKD2Win.Random%Arg1>           
00408998   . |83C4 04       ADD ESP,4 
0040899B   . |83C0 4B       ADD EAX,4B 
0040899E   . |8945 FC       MOV DWORD PTR SS:[EBP-4],EAX 
004089A1   . |E9 3F000000   JMP EKD2Win.004089E5 
004089A6   > |6A 33         PUSH 33                                
004089A8   . |E8 7BE90300   CALL <EKD2Win.Random%Arg1>   
004089AD   . |83C4 04       ADD ESP,4 
004089B0   . |05 96000000   ADD EAX,96  2、兵种加成,跟上边策略类伤害的兵种与地形修正一样: 
 
A、防御方所在地形修正 
a、防御方地形适应性DX<10 
伤害=伤害x(10-DX)/10+伤害 
【因为是整数除法,没有化简如果化简合并的话伤害结果会变化,下同】 
b、防御方地形适应性DX>10 
伤害=伤害-伤害x(DX-10)/10 
 
 
B、兵种修正: 
a、如果是藤甲兵,并且是火计伤害 
伤害=(策略威力基数/3+2)x伤害 
火计和石计的策略威力基数从低级到高级都是00,01,02 
b、如果是南蛮兵和南蛮骑兵 
伤害=伤害x3/2 
c、如果是军师、大军师、名军师、幻术师 
伤害=伤害x2/3 
3、道具一定可以造成伤害,等级因素与策略、物理攻击类一致,见上边第7条开始往下,不再重复。 
 
[ 本帖最后由 ctermiii 于 2010-8-1 13:04 编辑 ] |