标题: 6.0自己加的策略暴击
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-18 23:21 资料 短消息 只看该作者
6.0自己加的策略暴击

《曹操传》的战斗系统设计中物理攻击时有概率发动暴击事件造成150%的伤害,策略攻击却没有相应的设计。凭什么差别待遇?!策略控表示策略也应该有相应的暴击事件。
以下修改基于star6.0新引擎,还请方家不吝赐教。

1.新增策略暴击发动概率计算函数
004D31B8    55              push ebp
004D31B9    8BEC            mov ebp,esp
004D31BB    83EC 0C         sub esp,0C
004D31BE    6A 04           push 4
004D31C0    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]               
004D31C4    E8 F891F6FF     call 0043C3C1            
004D31C9    8945 FC         mov dword ptr ss:[ebp-4],eax         -----攻击方士气
004D31CC    6A 04           push 4
004D31CE    8B4D 08         mov ecx,dword ptr ss:[ebp+8]
004D31D1    E8 EB91F6FF     call 0043C3C1
004D31D6    8945 F8         mov dword ptr ss:[ebp-8],eax         ----被攻击方士气
004D31D9    FF75 FC         push dword ptr ss:[ebp-4]
004D31DC    FF75 F8         push dword ptr ss:[ebp-8]
004D31DF    E8 262BF3FF     call 00405D0A                            ----获得初始暴击率
004D31E4    8945 F4         mov dword ptr ss:[ebp-C],eax         
004D31E7    B9 F87A4900     mov ecx,00497AF8
004D31EC    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]  
004D31F0    E8 7BC4F8FF     call 0045F670
004D31F5    83F8 03         cmp eax,3                           
004D31F8    75 06           jnz short 004D3200
004D31FA    8345 F4 0A      add dword ptr ss:[ebp-C],0A
004D31FE    EB 17           jmp short 004D3217
004D3200    83F8 4A         cmp eax,4A                        
004D3203    75 06           jnz short 004D320B
004D3205    8345 F4 1E      add dword ptr ss:[ebp-C],1E
004D3209    EB 0C           jmp short 004D3217
004D320B    83F8 33         cmp eax,33                        
004D320E    75 07           jnz short 004D3217
004D3210    C745 F4 6400000>mov dword ptr ss:[ebp-C],64
004D3217    EB 03           jmp short 004D321C
004D3219    90              nop
004D321A    90              nop
004D321B    90              nop
004D321C    B9 F87A4900     mov ecx,00497AF8
004D3221    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]
004D3225    E8 6533F3FF     call 0040658F
004D322A    6A 01           push 1
004D322C    6A 01           push 1
004D322E    6A 72           push 72
004D3230    6A 45           push 45
004D3232    E8 61C1FFFF     call 004CF398                    ----是否有策略暴击的特效或兵种特效
004D3237    85C0            test eax,eax
004D3239    74 07           je short 004D3242
004D323B    C745 F4 6400000>mov dword ptr ss:[ebp-C],64
004D3242    EB 03           jmp short 004D3247
004D3244    90              nop
004D3245    90              nop
004D3246    90              nop
004D3247    837D F4 64      cmp dword ptr ss:[ebp-C],64               ----超过100的值设回100
004D324B    76 07           jbe short 004D3254
004D324D    C745 F4 6400000>mov dword ptr ss:[ebp-C],64
004D3254    8B45 F4         mov eax,dword ptr ss:[ebp-C]
004D3257    8BE5            mov esp,ebp
004D3259    5D              pop ebp
004D325A    C2 0400         retn 4



2.新增暴击发动伤害加成计算函数
暂定策略暴击发动时策略伤害加成值在125%--150%之间,具体公式为:

min(Max(攻击方士气-被攻击方士气),100),120) * 5/4

004D33B0    55              push ebp
004D33B1    8BEC            mov ebp,esp
004D33B3    83EC 0C         sub esp,0C
004D33B6    6A 04           push 4
004D33B8    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]
004D33BC    E8 0090F6FF     call 0043C3C1                        
004D33C1    8945 FC         mov dword ptr ss:[ebp-4],eax
004D33C4    6A 04           push 4
004D33C6    8B4D 08         mov ecx,dword ptr ss:[ebp+8]
004D33C9    E8 F38FF6FF     call 0043C3C1
004D33CE    8945 F8         mov dword ptr ss:[ebp-8],eax
004D33D1    FF75 F8         push dword ptr ss:[ebp-8]
004D33D4    FF75 FC         push dword ptr ss:[ebp-4]
004D33D7    E8 C2C6FAFF     call 0047FA9E
004D33DC    8945 F4         mov dword ptr ss:[ebp-C],eax
004D33DF    B9 F87A4900     mov ecx,00497AF8
004D33E4    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]
004D33E8    E8 83C2F8FF     call 0045F670
004D33ED    83F8 33         cmp eax,33                        
004D33F0   /75 16           jnz short 004D3408
004D33F2    C745 F4 7800000>mov dword ptr ss:[ebp-C],78
004D33F9    C705 AC334D00 0>mov dword ptr ds:[4D33AC],1
004D3403    EB 2E           jmp short 004D3433
004D3405    90              nop
004D3406    90              nop
004D3407    90              nop
004D3408    8B45 F4         mov eax,dword ptr ss:[ebp-C]
004D340B    83F8 64         cmp eax,64
004D340E    72 0C           jb short 004D341C
004D3410    83F8 78         cmp eax,78
004D3413    72 1B           jb short 004D3430
004D3415    B8 78000000     mov eax,78
004D341A    EB 0A           jmp short 004D3426
004D341C    B8 64000000     mov eax,64
004D3421    83F8 78         cmp eax,78
004D3424    75 0A           jnz short 004D3430
004D3426    C705 AC334D00 0>mov dword ptr ds:[4D33AC],1
004D3430    8945 F4         mov dword ptr ss:[ebp-C],eax
004D3433    8B45 F4         mov eax,dword ptr ss:[ebp-C]
004D3436    6BC0 05         imul eax,eax,5
004D3439    C1E8 02         shr eax,2
004D343C    8BE5            mov esp,ebp
004D343E    5D              pop ebp
004D343F    C2 0400         retn 4

3.策略伤害函数修改
这部分改动比较大,总之从0043C00F函数ebp-4栈中获取到最终的策略伤害值之后且处理被攻击方HP之前跳出即可,
以下是自用引擎的地址:
0043C242        EB 44           jmp short Ekd51234.0043C288
0043C244        90              nop
0043C245        90              nop
0043C246        90              nop
----暴击计算开始
0043C288        837D 14 00      cmp dword ptr ss:[ebp+14],0               
0043C28C      ^ 75 B9           jnz short Ekd51234.0043C247                 ----非实际攻击(观察模式)返回
0043C28E        B9 F87A4900     mov ecx,Ekd51234.00497AF8
0043C293        FF75 08         push dword ptr ss:[ebp+8]
0043C296        E8 1D6F0900     call Ekd51234.004D31B8                   ----策略暴击发动概率计算函数
0043C29B        50              push eax
0043C29C        E8 91380400     call Ekd51234.0047FB32
0043C2A1        83C4 04         add esp,4
0043C2A4        85C0            test eax,eax
0043C2A6      ^ 74 9F           je short Ekd51234.0043C247                    ----没有发动,返回
0043C2A8        B9 F87A4900     mov ecx,Ekd51234.00497AF8
0043C2AD        FF75 08         push dword ptr ss:[ebp+8]
0043C2B0        E8 FB700900     call Ekd51234.004D33B0                     -----策略暴击伤害加成计算函数
0043C2B5        50              push eax
0043C2B6        FF75 FC         push dword ptr ss:[ebp-4]
0043C2B9        E8 D6330900     call Ekd51234.004CF694
0043C2BE        C705 B4314D00 0>mov dword ptr ds:[4D31B4],1
0043C2C8        8945 FC         mov dword ptr ss:[ebp-4],eax
0043C2CB      ^ E9 77FFFFFF     jmp Ekd51234.0043C247               ---跳回

4.策略暴击伤害数值颜色设定
a.
004220F3   /75 09           jnz short 004220FE
004220F5   |B1 18           mov cl,18
004220F7   |B2 45           mov dl,45
004220F9  -|E9 8F120B00     jmp 004D338D
004220FE  -\E9 6D120B00     jmp 004D3370
00422103    90              nop
00422104    90              nop
b.
004D3370    833D FC324D00 0>cmp dword ptr ds:[4D31B4],1
004D3377    75 10           jnz short 004D3389
004D3379    B1 12           mov cl,12
004D337B    B2 28           mov dl,28
004D337D    C705 FC324D00 0>mov dword ptr ds:[4D31B4],0
004D3387    EB 04           jmp short 004D338D
004D3389    B1 18           mov cl,18
004D338B    B2 12           mov dl,12
004D338D    51              push ecx
004D338E    52              push edx
004D338F    50              push eax
004D3390    FF75 D8         push dword ptr ss:[ebp-28]
004D3393  - E9 6DEDF4FF     jmp 00422105


顶部
性别:未知-离线 lysghhz520

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 364184
注册 2010-3-7


发表于 2015-5-19 08:17 资料 短消息 只看该作者
咨询个问题 那个自用引擎那段的位置转换到6.0引擎的位置是在哪里


顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-19 19:02 资料 短消息 只看该作者
回复 #2 lysghhz520 的帖子

0043C2DD        807D 10 16      cmp byte ptr ss:[ebp+10],16
从这里跳出去应该就可以了,最后返回这里。
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-19 19:02 资料 短消息 只看该作者
回复 #2 lysghhz520 的帖子

0043C2DD        807D 10 16      cmp byte ptr ss:[ebp+10],16
从这里跳出去应该就可以了,最后返回这里。
顶部
性别:未知-离线 lysghhz520

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 364184
注册 2010-3-7


发表于 2015-5-19 19:31 资料 短消息 只看该作者
回复 #4 YSH0212 的帖子

非常感谢
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2015-5-21 11:38 资料 短消息 只看该作者
按照你的方法改了但是没用,我是新手比较不会弄,有没有改好的star6.0新引擎的ekd5,上传一个给我啊
顶部
性别:未知-离线 c381612
(龙城飞将)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 273
编号 330810
注册 2009-7-24


发表于 2015-5-21 11:43 资料 短消息 只看该作者
楼主 我等小白不会改...能否上传一个你修改好的6.0引擎?
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-21 18:54 资料 短消息 只看该作者
回复 #6 l414628744 的帖子

额,自用引擎改了很多东西,不只有策略暴击这一个
按照上面的改一般不会有问题,主要是
----暴击计算开始
0043C288        837D 14 00      cmp dword ptr ss:[ebp+14],0               
0043C28C      ^ 75 B9           jnz short Ekd51234.0043C247                 ----非实际攻击(观察模式)返回
0043C28E        B9 F87A4900     mov ecx,Ekd51234.00497AF8
0043C293        FF75 08         push dword ptr ss:[ebp+8]
0043C296        E8 1D6F0900     call Ekd51234.004D31B8                   ----策略暴击发动概率计算函数
0043C29B        50              push eax
0043C29C        E8 91380400     call Ekd51234.0047FB32
0043C2A1        83C4 04         add esp,4
0043C2A4        85C0            test eax,eax
0043C2A6      ^ 74 9F           je short Ekd51234.0043C247                    ----没有发动,返回
0043C2A8        B9 F87A4900     mov ecx,Ekd51234.00497AF8
0043C2AD        FF75 08         push dword ptr ss:[ebp+8]
0043C2B0        E8 FB700900     call Ekd51234.004D33B0                     -----策略暴击伤害加成计算函数
0043C2B5        50              push eax
0043C2B6        FF75 FC         push dword ptr ss:[ebp-4]
0043C2B9        E8 D6330900     call Ekd51234.004CF694
0043C2BE        C705 B4314D00 0>mov dword ptr ds:[4D31B4],1
0043C2C8        8945 FC         mov dword ptr ss:[ebp-4],eax
0043C2CB      ^ E9 77FFFFFF     jmp Ekd51234.0043C247               ---跳回

这一段原本是有代码的,我是改完之后空出了许多地方所以写在这里。
0043C2DD        807D 10 16      cmp byte ptr ss:[ebp+10],16 这里jmp 可以找一个空白的位置新写
最后再jmp回cmp byte ptr ss:[ebp+10],16
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-21 18:58 资料 短消息 只看该作者
回复 #7 c381612 的帖子

自用的引擎改了很多东西,目前手头没有单独策略暴击的引擎。
顶部
性别:未知-离线 dennis2669



Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 左将军
功绩 43
帖子 1254
编号 363856
注册 2010-3-5
来自 香港


发表于 2015-5-21 19:49 资料 文集 短消息 只看该作者
回复 #9 YSH0212 的帖子

你是另寫一段暴擊傷害和暴擊測試嗎..
你其實可以考慮結合在物理暴擊程序上..

暴擊測試只是加上策略暴擊特技..
其實都不用另複製一段暴擊代碼吧..

另外...你隨機的範圍也有點大了吧..
125%-150%..
就好像差了一件寶物般...

004D33DF    B9 F87A4900     mov ecx,00497AF8
004D33E4    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]
004D33E8    E8 83C2F8FF     call 0045F670
004D33ED    83F8 33         cmp eax,33         
這段做什麼...前面沒用的吧..後面會覆蓋前面
另外這裡測試data編號51有什麼用

還有..你有沒有測試過
push 4
004D33B8    36:8B49 08      mov ecx,dword ptr ss:[ecx+8]
004D33BC    E8 0090F6FF     call 0043C3C1                        
004D33C1    8945 FC         mov dword ptr ss:[ebp-4],eax
004D33C4    6A 04           push 4
004D33C6    8B4D 08         mov ecx,dword ptr ss:[ebp+8]
004D33C9    E8 F38FF6FF     call 0043C3C1
004D33CE    8945 F8         mov dword ptr ss:[ebp-8],eax
004D33D1    FF75 F8         push dword ptr ss:[ebp-8]
004D33D4    FF75 FC         push dword ptr ss:[ebp-4]
004D33D7    E8 C2C6FAFF     call 0047FA9E
004D33DC    8945 F4         mov dword ptr ss:[ebp-C],eax
這裡將士氣相減後入了ebp-c
004D3430    8945 F4         mov dword ptr ss:[ebp-C],eax
004D3433    8B45 F4         mov eax,dword ptr ss:[ebp-C]
004D3436    6BC0 05         imul eax,eax,5
004D3439    C1E8 02         shr eax,2
之後這裡將士氣差提出來*5/4.
那原本的傷害去了那裡

另外我想問4D33AC這變量是用來標示什麼
給一個解釋
4D31B4是測試有沒有進行暴擊

call 0043C3C1..應該是找出士氣..
但是這地址是6.0原有還是你自己改的
因為正常來說..
406D87获取武将ecx的攻防精暴士体法,根据08栈值0~6
406E17武将ecx的攻防精暴士体法加上0C栈值,并不超过上限,根据08栈值0~6
406F54武将ecx的攻防精暴士体法等于0C栈值,并不超过上限,根据08栈值0~6

這裡才是找士氣..還是我理解錯誤..
顶部
性别:未知-离线 lysghhz520

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 364184
注册 2010-3-7


发表于 2015-5-21 20:06 资料 短消息 只看该作者
回复 #9 YSH0212 的帖子

暴击计算开始底下那些jnz和call的位置也是直接照抄就行了?
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-22 19:24 资料 短消息 只看该作者
回复 #10 dennis2669 的帖子

本人也是小白,有许多考虑不周的地方很正常。
我改引擎的原则基本是能分开就分开,能增加的就不改原来的。
物理攻击和策略攻击还是有些不一样的东西,把两种暴击计算放在一起今后不好拓展。

6.0的物理暴击伤害发补贴说在150%到200%,这部分我还没分析,策略暴击我觉得不好设成这么高伤害,
所以取了125%到150%,应该来说比较合理吧。

004D31E7    B9 F87A4900     mov ecx,00497AF8
之后其实都是个性化内容,
意思是
data编号为3(暴击率+10%),4A(+30%),33(100%策略暴击)的人物具有的一些特性以及废弃了一个宝物效果和武将特效来做策略暴击特效
这些一般的不需要都可以去掉,要不然直接都设成一个不会出现在战场的武将data编号也行。


暴击发动伤害加成函数得出的是一个加成百分比,比如150
0043C2B5        50              push eax                                      ---加成百分比  
0043C2B6        FF75 FC         push dword ptr ss:[ebp-4]            ----策略伤害
0043C2B9        E8 D6330900     call Ekd51234.004CF694          ----取得加成后的总伤害
0043C2BE        C705 B4314D00 0>mov dword ptr ds:[4D31B4],1
0043C2C8        8945 FC         mov dword ptr ss:[ebp-4],eax


4D33AC这个地址原来是用来标示是否造成150%伤害既策略暴击最高伤害,原来设计中有一些其他用途,
单纯在这里没什么意义,可以去掉。

0043C3C1是根据08栈值取攻防精爆士,这个应该没问题,你断点分析一下应该能明白。
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-22 19:28 资料 短消息 只看该作者
回复 #11 lysghhz520 的帖子

call可以,不过照跳转抄应该不行,明白一下跳转关系才行。你最好分析一下。
顶部
性别:未知-离线 dennis2669



Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 左将军
功绩 43
帖子 1254
编号 363856
注册 2010-3-5
来自 香港


发表于 2015-5-22 19:48 资料 文集 短消息 只看该作者
回复 #12 YSH0212 的帖子

暴擊傷害測試..
純粹是我沒看到你的計算方法...

但暴擊測試..實際都是測試士氣..根本沒分別..
假如要加上策略暴擊特技..可以call完後再call作測試..(star引擎都是這樣做).
這樣肯定比兩個完全接近相同的暴擊測試代碼方便

哦..原來後面有加成計算..
沒研究過6.0引擎..看的時候沒檢查我自己的記錄..我都不知道後面的用處

另外你的寫法應該是自創..沒參考物理暴擊吧...
沒記錯物理暴擊浮動是用士氣比..不是士氣差...
而且用士氣差..後期等級高了後..一檔差距絕對就已經造成最大傷害..
而且你好像不是125%-150%...
是125%和150%吧...沒中間的數吧...
顶部
性别:未知-离线 gaming

Rank: 5Rank: 5
组别 士兵
级别 破虏将军
功绩 8
帖子 793
编号 41146
注册 2005-6-17


发表于 2015-5-23 13:22 资料 短消息 只看该作者
弱问一下,对于火阵火龙这种范围策略伤害
策略暴击是对直接目标有效还是对范围目标全体有效?

原版ccz的蛇矛和炮车只对直接伤害对象有暴击提升
对穿透对象还是基础伤害
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2015-5-23 14:38 资料 短消息 只看该作者
回复 #8 YSH0212 的帖子

还是不行,不知道哪里搞错了,不会弄,楼主有空帮忙改下6.0引擎分享下吧,谢谢
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-5-24 22:03 资料 短消息 只看该作者
回复 #15 gaming 的帖子

这个是写在策略伤害函数里的,应该对于范围内的敌军都计算一遍,都有效应该。
顶部
性别:未知-离线 天妒灬燎火

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 21
编号 514381
注册 2015-5-23


发表于 2015-5-27 21:24 资料 短消息 只看该作者
只能一个一个数字的填,不能黏贴吗?
顶部
性别:男-离线 燧火氏

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 195
编号 139342
注册 2007-4-14


发表于 2015-6-12 13:41 资料 短消息 只看该作者
按照楼主的方法改了,的确会有伤害差别。
但群伤法术的时候,貌似会有显色错误。
顶部
性别:男-离线 YSH0212
(ysh0212)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 仁勇校尉
功绩 2
帖子 185
编号 352883
注册 2009-12-31
来自 福建


发表于 2015-6-12 20:38 资料 短消息 只看该作者
回复 #19 燧火氏 的帖子

确实如此,应该是有覆盖了的原因,但目前我也解决不了,要再研究一下。

初步可以这样,增加一个地址记录被暴击的人物内存,然后检测在显示的时候再判断。
或者有更好的方式,那要期待大神了。

其实这个策略暴击功能还很粗糙,可改进的地方很多啦~~
顶部

正在浏览此帖的会员 - 共 1 人在线




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

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

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