回复 #14 冰麒麟 的帖子
不一定要在剧本里面改,改选一下指令18就可以了。
00413B2C |. E8 1780FFFF CALL Ekd5.0040BB48 ; \Ekd5.0040BB48
0040BB48 /$ 55 PUSH EBP
0040BB49 |. 8BEC MOV EBP,ESP
0040BB4B |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0040BB4E |. 50 PUSH EAX ; /Arg2
0040BB4F |. 68 28114A00 PUSH Ekd5.004A1128 ; |Arg1 = 004A1128
0040BB54 |. E8 24410700 CALL Ekd5.0047FC7D ; \Ekd5.0047FC7D
0040BB59 |. 83C4 08 ADD ESP,8
0040BB5C |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
0040BB5F |. 51 PUSH ECX ; /Arg1
0040BB60 |. E8 AAA90600 CALL Ekd5.0047650F ; \Ekd5.0047650F
0040BB65 |. 83C4 04 ADD ESP,4
0040BB68 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0040BB6B |. 52 PUSH EDX ; /Arg2
0040BB6C |. 6A 02 PUSH 2 ; |Arg1 = 00000002
0040BB6E |. E8 263B0200 CALL Ekd5.0042F699 ; \Ekd5.0042F699
0040BB73 |. 83C4 08 ADD ESP,8
0040BB76 |. 5D POP EBP
0040BB77 \. C3 RETN
18原来是这样的,改写成:(假设是难度写在这里)
PUSH EBP
MOV EBP,ESP
SUB ESP,200 <---应该足够用,为了预防万一,可以再加大一点。
PUSH [EBP+8]
MOV EAX,*1 <---难度的变量地址。
IMUL EAX,EAX,*2 <---每个难度名称的长度,长度要统一并要有00做结尾,比如两个汉字就要写成05甚至更多。
ADD EAX,*3 <---在引擎其他空白位置写所有的难度名称,这里是第一个难度名称(变量取值00)的地址。写名称的时候要按*2的字节间隔来写下一个名称。
PUSH EAX
PUSH *4 <---再找其他空白地方写字符,然后PUSH该地址。必须含有两个"%s",例如“%s空格%s”(实际效果将是“难度 事件名”),或“[%s]%s”(实际效果将是“[难度]事件名”),或者可以选用现成的:PUSH 48B564 两个名称中间双空格,不过有点多。
LEA EAX,[EBP-200]
PUSH EAX
CALL DWORD PTR DS:[4862C0]
ADD ESP,10
LEA EAX,[EBP-200]
PUSH EAX
PUSH 004A1128
CALL 0047FC7D
ADD ESP,8
LEA EAX,[EBP-200]
PUSH EAX
CALL 0047650F
ADD ESP,4
LEA EAX,[EBP-200]
PUSH EAX
PUSH 2
CALL 0042F699
ADD ESP,4
POP EBP
RETN
最后的CALL 0042F699是显示旁白,这里如果不想将难度也显示出来,可以换回原来的 MOV EAX,DWORD PTR SS:[EBP+8]。
另外如果想写成 “事件名--难度”这样的模式,可以将*1前的PUSH [EBP+8]移到*4前面。
如果是战役编号,可以将*4中对应的 %s 改成 %d 或者 %2d ,事件名在前就将后面的改,否则就改前面的。同时*2*3就不用了。
|