Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

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

Сообщение Ben80 » 09 апр 2019, 18:00

In perspective condition
Код: Выделить всё
   if(NRegen > 0)
   {


will be rewritten to
Код: Выделить всё
   if(NRegen > 0 && NoMapProblems == false)
   {


So, are there thoughts how one can force game to take into Main_structure last generated map, not first ?
Вернуться к началу

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

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

Сообщение RoseKavalier » 09 апр 2019, 19:43

0x00536619 seems related to Progress bar not mapname.
HStringF is similar to std::string. I don't think it can cause a problem to pass along a custom string instead of str->CString(). If the argument would be &HStringF, it would be another story because (CString() - 1) is a reference counter.

This worked fine but you will need some rewrites for your headers.
Код: Выделить всё
int __stdcall _HH_GenerateRandomMap(HiHook *h, int This, PCHAR name, int a3)
{
   THISCALL_3(int, h->GetDefaultFunc(), This, "random_maps\\FirstMap.h3m", a3);
   THISCALL_3(int, h->GetDefaultFunc(), This, "random_maps\\SecondMap.h3m", a3);
   THISCALL_3(int, h->GetDefaultFunc(), This, "random_maps\\ThirdMap.h3m", a3);
   return THISCALL_3(int, h->GetDefaultFunc(), This, "random_maps\\LastMap.h3m", a3);
}
...
pi->WriteHiHook(0x54C580, SPLICE_, THISCALL_, _HH_GenerateRandomMap);


HDmod runs a lot of hooks in RMG, notably wrt map naming so it is probably responsible for picking the first map generated too.
Вернуться к началу

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

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

Сообщение Ben80 » 09 апр 2019, 20:04

RoseKavalier писал(а):

HDmod runs a lot of hooks in RMG, notably wrt map naming so it is probably responsible for picking the first map generated too.


I have checked on pure SoD 3.2 with Dll injection, without HD mod. Problem remains. So, HD mod is not guilty.
Вернуться к началу

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

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

Сообщение RoseKavalier » 09 апр 2019, 20:34

Clever!

Try around 0x58C032, it calls map generation and a bit after loads the same filename. You can modify map name here if you wish.
Вернуться к началу

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

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

Сообщение Ben80 » 10 апр 2019, 17:56

Thank you. Of course ! I see it earlier, but forgot. It is always easier and more cheerful when someone is advising.
Вернуться к началу

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

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

Сообщение RoseKavalier » 11 апр 2019, 13:03

I can certainly appreciate that)
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

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

Сообщение as239 » 13 апр 2019, 05:15

WriteByte(..., 0xEB) попробовал, но особой разницы не заметил.
Смотрел с разными seed т.к. не знаю как подсунуть один.
Чтобы сделать код заметно улучшающий генерацию дорог мне нужно всего две вещи:
1. Код определяющий что клетка это проход между зонами
2. Код добавляющие препятствия на клетку
Вернуться к началу

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

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

Сообщение RoseKavalier » 14 апр 2019, 17:10

1. Not 100% certain but in RMG_MapItem the zone field may contain data about a second zone.
2. Have to isolate the code that does it automatically based on terrain etc. If not, RMG_Main + EC4 vector could be used.

I am in last phases of SoD_SP 1.16, I will be focusing on it for the near future.
After that I will be able to do some more reversing of RMG, to some extent.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5539
Зарегистрирован: 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)
Поблагодарили: 2155 раз.

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

Сообщение AlexSpl » 23 апр 2019, 19:52

Обновил первый пост темы для тех, у кого Microsoft Visual Studio Community 2019.

Скачать Microsoft Visual Studio Community 2019 можно с официального сайта: https://visualstudio.microsoft.com/ru/downloads/

Можно создать оффлайн-установщик, если запустить скачанный экзешник со следующими параметрами (если нужен только С++):
Код: Выделить всё
vs_community.exe --layout c:\vslayout --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --lang en-US

Язык можно поменять на русский: --lang ru-RU

Для развёртывания на любой машине (включая те, которые не подключены к сети Интернет) нужно скопировать папку c:\vslayout на другой компьютер и запустить экзешник vs_setup.exe, находящийся в этой папке, с параметрами:
Код: Выделить всё
vs_setup --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended


UPD Прописал правильные параметры для установки С++.
Вернуться к началу

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

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

Сообщение Ben80 » 24 апр 2019, 15:25

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

int a[10];
int* pa = &a[4];

В массиве pa вполне можно использовать отрицательные индексы:
pa[-2] = 5;
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron