轩辕春秋文化论坛 » 曹操传MOD制作交流 » 在原曹操传引擎基础上实现三连击(或N连击)代码


2010-12-11 09:32 513633522
在原曹操传引擎基础上实现三连击(或N连击)代码

参考资料:
解读KOEI曹操传代码 作者:岱瀛
[url]http://www.xycq.net/forum/thread-124674-1-1.html[/url]

三连击思路:攻击处理函数有个计数,即第一次攻击计数为1,第二次攻击计数为2,大于2则停止攻击,把计数函数改为3就可以出现三连击的效果,把计数函数改为N就可以出现N连击的效果。
下面是初步的修改(三连击已经实现):
我重新写了攻击处理函数,位置改动了,占用徐子将教学空间(这样改动不影响徐子将教学,不过无法通过教学得到全宝)。

00434D33  /$  55            PUSH EBP
00434D34  |.  8BEC          MOV EBP,ESP
00434D36  |.  51            PUSH ECX
00434D37  |.  894D FC       MOV DWORD PTR SS:[EBP-4],ECX
00434D3A  |.  8A45 0C       MOV AL,BYTE PTR SS:[EBP+C]
00434D3D  |.  50            PUSH EAX                                 ; /Arg2
00434D3E  |.  8A4D 08       MOV CL,BYTE PTR SS:[EBP+8]               ; |
00434D41  |.  51            PUSH ECX                                 ; |Arg1
00434D42  |.  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]             ; |
00434D45  |.  E8 B214FDFF   CALL Ekd5.004061FC                       ; \Ekd5.004061FC
00434D4A  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
00434D4D  |.  C682 08060000>MOV BYTE PTR DS:[EDX+608],1   //从1开始计数(原引擎是从0开始)
00434D54      EB 15         JMP SHORT Ekd5.00434D6B
00434D56  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]
00434D59  |.  8A88 08060000 |MOV CL,BYTE PTR DS:[EAX+608]
00434D5F  |.  80C1 01       |ADD CL,1     //计数
00434D62  |.  8B55 FC       |MOV EDX,DWORD PTR SS:[EBP-4]
00434D65  |.  888A 08060000 |MOV BYTE PTR DS:[EDX+608],CL
00434D6B      8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
00434D6E      E8 9010FDFF   CALL Ekd5.00405E03     //攻击伤害函
00434D73      8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
00434D76      E8 C909FDFF   CALL Ekd5.00405744    //攻击动作显
00434D7B      8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
00434D7E      E8 060BFDFF   CALL Ekd5.00405889    //攻击后附加属性处理函数
00434D83      6A 17         PUSH 17                //特效号17(原每回合获得护具经验)
00434D85      8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00434D88      36:8B48 08    MOV ECX,DWORD PTR SS:[EAX+8]
00434D8C      E8 782CFDFF   CALL Ekd5.00407A09
00434D91      85C0          TEST EAX,EAX
00434D93      74 12         JE SHORT Ekd5.00434DA7 //无装备17特效跳转按正常攻击计数
00434D95      8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00434D98      33C9          XOR ECX,ECX
00434D9A      8A88 08060000 MOV CL,BYTE PTR DS:[EAX+608]
00434DA0      83F9 03       CMP ECX,3 //攻击计数次数比正常计数多1,实现三连击,把数字改为4就可以实现四连击,依次类推能够实现N连击。
00434DA3      7D 22         JGE SHORT Ekd5.00434DC7  //大于等于3跳出结束攻击
00434DA5    ^ EB AF         JMP SHORT Ekd5.00434D56  //直接跳过连击判断,跳到攻击
00434DA7      8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00434DAA      33C9          XOR ECX,ECX
00434DAC      8A88 08060000 MOV CL,BYTE PTR DS:[EAX+608]
00434DB2      83F9 02       CMP ECX,2   //正常攻击计数
00434DB5      7D 10         JGE SHORT Ekd5.00434DC7
00434DB7      8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
00434DBA  |.  E8 C213FDFF   |CALL Ekd5.00406181  // 判断是否连击函数
00434DBF  |.  85C0          |TEST EAX,EAX
00434DC1  |.  75 02         |JNZ SHORT Ekd5.00434DC5
00434DC3  |.  EB 02         |JMP SHORT Ekd5.00434DC7
00434DC5  |>^ EB 8F         \JMP SHORT Ekd5.00434D56
00434DC7  |>  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
00434DCA  |.  E8 9D0EFDFF   CALL Ekd5.00405C6C
00434DCF  |.  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
00434DD2  |.  E8 C315FDFF   CALL Ekd5.0040639A
00434DD7  |.  8BE5          MOV ESP,EBP
00434DD9  |.  5D            POP EBP
00434DDA  \.  C2 0800       RETN 8

因为重新写,位置变了,所以调用的地方也要修改,原曹操传共5处调用,由于我改了一个无限引导,所以去掉了一个。
004064E7  |.  E8 05000000     CALL Ekd5.004064F1                             ; \Ekd5.004064F1
0043AC3F  |.  E8 ADB8FCFF     CALL Ekd5.004064F1                             ; \Ekd5.004064F1
0043ACF5  |.  E8 F7B7FCFF     CALL Ekd5.004064F1                             ; \Ekd5.004064F1
0043DB4E   .  E8 9E89FCFF     CALL Ekd5.004064F1                             ; \Ekd5.004064F1

0043DC04  |.  E8 E888FCFF   CALL  Ekd.004064F1                     ; \ _Ekd.004064F1   进入攻击函数(这个是我改无限引导去掉的)
都改成  CALL  Ekd.00434D33

[color=Red][size=5]声明:本人是新手。[/size][/color]

[color=Silver][[i] 本帖最后由 513633522 于 2010-12-11 09:40 编辑 [/i]][/color]

2010-12-12 11:18 shps940114
三連擊阿
估計被打的不死也重殘

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.