Heroes IV HD Mod

Все об аддоне - обсуждение, баги, FAQ, список изменений и многое другое.
Philipp
Level 1 Hero
Level 1 Hero
Posts: 6
Joined: Tue Aug 18, 2015 00:57

Re: Heroes IV HD Mod

Post by Philipp »

Dalai wrote:Обсуждают в том же ключе. "Круто было бы, если бы кто-то запилил..."
Понял,стыдно.
А можно точнее,чего не хватает в плане программирования,не сказать,что совсем помочь не могу,если не касается написания с нуля,то обсудим.
User avatar
Dalai
Equilibris Core Team
Equilibris Core Team
Posts: 2797
Joined: Sat Apr 02, 2005 17:38
Contact:

Re: Heroes IV HD Mod

Post by Dalai »

Philipp wrote:Понял,стыдно.
А можно точнее,чего не хватает в плане программирования,не сказать,что совсем помочь не могу,если не касается написания с нуля,то обсудим.
Да ну, перестань. Тебе-то чего стыдно? Желание совершенно нормальное, я тоже хочу Г4 в HD.

В плане программирования - надо изучить опыт HD-моддинга других игр, понять, что сработает и что не сработает конкретно для Г4, и сделать это. Всего-то :)
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
User avatar
CTPAHHuK
Level 23 Hero
Level 23 Hero
Posts: 2002
Joined: Tue Feb 05, 2008 23:12
Location: Ханты-Мансийск
Contact:

Re: Heroes IV HD Mod

Post by CTPAHHuK »

Dalai wrote: Всего-то :)
:verynice:
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

Сегодня с утра посидел и нашёл точку входа из Г4 в SetDisplayMode. Таки да, мне удалось запустить героев в 1600х900, оно работает, но рисуется в верхнем левом углу экрана, что и ожидалось, а в остальных углах - десктоп торчит.

Ну, что и было понятно, авторы заточили всю графику в 3 железно прошитых режима, 800, 1024, 1280, под них рисуется графика. Если даже "обмануть" кроме DDraw саму игру, у её графики, скорее всего (скорее всего, но не факт) снесёт крышу. о_о

Вывод: нужно как-то полностью дизассеблить всё это дело и копаться в коде подробно. Кстати, где взять хороший дизассемблер? Я сёдня с утра попытался поставить IDA 5.0 с нулевым успехом (она не запускается).

Однако, мысль: третьи герои были, скорее всего, вообще заточены под 800 и всё, в том числе, вся графика. Однако авторы HD смогли растянуть стратегическую карту и воткнуть рисование всего остального по центру. И если втыкание картинки по центру мне ещё как-то удаётся осмыслить, то как они всю карту растянули на весь экран, это мне непонятно. btw, я в DX почти полный ноль.
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

Сравнил сейчас HotA и HotA HD, бинарно, не сильно много-то и отличий. Причём лаунчер сам генерит HD по ехе-шнику
User avatar
Max_HMMI
Equilibris Core Team
Equilibris Core Team
Posts: 826
Joined: Sat Apr 02, 2005 19:45
Location: Киев

Re: Heroes IV HD Mod

Post by Max_HMMI »

Ek Wilibris wrote:Сегодня с утра посидел и нашёл точку входа из Г4 в SetDisplayMode. Таки да, мне удалось запустить героев в 1600х900, оно работает, но рисуется в верхнем левом углу экрана, что и ожидалось, а в остальных углах - десктоп торчит.
Скрин не покажешь?
Ну, что и было понятно, авторы заточили всю графику в 3 железно прошитых режима, 800, 1024, 1280, под них рисуется графика. Если даже "обмануть" кроме DDraw саму игру, у её графики, скорее всего (скорее всего, но не факт) снесёт крышу. о_о
Можно попробовать функцию-переходник написать. Хотя не факт, что получится - работу с графикой для этого нужно копать плотно.
Вывод: нужно как-то полностью дизассеблить всё это дело и копаться в коде подробно. Кстати, где взять хороший дизассемблер? Я сёдня с утра попытался поставить IDA 5.0 с нулевым успехом (она не запускается).
А что говорит при запуске?
Можешь попробовать найти и поставить более современную версию IDA 6.11 (HEX-RAYS_IDA_PRO_ADVANCED), либо официально бесплатную IDA 4.3.
Philipp
Level 1 Hero
Level 1 Hero
Posts: 6
Joined: Tue Aug 18, 2015 00:57

Re: Heroes IV HD Mod

Post by Philipp »

