这种还算简单..
我不想对原来的布局动太多地方,所以把表格插在代码中间了,程序返回位置所在的代码没有动;
这样前边的几个跳转指令位置不用改,省点麻烦;
但有这个位置:
0x42A68C这个位置被开辟来做兵种大类了
导致前边有个jmp指令:
0042A5AE . /E9 D9000000 JMP EKD2Win.0042A68C
这个代码od会认不出来;
不过这句代码完全没用上过,所以我虽然给的附件里改了,不改也一样
设定原则是这样:
从0x42A66C开始:
00~27这40个兵种,需要一一给他设定一个大类,编号00~07,一共8大类,默认00
相克系数是0~255直接的任意值,我设定的结果是:
实际伤害=基本伤害x相克系数/100,
这样可以有75%,65%这种不是整十的系数存在,设定系数的时候也不用绕弯子了,方便一点
最大是255%,最小0,如果嫌系数范围不够,也可以把100这个数缩小一下。
当然实现方法很多,这里仅仅是一个例子
0x42A62C开始为相克系数表格结构:
每8个一组,分别是第00,第01……第07类克制其他大类的系数;默认00,需要自己设定;
很明显,自己克制自己系数为1,也就是100%,因为我这个例子是除以100的,所以对应设置应该为64H;如果你改了除数,记得系数也要同步改一下;
藤甲兵22H作为防御方时候单独计算;
例子看附件:
下边是程序:
0042A5E9 . 83F9 22 CMP ECX,22 ; 是否藤甲兵
0042A5EC . 75 05 JNZ SHORT EKD2Win_.0042A5F3
0042A5EE . 2BC0 SUB EAX,EAX
0042A5F0 . 40 INC EAX ; 藤甲兵伤害为1
0042A5F1 . EB 37 JMP SHORT EKD2Win_.0042A62A
0042A5F3 > 894D D8 MOV DWORD PTR SS:[EBP-28],ECX
0042A5F6 . 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
0042A5F9 . E8 A2ECFDFF CALL EKD2Win_.004092A0 ; 攻击方兵种
0042A5FE . 2BC9 SUB ECX,ECX
0042A600 . 8AC8 MOV CL,AL
0042A602 . 0FB681 6CA642>MOVZX EAX,BYTE PTR DS:[ECX+42A66C] ; 攻击方大类
0042A609 . 8B4D D8 MOV ECX,DWORD PTR SS:[EBP-28]
0042A60C . 0FB689 6CA642>MOVZX ECX,BYTE PTR DS:[ECX+42A66C] ; 防御方大类
0042A613 . 8D04C8 LEA EAX,DWORD PTR DS:[EAX+ECX*8] ; 相克系数相对位置,也是选8大类的好处,计算相对位置只3个字节就够了
0042A616 . 0FB680 2CA642>MOVZX EAX,BYTE PTR DS:[EAX+42A62C] ; 相克系数(0~255),同大类请设64H,可设8个档次
0042A61D . 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0042A620 . F7E9 IMUL ECX
0042A622 . 2BC9 SUB ECX,ECX
0042A624 . 2BD2 SUB EDX,EDX
0042A626 . B1 64 MOV CL,64 ; 最终伤害=基本伤害x相克系数/100
0042A628 . F7F9 IDIV ECX
0042A62A > EB 68 JMP SHORT EKD2Win_.0042A694
0042A62C 00 DB 00 ; 0大类相克系数
0042A62D 00 DB 00
0042A62E 00 DB 00
0042A62F 00 DB 00
0042A630 00 DB 00
0042A631 00 DB 00
0042A632 00 DB 00
0042A633 00 DB 00
0042A634 00 DB 00 ; 1
0042A635 00 DB 00
0042A636 00 DB 00
0042A637 00 DB 00
0042A638 00 DB 00
0042A639 00 DB 00
0042A63A 00 DB 00
0042A63B 00 DB 00
0042A63C 00 DB 00 ; 2
0042A63D 00 DB 00
0042A63E 00 DB 00
0042A63F 00 DB 00
0042A640 00 DB 00
0042A641 00 DB 00
0042A642 00 DB 00
0042A643 00 DB 00
0042A644 00 DB 00 ; 3
0042A645 00 DB 00
0042A646 00 DB 00
0042A647 00 DB 00
0042A648 00 DB 00
0042A649 00 DB 00
0042A64A 00 DB 00
0042A64B 00 DB 00
0042A64C 00 DB 00 ; 4
0042A64D 00 DB 00
0042A64E 00 DB 00
0042A64F 00 DB 00
0042A650 00 DB 00
0042A651 00 DB 00
0042A652 00 DB 00
0042A653 00 DB 00
0042A654 00 DB 00 ; 5
0042A655 00 DB 00
0042A656 00 DB 00
0042A657 00 DB 00
0042A658 00 DB 00
0042A659 00 DB 00
0042A65A 00 DB 00
0042A65B 00 DB 00
0042A65C 00 DB 00 ; 6
0042A65D 00 DB 00
0042A65E 00 DB 00
0042A65F 00 DB 00
0042A660 00 DB 00
0042A661 00 DB 00
0042A662 00 DB 00
0042A663 00 DB 00
0042A664 00 DB 00 ; 7
0042A665 00 DB 00
0042A666 00 DB 00
0042A667 00 DB 00
0042A668 00 DB 00
0042A669 00 DB 00
0042A66A 00 DB 00
0042A66B 00 DB 00
0042A66C 00 DB 00 ; 00兵种开始,自定义大类0~7
0042A66D 00 DB 00
0042A66E 00 DB 00
0042A66F 00 DB 00
0042A670 00 DB 00
0042A671 00 DB 00
0042A672 00 DB 00
0042A673 00 DB 00
0042A674 00 DB 00
0042A675 00 DB 00
0042A676 00 DB 00
0042A677 00 DB 00
0042A678 00 DB 00
0042A679 00 DB 00
0042A67A 00 DB 00
0042A67B 00 DB 00
0042A67C 00 DB 00
0042A67D 00 DB 00
0042A67E 00 DB 00
0042A67F 00 DB 00
0042A680 00 DB 00
0042A681 00 DB 00
0042A682 00 DB 00
0042A683 00 DB 00
0042A684 00 DB 00
0042A685 00 DB 00
0042A686 00 DB 00
0042A687 00 DB 00
0042A688 00 DB 00
0042A689 00 DB 00
0042A68A 00 DB 00
0042A68B 00 DB 00
0042A68C 00 DB 00
0042A68D 00 DB 00
0042A68E 00 DB 00
0042A68F 00 DB 00
0042A690 00 DB 00
0042A691 00 DB 00
0042A692 00 DB 00
0042A693 00 DB 00
0042A694 > 5F POP EDI
[ 本帖最后由 ctermiii 于 2010-7-25 13:52 编辑 ]
附件:
EKD2Win.rar (2010-7-25 12:20, 127.11 K)
该附件被下载次数 241
|