http://slil.ru/29538591[+] изменены координаты для экрана героя, экрана встречи и жертвенника. Теперь шестой слот находится под правой рукой героя (как на скринах Хоты). Не поправлены пока в Торговцах Артефактами. Графика не изменена!
[+] артефакты из шестого слота можно продавать у Торговцев Артефактами. БМ и книгу - нет.
Кто-нибудь знает, как зовется спрайт желтой рамки в диалоге Торговцев?
Исходники:
Код
#include "main.h"
#define OPCODE_JUMP 0xE9
#define OPCODE_CALL 0xE8
#define OPCODE_NOP 0x90
#define HOOKTYPE_JUMP 0
#define HOOKTYPE_CALL 1
#define HOOK_SIZE 5
__fastcall int (*sub_4EA800)(int _this, int edx, short a2, short a3, short a4, short a5, short a6, const char *Source, int a8, int a9, char a10, short a11, short a12) =
(__fastcall int (*)(int , int , short , short , short , short , short , const char*, int, int, char, short, short))(0x4EA800);
inline void WriteHook( void *pOriginal, void *pNew, char type )
{
*(byte*)pOriginal = (type==HOOKTYPE_JUMP)?OPCODE_JUMP:OPCODE_CALL;
*(void**)( (byte*)pOriginal + 1 ) = (void*)( (byte*)pNew - (byte*)pOriginal - HOOK_SIZE );
}
__fastcall int HeroScrCoordFix(int _this, int edx, short a2, short a3, short a4, short a5, short a6, const char *Source, int a8, int a9, char a10, __int16 a11, __int16 a12)
{
return(sub_4EA800( _this, edx, 366, 135, a4, a5, a6, Source, a8, a9, a10, a11, a12));
}
void PatchGame()
{
char _hack[10]={0xC6, 0x05, 0x0E, 0x39, 0x69, 0x00, 0x55, 0x90, 0x90, 0x90};
*(char*)(0x5AFA8F+2) = 0xFF; //spell book can be exchanged
*(char*)(0x5AFA98+2) = 0xFF; //catapult can be exchanged
//warfare and spellbook can be putted into backpack
*(char*)0x4E3222 = 0xFF;
*(char*)0x4E322B = 0xFF;
*(char*)0x4E3234 = 0xFF;
*(char*)0x4E3219 = 0xFF;
*(char*)(0x4DE112+2) = 0xFF; //unlocking catapult slot
//*(char*)(0x69390E) = 5; //allowing to misc arts be placed in catapult slot
//memset((void*)0x44C9AA,0x90,5);
//*(int*)0x44C9AB = 0x693910;
//memset((void*)0x4D8BDD,0x90,10); //no more catapult
memcpy ((void*)0x4D8BDD, (void*)_hack, 10);
//coords
//change screen patch
*(int*)0x5AD153 = 96;
*(int*)0x5ADCA7 = 96;
*(int*)0x5AD14E = 293;
*(int*)0x5ADCA2 = 293;
*(int*)0x5ACB6B = 528;
*(int*)0x5AD6F9 = 528;
*(int*)0x5ACB66 = 293;
*(int*)0x5AD6F4 = 293;
//altar patch
*(int*)0x6412B8 = 65;
*(int*)0x6412BC = 131;
//merchant
// *(char*)0x5EEAB5 = 1; //unlocking slots
// *(char*)0x5EEAB6 = 1;
// *(char*)0x5EEAB7 = 1;
*(char*)0x5EEAB8 = 1; //unlocking catapult slot
// *(char*)0x5EEAB9 = 1;
//mainheroscreen
WriteHook((void*)0x4E049C, (void*)HeroScrCoordFix,HOOKTYPE_CALL);
WriteHook((void*)0x4E0A9A, (void*)HeroScrCoordFix,HOOKTYPE_CALL);
}
extern "C" __stdcall BOOL DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
PatchGame();
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}
Добавлено ([mergetime]1281096968[/mergetime]):
Кстати, ТА не умеют работать и c SoD'овским пятым слотом.