В сети из свободных ida 5.5 по хорошему(не офиц),я полный ноль,только каша в голове.

К примеру есть еще hd мод для диабло 2,довольно старый,еще раньше героев появился думаю,.если не ошибаюсь тоже сторонний exe,и тоже расширение резолюции с 800 и почти до бесконечности,класс конечно совсем разный,но все же,изометрия.
Я к чему это все,для примера,возможно,поможет изучить,ну а я,а я повторюсь-ноль!
ps: Кстати в сети этого мода что то не наблюдаю,хм,у меня имеется с незапамятных времен.
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

Если я ещё раз напишу что что-то сделал, но не напишу как - бросьте мне на съеденье питона Каа. Полдня пытался вспомнить, что и как я делал. >:( :roll:

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

Установка разрешения в героях в 2013(любой) студии. Чтоб опять не потерялось.
У меня опять не совпали смещения до функций в ddraw.dll с тем, что показывает depends (задним умом думаю, это из-за того, что смотрел 64-битную версию, а heroes4 использует 32-битную)
Да! Всё делается в файле heroes4.exe (я почему-то полез искать в dll-ках сначала)

Первым делом надо загрузить через студию pdb-хи системных библиотек, чтобы было видно имена функций.
Потом просто по смещению ddraw найти её в памяти. Где-то ближе к началу будет функция _DD_SetDysplayMode, на скрине видно примерное смещение от начала модуля:

Image

в ecx вы можете видеть моё расширение 0x03000400 - это 1204 на 768. Потом чуть ниже оно разложится в стеке, и будет call
собственно, сам стек вызова до DirectDrawObjectCreate, где создаётся указатель на интерфейс ddraw, оттуда я искал всё изначально:

Image

Тут уже исправленное руками расширение в ebx, 1600 х 900, высота в страшем слове.

Всё это чисто для информации, потому что нас интересует сам код heroes4.exe, так как в момент вызова ddraw вставать в бряк уже поздно, окно героев после снятия с паузы получит фокус, и снова произойдёт перещёлк режимов. Это я пишу, потому что сколько-то времени убил, пытаясь понять, чего оно у меня в 1600х900 не переключается >:( :roll:

Теперь более полезное, поднимается на уровень выше, до вызова ddraw:

вот тут должен был быть скрин со стеком и пушем значений из edi и ebp для высоты/ширины, перед вызовом ddraw, но я сейчас посмотрел картинку, и понял, что скопировал/вставил не так, поэтому скрин с другого момента. Мне приходилось делать окно студии topmost, потому что при перещёлке режима(на брекпоинте), окно героев вставало поверх всех окон, и только окна-topmost можно было поднять выше. Стало быть, студию пришлось топмостить, чтобы поменять руками регистры и запустить дальше. Поэтому скрины приходилось вставлять в паинт вслепую :|

ну и последний скрин, того, как оно во "весь экран":
Image

заново открыл окно с настройками, "во весь экран включено", но разрешение тут последнее выбранное, на самом деле 1600х900. Сбоку-снизу ничего не рисуется, артефакты от студии торчат и часть десктопа.

такие дела :roll:

upd: пока не забыл: функция, из которой зовётся ddraw с установкой режима - это один большой хэндлер основного окна игры, с счастью разработчики было старой школы, совсем старой :) Это важно потому что в хендлере можно поискать кейсы на обработку графики и мыша.
User avatar
Max_HMMI
Equilibris Core Team
Equilibris Core Team
Posts: 826
Joined: Sat Apr 02, 2005 19:45
Location: Киев

Re: Heroes IV HD Mod

Post by Max_HMMI »

Ek Wilibris wrote:Мне удалось запустить Иду, но сильно в ней не копался, пока непривычно, и герои что-то в ней с первого раза не стартанули, выпал эксепшн. Ну ок, потом покопаюсь, как опять будет время. (для запуска надо было стартануть из-под администратора)
Не советую. :) Для отладки лучше использовать бесплатный OllyDbg 1.10 (либо его клон). Он мелкий, шустрый, нормально работает в x32 и x64, причем без прав администратора. Lost его пользовал, я пользую, и те, кто придут за мной, тоже будут пользовать. :) А в IDA проводить анализ кода, давать связные имена функциям и переменным, писать комментарии.
вот тут должен был быть скрин со стеком и пушем значений из edi и ebp для высоты/ширины, перед вызовом ddraw, но я сейчас посмотрел картинку, и понял, что скопировал/вставил не так, поэтому скрин с другого момента.
Но хоть адрес функции записал? ;)
заново открыл окно с настройками, "во весь экран включено", но разрешение тут последнее выбранное, на самом деле 1600х900. Сбоку-снизу ничего не рисуется, артефакты от студии торчат и часть десктопа.
Думаю, что для дальнейшего шага нужно четко представлять, как работает DirectX. Тогда можно уже более осмысленно искать места, где устанавливается/меняется разрешение и как изменение этих данных будет влиять на игру.
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

