原帖内容
godtype

2009-3-23 11:00
修正移动下降不能显示

由于原版曹操传中只有移动力上升的策略,没有移动力下降的策略,所以光荣有点偷懒(个人估计),就算在剧本设置了状态是移动下降,只会显示将正常状态一样,如图
正常状态

下降状态

但实际移动力就下降了1。

这种情况在大部分的引擎中都存在,直到STAR175的新引擎第四版加强版推出后,终于有了解决方法,我参考了他的修改方法后也在我的旧引擎中改出来,有需要的人可以照改。
主要是修改476987这条函数,但是由于位置不够用,所以要另外找空位置加写一条函数,再增加一个显示项目(这个要10-11个字节)。
直接帖出修改后的476987函数:
00476987  /$ 55                 PUSH EBP
00476988  |. 8BEC               MOV EBP,ESP
0047698A  |. 83EC 14            SUB ESP,14
0047698D  |. 894D EC            MOV DWORD PTR SS:[EBP-14],ECX
00476990  |. 68 66050000        PUSH 566                                        ; /ControlID = 566 (1382.)
00476995  |. 8B45 08            MOV EAX,DWORD PTR SS:[EBP+8]                    ; |
00476998  |. 50                 PUSH EAX                                        ; |hWnd
00476999  |. FF15 DC624800      CALL DWORD PTR DS:[<&USER32.GetDlgItem>]        ; \GetDlgItem
0047699F  |. 85C0               TEST EAX,EAX
004769A1  |. 0F84 CC000000      JE 00476A73
004769A7  |. 8B4D EC            MOV ECX,DWORD PTR SS:[EBP-14]
004769AA  |. E8 2D110000        CALL 00477ADC
004769AF  |. 8845 FC            MOV BYTE PTR SS:[EBP-4],AL
004769B2  |. 8B4D FC            MOV ECX,DWORD PTR SS:[EBP-4]
004769B5  |. 81E1 FF000000      AND ECX,0FF
004769BB  |. 81F9 FF000000      CMP ECX,0FF
004769C1  |. 75 17              JNZ SHORT 004769DA
004769C3  |. 6A 00              PUSH 0
004769C5  |. 8B4D EC            MOV ECX,DWORD PTR SS:[EBP-14]
004769C8  |. E8 AE08F9FF        CALL 0040727B
004769CD  |. 25 FF000000        AND EAX,0FF
004769D2  |. 50                 PUSH EAX
004769D3  |. 68 F0030000        PUSH 3F0
004769D8  |. EB 7C              JMP SHORT 00476A56
004769DA  |> 8B4D FC            MOV ECX,DWORD PTR SS:[EBP-4]
004769DD  |. E8 04F3F8FF        CALL 00405CE6     ------这条是新增函数,看最后面
004769E2  |. E8 49F1FAFF        CALL 00425B30
004769E7  |. 3C 03              CMP AL,3
004769E9  |. 74 56              JE SHORT 00476A41
004769EB  |. 3C 04              CMP AL,4
004769ED  |. 72 1A              JB SHORT 00476A09
004769EF  |. 6A 02              PUSH 2     ------移动力上升多少
004769F1  |. 8B4D EC            MOV ECX,DWORD PTR SS:[EBP-14]
004769F4  |. E8 8208F9FF        CALL 0040727B
004769F9  |. 25 FF000000        AND EAX,0FF
004769FE  |. 83C0 02            ADD EAX,2     ------移动力上升多少
00476A01  |. 50                 PUSH EAX
00476A02  |. 68 C0EB4800        PUSH 0048EBC0                              ;  ASCII "%u ( +%d )"
00476A07  |. EB 18              JMP SHORT 00476A21
00476A09  |> 6A 01              PUSH 1     ------移动力下降多少
00476A0B  |. 8B4D EC            MOV ECX,DWORD PTR SS:[EBP-14]
00476A0E  |. E8 6808F9FF        CALL 0040727B
00476A13  |. 25 FF000000        AND EAX,0FF
00476A18  |. 83E8 01            SUB EAX,1     ------移动力下降多少
00476A1B  |. 50                 PUSH EAX
00476A1C  |. 68 97004400        PUSH 00440097       ;  ASCII "%u ( -%d )"     ------这个是新增的显示项,看最后面
00476A21  |> 8D45 F0            LEA EAX,DWORD PTR SS:[EBP-10]                   ; |
00476A24  |. 50                 PUSH EAX                                        ; |Arg1
00476A25  |. E8 F8990000        CALL 00480422                              ; \00480422
00476A2A  |. 83C4 10            ADD ESP,10
00476A2D  |. 8D4D F0            LEA ECX,DWORD PTR SS:[EBP-10]
00476A30  |. 51                 PUSH ECX                                        ; /Text
00476A31  |. 68 F0030000        PUSH 3F0                                        ; |ControlID = 3F0 (1008.)
00476A36  |. FF75 08            PUSH DWORD PTR SS:[EBP+8]                       ; |hWnd
00476A39  |. FF15 D8624800      CALL DWORD PTR DS:[<&USER32.SetDlgItemTextA>]   ; \SetDlgItemTextA
00476A3F  |. EB 1E              JMP SHORT 00476A5F
00476A41  |> 6A 00              PUSH 0
00476A43  |. 8B4D EC            MOV ECX,DWORD PTR SS:[EBP-14]
00476A46  |. E8 3008F9FF        CALL 0040727B
00476A4B  |. 25 FF000000        AND EAX,0FF
00476A50  |. 50                 PUSH EAX
00476A51  |. 68 F0030000        PUSH 3F0
00476A56  |> FF75 08            PUSH DWORD PTR SS:[EBP+8]                       ; |hWnd
00476A59  |. FF15 E4624800      CALL DWORD PTR DS:[<&USER32.SetDlgItemInt>]     ; \SetDlgItemInt
00476A5F  |> 833D A8E94800 00   CMP DWORD PTR DS:[48E9A8],0
00476A66  |. 75 0B              JNZ SHORT 00476A73
00476A68  |. FF75 08            PUSH DWORD PTR SS:[EBP+8]                       ; /Arg1
00476A6B  |. E8 09000000        CALL 00476A79                              ; \00476A79
00476A70  |. 83C4 04            ADD ESP,4
00476A73  |> 8BE5               MOV ESP,EBP
00476A75  |. 5D                 POP EBP
00476A76  \. C2 0400            RETN 4

00405CE6     55             PUSH EBP
00405CE7     8BEC           MOV EBP,ESP
00405CE9     81E1 FF000000  AND ECX,0FF
00405CEF     6BC9 24        IMUL ECX,ECX,24
00405CF2     81C1 502C4B00  ADD ECX,004B2C50
00405CF8     8BE5           MOV ESP,EBP
00405CFA     5D             POP EBP
00405CFB     C3             RETN

00440097   . 25 75 20 28 20 2D 25 64 20 29 00   ASCII "%u ( -%d )",0

另外,修改移动力的上升和下降值还有两个地方要改:
上升
0043F797  |. 6A 02          PUSH 2
下降
0043F7B7  |. 6A 01          PUSH 1

全部改好后的下降状态效果图如下,


以上修改是在我的旧引擎中改的,其他引擎可能有部分引用的函数位置有所不同,需要在实际修改时注意,新增函数和新增显示项请找空位置改。

[ 本帖最后由 godtype 于 2011-6-26 18:45 编辑 ]

用户名时间功绩理由
yanguodong 2009-3-23 14:39 +100 好帖奖励




当前时区 GMT+8, 现在时间是 2025-2-1 09:09
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

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

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