Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 537
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 122 раз.

Re: Как создать плагин для HD мода

Сообщение void_17 » 07 май 2021, 13:07

Для чего нужна структура _FMes_ ?
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 07 май 2021, 15:57

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

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 07 май 2021, 16:54

В heroes3.idb _FMes_, _AMes_, _Mes_, в homm3.h:

Код: Выделить всё
NOALIGN struct _HString_
{
 _char_* c_str;
 _int_ length;
};
NOALIGN struct _HStringA_
{
 _HString_ h_str;
 _int_ a;
};
NOALIGN struct _HStringF_
{
 _bool8_ is_memory_allocated;
 _byte_ dummy_f1[3];
 _HString_ h_str;
 _int_ size;
};

Структуры для работы со строками char*. Напоминает реализацию std::string. Упрощают работу со строками.

Я не думаю, что программисты NWC писали свой класс для работы со строками :smile1: Но и не могу утверждать, что в ранних версиях VS C++ этот класс имел именно такую реализацию (может быть, использовались какие-то на то время популярные библиотеки, упрощающие работу со строками).
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: Как создать плагин для HD мода

Сообщение RoseKavalier » 08 май 2021, 01:53

It is 100% std::string as implemented in VC6.0, at which time the standard still had std::string as a copy-on-write pointer implementation.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 537
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 122 раз.

Re: Как создать плагин для HD мода

Сообщение void_17 » 08 май 2021, 04:45

Как можно с помощью патчера вставить в .lod нужный мне файл заместо оригинального? Вот как это реализовано SuperPackRus например?
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 890
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 49 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 08 май 2021, 10:40

void_17 писал(а):

Как можно с помощью патчера вставить в .lod нужный мне файл заместо оригинального? Вот как это реализовано SuperPackRus например?

Насколько мне известно SuperPackRus ничего не встраивает и не перепаковывает оригинальные *.lod. Порядок загрузки файлов с модом следующий:
Изначально подружаються файлы из оригинальных lod-файлов, после файлы из папки Папка_с_игрой\_HD3_Data\Common и после уже файлы из плагина SuperPackRus. Если в папке Common есть файлы, которые совпадают по найменованию с уже подгруженными оригинальными, то они подменяют в памяти эти оригинальные, если же и в SuperPackRus есть эти же файлы, то они снова заменяются на те, которые есть в SuperPackRus.
Подобно тому, как в оригинале мы закидываем в папку Data картинки, шрифты, текстовики и они подгружаються уже после загрузки оригинальных из lod-файлов и тем самым заменяю их.

Вот ЗДЕСЬ недавно, AlexSpl, выкладывал плагин, который будучи подключенным в лаунчере мода, подменяет оригинальные портреты героев на те, которые находятся в папке Portraits в папке с плагином.
Думаю, подобным образом можно подменять и другие типы файлов из оригинальных лодов, не затрагивая и не модифицируя при этом оригинальные lod-файлы.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 537
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 122 раз.

Re: Как создать плагин для HD мода

Сообщение void_17 » 10 май 2021, 11:57

Что делает стейтмент
Код: Выделить всё
c->return_address = адрес;

? Покажите на примере, как это применяется и для чего.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 11 май 2021, 18:18

В c->return_address указывается адрес возврата из хука. Например, если мы поставим хук на 0x5258С5, мы затрём вызов call sub_4D9420. Если мы вернём просто EXEC_DEFAULT, то после выполнения кода хука управление будет передано этой команде (той, которую мы затёрли джапмом хука). Если же мы укажем адрес возврата и вернём NO_EXEC_DEFAULT или SKIP_DEFAULT, то управление будет передано команде по адресу c->return_address. Используется тогда, когда мы частично дублируем оригинальный код в своём хуке, либо просто хотим выкинуть исполнение фрагмента оригинального кода.

Изображение Изображение
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 890
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 49 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 17 май 2021, 16:32

AlexSpl, а проверьте, пжл, у себя вот эти портреты Оррина, будут ли они у Вас отображаться через плагин, код которого вы публиковали вот ЗДЕСЬ.

Дело в том, что все другие PCX у меня подтягиваются через наш плагин, а вот эти из одного там пака не хочет. При попытке заменить только портреты Оррина пропадают другие мелкие портреты, а при создании игры идет краш. Но с другими PCX проблем нет. Интересно, что именно эти PCX я даже в Фотошопе открыть не могу, хотя другие открываються. Но посмотреть их, например, через Image Animation Viewer получается без проблем.

При этом, если их пересохранить, например, через XnConvert в BMP, то из Common, они подтягиваются без проблем. Но если обратно из BMP их перегнать в PCX, то через плагин, они снова не подтягиваються, и в придачу, как и ранее, блочат отображаение всех других портретов. Очень интересно. Что-то с этими PCX не так. Либо нужно как-то код подправить, чтобы и такого рода PCX поддерживались, либо нужно с этими PCX что-то сделать, чтобы они начали подтягиваться (пересохранение через XnConvert не дает результатов). Попробуйте у себя их протестить, как у Вас будет.

Вот архив с этими проблемными портретами Оррина:
Вложения
Orrin3.rar
(6.4 КБ) Скачиваний: 87
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 18 май 2021, 13:26

Скорее всего, проблема именно с форматом данного файла, раз остальные подгружаются без проблем. Ещё, на всякий случай, проверьте, не изменилась ли библиотека HD_TC2.dll (с момента написания плагина было несколько обновлений HD-мода).
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [bot] и гости: 6

cron