Current time: 26.04.2024, 14:59 Hello There, Guest! (LoginRegister)
Language: english | russian  

Poll: Интересно ли вам научиться самим находить необходимые данные в exe игры без посторонней помощи?
This poll is closed.
Да! 57.14% 8 57.14%
Конечно же ДА!!! 42.86% 6 42.86%
[...] 0% 0 0%
Total 14 votes 100%
* You voted for this item. [Show Results]

Post Reply 
Threaded Mode | Linear Mode
Реверс игры для новичков
» Небольшой туториал по нахождению данных для UN:C
Author Message
igrik Offline
Administrators

Posts: 2814
Post: #37

Находим элементы диалогов.

Так тут всё чуточку сложнее. Для начала нужно знать о некоторых факторах.
1. У нас есть прекрасный HD мод, основная цель и задача которого как раз таки и заключается в работе с диалоговыми окнами для изменения разрешения игры. Чаще всего HD мод просто изменяет координаты расположения диалога, для того чтобы последнее распологалось в центре экрана при разрешениях отличных от 800x600. Но есть и исключения: яркий пример окно встречи героев при включенном твике <UI.Ext.SwapMgr> {0,1,2} = 1 или 2.
2. Есть плагин wog native dialogs, который тоже не имеется в вогобазе. Да и стандартные воговские диалоговые окна, такие как ВогОпции, Диалог Командира, Опыта армий, сброса артефактов на землю и т.п. вы разобрать не сможете, да и ERMу они впринципе неподвластны.

Это означает, что мы можем что-то найти и изменить только в диалогах SOD (которые есть в ERA). Сразу же отсюда отметаем диалоги, которые работают до старта ERM (до начала загрузки карты), такие как: выбор сценария, кампании, настройка случайной карты, рекроды, загрузить игру и т.п.

Начнем, пожалуй с самого наиболее используемого диалога - окно героя.
Наша задача - повесить дефы морали и удачи героя ему на плечи Sm Давайте пробовать.

Для начала, пожалуй, нужно описать вам универсальный способ выхода на момент создания диалога.
Итак, в игре есть универсальная функция, которая максимально часто используется при создании диалогов 0041AFA0 DlgLvl1_Ctor.


1. Открываем ИДУ
2. Нажимаем G и вбиваем адрес функции 0041AFA0 DlgLvl1_Ctor
3. Перепрыгиваем на неё и переходим в ASM код в строку заголовка функции
4. Нажимаем CRTL+X и видим, как ИДА указала нам все места вызова этой функции. И мы видим множество диалогов.
Всё читаемо? Это результат тонны часов людей, которые разбирали эту базу.
Лет десять ранее это бы выглядело вот так
Ни черта не понятно, не правда ли?))

Во всех этих функциях ищем что-то похожее на название диалога героя.
Нашли Dlg_HeroInfo_Create (у вас она называется скорее всего под другому, потому что я потихоньку всё же пилю её). Нажимаем ОК. Нас перекидывает на адрес 004DE9B3. Нажимаем F5 и видим длиннющую функцию создания диалога.

Теперь нужно узнать айдишники (id) дефов морали и удачи героев. Открываем справку ERM-> триггер CM-> подкоманда I -> условно обозначеное "место" -> кликаем в "место" -> ищем "Области в окне героя" -> тут и ищем айдишники морали и удачи. Нашли: id 116 и 117.

Переходим в ИДУ, нажимем ALT+T, вводим значение 116, ОК.
Нас перебросило на переменную v116. Так ида объявила переменную, но это совершенно не то. Жмем далее (Ctrl+T), и так 3 раза. Нас перекинуло куда-то дальше. Смотрим детально куда:
и видим место создания какого-то дефа.
Сравниваем название: DlgDef_BuildAndLoadDef(v231, 182, 184, 44, 44, 116, aImrlb_def, 0, 0, 0, 0, 16);
Здорово, мы нашли то что скали.
Заходим в лод в дате, ищем этот файл (деф), вытаскиваем его, и определяем его размеры: 44х44. Отлично, зная размеры мы можем их найти тут.
DlgDef_BuildAndLoadDef(v231, 182, 184, 44, 44, 116, aImrlb_def, 0, 0, 0, 0, 16);
Значит перед ними, возможно, идут координаты установки дефа. (... Это схема простая ...)
Ставим курсор в "182" и нажимаем Tab, в асм коде мы видим "push 182" (или push B6h) и видим рядом адрес 004E0D01. Первый адрес нашли. Теперь будем проверять)

