Wake of Gods Forum | Форум Во Имя Богов

Full Version: Реверс игры для новичков
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5
Thanks for this contribution igrik. On the weekend I will study.
Can you give me your privat phone number so I can call you during night when I have a question about UN:C 96-copy?
Отличный мануал! Спасибо! Понял почти все, так что осталось лишь попрактиковаться, в идеале же, ещё и научить потом какого-нибудь так же делать166
igrik, можно что-то конкретное спросить?
Мне нужно научиться находить элементы диалогов (любых) и изменять их (перемещать, менять размер, отключать, включать). Думаю, это не очень сложно, хотя..
В общем, интерфейс изменять.
(23.07.2020 11:54)wessonsm Wrote: [ -> ]Мне нужно научиться находить элементы диалогов (любых) и изменять их (перемещать, менять размер, отключать, включать). Думаю, это не очень сложно, хотя..
В общем, интерфейс изменять.

Для ЭРЫ - больная мозоль из-за того, что все диалоги в игре так или иначе модифицируются HD-модом (опять вечная проблема совместимости). Сами адреса находятся очень просто в шестнадцатеричном редакторе по графическим элементам, используемым в диалоге (def'ы, pcx-ы), в основном всё это уходит на стек на вызовах функциях-сборщиках элементов диалога в его конструкторе. Ну и если запомнишь порядок аргументов функции и их назначение (и то и то подписано в комментариях IDA-базы), то можно пробовать делать бинарный патч на это дело (через UN:C может оказаться поздновато, т.к. ERM выполняется самое раннее - только в инструкции карты, а при старте самой игры - только в MoP, а Берсеркер так не хочет, ибо противоречит концепции ERM).
XEPOMAHT, а если перейти на lua?
(23.07.2020 12:55)daemon_n Wrote: [ -> ]а если перейти на lua?

В WoG 3.59 часть диалогов перевели на lua, итог:

1. Полная несовместимость с HD-модом.
2. Изменение-добавление по силам только профессиональным программистам. Обычным моддерам типа меня не особо что-то понятно во всём этом винегрете на lua:

3. Глючность (нормальная поддержка lua в Третьих Героях - скорее из разряда древневоговских мифов, чем реальности).
RoseKavalier, igrik, отличные руководства! 132

XEPOMAHT, а при чём hd-мод до своих DL-диалогов?
(23.07.2020 15:52)Berserker Wrote: [ -> ]а при чём hd-мод до своих DL-диалогов?

DL-диалоги, как и все остальные диалоги, центрируются HD-модом под нужное разрешение (без этого, они будут на экране в соответствии с 800х600).
igrik, супер вроде всё понятно, вечером буду пробовать свою новую проблему порешать 132

RoseKavalier, great addition, but I didn't get it where to get that structs and how to attach them to IDA, maybe you could share your IDA base with structures attached?

P.S. может тему закрепить или вообще в новый раздел модинг для новичков?
My database is the same as everyone else's but modified to use H3API terminology. Here are a few screens to show the process of adding enumerations (same way for structures) - you can copy them from H3API, ERM, or wherever you please.

Cleaning up IDA code
Hope igrik doesn't mind))

We start with igrik's database. I found the function using the FUNCTIONS WINDOW and Ctrl+F using the term 'shoot'. I've numbered some things that can be modified to enhance comprehension of the current section.

Adding an enumeration/structure to IDA. The easiest is SHIFT+F1 but it may take some time to get used to hotkeys.

Now Insert a new local type or use right-click menu.

You get a window like this where you can either create or just copy-paste.

When you are done, the enum/struct exists in local types and is not available globally, so:
* scroll to the bottom
* select your new type
* press enter (or double-click it)

This makes it accessible globally and you will see it in the ENUMS tab.

Go back to PSEUDOCODE section, and set the enuM.

Now you'll get text instead of `15`, while not perfect it shows what the code actually intends to do.

Now let's copy some more enums and repeat the process.

Don't forget to add the type globally!

After you add some more enums, you may get more than one option when choosing what to assign, just pick the one that makes sense.

Now all enums are set for this portion of code, things are looking better; however due to how nwc wrote the BattleMgr original class, there is still some incomprehensible junk next to HeroA... it takes some time to recognize such patterns but this is because the original is an array of 2 _Hero_* instead of being split into attacking and defending hero.

Double-click the HeroA term to be taken to it in the STRUCTURES tab.

We edit this term's tYpe or with right-click...

Finally 'HeroA' no longer makes sense, reName it to 'Heroes'.

Go back to PSEUDOCODE and refresh the decompilation (F5). Now +221 is transformed to secondary skills offset which is again easier to understand.

One last step, add the secondary skills enum, and assign it to the value within.

End result... there is still some work to rename v.. terms but usually this is only necessary when you face complicated pieces of code or are working on disassembling something new.

Actual time was about 3 minutes because I had to look up the enumerations. Now that they exist in this database, I can go elsewhere and do this process in 15 seconds and have code that is readable without relying on outside sources.

I don't ERM (and don't plan to) so I can never even fill half of igrik's shoes, but I hope this is useful. As with everything else, you get better by practice: the more you do the better you'll get at recognizing patterns and assigning the correct values/structures.
RoseKavalier, really useful, thanks.
I still think that the one who can master their knowledge is RoseKavalier Rolleyes
Я тут сделал первую попытку что-то самостоятельно поправить, оказывается я еще кое-что помню из ассемблера, хе-хе. Попробую свои похождения описать в виде небольшого туториала, приступать нужно после того как освоились с тем что описано в туториале igrik.

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

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

