Разобрался с "Заброшенным кораблём". Как и в Героях 1, здесь присутствует баг: человеку всегда предлагается сразиться с максимальной охраной за награду в 5000 золотых монет. На самом деле, этот объект интереснее
Всего существует 4 варианта:
1) 25 скелетов и 500 монет;
2) 50 скелетов и 1000 монет;
3) 100 скелетов и 2000 монет;
4) 200 скелетов и 5000 монет.
Скорее всего, для компа, как и в Героях 1, этот объект работает, как и задумано. См. процедуру
sub_44368D, чтобы убедиться во всём самостоятельно.
Теперь изменим охрану. Перейдите по адресу 00443861 в IDA и Вы увидите там инструкцию
push 0C8h, за которой следует инструкция
push 2Fh. Установите курсор на первое число и нажмите клавишу "H". То же самое проделайте со вторым числом. Должно получиться следующее:
- Код: Выделить всё
push 200
push 47
Как Вы успели догадаться, 200 - это количество скелетов (разделение на стеки происходит автоматически и зависит от координат клетки, на которой расположен объект), а 47 - это ID скелетов (см. мой предыдущий пост, там монстры расположены в порядке возрастания ID, начиная с 0 у Крестьян). Осталось только заменить 200 и 47 на другие значения, и Вы поменяете охрану. Вот так всё просто. Машинный код первой инструкции: 68 С8 00 00 00, машинный код второй - 6A 2F.
Кстати, патчить игру можно прямо из IDA, но для этого необходимо сначала немного изменить конфигурационный файл, чтобы отобразились скрытые пункты меню. Для этого откройте файл idagui.cfg в папке cfg и пропишите YES вместо NO так:
- Код: Выделить всё
DISPLAY_PATCH_SUBMENU = YES
Теперь Вам будет доступен пункт меню Edit -> Patch program. Затем скачайте скрипты за авторством Atli Gudmundsson
здесь (см. PE Scripts) и распакуйте их в папку idc. Откройте базу данных IDA и запустите скрипт pe_sections. Для этого выберите пункт меню File -> IDC File... и выполните (откройте) файл pe_sections.idc, который создаст недостающие секции, в т.ч. секцию-заголовок HEADER. Далее, чтобы пропатчить игру, сперва закройте её, если она была окрыта (соответственно, перед этим не забудьте выбрать пункт меню Debugger -> Detach from process, если Вы приаттачились к игре). Затем перейдите по адресу 00443861, выберите пункт меню Edit -> Patch program -> Change byte... и замените последовательность байтов 68 С8 00 00 00 6A 2F на нужную Вам. Например, пусть "Заброшенный корабль" будут охранять Титаны в количестве 5 шт.: 68 05 00 00 00 6A 2E, где 2Eh (46) - это ID Титанов. Результат Вы увидите сразу же:
- Код: Выделить всё
push 5
push 2Eh
Остался последний штрих: внесённые изменения нужно сохранить. Для этого запустите pe_write.idc, который пропишет все изменения в исполняемый файл игры. Сразу предупреждаю, что размер экзешника в этом случае сократится на 73 байта (именно столько занимает мусор в конце файла). Если же описанный вариант показался Вам сложным, делайте по старинке: с помощью любого шестнадцатеричного редактора. Сам я патчу в hex-эдиторе, ибо проще
Здравстуйте! Я попробую делать как вы мне сказали. Но у меня не получается
Сперва установил IDA Free. Скачал тут
Затем я попробовал сделать переход по адресу 00443861 как вы сказали. IDA перешла, но там почему то совсем другое.
Нет никаких никаких push 0C8h и push 2Fh а что-то совсем другое.