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
|