Общая информация по ресурсам для этого туториала:

1. В сборке ERA 2.9.14 есть исходники WoG и ERA

HoMM 3 Complete ERA 2.9.14\Tools\Era\Sources\Era 2.6x Delphi 2007\
HoMM 3 Complete ERA 2.9.14\Tools\WoG Sources

2. При падении игра генерирует лог файл с описанием того что произошло при падении, в корне папки с игрой появляется файл HD_CRASH_LOG.TXT

3. Для третьего этапа можно подсматривать нужные команды по ссылкам

Краткое описание ассемблерных комманд
Краткое описание ассемблерных комманд с кодами операций
Подробное описание ассемблерных комманд с кодами операций



Итак часть первая как по ЕРМ ресиверу BM:P найти участок кода игры в ИДА, который его обрабатывает.



Итак часть вторая как с помощью крешлога найти место падения игры.



На данном этапе мы знаем, что падение вызвано тем что у перемещаемого монстра (подводы боеприпасов) нет звукового файла который должен проигрываться при перемещении. Правильным вариантом в этом случае было бы назначение стеку боевых машин звука перемещения или другие правки которые приведут к тому же результату (больше подробностей чуть ниже в сообщении XEPOMAHT). Но в учебных целях мы попробуем исправить это с помощью правки найденого выше участка кода игры "на лету" из ЕРМ скрипта.

Итак часть третья как пропатчить КДЕ2 под FreBSD, шутка Sm , как исправить креш патчем кода с помощью UN:C.



Вопрос знатокам, насколько плохо то что я сделал в третьей части и можно ли такое проворачивать?
Zur13, у тебя (в третьем варианте) достаточно хорошее решение. Ты же восстанавливаешь параметр, после того как сделал необходимые тебе действия. Я думаю это наиболее правильных ход, применимый для данной ситуации.
По началу оно все сумбурно выходит. Но это дело только практики)

wessonsm, без проблем. Как только разберемся со второй частью поставленной задачи, я попробую открыть занавес на счёт диалогов.

XEPOMAHT, напомни - в чем проблема у тебя поставить Win 7? В слабом ПК? А XP не потащит? Просто использование вогобазы в текстовом режиме то еще извращение.

RoseKavalier, I am delighted, and I never cease to be amazed at your knowledge. Your help is invaluable!
(24.07.2020 10:19)igrik Wrote: [ -> ]Zur13, у тебя (в третьем варианте) достаточно хорошее решение. Ты же восстанавливаешь параметр, после того как сделал необходимые тебе действия. Я думаю это наиболее правильных ход, применимый для данной ситуации.
По началу оно все сумбурно выходит. Но это дело только практики)

Стараюсь вот по возможности. Хороший туториал мне с ним оказалось легко освоиться 132

А эти адреса не изменяются при применении разного рода бинарных патчей или еще чего-либо? Насколько это решение надежно?

И еще вопрос, то фактически на чем я застрял при подходе с помощью исходников, как ИДА подключить к героям в режиме дебага? У меня при попытке выполнить Attach to process к героям ИДА падает вместе с героями. Хотелось с помощью точки останова посмотреть то место кода которое я нашел с помощью исходников ВоГ.
Pages: 1 2 3 4 5
Reference URL's