原帖内容
ctermiii

2010-7-28 12:08
孔明传攻击性策略和攻击性道具伤害分析

相关求余随机数算法情况请看这个帖子:
http://www.xycq.net/forum/thread-213636-1-1.html
直接写结论吧:
策略攻击不存在致命一击和连击,也没有天气和除了兵种地形适应性以外的地形的额外加成。
策略只有火计和石计
初级:焦热,大焦热,落石,大落石
中级:火龙,大火龙,山崩,大山崩
高级:猛火,大猛火,山洪,大山洪

策略和道具基本威力系数跟策略范围是一个位置:

QUOTE:
原帖由 lewulezo 于 2010-5-28 13:53 发表
策略施放范围:0x4D2B0~0x4d2df
00 表示焦热范围
01 表示火龙范围
02 表示猛火范围
03 表示小补给范围

一、策略伤害
1、判断攻击是物理攻击还是策略攻击;
具体位置:

QUOTE:
原帖由 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步执行;

QUOTE:
原帖由 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


代码具体见:

QUOTE:
原帖由 ctermiii 于 2010-7-26 22:44 发表
http://www.xycq.net/forum/viewth ... page%3D1#pid2992611

4、buffer、地形、兵种伤害修正
A、有减伤buffer的话伤害减半


QUOTE:
原帖由 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部分具体代码:

QUOTE:
原帖由 ctermiii 于 2010-7-26 22:44 发表
http://www.xycq.net/forum/viewth ... page%3D1#pid2992650

5、防御方智力修正:
伤害=伤害-防御方智力/2

具体代码:

QUOTE:
原帖由 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部分的代码:

QUOTE:
原帖由 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的随机值
跟兵种、等级、智力完全无关


代码:

QUOTE:
原帖由 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 编辑 ]

用户名时间功绩理由
阿尔法孝直 2010-7-28 23:43 +300




当前时区 GMT+8, 现在时间是 2024-11-20 14:17
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.010102 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP