Объявления

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

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

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

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

Сообщение limiltless123 » 15 апр 2014, 10:10

Пока что я тупо открыл FreeHexEditor и внес изменения как у вас на рисунке )
Кентавры с жаждой крови поразительно мочат Огров)) ..
Очень ржу) Доволен, готов кинуть вам немного бабла) хотя меня и сократили на одной работе недавно.
1000 хватит ? Следующая магия у нас проклятие и общее проклятие ( я их переименовал в запугивание)
На данный момент - она делает минимальный урон,
а мне бы хотелось что бы вот так - максимальный урон, деленный на 2, с округлением до большего целого числа ( или как удобнее)
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

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

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

Цитата:
1) На чем написан Хирос ?

На языке C (в среде Microsoft Visual C).

Цитата:
2) Какой программой мы смотрим и правим сам код игры ?

Исходного кода игры нет (есть вероятность того, что он утерян навсегда). Мы лишь можем пытаться восстановить его путём дизассемблирования исполняемого файла игры с помощью IDA или других дизассемблеров и последующего анализа. Вносить изменения в исполняемый файл игры можно любым шестнадцатеричным редактором. Если требуются какие-то глобальные изменения кода, то обычно пользуются хуками.

Цитата:
3) Я так понимаю что Hex - это любой программный код в байтах ( то есть как если бы разложить вещество на атомы)

Да. Такой код обычно называют бинарным. Шестнадцатеричное представление просто облегчает работу с бинарным кодом. В самом деле, не писать же вместо 90 - 10010000.

Цитата:
4) Что из софта вы используете в третей части для удаления части кода и подстановки нулей ?

Шестнадцатеричный редактор (в данном случае WinHex).

Цитата:
5) Зачем вы нашли бесплатный шестнадцатеричный редактор с возможностью редактирования оперативной памяти ?
Это альтернатива winhex ? чтобы не юзать WinHex + FreeHexEditor
( кстати поиск в FreeHexEditor ещё проще чем вы написали ранее - просто слева в столбце строк -тупо вводим свою строку )

Совершенно верно.

Цитата:
5) Зачем мне FASM'е
чем он отличается от IDA ?

IDA - это дизассемблер, а FASM - ассемблер, т.е. они предназначены для выполнения противоположных задач. IDA переводит машинные коды в понятные ассемблерные инструкции, а FASM - переводит ассемблерные инструкции в машинный код.

Цитата:
6) Правильно ли я понимаю что хирос написан на ассемблере - и знай мы куда вносить изменения нам бы не понадобился Winhex c его дамбом оперативки ?

Герои 2 написаны на C. И действительно, будь у нас исходники игры, IDA, FASM и WinHex не пригодились бы.

Цитата:
7) Зачем помимо обычных команд хироса- требуется знать машинные ( если я правильно понмаю, то есть они же в hex )
Разве в обычные команды мы не можем внести изменения ?

Это не "команды Героев", а универсальный код, на котором написаны абсолютно все программы (для одной и той же архитектуры процессора), включая, например, операционную систему Windows.

Цитата:
8) Могли бы мы для всего этого обойтись одной программой каким-нибуть дизассемблером с дамбом оперативки и hex-ректором в купэ ?

Я такой программы не знаю. Хотя коммерческие версии IDA, наверное, могут это всё.
Последний раз редактировалось AlexSpl 15 апр 2014, 17:20, всего редактировалось 2 раз(а).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

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

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

Цитата:
1000 хватит ? Следующая магия у нас проклятие и общее проклятие ( я их переименовал в запугивание)

Собственно, я пишу, потому что мне это интересно. Я мог бы просто пропатчить экзешник (т.е. внести в него все нужные Вам изменения) и выслать его по почте. Но вместо этого я описываю метод, т.е. даю Вам удочку, а не рыбу ;)
Вернуться к началу

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

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

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

Пробую зачатками нашей удочки ( кстати не уверен что обзаведение любой удочкой оправдывает затраченное на неё время)

Так вот пробую сам добраться до того места где в программном коде происходит воздействие магии проклятие.
Сделал сейв где у меня сетевая игра - два игрока - оба я ...
Нападаю варваром с волками на гаргулей и кентавров.
Напал, сделал дамб оперативки, нашел гаргулей (с кентаврами)- на гаргулей буду вешать проклятие
Выписал в Winhex строку где у гаргулей минимальный урон ( данная магия влияет на этот параметр)

Открыл IDA, прицепил хирос, нашел данную строку, повесил брейкпоинт... продолжил игру F9
Вешаю магию варваром на гаргулей - IDA не реагирует ...


Что не так , Master ?) ;)


Пробовал отследить код проклятия через брейкпоинт на атаку (гаргулей) и минимальный урон
При применении магии в обоих случаях IDA молчит
Вернуться к началу

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

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

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

