Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Меняем разрешение в Героях (HDmod)
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > HD-мод
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55
Дьяк
Да - извини. Напутал с адресом. 0x4F0156 = 0x4F0516

Добавлено ([mergetime]1284897923[/mergetime]):
Поправил в первом посте, чтоб людей с толку не сбивать больше.
baratorch
перед прыжком на 0x4F051B кроме ebp, esp как минимум нужно установить правильные значения esi и edi, т.к они используются далее после 0x4F051B.

попробовал прыгнуть (с 0x66 = загрузить игру) из адвенча менеджера - вроде работает нормально и память никуда не утекает.

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

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

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

Но всё равно спасибо большое за твое решение, Дьяк! В любом случае это шаг вперед!
Дьяк
esi и edi вроде не используются. Я их специально обнулял и проверял. Адрес можно?
baratorch
какой адрес?

вроде как на еди действительно пофиг, а вот еси должен быть равен 0 (далее по коду [697308] должен сравниваться именно с 0). Если еси будет равен 1 при джампе, мы перед тем как увидеть главное меню посмотрим видео проигрыша сценария.
Дьяк
Ну вроде разобрался. Ща выложу свои соображения.
Дьяк
И так. Есть в игре различные менеджеры которые обеспечивают различные функции игры. Так вот:

0x6992D0 dd -> heroWindowManager
0x699414 dd -> soundManager
0x699420 dd -> combatManager
0x699530 dd -> inputManager
0x6992B8 dd -> advManager
0x69954C dd -> townManager

ну вроде все. advManager обнуляется автоматом. Т.к. выход происходит с карты приключений. Остальные должны обнулятся вручную. (Есно, если мы выходим из боя то нужно вдобавок обнулить combatManager).

Итак. Данные адреса - это указатели на класс. Т.е. опишу как классы выглядят (это очень условно, чтоб понятно было как добраться до деструктора):

struct Metod{
int Constructor;
int Destructor;
................
};

struct CombatManager{
Metod met;
.........
}*PMan;

Т.е. чтоб добраться до адреса процедуры деструктора нужно:
int AdressDestructora = PMan->met.Destructor;

Ну вот - теперь вроде должно работать.

Добавлено ([mergetime]1284922899[/mergetime]):
Аргумент передаваемый в функцию деструктора - адресс по которому располагается класс менеджера. Т.е. в ecx должен лежать адрес класса перед вызовом.
Дьяк
И так итог:
по адресу: 0x4F0516 (это начало карты) ставим свой хук и запоминаем esp, edi, esi и ebp в переменные. Это нам нужно будет для выхода с карты. Это самое сложное. Теперь чтобы выйти с карты достаточно сделать jmp из любого места кода на адрес 0x4F051B перезаписав предварительно sp, edi, esi и ebp и положив по адресу 697728 код выхода. 0x66 - код выхода "загрузить игру" 0x6C - код выхода "главное меню".

Обнулить нужные манагеры:
0x6992D0 dd -> heroWindowManager
0x699414 dd -> soundManager
0x699420 dd -> combatManager
0x699530 dd -> inputManager
0x69954C dd -> townManager

На этом пожалуй все. Если чего вдруг и осталось то это мелочи должны быть.
Дьяк
Еще нашел 0x6992B0 dd -> mouseManager. Но вроде его обнулять не нужно.
baratorch
для безглючного "загрузить игру" из окна опций битвы (BattleOptionsDlg) мне понадобилось следующее:

1. Вызов WindowManager->RemoveDialog(BattleOptionsDlg)
понятно WindowManager = [0x6992D0]
WindowManager::RemoveDialog = 0x602A60
BattleOptionsDlg = [0x694FE0]

2. вызов только лишь деструктора СombatManager

3. джамп по указанному Дьяком способу.

именно из-за неисполнения пункта 1 происходило это:
Цитата
попробовал прыгнуть из опций битвы - сразу после появления главного меню Игра вылетает при попытке обратиться к какому-то виртуальному методу какого-то несуществующего диалога.

То есть, после джампа диалог опций битвы, видимо, уничтожается, но не исключается из списка WindowManager'a
Как я понял, мы должны ручками исключать из менеджера окон все простые диалоги, вызванные поверх окна како-го либо менеджера (приглючений, битвы, города, обмена, ...). а затем уже вызывать деструктор менеджера.

Не знаю стоит ли перестраховываться и деструктить все подобные менеджеры или удалять только активные (окна которых висят поверх окна адвенча менеджера).

Ну что ж, спустя 11 лет у нас наконец появятся долгожданные кнопки! Ура!!
baratorch
Ан нет, глюки после данного способа все-таки есть, будем копать дальше...
Дьяк
Цитата(baratorch @ 20 Sep 2010, 00:13)
для безглючного "загрузить игру" из окна опций битвы (BattleOptionsDlg) мне понадобилось следующее:

1. Вызов WindowManager->RemoveDialog(BattleOptionsDlg)
понятно WindowManager = [0x6992D0]
WindowManager::RemoveDialog = 0x602A60
BattleOptionsDlg = [0x694FE0]


А если вызвать деструктор а потом конструктор. Не прокатит?


Что за глюки?
baratorch
Уф! родил, наконец:

Цитата
для безглючного "загрузить игру" из окна опций битвы (BattleOptionsDlg) мне понадобилось следующее:

1. Вызов WindowManager->RemoveDialog(BattleOptionsDlg)
понятно WindowManager = [0x6992D0]
WindowManager::RemoveDialog = 0x602A60
BattleOptionsDlg = [0x694FE0]


2.

a) вызов функции 0x4B0950 с первым (ecx) аргументом [0x699550] и вторым аргументом СombatManager = [0x699420]

эта функция вызывает 2-ю функцию из виртуальной таблицы менеджера битвы( - не совсем деструктор, скорее деактиватор) и меняет значения некоторых полей первого и второго аргументов. Если мы вместо этой 0x4B0950 функции просто вызовем деактиватор менеджера битвы, то после первой битвы следом начтого сценария невозможно будет продолжать игру.

b) изменение значений полей AdventureManager = [0x6992B8]:

*(int*)(AdventureManager + 536) = -1;
*(int*)(AdventureManager + 540) = -1;

в этих полях хранятся x и y координаты атакованной клетки, если их не установить в -1, то при рестарте сценария атакованное до этого существо на карте не будет анимировать - будет в позе обороны.

в поле *(int*)(AdventureManager + 544) хранится z-координата атакованной клетки но ее изменение не требуется


Цитата
3. джамп по указанному Дьяком способу.


ничего лишнего в коде, работает чётко, утечек памяти нет, при сетевой игре кинутые игроки получают относительно адекватную реакцию игры.
baratorch
!?

Лентяй
Вот! То, что было в 4ке но так не хватало в 3ке!
Throutle
Оффтоп. Имхо, то что было в 4-ке и так не хватало в 3-ке это кОрОваны от жилищ...
baratorch
Версия 2.50f

Прошу прощения у авторов проектов, ориентирующихся на ХД мод, за то что изменил структуру файлов и папок хайреза.

Цитата
[!] Изменена структура папок и файлов в \HiRezData (не совместима с более ранними версиями);
файлы .def, .bmp, .txt, .fnt  хранятся в \HiRezData\Common и \HiRezData\Packs\*;
общие для всех версий игры настройки и опции хранятся в файле \HiRezData\HiRez.ini;
специфические настройки разных версий и локализаций хранятся в \HiRezData\Packs\*\Pack.ini;

[+] для разных версий игры теперь не требудется скачивать и устанавливать дополнительные файлы;
[+] утилита Heroes3HDSetup.exe версии 2.50 стала удобнее и полезнее;
[+] дополнительные кнопки "Загрузить игру", "Начать заново", "Главное Меню", "Выйти из игры" в окне опций битвы;
[+] быстрое разделение/объединение отрядов в окне гарнизона;
[+] для того чтобы играть случайные карты игре не требуются файлы h3blade.exe и Data\h3ab_*;
[+] для игры за сопряжение и кампании клинка (AB) в Полном Собрании (Complete) не требуется наличие файла h3blade.exe;
[+] файлы .fnt читаются игрой из \HiRezData\Common;
[+] Текст в файле HiRez.txt для Польского Золтого Издания переведен на польский язык.

[-] в окне обмена героев с в ключенным расширенным управлением армии не работало стандартное разделение отрядов по [shift]+клик;
[-] баг поддержки 32-битного режима мог приводить к краху игры;
[-] в Полном Собрании (Complete) не работала кнопка Об Авторах (Credits);
[-] баг оригинальной игры: при наведении мыши и пкм на артефакт в рюкзаке в окне торговцев артефактами приводил к краху игры, если один первый или больше слотов были пусты. (теперь перед загрузкой окна торговцев в рюкзаке ликвидируются пробелы);


