标题:
攻击范围图像与编号统一
[打印本页]
作者:
砖家叫兽
时间:
2012-2-21 21:50
标题:
攻击范围图像与编号统一
之前本人发过一个 小地图自动匹配大地图的修改
http://www.xycq.net/forum/thread-245813-1-1.html
从而使得 SMLMAP 这个文件废掉了
现在 本人按攻击范围编号 通过计算来自动生成图像
[attach]119167[/attach]
效果如截图
策略范围显示修改完,HITAREA 这个文件也可以废掉了
[
本帖最后由 砖家叫兽 于 2012-2-22 02:18 编辑
]
图片附件:
QQ截图20120221215434.jpg
(2012-2-21 22:00, 21.93 K) / 该附件被下载次数 176
http://www.xycq.org.cn/forum/attachment.php?aid=119165
图片附件:
QQ截图20120221215445.jpg
(2012-2-21 22:00, 17.32 K) / 该附件被下载次数 181
http://www.xycq.org.cn/forum/attachment.php?aid=119166
附件:
Ekd5.rar
(2012-2-21 22:00, 247.56 K) / 该附件被下载次数 193
http://www.xycq.org.cn/forum/attachment.php?aid=119167
作者:
砖家叫兽
时间:
2012-2-21 21:54
004780E6 |. 6A 05 PUSH 5 ; /ShowState = SW_SHOW
004780E8 |. 8B15 10604B00 MOV EDX,DWORD PTR DS:[4B6010] ; |
004780EE |. 52 PUSH EDX ; |hWnd => 00230528
004780EF |. FF15 E0624800 CALL DWORD PTR DS:[<&USER32.ShowWindow>] ; \ShowWindow
004780F5 |. 6A 00 PUSH 0
004780F7 |. E8 E7490000 CALL Ekd5.0047CAE3
004780FC |. 83C4 04 ADD ESP,4
004780FF |. 8A85 E8FEFFFF MOV AL,BYTE PTR SS:[EBP-118]
00478105 |. 50 PUSH EAX ; /Arg1
00478106 |. 8B8D F8FDFFFF MOV ECX,DWORD PTR SS:[EBP-208] ; |
0047810C |. E8 3F010000 CALL Ekd5.00478250 ; \Ekd5.00478250
这个函数就是专门用来画图了
00478111 |. 90 NOP
00478112 |. 90 NOP
00478113 |. 90 NOP
00478114 |. 90 NOP
00478115 |. 90 NOP
00478116 |. 90 NOP
00478117 |. C745 FC FFFFF>MOV DWORD PTR SS:[EBP-4],-1
0047811E |. 8D8D F0FEFFFF LEA ECX,DWORD PTR SS:[EBP-110]
00478124 |. E8 A7B1F8FF CALL Ekd5.004032D0
00478129 |> 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0047812C |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00478133 |. 8BE5 MOV ESP,EBP
00478135 |. 5D POP EBP
00478136 \. C2 0400 RETN 4
对原代码进行精炼后得到空间 以上为新函数接口
其中 ECX 为图像对应内存首地址 PUSH 为攻击范围编号
00478250 /$ 55 PUSH EBP
00478251 |. 8BEC MOV EBP,ESP
00478253 |. 51 PUSH ECX
00478254 |. 60 PUSHAD
00478255 |. 0FB65D 08 MOVZX EBX,BYTE PTR SS:[EBP+8]
00478259 |. 6A FC PUSH -4
0047825B |. 5E POP ESI
由于本人修改后的范围是锁定在-4 到 4 这个区间内
0047825C |. EB 01 JMP SHORT Ekd5.0047825F
0047825E |> 46 /INC ESI
0047825F |> 83FE 04 CMP ESI,4
所以 首先 -4 然后 +1 到 4
00478262 |. 7F 25 |JG SHORT Ekd5.00478289
00478264 |. 6A FC |PUSH -4
00478266 |. 5F |POP EDI
如果认为上面那个是纵坐标
00478267 |. EB 01 |JMP SHORT Ekd5.0047826A
00478269 |> 47 |/INC EDI
0047826A |> 83FF 04 | CMP EDI,4
那么这个就是横坐标
0047826D |. 7F 18 ||JG SHORT Ekd5.00478287
0047826F |. 56 ||PUSH ESI ; /Arg3
00478270 |. 57 ||PUSH EDI ; |Arg2
00478271 |. 53 ||PUSH EBX ; |Arg1
00478272 |. E8 19000000 ||CALL Ekd5.00478290 ; \Ekd5.00478290
判断这个坐标是否在攻击范围
这个需要配合攻击范围判断的函数 这里我就不贴了 比方我的攻击范围 采用组合的形式 有255种情况
00478277 |. 85C0 ||TEST EAX,EAX
00478279 |. 74 0A ||JE SHORT Ekd5.00478285
如果不是范围内 就跳
0047827B |. 56 ||PUSH ESI ; /Arg2
0047827C |. 57 ||PUSH EDI ; |Arg1
0047827D |. 8B4D FC ||MOV ECX,DWORD PTR SS:[EBP-4] ; |
00478280 |. E8 5BFFFFFF ||CALL Ekd5.004781E0 ; \Ekd5.004781E0
这个是范围内 所以 画图
00478285 |>^ EB E2 |\JMP SHORT Ekd5.00478269
00478287 |>^ EB D5 \JMP SHORT Ekd5.0047825E
00478289 |> 61 POPAD
0047828A |. 8BE5 MOV ESP,EBP
0047828C |. 5D POP EBP
0047828D \. C2 0400 RETN 4
[
本帖最后由 砖家叫兽 于 2012-2-21 22:15 编辑
]
作者:
砖家叫兽
时间:
2012-2-21 21:54
004781E0 /$ 55 PUSH EBP
004781E1 |. 8BEC MOV EBP,ESP
004781E3 |. 51 PUSH ECX
004781E4 |. 60 PUSHAD
004781E5 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004781E8 |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]
004781EB |. 83C0 04 ADD EAX,4
004781EE |. 83C2 04 ADD EDX,4
004781F1 |. 69D2 C0010000 IMUL EDX,EDX,1C0
先解释一下 原来的图像大小是64 X 64
我的最远范围是4格 因此需要 4+4+1 =9个坐标
1C0= 40(也就是10进制64)*7(7*9=63只差1格就满,不浪费)
004781F7 |. 6BC0 07 IMUL EAX,EAX,7
这个7 就不解释了
004781FA |. 03C2 ADD EAX,EDX
004781FC |. 03C8 ADD ECX,EAX
横纵坐标的偏移计算完
004781FE |. 8BD9 MOV EBX,ECX
这个就是当前画图的坐标首地址
00478200 |. 33F6 XOR ESI,ESI
00478202 |> 33FF /XOR EDI,EDI
00478204 |. 83FE 07 |CMP ESI,7
00478207 |. 73 3C |JNB SHORT Ekd5.00478245
00478209 |> 83FF 07 |/CMP EDI,7
0047820C |. 73 31 ||JNB SHORT Ekd5.0047823F
为什么 CMP 7 不解释了
0047820E |. 85F6 ||TEST ESI,ESI
00478210 |. 74 26 ||JE SHORT Ekd5.00478238
00478212 |. 83FE 06 ||CMP ESI,6
因为 从0开始 数到第7个数是 6
00478215 |. 74 21 ||JE SHORT Ekd5.00478238
00478217 |. 85FF ||TEST EDI,EDI
00478219 |. 74 1D ||JE SHORT Ekd5.00478238
0047821B |. 83FF 06 ||CMP EDI,6
0047821E |. 74 18 ||JE SHORT Ekd5.00478238
这里的计算 就是检查是否是边缘 边缘的情况 就是 横 纵 有一个等于 0或 6
00478220 |. 837D 08 00 ||CMP DWORD PTR SS:[EBP+8],0
00478224 |. 75 06 ||JNZ SHORT Ekd5.0047822C
00478226 |. 837D 0C 00 ||CMP DWORD PTR SS:[EBP+C],0
0047822A |. 74 06 ||JE SHORT Ekd5.00478232
是否当前人物的原点 这一点恒要画
0047822C |> C6043B 66 ||MOV BYTE PTR DS:[EBX+EDI],66
这是普通的范围标记 可以改了数值 相应颜色会变化 本人美术功底很差,这个……
00478230 |. EB 0A ||JMP SHORT Ekd5.0047823C
00478232 |> C6043B 37 ||MOV BYTE PTR DS:[EBX+EDI],37
这个是当前人物原点 所以画的颜色不一样
00478236 |. EB 04 ||JMP SHORT Ekd5.0047823C
00478238 |> C6043B FF ||MOV BYTE PTR DS:[EBX+EDI],0FF
这个是画格子的边框 白色
0047823C |> 47 ||INC EDI
0047823D |.^ EB CA |\JMP SHORT Ekd5.00478209
0047823F |> 46 |INC ESI
00478240 |. 83C3 40 |ADD EBX,40
转换10进制就是64 而 +64 正好就跳了一行
00478243 |.^ EB BD \JMP SHORT Ekd5.00478202
00478245 |> 61 POPAD
对了 重要的一点 ,本人所有函数都保留了寄存器的值,除了EAX 返回值
00478246 |. 8BE5 MOV ESP,EBP
00478248 |. 5D POP EBP
00478249 \. C2 0800 RETN 8
[
本帖最后由 砖家叫兽 于 2012-2-21 22:22 编辑
]
作者:
砖家叫兽
时间:
2012-2-21 22:28
因为攻击范围的修改 本人采用 8 位代表 8 个基本位置 采取组合形式
比方 1= 00000001 假设人物(0,0) 就是 (1,0) 骑兵
3= 00000011 就是(1,0)(1,1) 步兵
6= 00000110 就是 (1,1)(2,0) 弓兵
以此类推 8个基础点分别是
5
2 4 7
0 1 3 6 8
然后通过翻转覆盖 2pi 平面
当然 这样的组合的话 现有的图片肯定是不够用的 总不能导入255种吧
况且万一扩充到双字节 那就……
作者:
砖家叫兽
时间:
2012-2-22 02:19
关于策略范围显示
0046FC40 /$ 55 PUSH EBP
0046FC41 |. 8BEC MOV EBP,ESP
0046FC43 |. 6A FF PUSH -1
0046FC45 |. 68 90594800 PUSH Ekd5.00485990 ; SE 处理程序安装
0046FC4A |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0046FC50 |. 50 PUSH EAX
0046FC51 |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
0046FC58 |. 83EC 0C SUB ESP,0C
0046FC5B |. 894D E8 MOV DWORD PTR SS:[EBP-18],ECX
0046FC5E |. 0FB689 242000>MOVZX ECX,BYTE PTR DS:[ECX+2024]
0046FC65 |. E8 98430100 CALL Ekd5.00484002
0046FC6A |. E8 2190FAFF CALL Ekd5.00418C90
0046FC6F |. 8845 EC MOV BYTE PTR SS:[EBP-14],AL
0046FC72 |. 90 NOP
0046FC73 |. 90 NOP
0046FC74 |. 90 NOP
0046FC75 |. 90 NOP
0046FC76 |. 3C FF CMP AL,0FF
0046FC78 |. 75 07 JNZ SHORT Ekd5.0046FC81
0046FC7A |. C645 EC 10 MOV BYTE PTR SS:[EBP-14],10
0046FC7E |. 90 NOP
0046FC7F |. 90 NOP
0046FC80 |. 90 NOP
0046FC81 |> 90 NOP
0046FC82 |. 90 NOP
0046FC83 |. 90 NOP
0046FC84 |. 90 NOP
0046FC85 |. 6A 00 PUSH 0 ; /ShowState = SW_HIDE
0046FC87 |. 8B15 F85F4B00 MOV EDX,DWORD PTR DS:[4B5FF8] ; |
0046FC8D |. 52 PUSH EDX ; |hWnd => NULL
0046FC8E |. FF15 E0624800 CALL DWORD PTR DS:[<&USER32.ShowWindow>] ; \ShowWindow
0046FC94 |. 6A 0B PUSH 0B
0046FC96 |. E8 48CE0000 CALL Ekd5.0047CAE3
0046FC9B |. 83C4 04 ADD ESP,4
0046FC9E |. 05 00040000 ADD EAX,400
0046FCA3 |. 3E:8945 F0 MOV DWORD PTR DS:[EBP-10],EAX
0046FCA7 |. 90 NOP
0046FCA8 |. 90 NOP
0046FCA9 |. 90 NOP
0046FCAA |. 6A 07 PUSH 7
0046FCAC |. E8 19D50000 CALL Ekd5.0047D1CA
0046FCB1 |. 83C4 04 ADD ESP,4
0046FCB4 |. 6A 00 PUSH 0 ; /Arg3 = 00000000
0046FCB6 |. 6A 00 PUSH 0 ; |Arg2 = 00000000
0046FCB8 |. 6A 00 PUSH 0 ; |Arg1 = 00000000
0046FCBA |. E8 32D50000 CALL Ekd5.0047D1F1 ; \Ekd5.0047D1F1
0046FCBF |. 83C4 0C ADD ESP,0C
0046FCC2 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
0046FCC5 |. 90 NOP
0046FCC6 |. 90 NOP
0046FCC7 |. 90 NOP
0046FCC8 |. 83C0 24 ADD EAX,24
0046FCCB |. 50 PUSH EAX
0046FCCC |. 8B0D 9C684800 MOV ECX,DWORD PTR DS:[48689C]
0046FCD2 |. 51 PUSH ECX
0046FCD3 |. 8B15 98684800 MOV EDX,DWORD PTR DS:[486898]
0046FCD9 |. 52 PUSH EDX
0046FCDA |. 6A 00 PUSH 0
0046FCDC |. 6A 00 PUSH 0
0046FCDE |. E8 B8E30000 CALL Ekd5.0047E09B
0046FCE3 |. 83C4 14 ADD ESP,14
0046FCE6 |. 6A 00 PUSH 0
0046FCE8 |. E8 F6CD0000 CALL Ekd5.0047CAE3
0046FCED |. 83C4 04 ADD ESP,4
0046FCF0 |. C745 FC FFFFF>MOV DWORD PTR SS:[EBP-4],-1
0046FCF7 |. 90 NOP
0046FCF8 |. 90 NOP
0046FCF9 |. 90 NOP
0046FCFA |. 90 NOP
0046FCFB |. 90 NOP
0046FCFC |. 57 PUSH EDI
0046FCFD |. 8B7D F0 MOV EDI,DWORD PTR SS:[EBP-10]
0046FD00 |. 33C0 XOR EAX,EAX
0046FD02 |. B9 00100000 MOV ECX,1000
0046FD07 |. F3:AA REP STOS BYTE PTR ES:[EDI]
0046FD09 |. 5F POP EDI
0046FD0A |. 90 NOP
0046FD0B |. 90 NOP
0046FD0C |. 90 NOP
0046FD0D |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0046FD10 |. 90 NOP
0046FD11 |. 90 NOP
0046FD12 |. 90 NOP
0046FD13 |. 90 NOP
0046FD14 |. 90 NOP
0046FD15 |. 90 NOP
0046FD16 |. 90 NOP
0046FD17 |. 90 NOP
0046FD18 |. 90 NOP
0046FD19 |. 90 NOP
0046FD1A |. 90 NOP
0046FD1B |. 90 NOP
0046FD1C |. 90 NOP
0046FD1D |. 90 NOP
0046FD1E |. 90 NOP
0046FD1F |. 90 NOP
0046FD20 |. 90 NOP
0046FD21 |. 8A45 EC MOV AL,BYTE PTR SS:[EBP-14]
0046FD24 |. 50 PUSH EAX ; /Arg1
0046FD25 |. E8 26850000 CALL Ekd5.00478250 ; \Ekd5.00478250
0046FD2A |. 90 NOP
0046FD2B |. 90 NOP
0046FD2C |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0046FD2F |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0046FD36 |. 8BE5 MOV ESP,EBP
0046FD38 |. 5D POP EBP
0046FD39 \. C3 RETN
跟那个一样的 调用函数来画图
欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/)
Powered by Discuz! 5.0.0