Плагин messages.dll - igrik - 03.05.2019 15:31
(01.05.2019 00:46)XEPOMAHT Wrote: (30.04.2019 19:38)igrik Wrote: По messages.dll: есть исходник или хотя бы инструкция как им пользоваться?
Там просто прописывается в typemsgs.txt имя дефа, номер спрайта, текст под картинкой и подсказка по пкм. Затем можно вызывать сообщение с картинкой любыми средствами, например "!!IF:Q1/100/1/4/z100504;" (ERM) или "Message стр ebx*4+524 MoPSpec, Type_Msg_RMBINFO, Pic_MoP, Pic_Арена" (WERD)
Понял. Спасибо.
Плохо, что нужно писать в txt название дефа. Это меня не очень устраивает.
Я наверное для сборки запилю триггер IF:Y<тип_клика>/z<текст>/z<название_дефа>/<номер_кадра_дефа>;
RE: ERA PLUS - XEPOMAHT - 03.05.2019 16:04
(03.05.2019 15:31)igrik Wrote: Я наверное для сборки запилю триггер IF:Y<тип_клика>/z<текст>/z<название_дефа>/<номер_кадра_дефа>;
Было бы очень здорово, если бы вместо <номер_кадра_дефа> можно было б задать номера кадров начального и конечного для вывода анимации из def в диалоге, а не только одного спрайта. В MoP это работает, а в ЭРА так и не сделали.
RE: ERA PLUS - MOP - 03.05.2019 16:37
Неужели кто-то вспомнил о Messages.dll? А ведь эта библиотека всю дорогу шла вместе с Buttons.dll. И исходники их тоже рядышком лежали. И в инструкции по использованию эта длл упоминалась и расписывалась.
LIBRARY Messages;
{!INFO
MODULENAME = 'Messages'
VERSION = '1'
AUTHOR = 'Master Of Puppets'
DESCRIPTION = 'DLL для использования пользовательских картинок в сообщений Героев 3'
}
USES Win;
CONST
(* HookCode constants *)
C_HOOKTYPE_JUMP = FALSE;
C_HOOKTYPE_CALL = TRUE;
C_OPCODE_JUMP = $E9;
C_OPCODE_CALL = $E8;
C_UNIHOOK_SIZE = 5;
C_MOP_DLLNAME = 'Messages.dll';
TYPE
THookRec = RECORD Opcode: BYTE; Ofs: INTEGER;
END; // .record THookRec
VAR
hMessages: Win.THandle; // Дескриптор библиотеки
TxtName: STRING = 'TypeMsgs.txt'; //название используемого текстового ресурса
PointerOfTable: INTEGER; //используется для хранения указателя на загруженный текстовик
Temp: INTEGER; //универсальная временная переменная
PROCEDURE WriteAtCode(P: POINTER; Buf: POINTER; Count: INTEGER);
BEGIN
Win.VirtualProtect(P, Count, PAGE_READWRITE, @Temp);
Win.CopyMemory(P, Buf, Count);
Win.VirtualProtect(P, Count, Temp, NIL);
END; // .procedure WriteAtCode
PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN);
VAR
HookRec: THookRec;
BEGIN
IF UseCall THEN BEGIN HookRec.Opcode:=C_OPCODE_CALL;
END // .if
ELSE BEGIN HookRec.Opcode:=C_OPCODE_JUMP;
END; // .else
HookRec.Ofs:=INTEGER(NewAddr)-INTEGER(P)-C_UNIHOOK_SIZE;
WriteAtCode(P, @HookRec, 5);
END; // .procedure HookCode
//Функция загрузки текстовика
PROCEDURE MSGTABLE; ASSEMBLER;
ASM
MOV ECX, TxtName //название текстовика
MOV EAX, $55C2B0
CALL EAX
TEST EAX, EAX
JNZ @@TRUE
XOR AL, AL
RET
@@TRUE:
MOV ECX, [EAX+$20]
MOV [PointerOfTable], ECX
MOV AL, 1
END; // .PROCEDURE MSGTABLE
PROCEDURE TXTLoad; ASSEMBLER;
ASM
JE @@Error //случай ошибки загрузки предыдущего текстовика
CALL MSGTABLE //вызов функции загрузки текстовика
TEST AL, AL
JNZ @@Continuation //файл успешно загружен
@@Error: //ошибка загрузки
PUSH $4EE006 // прыжок на вывод сообщения об ошибке
RET
@@Continuation:
PUSH $4EDEF0 //возврат в код игры
END; // .PROCEDURE TXTLoad
PROCEDURE MainMessages; ASSEMBLER;
ASM
JNZ @@OK
PUSH $4F6388
RET
@@OK:
CMP EDI, 100
JE @@OK2
PUSH $4F558A
RET
@@OK2:
PUSH 1
MOV ECX, [PointerOfTable]
MOV ECX, [ECX+EAX*4+4]
MOV ECX, [ECX+4]
MOV ESI, [ECX+8] //текст под картинкой
OR ECX, $FFFFFFFF
XOR EAX,EAX
MOV EDI,ESI
LEA EDX,DWORD PTR DS:[EBX+$18]
REPNE SCASB
NOT ECX
DEC ECX
MOV [EBP+8],ECX
PUSH ECX
MOV ECX,EDX
MOV EAX, $404A40
CALL EAX
TEST AL,AL
JE @@trampam
MOV ECX, [EBP+8]
MOV EDI, [EBX+$1C]
LEA EAX, [EBX+$18]
MOV EDX,ECX
SHR ECX,2
REP MOVSD
MOV ECX,EDX
AND ECX,3
REP MOVSD
MOV ECX,EDX
PUSH ECX
MOV ECX,EAX
MOV EAX, $404A20
CALL EAX
@@trampam:
MOV EDI, [EBX+4]
MOV ECX, [PointerOfTable]
MOV ECX, [ECX+EDI*4+4]
MOV ECX, [ECX+4]
MOV EDI, [ECX] //деф
OR ECX, $FFFFFFFF
XOR EAX,EAX
LEA EDX,[EBX+8]
REPNE SCASB
NOT ECX
DEC ECX
PUSH 1
MOV [EBP+8],ECX
PUSH ECX
MOV ECX,EDX
MOV EAX, $404A40
CALL EAX
TEST AL,AL
JE @@LALA
MOV ESI, [EBX+4]
MOV ECX, [PointerOfTable]
MOV ECX, [ECX+ESI*4+4]
MOV ECX, [ECX+4]
MOV ESI, [ECX] //деф
MOV ECX, [EBP+8]
MOV EDI, [EBX+$C]
LEA EAX, [EBX+8]
MOV EDX,ECX
SHR ECX,2
REP MOVSD
MOV ECX,EDX
AND ECX,3
REP MOVSD
MOV ECX,EDX
PUSH ECX
MOV ECX,EAX
MOV EAX, $404A20
CALL EAX
@@LALA:
MOV ESI,[EBX+4]
MOV ECX, [PointerOfTable]
MOV ECX, [ECX+ESI*4+4]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+4] //Номер кадра в дефе
MOV EAX, $77D3D7
CALL EAX
MOV EDX,EAX
PUSH $4F6226
RET
END; // .PROCEDURE MainMessages
PROCEDURE Messages_hints; ASSEMBLER;
ASM
MOV EAX, [ecx+$38]
CMP EAX, 100
JE @@OK
CMP EAX, $24
PUSH $4F11E7
RET
@@OK:
MOV ECX, [ECX+$3C]
MOV EDX, [PointerOfTable]
MOV EDX, [EDX+ECX*4+4]
MOV EDX, [EDX+4]
MOV ECX, [EDX+12] //текст подсказки
PUSH 0
PUSH -1
PUSH $4F1206
END; // .PROCEDURE Messages_hints
BEGIN
hMessages:=Win.GetModuleHandle(C_MOP_DLLNAME);
Win.DisableThreadLibraryCalls(hMessages);
HookCode(POINTER($4EDEEA), @TXTLoad, C_HOOKTYPE_JUMP); //загрузка текстовика
HookCode(POINTER($4F5584), @MainMessages, C_HOOKTYPE_JUMP); //обработка типа
HookCode(POINTER($4F11E1), @Messages_hints, C_HOOKTYPE_JUMP); //обработка подсказки по ПКМ
END. Впрочем, кому нужна эта громоздкая хрень, которая, к тому же, не поддерживает сообщения с более чем тремя картинками (преодолено только в третьей версии MoP).
Проще названия дефов в памяти заменить на время показа сообщения.
Ну а анимация дефов в MoP работает только в DL-диалогах. Желающие могут попытаться разобраться в прекрасно упорядоченном и, не побоюсь этого слова, величественном исходнике бинарника DL.txt, где, помимо сего, представлена не менее превосходная и качественная реализация других прелестных вещей.
Плагин messages.dll - Bes - 19.06.2020 11:15
Berserker, задался сегодня вопросом, а почему ты не включил в инструментарий ERA эту библиотеку от Master'а ???
напомню, благодаря этой примочки можно делать стандартные IF:Q диалоги с ЛЮБОЙ картинкой из игрового def (любой кадр)
Тип картинки для активации в IF:Q должен быть 100. Подтип соответствует строке (нумерация с 0) в файле настроек typemsgs.txt (помещать в Data)
Формат тхт-шника таков
Code:
DefName Frame Text under picture Hint
pskilbon.def 3 {Имеющиеся {очки} ...
Эта строка по счёту 6-ая в файле
весьма удобная и простая штука, когда нужен диалог быстро и просто с нестандартной картинкой (эдакий лайт DL-диалог)
RE: Технич. тема - Sandris - 19.06.2020 11:45
(19.06.2020 11:15)Bes Wrote: весьма удобная и простая штука, когда нужен диалог быстро и просто с нестандартной картинкой (эдакий лайт DL-диалог)
О как удобно.
Я как раз хотел предложить в будущем подобные инфо-диалоги с изображением (к примеру, чтобы окошко с неделей конкретного монстра сопровождалось и картинкой этого монстра... и ряд других схожих окон)
RE: Технич. тема - XEPOMAHT - 19.06.2020 14:13
(19.06.2020 11:15)Bes Wrote: не включил в инструментарий ERA библиотеку messages.dll от Master'а ???
Её нельзя использовать несколькими модами. Там нумерация подтипа картинки статическая. Т.е. автор мода сам добавляет её при необходимости (например messages.dll есть в ERA+ месте с примером использования).
RE: Технич. тема - Berserker - 19.06.2020 15:31
Bes, МоР вклинился в код геройской функции. Добавил возможность, но не гибкую. Для Эры 3 проще было бы писать:
А если нужно ещё и таймер автозакрытия прикрутить? Или две картинки такие? Ведь эта функция используется везде.
В целом простой способ должен быть в будущем для всевозможных диалогов, но можно улучшить и базовый диалог. У кого-нибудь исходники библиотеки есть? На ASM/WERD/BrainFuck/Pascal/C?
RE: Технич. тема - XEPOMAHT - 19.06.2020 16:32
(19.06.2020 15:31)Berserker Wrote: У кого-нибудь исходники библиотеки есть?
Если там порт с MoP (что скорее всего так), то примерный исходник - в исходниках MoP. Если кратко - перехват в функции универсального диалога игры перед проверкой на тип/подтип картинки (проверка на тип картинки 100, если да - подсовывается имя и номер кадра из загруженного текстовика, если нет - возвращается на стандартную проверку).
НО! Для совместимости с ERA+ не стоит трогать сам кейс на типы картинок, т.к. для поддержки новых городов он перенесён и расширен.
Если всё-таки нужно для базовой версии ERA, то устанавливайте эровский перехват на тип картинки ДО перехвата messages.dll, с сохранением функционала этой dll, тогда всё должно быть ОК.
RE: Технич. тема - Berserker - 19.06.2020 17:13
XEPOMAHT, у меня исходники Тифона. И МоР 2.х тоже, если верно помню, были. Понял, спасибо.
А какие типы добавлены?
RE: Технич. тема - MOP - 19.06.2020 17:14
Messages.dll всю дорогу шла в одном архиве с Buttons.dll. Вторая стала известна и уже давно вошла в ЭРУ как неотъемлемая часть. Первую наглухо забыли и никогда о ней не говорили. Загадка.
Исходники в том же архиве.
RE: Технич. тема - Berserker - 19.06.2020 17:16
MOP, да из-за привязки к одному текстовику (чай, немодульности) и не прижилось за пределами больших модов-конверсий. А из памяти со временем стирается, что и с чем лежало рядом
RE: Технич. тема - MOP - 19.06.2020 17:23
Там недостаток еще в том, что не поддерживается количество картинок >3 (где уже не IF:Q, а IF:N работает). Исправлено лишь в MoP третьей версии, но он обходится без dll.
RE: Технич. тема - XEPOMAHT - 19.06.2020 17:41
(19.06.2020 17:13)Berserker Wrote: А какие типы добавлены?
Типы 37..46, ну и далее, если будут добавляться новые города.
RE: Технич. тема - Berserker - 19.06.2020 17:43
MOP, если можешь, поделись, пожалуйста, кодом. Вдруг, получится всех осчастливить с указанием первоисточника
RE: Технич. тема - MOP - 19.06.2020 18:26
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.
RE: Технич. тема - Berserker - 19.06.2020 18:44
MOP, спасибо большое!
|