标题:
6.0自己加的策略暴击
[打印本页]
作者:
YSH0212
时间:
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
时间:
2015-5-19 08:17
咨询个问题 那个自用引擎那段的位置转换到6.0引擎的位置是在哪里
作者:
YSH0212
时间:
2015-5-19 19:02
标题:
回复 #2 lysghhz520 的帖子
0043C2DD 807D 10 16 cmp byte ptr ss:[ebp+10],16
从这里跳出去应该就可以了,最后返回这里。
作者:
YSH0212
时间:
2015-5-19 19:02
标题:
回复 #2 lysghhz520 的帖子
0043C2DD 807D 10 16 cmp byte ptr ss:[ebp+10],16
从这里跳出去应该就可以了,最后返回这里。
作者:
lysghhz520
时间:
2015-5-19 19:31
标题:
回复 #4 YSH0212 的帖子
非常感谢
作者:
l414628744
时间:
2015-5-21 11:38
按照你的方法改了但是没用,我是新手比较不会弄,有没有改好的star6.0新引擎的ekd5,上传一个给我啊
作者:
c381612
时间:
2015-5-21 11:43
楼主 我等小白不会改...能否上传一个你修改好的6.0引擎?
作者:
YSH0212
时间:
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
时间:
2015-5-21 18:58
标题:
回复 #7 c381612 的帖子
自用的引擎改了很多东西,目前手头没有单独策略暴击的引擎。
作者:
dennis2669
时间:
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
时间:
2015-5-21 20:06
标题:
回复 #9 YSH0212 的帖子
暴击计算开始底下那些jnz和call的位置也是直接照抄就行了?
作者:
YSH0212
时间:
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
时间:
2015-5-22 19:28
标题:
回复 #11 lysghhz520 的帖子
call可以,不过照跳转抄应该不行,明白一下跳转关系才行。你最好分析一下。
作者:
dennis2669
时间:
2015-5-22 19:48
标题:
回复 #12 YSH0212 的帖子
暴擊傷害測試..
純粹是我沒看到你的計算方法...
但暴擊測試..實際都是測試士氣..根本沒分別..
假如要加上策略暴擊特技..可以call完後再call作測試..(star引擎都是這樣做).
這樣肯定比兩個完全接近相同的暴擊測試代碼方便
哦..原來後面有加成計算..
沒研究過6.0引擎..看的時候沒檢查我自己的記錄..我都不知道後面的用處
另外你的寫法應該是自創..沒參考物理暴擊吧...
沒記錯物理暴擊浮動是用士氣比..不是士氣差...
而且用士氣差..後期等級高了後..一檔差距絕對就已經造成最大傷害..
而且你好像不是125%-150%...
是125%和150%吧...沒中間的數吧...
作者:
gaming
时间:
2015-5-23 13:22
弱问一下,对于火阵火龙这种范围策略伤害
策略暴击是对直接目标有效还是对范围目标全体有效?
原版ccz的蛇矛和炮车只对直接伤害对象有暴击提升
对穿透对象还是基础伤害
作者:
l414628744
时间:
2015-5-23 14:38
标题:
回复 #8 YSH0212 的帖子
还是不行,不知道哪里搞错了,不会弄,楼主有空帮忙改下6.0引擎分享下吧,谢谢
作者:
YSH0212
时间:
2015-5-24 22:03
标题:
回复 #15 gaming 的帖子
这个是写在策略伤害函数里的,应该对于范围内的敌军都计算一遍,都有效应该。
作者:
天妒灬燎火
时间:
2015-5-27 21:24
只能一个一个数字的填,不能黏贴吗?
作者:
燧火氏
时间:
2015-6-12 13:41
按照楼主的方法改了,的确会有伤害差别。
但群伤法术的时候,貌似会有显色错误。
作者:
YSH0212
时间:
2015-6-12 20:38
标题:
回复 #19 燧火氏 的帖子
确实如此,应该是有覆盖了的原因,但目前我也解决不了,要再研究一下。
初步可以这样,增加一个地址记录被暴击的人物内存,然后检测在显示的时候再判断。
或者有更好的方式,那要期待大神了。
其实这个策略暴击功能还很粗糙,可改进的地方很多啦~~
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/)
Powered by Discuz! 5.0.0