26.11.2017, 15:25
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
03.12.2017, 17:25
Ну как там? Есть ли ещё баги?
По поводу Dwellings.dll: я сам антивирусами не пользуюсь, протестировать не могу. Добавить мусор и скомпилировать её труда не составляет - fasm в составе MoP, файл исходника всего один - Dwellings.asm.
По поводу Dwellings.dll: я сам антивирусами не пользуюсь, протестировать не могу. Добавить мусор и скомпилировать её труда не составляет - fasm в составе MoP, файл исходника всего один - Dwellings.asm.
03.12.2017, 18:06
Следующую партию, как удастся поиграть, попробую с нуля с Тифоном. Временно не играл 
Да, исходники видел, спасибо.

Да, исходники видел, спасибо.
04.12.2017, 16:57
Судя по указанным структурам, реально собирать эти mop-файлы на лету из таких же mop-файлов + json-настроек с указанием, какие именно строения/города/монстры в моде заменены. Удручает пока сложность замены отдельных кадров в def-ах на лету, пока этот вопрос не решил. Несколько модов, меняющих монстров — сплошная беда для файлов портретов и прочих сборных.
04.12.2017, 18:51
Дьякон вроде это делал в своей MONSTRDLL.dll. По крайней мере, в исходниках были указания на это. Мне же не удалось ни разобраться в его коде, ни заставить программу работать, хотя она и создана под ЭРУ.
Spoiler (Click to View)
// вставляем код вызова процедуры подгрузки портретов
void* p_ProcForDef = (void*)0x55D102;
TLoadDef.jmp = 0xE9;
offset = (int)&InsertCodeDef - 0x55D102 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForDef, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47BE90
void* p_ProcForHook47BE90 = (void*)0x47BE90;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47BE90 - 0x47BE90 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47BE90, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47C300
void* p_ProcForHook47C300 = (void*)0x47C300;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47C300 - 0x47C300 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47C300, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47C9C0
void* p_ProcForHook47C9C0 = (void*)0x47C9C0;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47C9C0 - 0x47C9C0 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47C9C0, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47CE10
void* p_ProcForHook47CE10 = (void*)0x47CE10;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47CE10 - 0x47CE10 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47CE10, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47D250
void* p_ProcForHook47D250 = (void*)0x47D250;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47D250 - 0x47D250 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47D250, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47D660
void* p_ProcForHook47D660 = (void*)0x47D660;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47D660 - 0x47D660 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47D660, &TLoadDef, sizeof(LOADDEF));
return TRUE;
}
void* p_ProcForDef = (void*)0x55D102;
TLoadDef.jmp = 0xE9;
offset = (int)&InsertCodeDef - 0x55D102 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForDef, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47BE90
void* p_ProcForHook47BE90 = (void*)0x47BE90;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47BE90 - 0x47BE90 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47BE90, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47C300
void* p_ProcForHook47C300 = (void*)0x47C300;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47C300 - 0x47C300 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47C300, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47C9C0
void* p_ProcForHook47C9C0 = (void*)0x47C9C0;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47C9C0 - 0x47C9C0 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47C9C0, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47CE10
void* p_ProcForHook47CE10 = (void*)0x47CE10;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47CE10 - 0x47CE10 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47CE10, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47D250
void* p_ProcForHook47D250 = (void*)0x47D250;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47D250 - 0x47D250 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47D250, &TLoadDef, sizeof(LOADDEF));
// вставляем код перехвата Hook47D660
void* p_ProcForHook47D660 = (void*)0x47D660;
TLoadDef.jmp = 0xE9;
offset = (int)&Hook47D660 - 0x47D660 - 5;
memcpy(&TLoadDef.Adr[0], &offset, sizeof(int));
memcpy(p_ProcForHook47D660, &TLoadDef, sizeof(LOADDEF));
return TRUE;
}
04.12.2017, 19:03
MOP, а полного исходника нет? )
04.12.2017, 19:09
Хм, думал, у тебя есть.
https://drive.google.com/open?id=1HTc15E...05yuLLbV0R
https://drive.google.com/open?id=1HTc15E...05yuLLbV0R
04.12.2017, 23:06
Не было, спасибо. Точнее, за годы теряются загрузки.
05.12.2017, 12:41
Quote: Удручает пока сложность замены отдельных кадров в def-ах на лету, пока этот вопрос не решил.Так можно поставить хук на отрисовку кадров дефа, и рисовать вместо него pcx. (я пробовал, работает)
Единственно, с курсором артефактов какие-то тонкости будут.
05.12.2017, 17:19
Там разве не целый набор методов по отрисовке кадров дефов?
05.12.2017, 19:53
Набор, но все они в итоге сводятся к максимум DefCadre_Draw[...] .
При этом разбирать-то их даже особо не надо, сплайс, замена на отрисовку pcx8.
И потратить чуть-чуть памяти на предварительную загрузку pcx-ов.
Единственная проблема - с DefCadre мы можем получить только имя кадра (somename.pcx), для адекватного по быстродействию поиска имени дефа и номеров группы и кадра надо чуть-чуть подумать.
При этом разбирать-то их даже особо не надо, сплайс, замена на отрисовку pcx8.
И потратить чуть-чуть памяти на предварительную загрузку pcx-ов.
Единственная проблема - с DefCadre мы можем получить только имя кадра (somename.pcx), для адекватного по быстродействию поиска имени дефа и номеров группы и кадра надо чуть-чуть подумать.
05.12.2017, 20:39
При этом, как помнится, если в lod-е уже был файл с таким же именем, как кадр в def-е, то была беда?
07.12.2017, 21:55
МОР, гугл официально забанил ссылки как вирусные. Можешь пошаманить чуток, чтобы к dll не придерались?
07.12.2017, 22:09
Добавил в Dwellings.dll секцию ресурсов. Не помогло. Я не знаю, куда копать, чтобы понравиться Гуглу.
08.12.2017, 03:41
Это скорее не ему, а пачке гениальных антивирусов )))