скачать: https://sites.google.com/site/heroes3hd/rus/download

на сайте появилась страничка "История изменений" (чейнджлог стартует с этой версии).
Spartak
baratorch, игра у меня виснет, когда играем через хамачи с другом, при передаче хода от него ко мне, если у меня в этот момент активное окно не игра, а другие приложения (например редактор карт - я карту строю или интернет эксплорер)
zmicer
На Воге и Эре при загрузке ругается на script00
KEHu
у меня тоже на скрипт ругаеться только на другой
Berserker
Неужели бараторч и в GetSpreadshit вставил хук...имхо вообще хайрезу нельзя хуки на подгрузку ресурсов делать.
baratorch
блин хук там давно был, просто код теперь другой, ща верну старый..
baratorch
исправление: HiRez.dll 2.51
http://sites.google.com/site/heroes3hd/fil...redirects=0&d=1
Аларик
а для чего в новой менюшке место для четырёх кнопок оставлено? или туда позже планируется что то исчо вставить?
Haart of the Abyss
Если вы про эти, то они были всегда. Если нет — пардон, обознался.
baratorch
Цитата(Spartak @ 23 Sep 2010, 23:35)
baratorch, игра у меня виснет, когда играем через хамачи с другом, при передаче хода от него ко мне, если у меня в этот момент активное окно не игра, а другие приложения (например редактор карт - я карту строю или интернет эксплорер)

странно. у кого-нибудь еще это наблюдается?
у меня при игре <сам с собой> всё ок.
не знаю.. попробуй с отключенным 32-bit.

Цитата(Аларик)
а для чего в новой менюшке место для четырёх кнопок оставлено? или туда позже планируется что то исчо вставить?

ну можно туда например воткнуть опцию "быстрая битва", хотя сомневаюсь в полезности этого.

Наверное я переделаю сделанное. Cтандартную кнопку "По умолчанию" сделаю в левом углу, а справа уберу кнопку "выйти из игры", и оставшиеся 4-е кнопки сгруппирую так чтобы "Вернуться в игру" оказалась в правом углу. Представили?
hippocamus
Лучше эти 4 кнопки выстроить в ряд.
baratorch
2.52f

http://sites.google.com/site/heroes3hd/rus/download


Цитата
[+] переделан и доделан диалог Опций битвы
-изменено положение новых и старых кнопок;
-кнопкам "Загрузить игру", "Начать заново", "Главное меню" добавлена стандартная реакция на клик правой;
-в сетевой игре кнопки "Загрузить игру", "Начать заново" недоступны как и в окне Системных Опций в оригинале;

[-] ошибка в английской версии HiRez.txt (слово "whant" исправлено на "want");
[-] для того чтобы играть случайные карты игре не требуются файлы Data\h3ab_* (работало криво, да и не нужно особо).




по-моему так аккуратнее, красивее и удобнее
deadman_blr87
Цитата(baratorch @ 24 Sep 2010, 17:53) *
Цитата(Spartak @ 23 Sep 2010, 23:35)
baratorch, игра у меня виснет, когда играем через хамачи с другом, при передаче хода от него ко мне, если у меня в этот момент активное окно не игра, а другие приложения (например редактор карт - я карту строю или интернет эксплорер)

странно. у кого-нибудь еще это наблюдается?
у меня при игре <сам с собой> всё ок.
не знаю.. попробуй с отключенным 32-bit.


Такая же ерунда, если сделать активным другое окно во время передачи хода игра виснет
Spektanto
Цитата(deadman_blr87 @ 26 Sep 2010, 07:03) *
Цитата(baratorch @ 24 Sep 2010, 17:53) *
Цитата(Spartak @ 23 Sep 2010, 23:35)
baratorch, игра у меня виснет, когда играем через хамачи с другом, при передаче хода от него ко мне, если у меня в этот момент активное окно не игра, а другие приложения (например редактор карт - я карту строю или интернет эксплорер)

странно. у кого-нибудь еще это наблюдается?
у меня при игре <сам с собой> всё ок.
не знаю.. попробуй с отключенным 32-bit.


Такая же ерунда, если сделать активным другое окно во время передачи хода игра виснет

Только что проверил - игра виснет только в полноэкранном режиме. Если играть в окне - всё нормально.
Причём у меня зависает, только если при альт-табе происходит смена разрешения экрана.
baratorch
спрошу все же. Это происходит и с включенной и отключенной встроенной поддержкой 32-bit? Просто мне кроме как 32-bit подозревать нечего.

