Объявления
Поздравляем
Roman2211


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

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

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

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

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

я бы просто прибавлял по +1 поверх максимального урона каждому войну - в улучшенном благословении.
Вернуться к началу

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

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

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

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

И ВСЁ и останется только улучшить стальную и каменную кожу))))
Последний раз редактировалось limiltless123 22 апр 2014, 21:42, всего редактировалось 1 раз.
Вернуться к началу

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 » 22 апр 2014, 21:41

Прошу прощения, результат будет округлён до ближайшего целого вот здесь:

Изображение

Кстати, переменную base_dmg лучше всё-таки назвать просто dmg, т.к. она используется не только для хранения базового урона отряда, но и модифицированного, а переменную dmg лучше переименовать в dmg_rand, чтобы отразить тот факт, что в ней сохраняются случайные уроны из "вилки уронов" воина при суммировании. Результирующий же урон - целое число - помещается в переменную var_C, которую я переименовал в dmg_result. В конце результирующий урон проходит проверку на корректность (игра удостоверяется, чтобы этот урон не оказался меньше 1 ед. - минимально возможного урона в игре).

 Важно
combatManager на всех скриншотах читать как AttackerAddr (см. уточнение в части четвёртой).
Последний раз редактировалось AlexSpl 01 май 2014, 16:48, всего редактировалось 4 раз(а).
Вернуться к началу

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

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

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

Имхо, в данной ситуации никакой удочки не получится - так как надо изучать ассемблер и долго копаться и анализировать код Хироса.
То что можно было узнать быстро - типа как делать дамб оперативки, как прикрепляться к софту в ИДЕ и получать из машинных команд ассемблеровские и как править машинные команды в Hеx-редакторе - это мы научились. Поэтому предлагаю, самым легким способом, просто подправить четыри магии - запугивание, благословение, каменная и стальная кожа.. :roll:

ps Или мне нужны очень крутые стимуляторы для мозга :lol:
А я вам пишу музыкальное произведение, по рукам ?
Вернуться к началу

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 » 22 апр 2014, 22:04

Цитата:
Поэтому предлагаю, самым легким способом, просто подправить четыри магии - запугивание, благословение, каменная и стальная кожа..

Хорошо, буду ориентироваться только на конечный результат - машинный код, который останется прописать в исполняемый файл игры с помощью шестнадцатеричного редактора.

Цитата:
ps Или мне нужны очень крутые стимуляторы для мозга :lol:
А я вам пишу музыкальное произведение, по рукам ?

OK :D
Вернуться к началу

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 » 22 апр 2014, 22:54

Цитата:
И ВСЁ и останется только улучшить стальную и каменную кожу))))

Предлагаю найти фрагменты кода, отвечающие за увеличение и уменьшение защиты отряда, самостоятельно ;) Тогда останется только решить, как именно Вы хотите изменить эффект этих защитных заклинаний.
Вернуться к началу

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

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

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

AlexSpl писал(а):

Цитата:
И ВСЁ и останется только улучшить стальную и каменную кожу))))

Предлагаю найти фрагменты кода, отвечающие за увеличение и уменьшение защиты отряда, самостоятельно ;) Тогда останется только решить, как именно Вы хотите изменить эффект этих защитных заклинаний.


Ок, попробую, а щас спать видимо
Вернуться к началу

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

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

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

Нахожу строку с защитой отряда, вешаю на неё брейкпоинт в Иде
Возвращаюсь в игру, применяю стальную кожу.
Cрабатывает брейкпоинт, выделяется строка в данном блоке ( рис. ниже)
Видимо там собака зарыта :D