Max_HMMI wrote:Не советую
Почему? Опасно, конечно, но вроде дистрибутив я с официального сайта скачал.
Max_HMMI wrote:OllyDbg 1.10
Ага, надо будет глянуть. Надо бы ещё WinDbg скачать, но он вроде не умеет стартовать процессы. А далее как раз анализ будет нужен.
Max_HMMI wrote:и те, кто придут за мной, тоже будут пользовать.
звучит как-то пессимистично :)
Max_HMMI wrote:Но хоть адрес функции записал?
Нет, но она там одна, тот самый хендлер, выше неё только GetMessage + Translate/Dispatch. В этот раз я его не видел, а в прошлый да, даже удивился. Видимо, на шестой студии создавали игру :) Ищется хендлер через тот же ddraw любой вызов. Я ставил бряк в вышеописанных функциях. Потом шёл в героев, в настройки, выставлял "во весь эркан". После "применить" игра "выходит" из режима GDI и включает DirectDraw, для этого идёт в ddraw, тут мы её и ловим... Так вот, та функция, из которой мы в ddraw входим - и есть хендлер. А кстати, на 1-м и 2-м скрине адрес входа есть в окне стека вызовов.
Я тут ещё потом спокойно подумал (почитав статьи по тем двум линкам), надо первым делом искать, откуда значения размера экрана попадают в хендлер, а потом и в ddraw. Это вопрос усидчивости и времени, у меня есть такой опыт по анализу в асме. Далее, я надеюсь, у авторов была заточка на положение кнопок в GUI от размера окна. Для начала можно вообще забить на DX и копать GDI, он для меня вообще родной :) Все системные вызовы можно перехватить. Если авторов не угораздило написать свою графическую либу, то отлов BitBlt, StretchBlt с заменой позиций и размера - это оно. Если удастся заменить размер и сдвинуть кнопки к краю окна, это будет начало конца :yes: Но неизвестно, когда я заново за дело усядусь :roll: возможно, что вообще никогда. Далай просил говорить правду, так что это вот она :|

а ещё надо как-то сюда выписать ещё свои идеи по игре, у меня они копятся, я их часто забываю, если не записываю :|
User avatar
CTPAHHuK
Level 23 Hero
Level 23 Hero
Posts: 2002
Joined: Tue Feb 05, 2008 23:12
Location: Ханты-Мансийск
Contact:

Re: Heroes IV HD Mod

Post by CTPAHHuK »

Что тут? Получилось играть 1600на1200??
User avatar
Max_HMMI
Equilibris Core Team
Equilibris Core Team
Posts: 826
Joined: Sat Apr 02, 2005 19:45
Location: Киев

Re: Heroes IV HD Mod

Post by Max_HMMI »

Ek Wilibris wrote:
Max_HMMI wrote:Не советую
Почему? Опасно, конечно, но вроде дистрибутив я с официального сайта скачал.
Просто тяжел IDA для таких работ. Я как-то пробовал запустить там под отладкой "Героев" - ничего не вышло (правда, это было в одной из старых версий IDA). А OllyDbg запускает "Героев" влет, плюс, даже без плагинов имеет очень достойный функционал. И систему практически не грузит.
Если авторов не угораздило написать свою графическую либу, то отлов BitBlt, StretchBlt с заменой позиций и размера - это оно.

Думаю - вряд ли (в смысле, свою либу писали). Зачем?
Но неизвестно, когда я заново за дело усядусь :roll: возможно, что вообще никогда. Далай просил говорить правду, так что это вот она :|
И вот так всегда... :cry:
Philipp
Level 1 Hero
Level 1 Hero
Posts: 6
Joined: Tue Aug 18, 2015 00:57

Re: Heroes IV HD Mod

Post by Philipp »

А можно отследить то,как растягивает,точнее подстраивается под абсолютно любое разрешение редактор карт?Правда он не в полноэкранном режиме работает,но разворачивается и увеличивает именно видимую площадь карты,может в нем и есть ключ к разгадке ?
User avatar
CTPAHHuK
Level 23 Hero
Level 23 Hero
Posts: 2002
Joined: Tue Feb 05, 2008 23:12
Location: Ханты-Мансийск
Contact:

Re: Heroes IV HD Mod

Post by CTPAHHuK »

Philipp wrote:А можно отследить то,как растягивает,точнее подстраивается под абсолютно любое разрешение редактор карт?Правда он не в полноэкранном режиме работает,но разворачивается и увеличивает именно видимую площадь карты,может в нем и есть ключ к разгадке ?
Это самая полезная штука HD
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

Оказывается, нотификации на почту не работают :\
Max_HMMI wrote:OllyDbg
Ага, скачал, но ещё не смотрел
Max_HMMI wrote:Думаю - вряд ли (в смысле, свою либу писали). Зачем?
Ну, в смысле, не прям либу, а код-прослойку. Это удобно, я сам так делал, когда работал с графикой. Т.е. рисуешь не прям в DC, а в некий абстрактный массив байт, предварительно сняв его с DC(если надо), и после рисования положив обратно в DC. Это удобно тем, что само общение с DC требует много ресурсов. К примеру, нарисовать объект с тенью в битмаповый массив не проблема: берём спрайт, копируем, контраст в ноль, полупрозрачность, сдвигаем, рисуем, поверх рисуем объект. Просто, но если делать это с DC - это очень сложно.
Max_HMMI wrote:И вот так всегда...
Ну :(
Но нет худа без добра ^_^ В качестве слабого оправдания и на правах оффтопа: я тем временем немного принимал участие в разработке игры, очень схожей по механике с HMM4 Это очень много времени и сил занимает, надеюсь это там хоть какую-то пользу принесёт...
Philipp wrote:А можно отследить то,как растягивает,точнее подстраивается под абсолютно любое разрешение редактор карт?Правда он не в полноэкранном режиме работает,но разворачивается и увеличивает именно видимую площадь карты,может в нем и есть ключ к разгадке ?
Не, тут всё просто, редактор чисто оконный, рисует спрайты слоями в рамках своей видимой области. С другой стороны, ничего не просто, так как то, как управлять этой областью знает только сам редактор. С ещё более другой стороны, всё просто, так как область рисования игровой карты - стандартное окно, которым легко можно управлять сторонними средствами. Окно же игры - это одно монолитное виндовое окно, которое внутри себя "делится" на участки и разрисовывается (неизвестным) кодом игры.

PS: Всех с наступающим новым годом! :)
baratorch
Level 2 Hero
Level 2 Hero
Posts: 12
Joined: Mon Jan 25, 2016 07:35

Re: Heroes IV HD Mod

Post by baratorch »

Всем привет.
Есть желание заняться ХД модом для 4ки (Игра мной любима, в свое время ее вдоль и поперек в сингле изъездил).
Однако, во-первых , не хочется начинать на совсем пустом месте, а во-вторых, разумеется, нужна совместимость с эквилибрис, поэтому было-бы замечательно, если бы команда Эквилибриса (проект жив?) поделилась со-мной наработками (база IDA, исходники мода).
И вообще я моддинг 4ки не изучал, иcкать не оч. охото. Расскажите, пожалуйста, какой экзешник 4-ки самый актуальный вообще и для моддинга в частности. Какие самые актуальные инструменты для редактирования ресурсов (интересует, естественно, графика)? И где все это взять?
User avatar
CTPAHHuK
Level 23 Hero
Level 23 Hero
Posts: 2002
Joined: Tue Feb 05, 2008 23:12
Location: Ханты-Мансийск
Contact:

Re: Heroes IV HD Mod

Post by CTPAHHuK »

Привет, Baratorch :yessir: ОХ для 4 тоже в твоих планах?
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

baratorch wrote:Есть желание заняться ХД модом для 4ки
отлично! :)
baratorch wrote:И где все это взять?
я всё это в своё время нашёл в интернете, с описанием где какие таблицы и за что отвечают, тулы для распаковки-упаковки, где уже не помню, давно это было, да и это к HD отношение мало имело, просто интересно было посмотреть. Хотя если править графику, то да, это полезно посмотреть.

По HD-моду: можешь почитать мои посты тут. Основной exe, отвечающий за отрисовку - heroes4.exe, все мои наработки тут описаны. IDA не использовал. Остановился на том, что следующая цель - найти место, где лежать (или откуда получаются) внутренние данные о текущем используемом игрой разрешении.
baratorch
Level 2 Hero
Level 2 Hero
Posts: 12
Joined: Mon Jan 25, 2016 07:35

Re: Heroes IV HD Mod