Spektanto
Цитата(baratorch @ 26 Sep 2010, 12:08) *
спрошу все же. Это происходит и с включенной и отключенной встроенной поддержкой 32-bit? Просто мне кроме как 32-bit подозревать нечего.

Только что проверил - без 32бит-патча ничего не зависает
baratorch
->Спасибо
Throutle
Эхъ... спасибы не работают ((( Бараторч! Ты рулишь!
hippocamus
baratorch, ты гений!
а ты не мог бы посмотреть, почему игра вылетает, если в карте больше чем 2 уровня? байт #0A в распакованной карте указывает на количество уровней карты.
http://heroes3towns.com/test-2.h3m
В этой карте 4 уровня.
fireman
http://sites.google.com/site/heroes3hd/

Цитата
2.53f (29.09.2010)

[+] добавлен режим (альтернатива 32-битному), который при запуске игры автоматически меняет цветность экрана на 16-бит, что позволяет играть в окне не меняя режим экрана вручную; при завершении игры (в т.ч. аварийном) восстанавливается исходный цветовой режим.

[-]критический баг сетевой игры при вертикальном разрешении от 600 до 664.
[-]критический баг 32-битного режима.

[ ]перерисовaна малая панель ресурсов
deadman_blr87
Baratorch, что в планах сделать еще? Может быть стоит задуматься о нормальном окне чата в сетевой игре?
baratorch
В ближайших планах пока отдохнуть )
А вообще последнее чем занимался - это добавлением кнопок обмена артефактами в окно обмена.
Дальше хочу полностью переделать окно обмена, поработать над окном города, добавить в нем кнопки обмена армиями и быстрый найм существ.

Хочу сделать растягиваемое поле битвы. Идеальный проект на эту тему давно придумал.

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

И про исправление оригинальных ошибок тоже забывать не буду. Надеюсь по мере накопления знаний о внутренностях прогресс в этом направлении будет идти.

После всего этого или параллельно с этим хочу наконец начать делать свой геймплейный мод. Сперва конечно же правка баланса и усиление AI.

вот как-то так

Цитата
Может быть стоит задуматься о нормальном окне чата в сетевой игре?

а поподробнее, я просто по сети не рублюсь и чатом соотв. не пользуюсь.

SAG19330184
Цитата(baratorch @ 30 Sep 2010, 01:33) *
я просто по сети не рублюсь

попробуй, понравится good.gif
SerAlexandr
Хотел написать про курицу и яйца, но передумал
hippocamus
baratorch, ну вот ты работу с картами сверхбольших размеров наладил, а за многоуровневые не хочешь браться?
Shurup
Кстати вопрос: Поставил HD на SOD и обмен/делление стеков существ заработало прекрасно, а у сестры на WOG (3.58f) ни нового экрана обмена, ни дробление стека на равные части, ни перетаскивание всех, кроме одного.

С чем это может быть связано? Что-то нужно дополнительно в воге включать-выключать?
hippocamus
Почитай, про это было написано - там конфликт с Опытом существ, и чтобы включить поройся в ini файле.
Shurup
Цитата(hippocamus @ 30 Sep 2010, 23:03) *
Почитай, про это было написано - там конфликт с Опытом существ, и чтобы включить поройся в ini файле.

Разобрался.

Кстати, если еще принимаются пожелания , то есть еще два пожелания по поводу обмена.
Суть такова:
1. Просмотр книги заклинаний при обмене.
- при обмене войсками между героями невозможно обменяться книжками - это понятно. Но можно ли (опционально) вместо сообщения "этот предмет не возможно обменять" отбражать книгу этого героя? Было бы удобно при обмене свитками.
2. Обмен между гостем и гарнизонным героями в замке.
- Опциональная возможность вызывать окно обмена не выходя из замка.
baratorch
нет никаких ограничений по приему пожеланий.

открытие книги заклинаний при обмене, думаю совсем несложно сделать.
обмен армиями в городе я сделаю, я написал об этом выше.
вызов окна обмена не выходя из города - очевидно необходимая штука, да и реализовать просто. НО! делать ее в хд моде не буду - ибо обмен артефактами в городе без затрат хода - это уже изменение правил игры.
Поэтому разве что сделать так, чтобы при вызове тратился ход обоих героев.. но все равно не буду делать.
Оставлю эту фичу для своего геймплейного мода.


Цитата(SAG19330184 @ 30 Sep 2010, 17:14) *
Цитата(baratorch @ 30 Sep 2010, 01:33) *
я просто по сети не рублюсь

попробуй, понравится good.gif

да я не сомневаюсь, но если я играть буду, кто будет ХД делать?)
вообще меня пугает длительность сражений...

Цитата('hippocamus')
baratorch, ну вот ты работу с картами сверхбольших размеров наладил, а за многоуровневые не хочешь браться?

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

Кстати Я когда делал свою отрисовку миникарты столкнулся с дебилизмом программеров:
В большинсве случаев 3 координаты позиции на карте хранятся и передаются в одной четырехбайтовой переменной, побитово выглядит так: 00zzzzxx xxxxxxxx 000000yy yyyyyyyy - целые значения со знаком.
Как можно было додуматься до такого изврата и, главное, зачем я не знаю. Отсюда видно ограничение стандартного кода в 8 ..или 9 уровней карты. Ибо в zzzz можно записать 16 значений со знаком.
Etoprostoya
Иногда мне кажется, что проще дизассемблировать весь геройский екзешник нафих, переписав его на C\C++, и не мучиться с патчами а править непосредственно код и перекомпилировать. А потом я вспоминаю, сколько уже всяких патчей наделали, в том числе такой глобальный патч, как WoG, которые после рекомпиляции уже не будут работать и никому это дизассемблирование в принципе не нужно будет...
Haart of the Abyss
Лучше вспомни, сколько человек уже брались за переписывание экзешника. И сколько занимаются этим до сих пор.

Цитата
А потом я вспоминаю, сколько уже всяких патчей наделали, в том числе такой глобальный патч, как WoG, которые после рекомпиляции уже не будут работать и никому это дизассемблирование в принципе не нужно будет...
Метко подмечено. Между прочим, именно поэтому тройничный и лицевой нервы иннервируют не только мышцы лица, но и никак, казалось бы, не связанные с ними мышцы в глубине уха (при этом едва не перекрещиваясь друг с другом). И по этой же причине мы испражняемся через отверстие, развивающееся из первичного рта.
baratorch
Цитата(etoprostoya)
Иногда мне кажется, что проще дизассемблировать весь геройский екзешник нафих, переписав его на C\C++, и не мучиться с патчами а править непосредственно код и перекомпилировать.

все-таки это не проще. если надо, скажем для какого-то результата поменять всего одну константу в функции, декомпилить и переписывать всю функцию длиной в 500 строк не самое эффективное решение. Да и декомпиляция процесс не такой же легкий и однозначный как дизасм. ибо и HexRays допускает ошибки, которые очень трудно искать. Да и декомпиляция бывает разной: тупо переписать то, что выдает при первом запуске иды хекс рэйс - это одно, а полностью реверснутые классы их иерархия, их методы в т.ч. виртуальные, с полным пониманием назначения каждого поля и каждого метода - это другое если все реверсеры героев соберутся в одну команду, бросят всё модописание и отталкиваясь от общих наработок начнут работать над полным реверсом, то рано или поздно мы получим исходники героев.

Сам я если в функции собираюсь делать значительные изменения и если у меня реверснуты все типы и все функции используемые в этой функции (или почти все), то я естественно ее декомпилю и полностью переписываю на высоком уровне (в с++). Но иногда проще обойтись простым битхакингом.
Думаю так же работают и вог-тим и хота-тим и еще кто-нибудь там...


***

Народ. Требуется помощь. Я ща редизайню окно обмена и пришел к выводу что кнопка "получить от союзника" неоправданно большая (в новый дизайн точно не вписывается). И ей требуется замена с пиктограммой вместо текста. В связи с этим прошу предложить концепции или эскизы пиктограммы "получить от союзника". У меня есть мысли по этому поводу, но я их озвучивать не буду, чтобы не ограничивать вашу фантазию. Спасибо.
Shurup
Цитата(baratorch @ 02 Oct 2010, 18:56) *
...пришел к выводу что кнопка "получить от союзника" неоправданно большая (в новый дизайн точно не вписывается). И ей требуется замена с пиктограммой вместо текста. В связи с этим прошу предложить концепции или эскизы пиктограммы "получить от союзника". У меня есть мысли по этому поводу, но я их озвучивать не буду, чтобы не ограничивать вашу фантазию. Спасибо.

А где эта кнопка есть/будет?
baratorch
есть при игре по сети при обмене с союзником
hippocamus
Что, можно будет просить у союзника ресурсы?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.