IPB

Здравствуйте, гость ( Вход | Регистрация )

138 страниц V  « < 69 70 71 72 73 > »   
Reply to this topicStart new topic
> Меняем разрешение в Героях (HDmod), дополнение к Heroes III
Дьяк
сообщение 19 Sep 2010, 15:05
Сообщение #1401

Member
Сообщений: 97
Спасибо сказали: 80 раз




Да - извини. Напутал с адресом. 0x4F0156 = 0x4F0516

Добавлено ([mergetime]1284897923[/mergetime]):
Поправил в первом посте, чтоб людей с толку не сбивать больше.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 19 Sep 2010, 18:24 (Сообщение отредактировал baratorch - 19 Sep 2010, 18:35)
Сообщение #1402

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




перед прыжком на 0x4F051B кроме ebp, esp как минимум нужно установить правильные значения esi и edi, т.к они используются далее после 0x4F051B.

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

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

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

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

Но всё равно спасибо большое за твое решение, Дьяк! В любом случае это шаг вперед!


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 19 Sep 2010, 19:04
Сообщение #1403

Member
Сообщений: 97
Спасибо сказали: 80 раз




esi и edi вроде не используются. Я их специально обнулял и проверял. Адрес можно?
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 19 Sep 2010, 20:43
Сообщение #1404

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




какой адрес?

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


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 19 Sep 2010, 20:59
Сообщение #1405

Member
Сообщений: 97
Спасибо сказали: 80 раз




Ну вроде разобрался. Ща выложу свои соображения.
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 19 Sep 2010, 22:01 (Сообщение отредактировал Дьяк - 19 Sep 2010, 22:33)
Сообщение #1406

Member
Сообщений: 97
Спасибо сказали: 80 раз




И так. Есть в игре различные менеджеры которые обеспечивают различные функции игры. Так вот:

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 должен лежать адрес класса перед вызовом.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 19 Sep 2010, 22:31
Сообщение #1407

Member
Сообщений: 97
Спасибо сказали: 80 раз




И так итог:
по адресу: 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

На этом пожалуй все. Если чего вдруг и осталось то это мелочи должны быть.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 19 Sep 2010, 22:57
Сообщение #1408

Member
Сообщений: 97
Спасибо сказали: 80 раз




Еще нашел 0x6992B0 dd -> mouseManager. Но вроде его обнулять не нужно.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 20 Sep 2010, 00:13 (Сообщение отредактировал baratorch - 20 Sep 2010, 00:26)
Сообщение #1409

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




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

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

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

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

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

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

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

Ну что ж, спустя 11 лет у нас наконец появятся долгожданные кнопки! Ура!!


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 20 Sep 2010, 00:51
Сообщение #1410

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




Ан нет, глюки после данного способа все-таки есть, будем копать дальше...


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 20 Sep 2010, 00:57
Сообщение #1411

Member
Сообщений: 97
Спасибо сказали: 80 раз




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

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


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


Что за глюки?
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 21 Sep 2010, 22:43
Сообщение #1412

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




Уф! родил, наконец:

Цитата
для безглючного "загрузить игру" из окна опций битвы (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. джамп по указанному Дьяком способу.


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


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 22 Sep 2010, 00:33
Сообщение #1413

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




!?



--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Лентяй
сообщение 22 Sep 2010, 06:44
Сообщение #1414

Hota Crew
Сообщений: 11 597
Спасибо сказали: 9892 раза




Вот! То, что было в 4ке но так не хватало в 3ке!


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 23 Sep 2010, 07:59
Сообщение #1415

Freedom Fighter
Сообщений: 1 852
Спасибо сказали: 4031 раз




Оффтоп. Имхо, то что было в 4-ке и так не хватало в 3-ке это кОрОваны от жилищ...


--------------------
In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike!
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 23 Sep 2010, 14:58 (Сообщение отредактировал baratorch - 23 Sep 2010, 15:03)
Сообщение #1416

Immortal
Сообщений: 2 413
Спасибо сказали: 4619 раз




Версия 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

на сайте появилась страничка "История изменений" (чейнджлог стартует с этой версии).


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Spartak
сообщение 23 Sep 2010, 20:35
Сообщение #1417

FFuck_oFF
Сообщений: 3 992
Спасибо сказали: 1395 раз




baratorch, игра у меня виснет, когда играем через хамачи с другом, при передаче хода от него ко мне, если у меня в этот момент активное окно не игра, а другие приложения (например редактор карт - я карту строю или интернет эксплорер)


--------------------
http://heroes3towns.com/ Сайт Новых Городов
Go to the top of the pageAdd Nick
 
+Quote Post
zmicer
сообщение 23 Sep 2010, 20:38
Сообщение #1418

Newbie
Сообщений: 10
Спасибо сказали: 8 раз




На Воге и Эре при загрузке ругается на script00
Go to the top of the pageAdd Nick
 
+Quote Post
KEHu
сообщение 23 Sep 2010, 21:01
Сообщение #1419

Арабская сволочь
Сообщений: 162
Спасибо сказали: 27 раз




у меня тоже на скрипт ругаеться только на другой


--------------------
Легендарный троль Алладин
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 23 Sep 2010, 21:24
Сообщение #1420

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




Неужели бараторч и в GetSpreadshit вставил хук...имхо вообще хайрезу нельзя хуки на подгрузку ресурсов делать.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post

138 страниц V  « < 69 70 71 72 73 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18 August 2025 - 18:00
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика