Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Редактирование ресурсов и кода игры

Не запускается игра? Проблемы со звуком? Где, в конце концов, взять игру, скачать патчи, приложения и карты? Как установить все это? Все проблемы обсуждаем в этом разделе
offlinelimiltless123  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 09 апр 2014, 15:28
Пол: Не указан
Поблагодарили: 15 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение limiltless123 » 12 апр 2014, 16:59

Ну я качнул WinHex 17.5 http://www.winhex.com/winhex/index-m.html с родного сайта
А вот про SR-2 в ней ничего не знаю, но наверное это не важно


Кстактит Хирос у меня такой
Вложения
123.jpg
123.jpg (27.67 КБ) Просмотров: 886
Вернуться к началу

offlinelimiltless123  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 09 апр 2014, 15:28
Пол: Не указан
Поблагодарили: 15 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение limiltless123 » 12 апр 2014, 17:26

Ой, я имел ввиду что золотая серия .. на скриншоте не указано
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 12 апр 2014, 17:59

Часть первая

1. Запускаем HMM2PL.exe и готовим сейв, в котором у одного из наших героев в магической книге будет присутствовать заклинание "Жажда крови". Далее нападаем, например, на отряд нейтралов (лучше на медленных, чтобы герой ходил первым: это немного облегчит нам жизнь).

2. Запускаем WinHex и получаем дамп оперативной памяти: Tools -> Open RAM... В окне Edit Main Memory ищем процесс Hmm2pl, жмём "плюсик" и выбираем Primary Memory.

3. Ищем "сигнатуру" отряда, на который Вы будете вешать "Жажду крови". Для этого сначала было бы неплохо записать куда-нибудь "сигнатуры" всех монстров. Выбираем Search -> Find Text... и вводим "сигнатуру" крестьянина: psnt. Справа от дампа вы увидите его текстовое представление. Там будут последовательно перечислены "сигнатуры" всех монстров в игре: psnt, arch, arch, pike, pike, swdm, swdm и т.д. Если у Вас этого нет, нажмите F3, чтобы продолжить поиск.

4. Теперь, когда Вы знаете "сигнатуры" Ваших отрядов, найдите отряд, на который Вы хотите повесить заклинание, по "сигнатуре" (желательно, чтобы в Вашей армии было несколько отрядов). Пусть, например, у меня в армии есть Кентавры и Горгульи и я собираюсь направить заклинание "Жажда крови" на Горгулий. Я ищу "сигнатуру" garg до тех пор, пока она не встретится вместе с "сигнатурами" других отрядов. "Сигнатуры" отрядов будут идти в том порядке, в котором расположены Ваши отряды на поле боя (сверху вниз).

На картинке показана найденная "сигнатура" Горгулий. В моём отряде сверху расположены только Кентавры, поэтому я скроллю чуть вверх, чтобы убедиться, что нашёл именно то место в дампе, которое мне нужно.

Ага, Кентавры тоже на месте, значит, всё в порядке. Если у Вас более двух отрядов, убедитесь, что все остальные "сигнатуры" на месте.

5. Теперь нужно найти значение атаки отряда. У Кентавров атака равна 3, защита - 1. У Горгулий атака - 4, защита - 7. Если теперь Вы отсчитаете 5 байтов от начала "сигнатуры" (первой её буквы) вверх по дампу, т.е. в сторону уменьшения адресов, то как раз попадёте на значение атаки отряда, следом будет идти защита, а потом - минимальный и максимальный урон. Запишите найденный адрес. Например, я нашёл значение атаки Горгулий в строке "022A2730" и столбце "F", значит, адрес, по которому хранится это значение будет равен 022A2730 + F = 022A273F (его то и нужно запомнить).

6. Итак, у нас запущена игра и открыт WinHex. Запускаем IDA. Открываем уже созданную базу данных или, если Вы её потеряли/удалили, выполняем анализ исполняемого файла повторно. После этого подключаемся к процессу с игрой: Debugger -> Attach to process... и в списке выполняющихся процессов находим нужный нам. Игра будет приостановлена, а на экране Вы увидите несколько окошек со значением регистров процессора, дамп стека и пр. информацию. Нам же нужно открыть окно с псевдокодом загруженного в оперативную память образа игры: View -> Open subviews... -> Disassembly. Растяните появившееся окно на своё усмотрение. Для того, чтобы найти нужный нам адрес (у меня это 022A273F, у Вас будет другой), нажмите G и в окошко Jump to address введите 022A273F. Вы должны будете увидеть примерно следующее:

Как Вы уже догадались, перед Вами параметры нашего отряда Горгулий.

7. Установите курсор на строчку с атакой и нажмите F2, чтобы установить брейкпоинт. В появившемся окошке Breakpoint settings выберите режим Write (Modes: Write) и проконтролируйте, чтобы брейкпоинт был аппаратным: должен стоять флажок напротив пункта Hardware breakpoint. Нажмите OK, и строчка с атакой подсветится красным цветом.

8. Продолжите выполнение игры (F9) и направьте на горгулий заклинание "Жажда крови". Игра снова прервётся, а IDA выдаст сообщение о том, что "сработал" установленный брейкпоинт: "Hardware data breakpoint at 022A273F has been triggered". Нажмите OK и перейдёте к "окрестности" того самого места, которое мы ищем: в окне IDA View-EIP вы увидите инструкцию, при выполнении которой сработал брейкпоинт (см. инструкцию перед строчкой, выделенной синим цветом):