В этот раз, чисто для практики используем Olly.
Для начала нужно сделать так, чтобы игра у вас не запускалась в полноэкранном режиме!! Это очень важно. Олька часто останавливается сама при запуске игры, и вы хорошенько за***тесь, прежде чем запустите игру.
Поэтому пользуемся HD модом, и желательно в 32 битном режиме с разрешением 1180х664. Настроили. Запускаем игру и жмем F4. Игра перешла в оконный режим. Отлично. Это нам и нужно. Закрываем игру.

Далее. Запускаем Ольку, указываем ей путь до исполняемого файла "h3era HD.exe" и ждём. Первая прогрузка будет долгая (Оля там чё-то обрабатывает и создает дампы). В следующие разы будет быстрее. Внимательно смотрим на нижний правый угол: только начал загружаться Вог, и Олька сходу остановилась сама.
Жмём F9 и не паримся. Если еще будут такие же остановки, жмем F9 столько раз, сколько это нужно.
Это можно загнать в исключения, но я за 3-4 года пользования ей так и не сделал этого. Пофиг.

Итак, игра запустилась. Запускаем нашу тестовую карту (обычно у каждого модера такая есть), если нет, то запускаем стандартный Аррогенс))

Опять переходим в Ольку, копируем адрес 004E0D01, нажимаем Ctrl+G (бесит, когда работаешь одновременно с Идой), вставляем адрес, ОК, и нас перекинуло в нужное место.
Теперь смотрим внимательно! и видим
Code:
004E0D01  68 B6000000   PUSH 0B6
Тут важно число B6000000 (182 в десятичной). По нему, мы можем определить, что число четырехбайтовое, а значит мы может запихнуть в него огроменное число. Намного сложнее работать с однобайтовыми числами. Много туда не влезает. И это порою бывает очень удручающе... Ну да ладно

На адресе 004E0D01 нажимем "пробел", вылезло окно редактора кода на ASMе. Теперь будем править координату Х иконки морали, для этого придумыаем число, например 405, но в Олю можно вводить только шестнадцатериные числа. Не проблема, переводить их мы уже умеем). Открываем калькулятор, и получем число 405 = 195(h). Вставляем это число, нажимаем ОК и открываем окно героя. Смотрим что получилось
Круто!
Поехали проводить ту же процедуру и с координатой Y, она в коде находится на одну строку выше 004E0CFC.
Ремарка, нужно обязательно поставить галочку "Fill rest with NOPs", иначе вы сломаете код (и начнете процедуру заново в Ольке), потому что Оля захочет записать это число как однобайтовое, и запишет его, а "хвост" останется и получится какая-то лапша, которая обязательно вылетит к чертовой матери. Ставьте галку)
Впихиваем координату 43 (PUSH 2B). Проверяем: мы повесили мораль на плечо герою

Ту же самую процедуру делаем и с Удачей (надеюсь вы справитесь сами).
Должно получиться вот так:

Адаптируем код на ERM, но тут не обязательно париться с NOPами

Image: index.png


