Current time: 23.03.2024, 20:08 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
HD-mod. Баги и доработки
Author Message
igrik Offline
Administrators

Posts: 2807
Post: #136

(01.06.2021 17:12)XEPOMAHT Wrote:  Бараторч очень, ну очень любит перехватывать функции целиком, да и Берсеркер сейчас тоже так делает в ERA, из-за чего так же приходится шевелить мозгами, чтобы перехватить нужный код, очень часто какими-то дикими костылями
Потому что такой способ установки хука (а точнее это HiHook типа SPLICE в patcher_x86) наиболее безопасный и безконфликтный способ установки хуков, а также ну очень удобный.

Приведу цитату Бараторча:
Бараторч Wrote:Используя высокоуровневый хук, мы заставляем игру вызывать вместо ее функции - нашу. Наша функция при этом имеет (должна иметь) тот же интерфейс что и оригинальная, т.е. тот же возвращаемый тип и те же аргументы.
Здесь мы совершенно не запариваемся ни о каких низкоуровневых вещах - содержимом регистров и состоянием стэка, и т.п. Нам совершенно не нужно знать ассемблерный контекст вызова. Поэтому я назвал этот тип Хука - высокоуровневым

Но я в HD использую в основном именно ХайХуки - ибо с ними код гораздо более читаемый, удобный для правок, безопасный и минимально конфликтен с другими модификациями.
© тема patcher_x86
Именно поэтому Бараторч и ставит такие хуки на целые функции.
Берсеркер сейчас так же делает. Я в подавляющем большинстве случаев так делаю в своих плагинах.


game bug fixes extended.dll || My Plugins || My GitHub
01.06.2021 18:52
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #137

Такой вариант подходит либо для полного переписывания кода функции, либо для действия + подмены аргументов. Много мест, где в разы менее трудозатратно только в небольшом месте сделать перехват. Тут нет единого «хорошо»/«плохо». Есть скорее плюсы и минусы. Где возможно — перехват всей функции. Где нецелесообразно — правки в отдельных местах.

Code:
(* Replace Heroes 3 PRNG with thread-safe Mersenne Twister, except of multiplayer battles *)
  ApiJack.StdSplice(Ptr($50C7B0), @Hook_SRand, ApiJack.CONV_THISCALL, 1);
  ApiJack.StdSplice(Ptr($50C7C0), @Hook_Rand, ApiJack.CONV_FASTCALL, 2);

  (* Allow to handle dialog outer clicks and provide full mouse info for event *)
  ApiJack.HookCode(Ptr($7295F1), @Hook_ErmDlgFunctionActionSwitch);

  (* Add up to 10 animated DEFs support in DL-dialogs by restoring commented ZVS code *)
  ApiJack.HookCode(Ptr($72A1F6), @Hook_DL_D_ItemCreation);
  ApiJack.HookCode(Ptr($729513), @Hook_ErmDlgFunction_HandleAnimatedDef);

  (* Move acredits.smk video positon to json config *)
  ApiJack.HookCode(Ptr($706609), @Hook_ShowMainMenuVideo);


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
01.06.2021 19:47
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #138

(08.05.2021 07:14)Berserker Wrote:  РЕализовал в Эре поддержку png вместо def/pcx через перехват функций отрисовки. Работает отлично во всех режимах HD и без. Но есть проблема с опцией «Системные курсоры» и def-ом артефактов.

Как только курсор меняется на артефактный, появляется сизый прямоугольник. PNG выводится с полупрозрачностью, сизого цвета там нет. Не ясен механизм этой опции в HD-моде.
Если опция отключена, но есть полупрозрачные пиксели, то виден муар из сизого.


В хоте используются 32-битные с полупрозрачностью спрайты, в системных курсорах ХДмода есть специальная обработка таких спрайтов. Как там курсоры рисуются в оригинале я не помню.

В Хоте и в ХД используются 32 ARGB спрайты таким образом:
структуры _Def_, _DefGroup_, _DefFrame_ таких спрайтов не отличаются от оригинальных.
Но у _DefFrame_ пиксельный буфер должен обрабатываться по-другому. У такой структуры поле type имеет другое значение и в хуках на функции отрисовки _DefFrame_ стоит проверка на значение type. И если оно отличается от оригинального, то мы выполняем наш код.
В коде системных курсоров также стоит проверка на type кадра и выполняется свой код отрисовки в курсор.
26.06.2021 07:43
Find all posts by this user Quote this message in a reply
Panda Away
Moderators

Posts: 1005
Post: #139

baratorch, доброго утра!
Начиная с версии HD-мод 5.2 RC41, начал ставится старый патчер "patcher_x86.dll" от 17 октября 2018, хотя раньше патчер был от 12 января 2021. Это просто баг, или была причина вернуть старую версию патчера и с новой имеются какие-то проблемы? Спасибо!


Тот, кто просыпается рано - жаворонок, поздно - сова. А тот, кто плохо спит и ходит с черными кругами под глазами - панда!
26.06.2021 07:53
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #140

baratorch, функция отрисовки кадра у меня перехвачена после HD. Отрисовка идёт из BGRA буфера внешней структуры (от дефа только имя + номер кадра) по правилам PNG, то есть с поддержкой полупрозрачности. Но складывается ощущение, что рисуем по сизому фону, либо с какой-то замороченной пост-обработкой. Потому как везде рисуется корректно, а в курсорах с заливкой.

Можешь скинуть часть кода, который работает с курсорами?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
26.06.2021 18:58
Find all posts by this user Quote this message in a reply
Panda Away
Moderators

Posts: 1005
Post: #141

baratorch, и ещё просьба, можно для ERA включить следующие твики:
<UI.RecruitDlg.AutoSet> = 1
<UI.Ext.AdvMgr> = 1 , 1 , 1

Rolleyes


Тот, кто просыпается рано - жаворонок, поздно - сова. А тот, кто плохо спит и ходит с черными кругами под глазами - панда!
30.06.2021 10:13
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #142

В окне встречи героев не срабатывает воговский код при ПКМ на артефактах в рюкзаке. ЕРМ не ловит событие. Такое поведение ломает скрипты и доп. функциониальность Эры. Другие щелчки и ПКМ на кукле обрабатываются ВоГ-ом на ура.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
18.09.2021 20:32
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #143

Спасибо большое. Пока что поддержка png для pcx и def отлично дружат с HD-модом, даже опция системных курсоров работает корректно. Красота! )
Разве что в окне встречи героев ПКМ на артефактах в рюкзаке перестало обрабатываться вогом.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
19.09.2021 21:31
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group