标题: 攻击范围图像与编号统一
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 2012-2-21 21:50 资料 短消息 只看该作者
攻击范围图像与编号统一

之前本人发过一个 小地图自动匹配大地图的修改
http://www.xycq.net/forum/thread-245813-1-1.html

从而使得 SMLMAP 这个文件废掉了

现在 本人按攻击范围编号 通过计算来自动生成图像



附件: Ekd5.rar (2012-2-21 22:00, 247.56 K)
该附件被下载次数 192


效果如截图


策略范围显示修改完,HITAREA 这个文件也可以废掉了

[ 本帖最后由 砖家叫兽 于 2012-2-22 02:18 编辑 ]


图片附件: QQ截图20120221215434.jpg (2012-2-21 22:00, 21.93 K)



图片附件: QQ截图20120221215445.jpg (2012-2-21 22:00, 17.32 K)



顶部
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 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 编辑 ]


顶部
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 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 编辑 ]
顶部
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 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种吧

况且万一扩充到双字节 那就……
顶部
性别:未知-离线 砖家叫兽

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 274
编号 406021
注册 2010-12-7


发表于 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


跟那个一样的 调用函数来画图
顶部

正在浏览此帖的会员 - 共 1 人在线




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

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

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