game bug fixes extended.dll || My Plugins || My GitHub
24.07.2020 17:50
Visit this user's website Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Messages In This Thread
Реверс игры для новичков - igrik - 22.07.2020, 12:55
RE: Как найти нужные адреса и данные для UN:C - wessonsm - 22.07.2020, 21:40
RE: Как найти нужные адреса и данные для UN:C - daemon_n - 22.07.2020, 21:55
RE: Как найти нужные адреса и данные для UN:C - Raistlin - 23.07.2020, 00:37
RE: Как найти нужные адреса и данные для UN:C - igrik - 23.07.2020, 01:59
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 02:54
RE: Как найти нужные адреса и данные для UN:C - RoseKavalier - 23.07.2020, 04:26
RE: Как найти нужные адреса и данные для UN:C - V_Maiko - 23.07.2020, 07:04
RE: Как найти нужные адреса и данные для UN:C - PerryR - 23.07.2020, 09:51
RE: Как найти нужные адреса и данные для UN:C - daemon_n - 23.07.2020, 10:55
RE: Как найти нужные адреса и данные для UN:C - wessonsm - 23.07.2020, 11:54
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 12:18
RE: Как найти нужные адреса и данные для UN:C - daemon_n - 23.07.2020, 12:55
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 13:29
RE: Как найти нужные адреса и данные для UN:C - Berserker - 23.07.2020, 15:52
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 16:04
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 23.07.2020, 16:32
RE: Как найти нужные адреса и данные для UN:C - RoseKavalier - 23.07.2020, 18:47
RE: Как найти нужные адреса и данные для UN:C - Berserker - 23.07.2020, 20:39
RE: Как найти нужные адреса и данные для UN:C - V_Maiko - 24.07.2020, 03:15
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 24.07.2020, 03:26
RE: Как найти нужные адреса и данные для UN:C - igrik - 24.07.2020, 10:19
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 24.07.2020, 11:29
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 24.07.2020, 12:45
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 24.07.2020, 13:32
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 24.07.2020, 15:08
RE: Как найти нужные адреса и данные для UN:C - igrik - 24.07.2020, 15:38
RE: Реверс игры для чайников - igrik - 24.07.2020, 12:08
RE: Реверс игры для новичков - Berserker - 24.07.2020, 17:35
RE: Реверс игры для новичков - igrik - 24.07.2020 17:50
RE: Реверс игры для новичков - daemon_n - 24.07.2020, 19:39
RE: Реверс игры для новичков - RoseKavalier - 25.07.2020, 04:10
RE: Реверс игры для новичков - daemon_n - 25.07.2020, 11:09
RE: Реверс игры для новичков - RoseKavalier - 25.07.2020, 17:45
RE: Реверс игры для новичков - daemon_n - 25.07.2020, 19:30
RE: Реверс игры для новичков - wessonsm - 26.07.2020, 00:10
RE: Реверс игры для новичков - daemon_n - 26.07.2020, 01:43
RE: Реверс игры для новичков - wessonsm - 11.02.2022, 06:09
RE: Реверс игры для новичков - XEPOMAHT - 11.02.2022, 06:57
RE: Реверс игры для новичков - wessonsm - 11.02.2022, 07:03
RE: Реверс игры для новичков - daemon_n - 01.06.2022, 05:45
RE: Реверс игры для новичков - wessonsm - 03.09.2022, 06:26
RE: Реверс игры для новичков - daemon_n - 03.09.2022, 09:17
RE: Реверс игры для новичков - wessonsm - 03.09.2022, 11:01
RE: Реверс игры для новичков - Berserker - 03.09.2022, 11:35
RE: Реверс игры для новичков - daemon_n - 03.09.2022, 11:45
RE: Реверс игры для новичков - XEPOMAHT - 03.09.2022, 15:04
RE: Реверс игры для новичков - Berserker - 03.09.2022, 12:47
RE: Реверс игры для новичков - Berserker - 03.09.2022, 19:24
RE: Реверс игры для новичков - daemon_n - 03.09.2022, 23:20
RE: Реверс игры для новичков - XEPOMAHT - 04.09.2022, 04:47
RE: Реверс игры для новичков - Berserker - 04.09.2022, 07:10
RE: Реверс игры для новичков - Berserker - 04.09.2022, 08:07
RE: Реверс игры для новичков - wessonsm - 04.09.2022, 08:56
RE: Реверс игры для новичков - Berserker - 04.09.2022, 08:59
RE: Реверс игры для новичков - wessonsm - 04.09.2022, 09:02
RE: Реверс игры для новичков - daemon_n - 04.09.2022, 09:07
RE: Реверс игры для новичков - Berserker - 04.09.2022, 09:10
RE: Реверс игры для новичков - wessonsm - 04.09.2022, 09:15
RE: Исследование героев - Zur13 - 22.07.2020, 13:17
RE: Исследование героев - XEPOMAHT - 22.07.2020, 13:41
RE: Исследование героев - PerryR - 22.07.2020, 13:43
RE: Исследование героев - XEPOMAHT - 22.07.2020, 14:14
RE: Исследование героев - Berserker - 22.07.2020, 16:41
RE: Исследование героев - daemon_n - 22.07.2020, 18:30
RE: Исследование героев - RoseKavalier - 22.07.2020, 18:36
RE: ERA III - daemon_n - 18.05.2022, 20:25
RE: ERA III - wessonsm - 18.05.2022, 21:17
RE: ERA III - daemon_n - 18.05.2022, 21:19
RE: ERA III - wessonsm - 18.05.2022, 22:02
RE: ERA III - Berserker - 18.05.2022, 22:29
RE: ERA III - igrik - 19.05.2022, 19:29

Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group