Возможно я не очень ясно излагаю, но куда бы вы повесили брейкпоинт, чтобы в IDA зафиксировать наложение магии проклятие ..

Я вначале думал что на минимальный урон жертвы,
потом на атаку жертвы - и то и другое у меня не отзвонилось в IDA
( может просто потому что где то накосячил )
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

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

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

Дело в том, что заклинание "Проклятие" не изменяет урон отряда вообще. Вместо этого устанавливается флаг, сигнализирующий о том, что отряд находится под действием заклинания "Проклятие" (после окончания действия заклинания этот флаг снимается). Обычно флаг - это переменная, которая может принимать только два значения: 0 (флаг не установлен) или 1 (флаг установлен) и, реже, наоборот. Так как для хранения двух состояний флага (0 или 1) достаточно одного бита информации, то зачастую однотипные флаги объединяют (упаковывают) в более сложные структуры данных. Например, 1 байт, равный 8-ми битам, может вместить в себя 8 различных флагов размером в 1 бит.

Так вот, когда игра считает урон отряда, у которого установлен флаг "Наложено проклятие", она суммирует минимальные значения урона каждого воина в отряде вместо того, чтобы суммировать случайные значения урона из диапазона [минимальный_урон .. максимальный_урон]. Например, базовый урон отряда, состоящего из 3 мечников (урон 4-6), в обычной ситуации может быть таким: 4 + 6 + 5 = 15, или таким: 6 + 6 + 4 = 16, или таким: 4 + 5 + 4 = 13 и т.д. Под "Проклятием" базовый урон такого отряда мечников будет равен 4 + 4 + 4 = 12 во всех случаях. Таким образом, Вам нужно искать флаг, отвечающий за "Проклятие", и вешать на него брейкпоинт. Только проблема в том, что адрес этого флага Вам неизвестен. Теперь подумайте, каким образом Вы узнали адрес, по которому хранится, скажем, атака отряда? Вы узнали этот адрес от меня. Тогда вопрос: как нашёл его я? :) Если сможете ответить на него, найдёте флаг, отвечающий за "Проклятие".

 Если не получается найти...
Повесьте брейкпоит (чтение/запись (Read/Write)) на минимальный урон отряда, направьте на этот отряд "Проклятие" и произведите атаку. Игра будет прервана по брейкпоинту, и Вы попадёте внутрь функции, отвечающей за генерацию урона, а именно в то её место, где считается базовый урон отряда. Теперь останется только понять, что именно в найденных инструкциях является флагом.
Вернуться к началу

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

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

Сообщение limiltless123 » 15 апр 2014, 20:14

Да, я раньше так уже пробовал , но со второго раза получилось лучше :)

Повесил брейкпоинт на минимальный урон войска гаргулей, тех на которых повеcил проклятие.
При атаке ими выдало вот такие, понятные ассемблерные инструкции))) Жаль я не ассемблер
Вложения
123.jpg
123.jpg (119.18 КБ) Просмотров: 607
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

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

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

Есть прогресс :D Перед Вами блок-схема фрагмента, отвечающего за генерацию базового урона отряда. Если Вы возьмёте чуть выше, увидите блок, где происходит проверка, находится ли отряд под "Благословением". Чуть ниже - блок с проверкой, находится ли отряд под "Проклятием". А нижние три блока отвечают собственно за определение урона в каждом конкретном случае. Левый блок выполняется, если отряд находится под "Благословением" (тогда берётся только максимальный урон воинов), средний - если отряд находится под "Проклятием" (тогда берётся минимальный урон воинов) и правый - если на отряде нет ни "Благословения", ни "Проклятия" (тогда берётся случайный урон из диапазона [минимальный_урон .. максимальный_урон]). Нас, разумеется, интересует средний блок, а также блок над ним. Хотя можно записать адрес инструкций, отвечающих за "Благословение", на будущее. Ищите инструкции cmp, которые выполняют проверку условий. Например, cmp eax, 3 сравнит содержимое регистра eax с числом 3 (на самом деле, будет произведено вычитание, но это пока неважно). За инструкциями cmp следуют инструкции условного перехода (такие, как, например, jz и jnz). Они-то и передают управление в нужное место в зависимости от результата сранения.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

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

Сообщение AlexSpl » 15 апр 2014, 20:43

Да, совсем забыл: сравнение с нулём выполняется инструкцией test [регистр], [регистр]. Возможно, имеет смысл разобрать приведённый Вами фрагмент кода в части четвёртой статьи?
Вернуться к началу

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

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

Сообщение limiltless123 » 15 апр 2014, 20:54

Да есть что то со стр но левее моего скриншота - завтра тогда буду искать
А ещё мне кажется я не ту магию выбрал для - магии Запугивания

Лучше возможно надо было Разрушительный луч использовать - просто увеличить значение понижение защиты с 1 до 5 допустим

Завтра над этим тоже надо будет подумать получше
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron