17. 转向设置函数
004DAA60 60 pushad ; 转向设置函数
004DAA61 BF 00E04B00 mov edi, 004BE000 ; 原资源区块首地址指针
004DAA66 8B77 10 mov esi, dword ptr [edi+10] ; 武将A战场信息指针
004DAA69 0FB646 06 movzx eax, byte ptr [esi+6] ; 武将A战场横坐标
004DAA6D 0FB65E 07 movzx ebx, byte ptr [esi+7] ; 武将A战场纵坐标
004DAA71 8B77 1C mov esi, dword ptr [edi+1C] ; 武将B战场信息指针
004DAA74 0FB64E 0F movzx ecx, byte ptr [esi+F] ; 武将B朝向
004DAA78 41 inc ecx
004DAA79 F7D9 neg ecx ; 补码
004DAA7B 894F 04 mov dword ptr [edi+4], ecx ; 假设失败
004DAA7E 0FB64E 06 movzx ecx, byte ptr [esi+6] ; 武将B战场横坐标
004DAA82 0FB656 07 movzx edx, byte ptr [esi+7] ; 武将B战场纵坐标
004DAA86 38D3 cmp bl, dl ; 武将A在武将B上方、左上、右上时
004DAA88 73 0B jnb short 004DAA95
004DAA8A B0 02 mov al, 2 ; 武将A向下
004DAA8C B1 00 mov cl, 0 ; 武将B向上
004DAA8E 32DB xor bl, bl ; 标志值清0
004DAA90 E9 F6010000 jmp 004DAC8B
004DAA95 38D3 cmp bl, dl ; 武将A在武将B下方、左下、右下时
004DAA97 76 0B jbe short 004DAAA4
004DAA99 B0 00 mov al, 0 ; 武将A向上
004DAA9B B1 02 mov cl, 2 ; 武将B向下
004DAA9D 32DB xor bl, bl ; 标志值清0
004DAA9F E9 E7010000 jmp 004DAC8B
004DAAA4 38C8 cmp al, cl ; 武将A在武将B左侧时
004DAAA6 0F83 EE000000 jnb 004DAB9A
004DAAAC 8B77 10 mov esi, dword ptr [edi+10] ; 武将A战场信息指针
004DAAAF 8A46 0F mov al, byte ptr [esi+F] ; 武将A朝向
004DAAB2 8B77 1C mov esi, dword ptr [edi+1C] ; 武将B战场信息指针
004DAAB5 8A4E 0F mov cl, byte ptr [esi+F] ; 武将B朝向
004DAAB8 0AC0 or al, al ; al == 0 && cl == 0
004DAABA 75 0B jnz short 004DAAC7
004DAABC 0AC9 or cl, cl
004DAABE 75 07 jnz short 004DAAC7
004DAAC0 B3 01 mov bl, 1
004DAAC2 E9 CA000000 jmp 004DAB91
004DAAC7 0AC0 or al, al ; al == 0 && cl == 1
004DAAC9 75 0C jnz short 004DAAD7
004DAACB 80F9 01 cmp cl, 1
004DAACE 75 07 jnz short 004DAAD7
004DAAD0 B3 02 mov bl, 2
004DAAD2 E9 BA000000 jmp 004DAB91
004DAAD7 0AC0 or al, al ; al == 0 && cl == 2
004DAAD9 75 0C jnz short 004DAAE7
004DAADB 80F9 02 cmp cl, 2
004DAADE 75 07 jnz short 004DAAE7
004DAAE0 B3 03 mov bl, 3
004DAAE2 E9 AA000000 jmp 004DAB91
004DAAE7 0AC0 or al, al ; al == 0 && cl == 3
004DAAE9 75 0C jnz short 004DAAF7
004DAAEB 80F9 03 cmp cl, 3
004DAAEE 75 07 jnz short 004DAAF7
004DAAF0 B3 04 mov bl, 4
004DAAF2 E9 9A000000 jmp 004DAB91
004DAAF7 3C 01 cmp al, 1 ; al == 1 && cl == 0
004DAAF9 75 0B jnz short 004DAB06
004DAAFB 0AC9 or cl, cl
004DAAFD 75 07 jnz short 004DAB06
004DAAFF B3 05 mov bl, 5
004DAB01 E9 8B000000 jmp 004DAB91
004DAB06 3C 01 cmp al, 1 ; al == 1 && cl == 1
004DAB08 75 09 jnz short 004DAB13
004DAB0A 80F9 01 cmp cl, 1
004DAB0D 75 04 jnz short 004DAB13
004DAB0F B3 06 mov bl, 6
004DAB11 EB 7E jmp short 004DAB91
004DAB13 3C 01 cmp al, 1 ; al == 1 && cl == 2
004DAB15 75 09 jnz short 004DAB20
004DAB17 80F9 02 cmp cl, 2
004DAB1A 75 04 jnz short 004DAB20
004DAB1C B3 07 mov bl, 7
004DAB1E EB 71 jmp short 004DAB91
004DAB20 3C 01 cmp al, 1 ; al == 1 && cl == 3
004DAB22 75 09 jnz short 004DAB2D
004DAB24 80F9 03 cmp cl, 3
004DAB27 75 04 jnz short 004DAB2D
004DAB29 32DB xor bl, bl
004DAB2B EB 64 jmp short 004DAB91
004DAB2D 3C 02 cmp al, 2 ; al == 2 && cl == 0
004DAB2F 75 08 jnz short 004DAB39
004DAB31 0AC9 or cl, cl
004DAB33 75 04 jnz short 004DAB39
004DAB35 B3 09 mov bl, 9
004DAB37 EB 58 jmp short 004DAB91
004DAB39 3C 02 cmp al, 2 ; al == 2 && cl == 1
004DAB3B 75 09 jnz short 004DAB46
004DAB3D 80F9 01 cmp cl, 1
004DAB40 75 04 jnz short 004DAB46
004DAB42 B3 0A mov bl, 0A
004DAB44 EB 4B jmp short 004DAB91
004DAB46 3C 02 cmp al, 2 ; al == 2 && cl == 2
004DAB48 75 09 jnz short 004DAB53
004DAB4A 80F9 02 cmp cl, 2
004DAB4D 75 04 jnz short 004DAB53
004DAB4F B3 0B mov bl, 0B
004DAB51 EB 3E jmp short 004DAB91
004DAB53 3C 02 cmp al, 2 ; al == 2 && cl == 3
004DAB55 75 09 jnz short 004DAB60
004DAB57 80F9 03 cmp cl, 3
004DAB5A 75 04 jnz short 004DAB60
004DAB5C B3 0C mov bl, 0C
004DAB5E EB 31 jmp short 004DAB91
004DAB60 3C 03 cmp al, 3 ; al == 3 && cl == 0
004DAB62 75 08 jnz short 004DAB6C
004DAB64 0AC9 or cl, cl
004DAB66 75 04 jnz short 004DAB6C
004DAB68 B3 0D mov bl, 0D
004DAB6A EB 25 jmp short 004DAB91
004DAB6C 3C 03 cmp al, 3 ; al == 3 && cl == 1
004DAB6E 75 09 jnz short 004DAB79
004DAB70 80F9 01 cmp cl, 1
004DAB73 75 04 jnz short 004DAB79
004DAB75 B3 0E mov bl, 0E
004DAB77 EB 18 jmp short 004DAB91
004DAB79 3C 03 cmp al, 3 ; al == 3 && cl == 2
004DAB7B 75 09 jnz short 004DAB86
004DAB7D 80F9 02 cmp cl, 2
004DAB80 75 04 jnz short 004DAB86
004DAB82 B3 0F mov bl, 0F
004DAB84 EB 0B jmp short 004DAB91
004DAB86 3C 03 cmp al, 3 ; al == 3 && cl == 3
004DAB88 75 07 jnz short 004DAB91
004DAB8A 80F9 03 cmp cl, 3
004DAB8D 75 02 jnz short 004DAB91
004DAB8F B3 10 mov bl, 10
004DAB91 B0 01 mov al, 1 ; 武将A向右
004DAB93 B1 03 mov cl, 3 ; 武将B向左
004DAB95 E9 F1000000 jmp 004DAC8B
004DAB9A 38C8 cmp al, cl ; 武将A在武将B右侧时
004DAB9C 0F86 E9000000 jbe 004DAC8B
004DABA2 8B77 10 mov esi, dword ptr [edi+10]
004DABA5 8A46 0F mov al, byte ptr [esi+F] ; 武将A朝向
004DABA8 8B77 1C mov esi, dword ptr [edi+1C]
004DABAB 8A4E 0F mov cl, byte ptr [esi+F] ; 武将B朝向
004DABAE 0AC0 or al, al ; al == 0 && cl == 0
004DABB0 75 0B jnz short 004DABBD
004DABB2 0AC9 or cl, cl
004DABB4 75 07 jnz short 004DABBD
004DABB6 B3 11 mov bl, 11
004DABB8 E9 CA000000 jmp 004DAC87
004DABBD 0AC0 or al, al ; al == 0 && cl == 1
004DABBF 75 0C jnz short 004DABCD
004DABC1 80F9 01 cmp cl, 1
004DABC4 75 07 jnz short 004DABCD
004DABC6 B3 12 mov bl, 12
004DABC8 E9 BA000000 jmp 004DAC87
004DABCD 0AC0 or al, al ; al == 0 && cl == 2
004DABCF 75 0C jnz short 004DABDD
004DABD1 80F9 02 cmp cl, 2
004DABD4 75 07 jnz short 004DABDD
004DABD6 B3 13 mov bl, 13
004DABD8 E9 AA000000 jmp 004DAC87
004DABDD 0AC0 or al, al ; al == 0 && cl == 3
004DABDF 75 0C jnz short 004DABED
004DABE1 80F9 03 cmp cl, 3
004DABE4 75 07 jnz short 004DABED
004DABE6 B3 14 mov bl, 14
004DABE8 E9 9A000000 jmp 004DAC87
004DABED 3C 01 cmp al, 1 ; al == 1 && cl == 0
004DABEF 75 0B jnz short 004DABFC
004DABF1 0AC9 or cl, cl
004DABF3 75 07 jnz short 004DABFC
004DABF5 B3 15 mov bl, 15
004DABF7 E9 8B000000 jmp 004DAC87
004DABFC 3C 01 cmp al, 1 ; al == 1 && cl == 1
004DABFE 75 09 jnz short 004DAC09
004DAC00 80F9 01 cmp cl, 1
004DAC03 75 04 jnz short 004DAC09
004DAC05 B3 16 mov bl, 16
004DAC07 EB 7E jmp short 004DAC87
004DAC09 3C 01 cmp al, 1 ; al == 1 && cl == 2
004DAC0B 75 09 jnz short 004DAC16
004DAC0D 80F9 02 cmp cl, 2
004DAC10 75 04 jnz short 004DAC16
004DAC12 B3 17 mov bl, 17
004DAC14 EB 71 jmp short 004DAC87
004DAC16 3C 01 cmp al, 1 ; al == 1 && cl == 3
004DAC18 75 09 jnz short 004DAC23
004DAC1A 80F9 03 cmp cl, 3
004DAC1D 75 04 jnz short 004DAC23
004DAC1F B3 18 mov bl, 18
004DAC21 EB 64 jmp short 004DAC87
004DAC23 3C 02 cmp al, 2 ; al == 2 && cl == 0
004DAC25 75 08 jnz short 004DAC2F
004DAC27 0AC9 or cl, cl
004DAC29 75 04 jnz short 004DAC2F
004DAC2B B3 19 mov bl, 19
004DAC2D EB 58 jmp short 004DAC87
004DAC2F 3C 02 cmp al, 2 ; al == 2 && cl == 1
004DAC31 75 09 jnz short 004DAC3C
004DAC33 80F9 01 cmp cl, 1
004DAC36 75 04 jnz short 004DAC3C
004DAC38 B3 1A mov bl, 1A
004DAC3A EB 4B jmp short 004DAC87
004DAC3C 3C 02 cmp al, 2 ; al == 2 && cl == 2
004DAC3E 75 09 jnz short 004DAC49
004DAC40 80F9 02 cmp cl, 2
004DAC43 75 04 jnz short 004DAC49
004DAC45 B3 1B mov bl, 1B
004DAC47 EB 3E jmp short 004DAC87
004DAC49 3C 02 cmp al, 2 ; al == 2 && cl == 3
004DAC4B 75 09 jnz short 004DAC56
004DAC4D 80F9 03 cmp cl, 3
004DAC50 75 04 jnz short 004DAC56
004DAC52 B3 1C mov bl, 1C
004DAC54 EB 31 jmp short 004DAC87
004DAC56 3C 03 cmp al, 3 ; al == 3 && cl == 0
004DAC58 75 08 jnz short 004DAC62
004DAC5A 0AC9 or cl, cl
004DAC5C 75 04 jnz short 004DAC62
004DAC5E B3 1D mov bl, 1D
004DAC60 EB 25 jmp short 004DAC87
004DAC62 3C 03 cmp al, 3 ; al == 3 && cl == 1
004DAC64 75 09 jnz short 004DAC6F
004DAC66 80F9 01 cmp cl, 1
004DAC69 75 04 jnz short 004DAC6F
004DAC6B 32DB xor bl, bl
004DAC6D EB 18 jmp short 004DAC87
004DAC6F 3C 03 cmp al, 3 ; al == 3 && cl == 2
004DAC71 75 09 jnz short 004DAC7C
004DAC73 80F9 02 cmp cl, 2
004DAC76 75 04 jnz short 004DAC7C
004DAC78 B3 1F mov bl, 1F
004DAC7A EB 0B jmp short 004DAC87
004DAC7C 3C 03 cmp al, 3 ; al == 3 && cl == 3
004DAC7E 75 07 jnz short 004DAC87
004DAC80 80F9 03 cmp cl, 3
004DAC83 75 02 jnz short 004DAC87
004DAC85 B3 20 mov bl, 20
004DAC87 B0 03 mov al, 3 ; 武将A向左
004DAC89 B1 01 mov cl, 1 ; 武将B向右
004DAC8B 8B77 1C mov esi, dword ptr [edi+1C] ; 武将B战场信息指针
004DAC8E 884E 0F mov byte ptr [esi+F], cl ; 更新武将B战场朝向
004DAC91 8B4F 10 mov ecx, dword ptr [edi+10] ; 武将A战场信息指针
004DAC94 8841 0F mov byte ptr [ecx+F], al ; 更新武将A战场朝向
004DAC97 56 push esi
004DAC98 51 push ecx
004DAC99 53 push ebx
004DAC9A E8 11000000 call 004DACB0 ; 转向处理函数
004DAC9F 61 popad
004DACA0 C3 retn
二进制数据:
60 BF 00 E0 4B 00 8B 77 10 0F B6 46 06 0F B6 5E
07 8B 77 1C 0F B6 4E 0F 41 F7 D9 89 4F 04 0F B6
4E 06 0F B6 56 07 38 D3 73 0B B0 02 B1 00 32 DB
E9 F6 01 00 00 38 D3 76 0B B0 00 B1 02 32 DB E9
E7 01 00 00 38 C8 0F 83 EE 00 00 00 8B 77 10 8A
46 0F 8B 77 1C 8A 4E 0F 0A C0 75 0B 0A C9 75 07
B3 01 E9 CA 00 00 00 0A C0 75 0C 80 F9 01 75 07
B3 02 E9 BA 00 00 00 0A C0 75 0C 80 F9 02 75 07
B3 03 E9 AA 00 00 00 0A C0 75 0C 80 F9 03 75 07
B3 04 E9 9A 00 00 00 3C 01 75 0B 0A C9 75 07 B3
05 E9 8B 00 00 00 3C 01 75 09 80 F9 01 75 04 B3
06 EB 7E 3C 01 75 09 80 F9 02 75 04 B3 07 EB 71
3C 01 75 09 80 F9 03 75 04 32 DB EB 64 3C 02 75
08 0A C9 75 04 B3 09 EB 58 3C 02 75 09 80 F9 01
75 04 B3 0A EB 4B 3C 02 75 09 80 F9 02 75 04 B3
0B EB 3E 3C 02 75 09 80 F9 03 75 04 B3 0C EB 31
3C 03 75 08 0A C9 75 04 B3 0D EB 25 3C 03 75 09
80 F9 01 75 04 B3 0E EB 18 3C 03 75 09 80 F9 02
75 04 B3 0F EB 0B 3C 03 75 07 80 F9 03 75 02 B3
10 B0 01 B1 03 E9 F1 00 00 00 38 C8 0F 86 E9 00
00 00 8B 77 10 8A 46 0F 8B 77 1C 8A 4E 0F 0A C0
75 0B 0A C9 75 07 B3 11 E9 CA 00 00 00 0A C0 75
0C 80 F9 01 75 07 B3 12 E9 BA 00 00 00 0A C0 75
0C 80 F9 02 75 07 B3 13 E9 AA 00 00 00 0A C0 75
0C 80 F9 03 75 07 B3 14 E9 9A 00 00 00 3C 01 75
0B 0A C9 75 07 B3 15 E9 8B 00 00 00 3C 01 75 09
80 F9 01 75 04 B3 16 EB 7E 3C 01 75 09 80 F9 02
75 04 B3 17 EB 71 3C 01 75 09 80 F9 03 75 04 B3
18 EB 64 3C 02 75 08 0A C9 75 04 B3 19 EB 58 3C
02 75 09 80 F9 01 75 04 B3 1A EB 4B 3C 02 75 09
80 F9 02 75 04 B3 1B EB 3E 3C 02 75 09 80 F9 03
75 04 B3 1C EB 31 3C 03 75 08 0A C9 75 04 B3 1D
EB 25 3C 03 75 09 80 F9 01 75 04 32 DB EB 18 3C
03 75 09 80 F9 02 75 04 B3 1F EB 0B 3C 03 75 07
80 F9 03 75 02 B3 20 B0 03 B1 01 8B 77 1C 88 4E
0F 8B 4F 10 88 41 0F 56 51 53 E8 11 00 00 00 61
C3 90
18. 武将转向处理
004DACB0 55 push ebp ; 转向处理函数
004DACB1 8BEC mov ebp, esp
004DACB3 83C4 FC add esp, -4
004DACB6 EB 46 jmp short 004DACFE
004DACB8 90 nop ; 下面的数据控制武将的战场形象是否需要变反
004DACB9 90 nop ; 0:直接刷新,1:转向不保存,2:变反不保存,3:不变反保存,4:变反保存,取决于形象的朝向
004DACBA 0000 add byte ptr [eax], al
004DACBC 0203 add al, byte ptr [ebx]
004DACBE 0203 add al, byte ptr [ebx]
004DACC0 0203 add al, byte ptr [ebx]
004DACC2 0200 add al, byte ptr [eax]
004DACC4 0003 add byte ptr [ebx], al
004DACC6 0003 add byte ptr [ebx], al
004DACC8 0003 add byte ptr [ebx], al
004DACCA 0000 add byte ptr [eax], al
004DACCC 0203 add al, byte ptr [ebx]
004DACCE 0203 add al, byte ptr [ebx]
004DACD0 0203 add al, byte ptr [ebx]
004DACD2 0200 add al, byte ptr [eax]
004DACD4 0203 add al, byte ptr [ebx]
004DACD6 0203 add al, byte ptr [ebx]
004DACD8 0203 add al, byte ptr [ebx]
004DACDA 0200 add al, byte ptr [eax]
004DACDC 0102 add dword ptr [edx], eax
004DACDE 0100 add dword ptr [eax], eax
004DACE0 0102 add dword ptr [edx], eax
004DACE2 010401 add dword ptr [ecx+eax], eax
004DACE5 0001 add byte ptr [ecx], al
004DACE7 0001 add byte ptr [ecx], al
004DACE9 0201 add al, byte ptr [ecx]
004DACEB 04 01 add al, 1
004DACED 04 01 add al, 1
004DACEF 0001 add byte ptr [ecx], al
004DACF1 0001 add byte ptr [ecx], al
004DACF3 04 00 add al, 0
004DACF5 04 00 add al, 0
004DACF7 0000 add byte ptr [eax], al
004DACF9 0200 add al, byte ptr [eax]
004DACFB 04 90 add al, 90
004DACFD 90 nop
004DACFE 8B45 08 mov eax, dword ptr [ebp+8] ; 转向标志值
004DAD01 B9 BAAC4D00 mov ecx, 004DACBA ; 指向控制数据入口
004DAD06 0FB70441 movzx eax, word ptr [ecx+eax*2] ; 取两字节
004DAD0A 0FB6C8 movzx ecx, al ; 武将A转向控制逻辑
004DAD0D C1E8 08 shr eax, 8
004DAD10 8945 FC mov dword ptr [ebp-4], eax ; 武将B转向控制逻辑
004DAD13 83F9 00 cmp ecx, 0
004DAD16 76 0A jbe short 004DAD22 ; 检测武将A是否需要转向
004DAD18 49 dec ecx ; 武将A形象需要变反
004DAD19 51 push ecx
004DAD1A 8B4D 0C mov ecx, dword ptr [ebp+C] ; 武将A战场信息指针
004DAD1D E8 1250F6FF call 0043FD34 ; 装载数据??
004DAD22 8B4D 0C mov ecx, dword ptr [ebp+C] ; 武将A战场信息指针
004DAD25 E8 9F4FF6FF call 0043FCC9 ; 刷新
004DAD2A 8B45 FC mov eax, dword ptr [ebp-4] ; 武将B转向控制逻辑
004DAD2D 83F8 02 cmp eax, 2 ; 检测是否需要变反
004DAD30 76 10 jbe short 004DAD42
004DAD32 83E8 03 sub eax, 3
004DAD35 B9 00E04B00 mov ecx, 004BE000 ; 原资源区块首地址指针
004DAD3A 66:8941 06 mov word ptr [ecx+6], ax ; 保存变反控制逻辑
004DAD3E EB 08 jmp short 004DAD48
004DAD40 EB 0F jmp short 004DAD51
004DAD42 83F8 00 cmp eax, 0
004DAD45 76 0A jbe short 004DAD51
004DAD47 48 dec eax
004DAD48 50 push eax ; 变反控制逻辑
004DAD49 8B4D 10 mov ecx, dword ptr [ebp+10] ; 武将B战场信息指针
004DAD4C E8 E34FF6FF call 0043FD34
004DAD51 8B4D 10 mov ecx, dword ptr [ebp+10] ; 武将B战场信息指针
004DAD54 E8 704FF6FF call 0043FCC9 ; 刷新
004DAD59 C9 leave
004DAD5A C2 0C00 retn 0C
004DAD5D 90 nop
二进制数据:
55 8B EC 83 C4 FC EB 46 90 90 00 00 02 03 02 03
02 03 02 00 00 03 00 03 00 03 00 00 02 03 02 03
02 03 02 00 02 03 02 03 02 03 02 00 01 02 01 00
01 02 01 04 01 00 01 00 01 02 01 04 01 04 01 00
01 00 01 04 00 04 00 00 00 02 00 04 90 90 8B 45
08 B9 BA AC 4D 00 0F B7 04 41 0F B6 C8 C1 E8 08
89 45 FC 83 F9 00 76 0A 49 51 8B 4D 0C E8 12 50
F6 FF 8B 4D 0C E8 9F 4F F6 FF 8B 45 FC 83 F8 02
76 10 83 E8 03 B9 00 E0 4B 00 66 89 41 06 EB 08
EB 0F 83 F8 00 76 0A 48 50 8B 4D 10 E8 E3 4F F6
FF 8B 4D 10 E8 70 4F F6 FF C9 C2 0C 00 90
|