Post by baratorch »

Ek Wilibris wrote: я всё это в своё время нашёл в интернете
Я конечно могу сам все найти. Но у меня ограничено время, не хотелось бы распылять его на то, с чем мне могут помочь другие.

По HD-моду: можешь почитать мои посты тут. Основной exe, отвечающий за отрисовку - heroes4.exe, все мои наработки тут описаны. IDA не использовал. Остановился на том, что следующая цель - найти место, где лежать (или откуда получаются) внутренние данные о текущем используемом игрой разрешении.
IDA - безальтернативная вещь для реверсинга кода. Для отладки удобнее всего OllyDbg.

Для тех кто не в курсе, мною уже более 6 лет разрабатывается(развивается) HD мод для 3-ки: (https://sites.google.com/site/heroes3hd/rus/description),
Так же я сделал редактор карт для HoMM3 HotA, и немало поучаствовал в разработке самой HotA.

Короче знание дела, опыт у меня есть. И есть уверенность в том что моих знаний, опыта и наработок достаточно чтобы сделать HD мод для 4ки.
Вот только времени у меня сейчас очень немного, и нет уверенности что его вообще хватит, поэтому я и прошу помощи.

В свое время "минус один . пре пре пре ... пре альфа" версия ХД мода для тройки, которую уже можно было пощупать, была сделана чуть более чем за два месяца, еще через 3 месяца была выпущена версия 1.0
На данный момент HoMM3 HD - это монстр: около 2000 патчей и хуков, более 100 тысяч строк кода на C++, куча всякого функционала помимо простой смены разрешения. Одно из последних достижений - одновременный ход в сетевой игре.
Начинал я очень смутно представляя что и как делать, с весьма поверхностными знаниями ассемблера и моддинга исполняемого файла.
Зато было очень много свободного времени и была очень высокая мотивация, сейчас этого нет. Н есть опыт, наработанный инструментарий и четкое знание что делать.
User avatar
Ek Wilibris
Level 11 Hero
Level 11 Hero
Posts: 235
Joined: Sun Nov 17, 2013 19:07

Re: Heroes IV HD Mod

Post by Ek Wilibris »

baratorch wrote: Я конечно могу сам все найти. Но у меня ограничено время, не хотелось бы распылять его на то, с чем мне могут помочь другие.
Ну я вот, правда, давно это искал. Сейчас пошарился по винту, нашёл только екстрактор, mh4, за 2002 год:
readme.txt wrote: --------------------
| mh4 (version 0.06) |
--------------------
By Olivier Soares <olivier@etranges-libellules.fr>
Download the last release here: http://www.archangelcastle.com or http://www.strategyplanet.com/homm
With this program, you can extract and modify data (music, maps, sprites, etc.) from the game Heroes of Might and Magic IV (c)3DO & New World Computing.
...
всё, что есть. Могу куда-нить выложить.
IDA - безальтернативная вещь для реверсинга кода. Для отладки удобнее всего OllyDbg.
у меня просто не было времени с ними обоими поразбираться
Для тех кто не в курсе, мною уже более 6 лет разрабатывается(развивается) HD мод для 3-ки: (https://sites.google.com/site/heroes3hd/rus/description),
Так же я сделал редактор карт для HoMM3 HotA, и немало поучаствовал в разработке самой HotA.
А! Так это тебе я письмо писал, чтобы узнать детали модинга hmm3, но не получил ответ, но в результате ты тут сам :)
Короче знание дела, опыт у меня есть. И есть уверенность в том что моих знаний, опыта и наработок достаточно чтобы сделать HD мод для 4ки.
Вот только времени у меня сейчас очень немного, и нет уверенности что его вообще хватит, поэтому я и прошу помощи.

В свое время "минус один . пре пре пре ... пре альфа" версия ХД мода для тройки, которую уже можно было пощупать, была сделана чуть более чем за два месяца, еще через 3 месяца была выпущена версия 1.0
На данный момент HoMM3 HD - это монстр: около 2000 патчей и хуков, более 100 тысяч строк кода на C++, куча всякого функционала помимо простой смены разрешения. Одно из последних достижений - одновременный ход в сетевой игре.
Начинал я очень смутно представляя что и как делать, с весьма поверхностными знаниями ассемблера и моддинга исполняемого файла.
Зато было очень много свободного времени и была очень высокая мотивация, сейчас этого нет. Н есть опыт, наработанный инструментарий и четкое знание что делать.
Та же критическая фигня со временем, но чем смогу, помогу.
Post Reply