原代码(目前所有引擎都一样):
0044197B /$ 55 PUSH EBP
0044197C |. 8BEC MOV EBP,ESP
0044197E |. 81EC CC000000 SUB ESP,0CC
00441984 |. 837D 08 31 CMP DWORD PTR SS:[EBP+8],31
00441988 |. 73 28 JNB SHORT 004419B2
0044198A |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0044198D |. 50 PUSH EAX ; /Arg2
0044198E |. 8D8D 34FFFFFF LEA ECX,DWORD PTR SS:[EBP-CC] ; |
00441994 |. 51 PUSH ECX ; |Arg1
00441995 |. E8 73A6FCFF CALL 0040C00D ; \0040C00D
0044199A |. 83C4 08 ADD ESP,8
0044199D |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
004419A0 |. 52 PUSH EDX ; /Arg2
004419A1 |. 8D85 34FFFFFF LEA EAX,DWORD PTR SS:[EBP-CC] ; |
004419A7 |. 50 PUSH EAX ; |Arg1
004419A8 |. B9 F05D4B00 MOV ECX,004B5DF0 ; |
004419AD |. E8 AB7C0100 CALL 0045965D ; \0045965D
004419B2 |> 8BE5 MOV ESP,EBP
004419B4 |. 5D POP EBP
004419B5 \. C3 RETN
0040C00D /$ 55 PUSH EBP
0040C00E |. 8BEC MOV EBP,ESP
0040C010 |. 837D 0C 31 CMP DWORD PTR SS:[EBP+C],31
0040C014 |. 72 02 JB SHORT 0040C018
0040C016 |. EB 15 JMP SHORT 0040C02D
0040C018 |> 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
0040C01B |. 05 8A020000 ADD EAX,28A
0040C020 |. 50 PUSH EAX ; /Arg2
0040C021 |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ; |
0040C024 |. 51 PUSH ECX ; |Arg1
0040C025 |. E8 2CFFFFFF CALL 0040BF56 ; \0040BF56
0040C02A |. 83C4 08 ADD ESP,8
0040C02D |> 5D POP EBP
0040C02E \. C3 RETN
修改如下:
00441984 |. 837D 08 64 CMP DWORD PTR SS:[EBP+8],64
这里[EBP+8]是武将编号,暂时改成100,最大可以是127,超过的话还要再过后面的代码。
00441995 |. E8 381AFFFF CALL 004333D2
这里是将40C00D另外找地方改写,其实是可以直接在原代码中跳出去改写的,我只是为了美观一点所以另外改写,而4333D2原来是许子将教学的正式代码(不是改许子将教学的文字显示),反正许子将教学一般也不用。
004333D2 /$ 55 PUSH EBP
004333D3 |. 8BEC MOV EBP,ESP
004333D5 |. 6A 00 PUSH 0
004333D7 |. EB 03 JMP SHORT 004333DC
004333D9 |> FF45 FC /INC DWORD PTR SS:[EBP-4]
004333DC |> 837D FC 31 CMP DWORD PTR SS:[EBP-4],31
004333E0 |. 73 24 |JNB SHORT 00433406
004333E2 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
004333E5 |. 8B0C85 0A344300 |MOV ECX,DWORD PTR DS:[EAX*4+43340A]
004333EC |. 394D 0C |CMP DWORD PTR SS:[EBP+C],ECX
004333EF |. 75 13 |JNZ SHORT 00433404
004333F1 |. 05 8A020000 |ADD EAX,28A
004333F6 |. 50 |PUSH EAX ; /Arg2
004333F7 |. FF75 08 |PUSH DWORD PTR SS:[EBP+8] ; |Arg1
004333FA |. E8 578BFDFF |CALL 0040BF56 ; \0040BF56
004333FF |. 83C4 08 |ADD ESP,8
00433402 |. EB 02 |JMP SHORT 00433406
00433404 |>^EB D3 \JMP SHORT 004333D9
00433406 |> 8BE5 MOV ESP,EBP
00433408 |. 5D POP EBP
00433409 \. C3 RETN
代码不详细解释了,[EBP-4]是循环计数,[EBP+C]是武将编号,从43340A开始的49*4的位置用来存放49个武将的DATA编号,例如原版的夏侯独眼就是01 00 00 00。
旧的代码是按武将编号顺序来对应IMSG中的撤退台词,新的代码就按43340A开始的DATA编号来对应IMSG中的撤退台词。
PS:未经测试。
|