В данном случае сработал брейкпоинт при чтении из памяти значения атаки рассматриваемого отряда Горгулий (инструкция mov cl, [eax+0C6h]). Синим цветом выделена следующая за ней инструкция, которая как раз нам и нужна: add cl, 3.

 Примечание
Здесь я установил брейкпоинт на чтение/запись (Read/Write) и заскринил останов именно по чтению :) У Вас же останов произойдёт при записи изменённого (увеличенного на 3) значения атаки обратно в оперативную память, т.е. при выполнении инструкции mov [edx+0C6h], cl (синим цветом будет выделена следующая за ней строчка: jmp short loc_41FC2D).


Поздравляю! 80% работы выполнено. Обязательно запишите адрес этой инструкции и не забудьте убрать брейкпоинт: Debugger -> Breakpoints -> Breakpoint list: в окне Breakpoint выделите нужный брейкпоинт (он пока там один) и нажмите клавишу Delete.

* * *

После того, как Вы повторите описанные шаги, я продолжу. Сразу скажу, что Вы найдёте в точности такой же адрес, какой нашёл я :) Однако, если Вы решите изменить инструкцию в другой версии игры, Вам понадобится пройти описанный путь с самого начала.

P.S. Изменил пост, чтобы текст соответствовал скриншотам :)
Последний раз редактировалось AlexSpl 23 окт 2022, 01:22, всего редактировалось 7 раз(а).
Вернуться к началу

offlinelimiltless123  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 09 апр 2014, 15:28
Пол: Не указан
Поблагодарили: 15 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение limiltless123 » 12 апр 2014, 19:22

Так, то что у меня уже получилось:
я сделал сейв героя с кентаврами и гаргульями и жаждой крови в наличии
Этим героем я напал на нейтралов и запустил winHex

Далее я выполнил пункт второй (Запускаем WinHex и получаем дамп оперативной памяти: Tools -> Open RAM... В окне Edit Main Memory ищем процесс Hmm2pl, жмём "плюсик" и выбираем Primary Memory.)

Далее в этом winHex, который я первый раз в глаза вижу, используя поиск - я натыкался на названия войск в целом.
и на нашел своих гаргулей - о чём я понял лишь потому что картинка ровно такая как у вас на экране.

Далее правильно ли я нашел цифру 7 - атаку гаргулей ?
(подчеркнуто синим)
Вложения
123.jpg
123.jpg (207.29 КБ) Просмотров: 876
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 12 апр 2014, 19:28

Нет. Поставьте курсор на первую букву сигнатуры garg, т.е. на букву g, и нажмите клавишу "стрелка влево" пять раз. Под курсором у Вас окажется число 04 (атака), за ним будет следовать 07 (защита), 02 (минимальный урон) и 03 (максимальный урон). Посмотрите, в какой строке расположен курсор в дампе, сложите значение строки со значением столбца и получите адрес, по которому хранится атака Ваших Горгулий. Также убедитесь, что над Горгульями расположены Кентавры, проскроллив дамп чуть вверх.
Последний раз редактировалось AlexSpl 12 апр 2014, 19:31, всего редактировалось 1 раз.
Вернуться к началу

offlinelimiltless123  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 09 апр 2014, 15:28
Пол: Не указан
Поблагодарили: 15 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение limiltless123 » 12 апр 2014, 19:30

И вообще сигнатура войска ( то есть его описание ) - это как на ваших- картинках квадрат 8 на 11, который начинается с 12 букв я ??? )
я правильно понимаю
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 12 апр 2014, 19:33

Сигнатура монстра - это последовательность из четырёх букв. Для Горгулий - это "garg", для Кентавров - "cntr", для крестьян - "psnt" и т.д.
Вернуться к началу

offlinelimiltless123  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 09 апр 2014, 15:28
Пол: Не указан
Поблагодарили: 15 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение limiltless123 » 12 апр 2014, 19:41

AlexSpl писал(а):

Нет. Поставьте курсор на первую букву сигнатуры garg, т.е. на букву g, и нажмите клавишу "стрелка влево" пять раз. Под курсором у Вас окажется число 04 (атака), за ним будет следовать 07 (защита),


У меня после 04, 06 идет
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 12 апр 2014, 19:46

Цитата:
У меня после 04, 06 идет

Как же? На Вашей картинке после 04 идёт 07. Смотрите на значение на пять символов левее слова "garg". Я даже подскажу адрес: 021D2320 + 7 = 021D2327. Его-то и следует использовать дальше. Только не закрывайте игру, иначе адрес изменится.
Вернуться к началу

offlinelimiltless123  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 09 апр 2014, 15:28
Пол: Не указан
Поблагодарили: 15 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение limiltless123 » 12 апр 2014, 19:52

Ах) дальше надо уже вправо нажимать стрелочку ))) тогда да - 7
И да, адрес: 021D2320 + 7 = 021D2327

Так, иду дальше по инструкции
Вернуться к началу

Пред.След.

Вернуться в Техническая часть

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [bot] и гости: 7