ps хотя знакомых цифр я не увидел ( я вешал стальную кожу +5 на гаргулей с защитой 7 )
Большего мне мои знания не позволяют(
Вложения
123.jpg
123.jpg (93.29 КБ) Просмотров: 548
Вернуться к началу

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 » 23 апр 2014, 15:31

Часть четвёртая (продолжение)

1. Откомпилируйте в FASM'е следующий фрагмент кода:

Код: Выделить всё
  use32

  xor eax, eax
  mov [52409Ch], eax
  mov [ebp-34h], eax

; Минимальный урон воина -> [ebp-2Ch]
  movsx eax, byte [ecx+0C8h]
  mov [ebp-2Ch], eax

; Максимальный урон воина -> [ebp-30h]
  movsx eax, byte [ecx+0C9h]
  mov [ebp-30h], eax

; Количество воинов в отряде -> eax
  mov eax, [ecx+96h]
  xor edx, edx

bless_chk:
  mov dl, [ecx+10Dh]
  test edx, edx
  jz curse_chk
; Добавляем 1 ед. к максимальному урону воина
  inc dword [ebp-30h]
  imul dword [ebp-30h]
  mov [ebp-34h], eax
  jmp float_dmg

curse_chk:
  mov dl, [ecx+10Eh]
  test edx, edx
  jz dmg_rand
  imul dword [ebp-2Ch]
; Делим урон на 2
  shr eax, 1
  mov [ebp-34h], eax
  jmp float_dmg

dmg_rand:
  mov [ebp-10h], eax

dmg_loop:
  mov ecx, [ebp-2Ch]
  mov edx, [ebp-30h]
  call sub_4C03F0
  add [ebp-34h], eax
  dec dword [ebp-10h]
  jnz dmg_loop

float_dmg:
  fild dword [ebp-34h]
  fstp dword [ebp-14h]
  jmp loc_41D9AB

loc_41D9AB:
; ...

sub_4C03F0:
; ...


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

2. Откройте исполняемый файл игры в любом шестнадцатеричном редакторе. Перейдите по адресу 1D902 и заполните пустыми командами nop (90) весь освобождаемый фрагмент со старым кодом: [1D902 .. 1D9AB). В WinHex'е это можно сделать быстро (думаю, и в других шестнадцатеричных редакторах есть аналогичная функция): выделите фрагмент кода, нажмите Ctrl+L, выберите пункт "Fill with hex values" и введите туда шестнадцатеричное число 90, после чего нажмите OK. Выделенный фрагмент кода будет заполнен командами nop (90). Должно будет получиться так, как показано на следующей картинке:

Изображение

3. Теперь откройте бинарный файл, полученный в FASM'е, и вставьте содержащийся в нём машинный код по адресу 1D902. В WinHex'е это можно сделать так: Edit -> Copy All -> Hex Values (в файле с расширением .BIN), а затем Edit -> Clipboard Data -> Write... (в исполняемом файле игры). Курсор должен находиться по адресу 1D902. Если всё сделано правильно, должно получиться так:

Изображение

Красным цветом я подчеркнул команду вызова функции (call sub_4C03F0), отвечающей за генерацию случайных уронов, и команду безусловного перехода (jmp loc_41D9AB). Для того чтобы эти команды корректно передавали управление, будучи вставленными в код игры, для них нужно прописать реальные адреса переходов.

4. Адрес следующего за инструкцией call sub_4C03F0 байта равен 1D95F, а вызываемая функция находится по адресу C03F0, значит, относительный адрес этой функции равен C03F0 - 1D95F = A2A91. Его-то и прописываем в первую машинную команду, которая подчёркнута на картинке: E8 91 2A 0A 00. Аналогично поступаем со второй командой: EB 3C, т.к. 1D9AB - 1D96F = 3C.

Теперь осталось только сохранить изменённый исполняемый файл и проверить результат. Однако перед запуском игры я рекомендую дизассемблировать только что изменённый экзешник и посмотреть на новую ветку кода. Теперь она должна выглядеть так:

Изображение
Вернуться к началу

offlineАватара пользователя
dragun97yu  
Посвященный
Посвященный
 
Сообщения: 87
Зарегистрирован: 03 окт 2012, 13:41
Пол: Не указан
Награды: 1
Цветы (1)
Поблагодарили: 43 раз.

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

Сообщение dragun97yu » 23 апр 2014, 15:38

Эгей, мастер-классы AlexSpl'я :)
Вернуться к началу

Пред.След.

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

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

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