Раз вы выдаете игроку очки, соответствующие выбранной им сложности, а не 200%, значит, вы считаете, что он играет на выбранном уровне сложности.
Да вы правы конечно, я не спорю, как будет на это время, постараюсь исправить.
Делаю новые чит-коды. После Monty Python (RoE), Star Wars (AB), The Matrix (SoD) и Lord of the Rings (WoG) в моем моде будет... Back to the Future!
Решил немного поменять принцип, теперь сами коды интуитивны в написании (move, spell, puzzle, level, die), а отсылка к фильму будет в сообщении, отображающегося вместо "Мошенник!!!"
Потребуется мой GENRLTXT.txt -
https://drive.google.com/file/d/1DhjSCo ... sp=sharingМетод отображения сообщений сделан крайне криво, КАЖДОЕ изменение GENRLTXT.txt заставит менять c_cheats_offset (благо, только его)
Если не брать мой GENRLTXT.txt (например, если у вас игра на английском), нужно проделать следующее:
1. С помощью txtedit добавить в GENRLTXT.txt новые строки и вписать в них сообщения, которые будут показываться при вводе чит-кода
2. С помощью notepad++ или подобной программы расчитать расстояние между началом строки с "Мошенник!!!" и началом строки с новым сообщением чит-кода
3. Полученное число подставить в c_cheats_offset и оффсеты к нему из c->esi из кода ниже
- Код: Выделить всё
#include homm3.h
int c_code_id;
int c_cheats_offset = 20759;
int __stdcall c_code_message(LoHook* h, HookContext* c)
{
switch (c_code_id)
{
case 1: c->esi += c_cheats_offset; break;
case 2: c->esi += c_cheats_offset + 48; break;
case 3: c->esi += c_cheats_offset + 129; break;
case 4: c->esi += c_cheats_offset + 207; break;
case 5: c->esi += c_cheats_offset + 261; break;
case 6: c->esi += c_cheats_offset + 329; break;
case 7: c->esi += c_cheats_offset + 431; break;
case 8: c->esi += c_cheats_offset + 512; break;
case 9: c->esi += c_cheats_offset + 553; break;
case 10: c->esi += c_cheats_offset + 614; break;
case 11: c->esi += c_cheats_offset + 720; break;
case 12: c->esi += c_cheats_offset + 759; break;
case 13: c->esi += c_cheats_offset + 819; break;
default: c->esi += 0; break;
}
return EXEC_DEFAULT;
}
int __stdcall c_code_move(LoHook* h, HookContext* c)
{
c_code_id = 1;
return EXEC_DEFAULT;
}
int __stdcall c_code_hide(LoHook* h, HookContext* c)
{
c_code_id = 2;
return EXEC_DEFAULT;
}
int __stdcall c_code_show(LoHook* h, HookContext* c)
{
c_code_id = 3;
return EXEC_DEFAULT;
}
int __stdcall c_code_res(LoHook* h, HookContext* c)
{
c_code_id = 4;
return EXEC_DEFAULT;
}
int __stdcall c_code_build(LoHook* h, HookContext* c)
{
c_code_id = 5;
return EXEC_DEFAULT;
}
int __stdcall c_code_spell(LoHook* h, HookContext* c)
{
c_code_id = 6;
return EXEC_DEFAULT;
}
int __stdcall c_code_mech(LoHook* h, HookContext* c)
{
c_code_id = 7;
return EXEC_DEFAULT;
}
int __stdcall c_code_level(LoHook* h, HookContext* c)
{
c_code_id = 8;
return EXEC_DEFAULT;
}
int __stdcall c_code_morale(LoHook* h, HookContext* c)
{
c_code_id = 9;
return EXEC_DEFAULT;
}
int __stdcall c_code_luck(LoHook* h, HookContext* c)
{
c_code_id = 10;
return EXEC_DEFAULT;
}
int __stdcall c_code_puzzle(LoHook* h, HookContext* c)
{
c_code_id = 11;
return EXEC_DEFAULT;
}
int __stdcall c_code_die(LoHook* h, HookContext* c)
{
c_code_id = 12;
return EXEC_DEFAULT;
}
int __stdcall c_code_help(LoHook* h, HookContext* c)
{
c_code_id = 13;
return EXEC_DEFAULT;
}
// bool apientry dllmain
_PI->WriteLoHook(0x402839, c_code_message);
_PI->WriteHexPatch(0x63A4C8, "7A 62 69 72 00 00 00 00 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x402664, c_code_move);
_PI->WriteHexPatch(0x63A508, "75 76 71 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x40273B, c_code_hide);
_PI->WriteHexPatch(0x63A4F4, "66 75 62 6A 00 00 00 00 00 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x4026DD, c_code_show);
_PI->WriteHexPatch(0x63A51C, "65 72 66 00 00 00 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x4027B8, c_code_res);
_PI->WriteHexPatch(0x63A558, "6F 68 76 79 71 00 00");
_PI->WriteLoHook(0x402933, c_code_build);
_PI->WriteHexPatch(0x63A544, "66 63 72 79 79 00 00 00 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x4028CA, c_code_spell);
_PI->WriteHexPatch(0x63A498, "7A 72 70 75 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x40254A, c_code_mech);
_PI->WriteHexPatch(0x63A4A8, "79 72 69 72 79 00");
_PI->WriteLoHook(0x4025E5, c_code_level);
_PI->WriteHexPatch(0x63A4DC, "7A 62 65 6E 79 72 00 00 00 00 00");
_PI->WriteLoHook(0x402685, c_code_morale);
_PI->WriteHexPatch(0x63A4B0, "79 68 70 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00");
_PI->WriteLoHook(0x40261B, c_code_luck);
_PI->WriteHexPatch(0x63A4E8, "63 68 6D 6D 79 72 00 00 00");
_PI->WriteLoHook(0x4026AC, c_code_puzzle);
_PI->WriteHexPatch(0x63A48C, "71 76 72 00 00 00 00 00 00");
_PI->WriteLoHook(0x402501, c_code_die);
_PI->WriteByte(0x402514, 54); // 128+ is considered negative, so no phoenixes and azure dragons
_PI->WriteByte(0x402512, 100); // same here
_PI->WriteHexPatch(0x63A480, "75 72 79 63 00 00 00 00 00 00");
_PI->WriteLoHook(0x4024BC, c_code_help);
_PI->WriteByte(0x4024CF, 12); // same here
_PI->WriteByte(0x4024CD, 100); // same here
// disable nwcphisherprice
_PI->WriteJmp(0x40295D, 0x402A1C);
Подскажите - как добавить в чит-код "move" каст Полёта на героя, помимо выдачи ему бесконечного передвижения?