Code:
; НАЗВАНИЕ: TypeMessages
; ВЕРСИЯ: 1.0
; АВТОР: Master Of Puppets
; ОПИСАНИЕ: Расширение функции показа сообщения (новые типы картинок)
; EXE: MOP
; StatFree = YES
; дополнительная ветка свитча в SUB_L004F5540 (тип картинки №37):
F558A 83FF26; cmp edi,00000026h
F5595 8A8FB8064400; mov cl,[edi+CASE_004406B8]
F559B FF248D64064400; jmp [CASE_PROCTABLE_00440664+ecx*4]
40664 EA554F00; dd CASE_004F639C_PROC0000
40668 92584F00; dd CASE_004F639C_PROC0001
4066C 38594F00; dd CASE_004F639C_PROC0002
40670 DB594F00; dd CASE_004F639C_PROC0003
40674 E7604F00; dd CASE_004F639C_PROC0004
40678 3A614F00; dd CASE_004F639C_PROC0005
4067C 8D614F00; dd CASE_004F639C_PROC0006
40680 EE5F4F00; dd CASE_004F639C_PROC0007
40684 41604F00; dd CASE_004F639C_PROC0008
40688 94604F00; dd CASE_004F639C_PROC0009
4068C FF5D4F00; dd CASE_004F639C_PROC000A
40690 0C5D4F00; dd CASE_004F639C_PROC000B
40694 B95B4F00; dd CASE_004F639C_PROC000C
40698 A2554F00; dd CASE_004F639C_PROC000D
4069C 745A4F00; dd CASE_004F639C_PROC000E
406A0 475F4F00; dd CASE_004F639C_PROC000F
406A4 23574F00; dd CASE_004F639C_PROC0010
406A8 DD614F00; dd CASE_004F639C_PROC0011
406AC BDAB4700; dd CASE_004F639C_PROC0012 - новая ветка (сообщения из MTypeMsg.txt)
406B0 17706300; dd CASE_004F639C_PROC0013 - новая ветка (произвольное сообщение)
406B4 90909090; - зарезервировано
406B8 00000000000000110102030405060708
406C8 090A11110B0C0D0D0D0D0D0D0D0D0D0E
406D8 0E0E0E0F10121390; 1 зарезервированное значение
; CASE_004F639C_PROC0012:
7ABBD 6A01; PUSH 1
7ABBF 8B0D5C354000; MOV ECX,DWORD PTR DS:[40355C]
7ABC5 8B4C8104; MOV ECX,DWORD PTR DS:[ECX+EAX*4+4]
7ABC9 8B4904; MOV ECX,DWORD PTR DS:[ECX+4]
7ABCC 8B7108; MOV ESI,DWORD PTR DS:[ECX+8] //текст под картинкой
7ABCF 83C9FF; OR ECX,FFFFFFFF
7ABD2 33C0; XOR EAX,EAX
7ABD4 8BFE; MOV EDI,ESI
7ABD6 8D5318; LEA EDX,DWORD PTR DS:[EBX+18]
7ABD9 F2AE; REPNE SCAS BYTE PTR ES:[EDI]
7ABDB F7D1; NOT ECX
7ABDD 49; DEC ECX
7ABDE 894D08; MOV DWORD PTR SS:[EBP+8],ECX
7ABE1 51; PUSH ECX
7ABE2 8BCA; MOV ECX,EDX
7ABE4 E8579EF8FF; CALL mop.00404A40
7ABE9 84C0; TEST AL,AL
7ABEB 741F; JE SHORT mop.0047AC0C
7ABED 8B4D08; MOV ECX,DWORD PTR SS:[EBP+8]
7ABF0 8B7B1C; MOV EDI,DWORD PTR DS:[EBX+1C]
7ABF3 8D4318; LEA EAX,DWORD PTR DS:[EBX+18]
7ABF6 8BD1; MOV EDX,ECX
7ABF8 C1E902; SHR ECX,2
7ABFB F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
7ABFD 8BCA; MOV ECX,EDX
7ABFF 83E103; AND ECX,3
7AC02 F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
7AC04 52; PUSH EDX
7AC05 8BC8; MOV ECX,EAX
7AC07 E8149EF8FF; CALL mop.00404A20
7AC0C 8B7B04; MOV EDI,DWORD PTR DS:[EBX+4]
7AC0F 8B0D5C354000; MOV ECX,DWORD PTR DS:[40355C]
7AC15 8B4CB904; MOV ECX,DWORD PTR DS:[ECX+EDI*4+4]
7AC19 8B4904; MOV ECX,DWORD PTR DS:[ECX+4]
7AC1C 8B39; MOV EDI,DWORD PTR DS:[ECX] //деф
7AC1E 83C9FF; OR ECX,FFFFFFFF
7AC21 33C0; XOR EAX,EAX
7AC23 8D5308; LEA EDX,DWORD PTR DS:[EBX+8]
7AC26 F2AE; REPNE SCAS BYTE PTR ES:[EDI]
7AC28 F7D1; NOT ECX
7AC2A 49; DEC ECX
7AC2B 6A01; PUSH 1
7AC2D 894D08; MOV DWORD PTR SS:[EBP+8],ECX
7AC30 51; PUSH ECX
7AC31 8BCA; MOV ECX,EDX
7AC33 E8089EF8FF; CALL mop.00404A40
7AC38 84C0; TEST AL,AL
7AC3A 7431; JE SHORT mop.0047AC6D
7AC3C 8B7304; MOV ESI,DWORD PTR DS:[EBX+4]
7AC3F 8B0D5C354000; MOV ECX,DWORD PTR DS:[40355C]
7AC45 8B4CB104; MOV ECX,DWORD PTR DS:[ECX+ESI*4+4]
7AC49 8B4904; MOV ECX,DWORD PTR DS:[ECX+4]
7AC4C 8B31; MOV ESI,DWORD PTR DS:[ECX] //деф
7AC4E 8B4D08; MOV ECX,DWORD PTR SS:[EBP+8]
7AC51 8B7B0C; MOV EDI,DWORD PTR DS:[EBX+C]
7AC54 8D4308; LEA EAX,DWORD PTR DS:[EBX+8]
7AC57 8BD1; MOV EDX,ECX
7AC59 C1E902; SHR ECX,2
7AC5C F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
7AC5E 8BCA; MOV ECX,EDX
7AC60 83E103; AND ECX,3
7AC63 F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
7AC65 52; PUSH EDX
7AC66 8BC8; MOV ECX,EAX
7AC68 E8B39DF8FF; CALL mop.00404A20
7AC6D 8B7304; MOV ESI,DWORD PTR DS:[EBX+4]
7AC70 8B0D5C354000; MOV ECX,DWORD PTR DS:[40355C]
7AC76 8B4CB104; MOV ECX,DWORD PTR DS:[ECX+ESI*4+4]
7AC7A 8B4904; MOV ECX,DWORD PTR DS:[ECX+4]
7AC7D FF7104; PUSH DWORD PTR DS:[ECX+4] //Номер кадра в дефе
7AC80 E8ACC20100; CALL mop.00496F31
7AC85 8BD0; MOV EDX,EAX
7AC87 E99AB50700; JMP mop.004F6226
; CASE_004F639C_PROC0013:
237017 6A01; PUSH 1
237019 8B359C268302; MOV ESI,DWORD PTR DS:[283269C]
23701F 83C9FF; OR ECX,FFFFFFFF
237022 33C0; XOR EAX,EAX
237024 8BFE; MOV EDI,ESI
237026 8D5318; LEA EDX,DWORD PTR DS:[EBX+18]
237029 F2AE; REPNE SCAS BYTE PTR ES:[EDI]
23702B F7D1; NOT ECX
23702D 49; DEC ECX
23702E 894D08; MOV DWORD PTR SS:[EBP+8],ECX
237031 51; PUSH ECX
237032 8BCA; MOV ECX,EDX
237034 E807DADCFF; CALL mop.00404A40
237039 84C0; TEST AL,AL
23703B 741F; JE SHORT mop.0063705C
23703D 8B4D08; MOV ECX,DWORD PTR SS:[EBP+8]
237040 8B7B1C; MOV EDI,DWORD PTR DS:[EBX+1C]
237043 8D4318; LEA EAX,DWORD PTR DS:[EBX+18]
237046 8BD1; MOV EDX,ECX
237048 C1E902; SHR ECX,2
23704B F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
23704D 8BCA; MOV ECX,EDX
23704F 83E103; AND ECX,3
237052 F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
237054 52; PUSH EDX
237055 8BC8; MOV ECX,EAX
237057 E8C4D9DCFF; CALL mop.00404A20
23705C 8B3D94268302; MOV EDI,DWORD PTR DS:[2832694]
237062 83C9FF; OR ECX,FFFFFFFF
237065 33C0; XOR EAX,EAX
237067 8D5308; LEA EDX,DWORD PTR DS:[EBX+8]
23706A F2AE; REPNE SCAS BYTE PTR ES:[EDI]
23706C F7D1; NOT ECX
23706E 49; DEC ECX
23706F 6A01; PUSH 1
237071 894D08; MOV DWORD PTR SS:[EBP+8],ECX
237074 51; PUSH ECX
237075 8BCA; MOV ECX,EDX
237077 E8C4D9DCFF; CALL mop.00404A40
23707C 84C0; TEST AL,AL
23707E 7425; JE SHORT mop.006370A5
237080 8B3594268302; MOV ESI,DWORD PTR DS:[2832694]
237086 8B4D08; MOV ECX,DWORD PTR SS:[EBP+8]
237089 8B7B0C; MOV EDI,DWORD PTR DS:[EBX+C]
23708C 8D4308; LEA EAX,DWORD PTR DS:[EBX+8]
23708F 8BD1; MOV EDX,ECX
237091 C1E902; SHR ECX,2
237094 F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
237096 8BCA; MOV ECX,EDX
237098 83E103; AND ECX,3
23709B F3A5; REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
23709D 52; PUSH EDX
23709E 8BC8; MOV ECX,EAX
2370A0 E87BD9DCFF; CALL mop.00404A20
2370A5 8B1598268302; MOV EDX,DWORD PTR DS:[2832698]
2370AB E976F1EBFF; JMP mop.004F6226
; дополнительная ветка свитча в L004F11B0 (текст сообщения при нажатии ПКМ на картинке):
; сокращение кода:
23FE64 B5114F00; dd L004F11B5
F11B5 55; PUSH EBP
F11B6 8BEC; MOV EBP,ESP
F11B8 6AFF; PUSH -1
F11BA 68706D7B00; PUSH mop.007B6D70
F11BF 64A100000000; MOV EAX,DWORD PTR FS:[0]
F11C5 50; PUSH EAX
F11C6 64892500000000; MOV DWORD PTR FS:[0],ESP
F11CD 83EC28; SUB ESP,28
F11D0 8A4508; MOV AL,BYTE PTR SS:[EBP+8]
F11D3 84C0; TEST AL,AL
F11D5 7405; JE SHORT mop.004F11DC
F11D7 8A450C; MOV AL,BYTE PTR SS:[EBP+C]
F11DA 84C0; TEST AL,AL
F11DC 0F84F0030000; JE mop.004F15D2
F11E2 8B4138; MOV EAX,DWORD PTR DS:[ECX+38]
F11E5 83F826; CMP EAX,26
F11E8 0F87D2030000; JA mop.004F15C0
F11EE 0FB69028164F00; MOVZX EDX,BYTE PTR DS:[EAX+4F1628]
F161C F86D4900; dd CASE_004F15E4_PROC000E - новая ветка (сообщения из MTypeMsg.txt)
F1620 E55A7100; dd CASE_004F15E4_PROC000E - новая ветка (произвольное сообщение)
F1624 90909090; dd CASE_004F15E4_PROC000E - зарезервировано
; перенесённая таблица
F1628 000000000000000D01020D0304050607
F1638 08090D0D0A0D0D0D0D0D0D0D0D0D0D0B
F1648 0B0B0B0C000E0F90;
; Смена местами команд, чтобы сюда прыгать:
F11FC 8B0D94536A00; MOV ECX,DWORD PTR DS:[6A5394]
F1202 6A00; PUSH 0 - сюда
F1204 6AFF; PUSH -1
; CASE_004F15E4_PROC000E
96DF8 8B493C; MOV ECX,DWORD PTR DS:[ECX+3C]
96DFB 8B155C354000; MOV EDX,DWORD PTR DS:[40355C]
96E01 8B548A04; MOV EDX,DWORD PTR DS:[EDX+ECX*4+4]
96E05 8B5204; MOV EDX,DWORD PTR DS:[EDX+4]
96E08 8B4A0C; MOV ECX,DWORD PTR DS:[EDX+C] - текст сообщения при ПКМ на картинке
96E0B E9F2A30500; JMP mop.004F1202
; CASE_004F15E4_PROC000F
2B0AE5 8B0DA0268302; MOV ECX,DWORD PTR DS:[28326A0]
2B0AEB E912B7DDFF; JMP mop.004F1202
Не знаю, есть ли тут исправление для IF:N или оно в другом куске кода. Исходников RTL для сравнения у меня нет, а в чём была проблема - вообще не помню. Помню лишь, что ларчик просто открывался - исправил свою же ошибку или даже опечатку, допущенную во время разработки Seek & Destroy.
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
|