2010-2-21 18:09
a117398902
关于6B指令-法术,能否实现加强?
6B指令-法术,目前只能对应指定的坐标区域,不知能否实现单纯对应个别单位呢?:hz1039:
2010-2-21 18:37
a117398902
请问毅大,能否透露下代码,因为我想弄在新引擎里,看看OK不:hz1026:
2010-2-21 20:42
godtype
4.0的代码用了两个整形变量,下面的是改良后的,用一个整形变量就可以了:
0041405B /. 55 PUSH EBP
0041405C |. 8BEC MOV EBP,ESP
0041405E |. 83EC 24 SUB ESP,24
00414061 |. 6A 04 PUSH 4
00414063 |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00414066 |. E8 8C430000 CALL 004183F7
0041406B |. 25 FFFF0000 AND EAX,0FFFF
00414070 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00414073 |. 3D 00800000 CMP EAX,8000
00414078 |. 74 4B JE SHORT 004140C5
0041407A |. 6A 04 PUSH 4
0041407C |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
0041407F |. E8 73430000 CALL 004183F7
00414084 |. 25 FFFF0000 AND EAX,0FFFF
00414089 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0041408C |. 3D 00800000 CMP EAX,8000
00414091 |. 74 32 JE SHORT 004140C5
00414093 |. 6A 4B PUSH 4B
00414095 |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00414098 |. E8 5A430000 CALL 004183F7
0041409D |. 25 FFFF0000 AND EAX,0FFFF
004140A2 |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
004140A5 |. 3D 00800000 CMP EAX,8000
004140AA |. 74 19 JE SHORT 004140C5
004140AC |. 6A 26 PUSH 26
004140AE |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
004140B1 |. E8 41430000 CALL 004183F7
004140B6 |. 25 FFFF0000 AND EAX,0FFFF
004140BB |. 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
004140BE |. 3D 00800000 CMP EAX,8000
004140C3 |. 75 0A JNZ SHORT 004140CF
004140C5 |> B8 05000000 MOV EAX,5
004140CA |. E9 84010000 JMP 00414253
004140CF |> 807D FC 28 CMP BYTE PTR SS:[EBP-4],28
004140D3 |. 72 2C JB SHORT 00414101
004140D5 |. 807D F8 28 CMP BYTE PTR SS:[EBP-8],28
004140D9 |. 72 26 JB SHORT 00414101
004140DB |. B9 9D0F0000 MOV ECX,0F9D <——整形变量编号,用来指定武将
004140E0 |. E8 41D00B00 CALL 004D1126
004140E5 |. E8 C2CEFFFF CALL 00410FAC
004140EA |. 85C0 TEST EAX,EAX
004140EC |. 75 0A JNZ SHORT 004140F8
004140EE |. B8 05000000 MOV EAX,5
004140F3 |. E9 5B010000 JMP 00414253
004140F8 |> 8875 FC MOV BYTE PTR SS:[EBP-4],DH
004140FB |. 8855 F8 MOV BYTE PTR SS:[EBP-8],DL
004140FE |. 90 NOP
004140FF |. 90 NOP
00414100 |. 90 NOP
上面的代码是在原来的6B指令里面修改,下面的代码要自己找位置:
00410FAC /$ 55 PUSH EBP
00410FAD |. 8BEC MOV EBP,ESP
00410FAF |. 83EC 08 SUB ESP,8
00410FB2 |. 50 PUSH EAX
00410FB3 |. E8 1ED50200 CALL 0043E4D6
00410FB8 |. 83C4 04 ADD ESP,4
00410FBB |. 3C FF CMP AL,0FF
00410FBD |. 74 12 JE SHORT 00410FD1
00410FBF |. 8AC8 MOV CL,AL
00410FC1 |. E8 4A010C00 CALL 004D1110
00410FC6 |. 8A71 06 MOV DH,BYTE PTR DS:[ECX+6]
00410FC9 |. 8A51 07 MOV DL,BYTE PTR DS:[ECX+7]
00410FCC |. 33C0 XOR EAX,EAX
00410FCE |. 40 INC EAX
00410FCF |. EB 02 JMP SHORT 00410FD3
00410FD1 |> 33C0 XOR EAX,EAX
00410FD3 |> 8BE5 MOV ESP,EBP
00410FD5 |. 5D POP EBP
00410FD6 \. C3 RETN
004D1126 55 PUSH EBP
004D1127 8BEC MOV EBP,ESP
004D1129 33C0 XOR EAX,EAX
004D112B 8B048D 00B05500 MOV EAX,DWORD PTR DS:[ECX*4+55B000]
004D1132 8BE5 MOV ESP,EBP
004D1134 5D POP EBP
004D1135 C3 RETN
上面这段是岱瀛新引擎用的,STAR引擎55B000要改成502000
004D1110 55 PUSH EBP
004D1111 8BEC MOV EBP,ESP
004D1113 81E1 FF000000 AND ECX,0FF
004D1119 6BC9 24 IMUL ECX,ECX,24
004D111C 81C1 502C4B00 ADD ECX,004B2C50
004D1122 8BE5 MOV ESP,EBP
004D1124 5D POP EBP
004D1125 C3 RETN
上面这段STAR引擎也有写上,具体是哪里忘了,自己找一下。
修改后,在剧本中设置法术的坐标为40,40的时候,就可以从指定的整形变量里面读出武将编号,再根据武将所在位置来显示法术。