Объявления
Поздравляем
Roman2211


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 21 фев 2020, 14:57

1. I have not reversed it, which is why I didn't include it either :)
I wanted to include all affected creatures at the time but it felt like much work for not much in return.

2. Yes, generated at start. Look through 0x5BEA00

3. I don't know; there is a call on AI side to this function but I don't know if it would change their selection pattern.

4. Turn debug off and add this to top of source files
Код: Выделить всё
#pragma optimize( "", off )

Debugger will more or less be as competent as if it were debug configuration
Dunno why this is crashing otherwise as those 2 seem properly declared (maybe something else in the region isn't ?)

5. Open VS, select your project then...
==>Alt+F7 (Property Pages)
==>C/C++ (expand if needed)
==>Code Generation
==>Runtime Library : set to Multi-threaded (/MT)
Thanks to Berserker a few years back

EDIT:
Archangel/Pit Lord hints: sure could be nice, just a bit more work needed to find the right addresses.
Вернуться к началу

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

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

Сообщение as239 » 03 мар 2020, 17:35

Не обновляется нормально экран города, после удаления героя.
Пробывал всяко разно:
Код: Выделить всё
   P_TownMgr->town->visitingHero = -1;
   P_TownMgr->town->garrisonHero = -1;
   P_TownMgr->RefreshScreen();
   P_TownMgr->Draw();
   THISCALL_1(void, 0x5D5930, P_TownMgr);
   THISCALL_1(void, 0x5D5810, P_TownMgr);
Вернуться к началу

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

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

Сообщение as239 » 05 мар 2020, 08:18

Почему то после загрузки сейва, эта функция возвращает истина для заклинания (городской портал), которого нет в ГМ:
Код: Выделить всё
bool IsSpell(int SpellID){

   int level = P_Spell[SpellID].level;
   for (int i = 0; i < 6; i++)
   {
      if (P_TownMgr->town->spells[level - 1][i] == SpellID) return true;
   }
   return false;
}

Без загрузки сейва все работает правильно.

Update
Кажется я понял, для 4 ГМ, нужно смотреть только слоты 0 и 1, а если есть еще библиотека, то и 2.
Вернуться к началу

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

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

Сообщение as239 » 10 мар 2020, 09:10

Обнаружил проблему со входом в большие односторонние монолиты:
 
Изображение


Такое впечатление что дорога ведется к правому краю, а должна идти к левому.
Это проблема есть и в чистом SOD.

Вот как выглядят свойства этого объекта:
 
Изображение


Пробывал менять EnterX и width (она=3,хотя по факту ширина монолита =2), результат не меняется.
Что здесь нужно изменить, чтобы дорога шла к левому краю?
Вернуться к началу

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

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

Сообщение RoseKavalier » 10 мар 2020, 13:55

You technically should not have to change these values from the default ones provided by the text file, they should already propose the correct attributes.

If this monolith was replaced by a 1-tile version it would all work well, which makes me think it's likely another coding error from NWC that did not account for wider monoliths.
Even if the road tried to go left here, this would still not be accessible; either a tile needs to be opened on the left or the whole region moved 1 north.
Вернуться к началу

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

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

Сообщение as239 » 10 мар 2020, 14:29

Yes, there is no need to change RMG_ObjectProps.
Fixed it this way:
Код: Выделить всё
int MonolitSybeType = 0;
_LHF_(ChangeMonolitRoadPoint){

   if ((MonolitSybeType>11) || (MonolitSybeType>3 && MonolitSybeType<8)) c->ecx -= 1;
   return EXEC_DEFAULT;

}
_LHF_(GetMonolitSybeType){

   MonolitSybeType = c->edx;
   return EXEC_DEFAULT;

}
   _PI->WriteLoHook(0x548060, GetMonolitSybeType);
   _PI->WriteLoHook(0x5480A2, ChangeMonolitRoadPoint);


Result, same seed map:
 
Изображение
Вернуться к началу

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

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

Сообщение as239 » 05 апр 2020, 07:37

А как определить координату входа в объект.
Я перебираю все клетки и мне нужно понять является ли эта клетка входом в объект.
Я думал так: obj->x+(-)obj->properties->prototype->EnterX.
Где obj:
Код: Выделить всё
         RMG_MapItem *minixyz = MiniMap->GetMapItem(minx, miny, 0);
         if (!minixyz->tileData.hasObject) continue;
         RMG_Object *obj = *minixyz->objects[0];

Но например у улья EnterX=1, у консерватории EnterX=0, у арены, утопии, циклопника, фабрики боевых машин EnterX=1.
Не вижу логики.
Вернуться к началу

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

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

Сообщение AlexSpl » 05 апр 2020, 08:42

Посмотрите битовое поле isEntrance структуры RMG_GroundTileData.

Код: Выделить всё
struct RMG_GroundTileData
{
   unsigned  roadSprite    : 7;
   unsigned _b8            : 5;   //
   unsigned  orientation   : 3;   // bit 13 [0x0000 1000] ~ monster position 0~7, see 0x5437E2 & 0x54E117
   unsigned  mirrorLandV   : 1;   // bit 16 [0x0000 8000]
   unsigned  mirrorLandH   : 1;   // bit 17 [0x0001 0000]
   unsigned  mirrorRiverV  : 1;   // bit 18 [0x0002 0000]
   unsigned  mirrorRiverH  : 1;   // bit 19 [0x0004 0000]
   unsigned  mirrorRoadV   : 1;   // bit 20 [0x0008 0000]
   unsigned  mirrorRoadH   : 1;   // bit 21 [0x0010 0000]
   unsigned  shore         : 1;   // bit 22 [0x0020 0000]~ unsure, written to h3m at 0x532E42
   unsigned  hasObject     : 1;   // bit 23 [0x0040 0000] ~ see 0x547EB8
   unsigned _b24           : 1;   // bit 24 [0x0080 0000]
   unsigned _b25           : 1;   // bit 25 [0x0100 0000]
   unsigned  mustBeBlocked : 1;   // bit 26 [0x0200 0000] checks if not rock after 0x537F10
   unsigned  isEntrance    : 1;   // bit 27 [0x0400 0000] set when yellow entrance tile
   unsigned  isBlocked     : 1; // bit 28 [0x0800 0000] ~ if this is not set, roads are allowed to go everywhere!
   unsigned _b29           : 1;   // bit 29 [0x1000 0000] ~ water related ?
   unsigned _b30           : 1;   // bit 30 [0x2000 0000]
   unsigned _b31           : 1;   // bit 31 [0x4000 0000]
   unsigned _b32           : 1;   // bit 32 [0x8000 0000]
};

Поля EnterX и EnterY структуры RMG_ObjectProps, как я понимаю, относительные (объекта) координаты входа.
Вернуться к началу

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

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

Сообщение as239 » 05 апр 2020, 09:01

У меня это поле canBeBlocked.
Код: Выделить всё
struct RMG_GroundTileData
{
   unsigned roadSprite : 7;
   unsigned _b8 : 5;   //
   unsigned orientation : 3;   // bit 13 [0x0000 1000] ~ monster position 0~7, see 0x5437E2 & 0x54E117
   unsigned mirrorLandV : 1;   // bit 16 [0x0000 8000]
   unsigned mirrorLandH : 1;   // bit 17 [0x0001 0000]
   unsigned mirrorRiverV : 1;   // bit 18 [0x0002 0000]
   unsigned mirrorRiverH : 1;   // bit 19 [0x0004 0000]
   unsigned mirrorRoadV : 1;   // bit 20 [0x0008 0000]
   unsigned mirrorRoadH : 1;   // bit 21 [0x0010 0000]
   unsigned shore : 1;   // bit 22 [0x0020 0000]~ unsure, written to h3m at 0x532E42
   unsigned hasObject : 1;   // bit 23 [0x0040 0000] ~ see 0x547EB8
   unsigned _b24 : 1;   // bit 24 [0x0080 0000]
   unsigned _b25 : 1;   // bit 25 [0x0100 0000]
   unsigned mustBeBlocked : 1;   // bit 26 [0x0200 0000] checks if not rock after 0x537F10
   unsigned canBeBlocked : 1;   // bit 27 [0x0400 0000] when 0, no obstacles are placed
   unsigned isBlocked : 1;   // bit 28 [0x0800 0000] ~ if this is not set, roads are allowed to go everywhere!
   unsigned _b29 : 1;   // bit 29 [0x1000 0000] ~ water related ?
   unsigned _b30 : 1;   // bit 30 [0x2000 0000]
   unsigned _b31 : 1;   // bit 31 [0x4000 0000]
   unsigned _b32 : 1;   // bit 32 [0x8000 0000]
};

Проверил в отладчике по всем тайлам объектов, он всегда равен нулю.
Вернуться к началу

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

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

Сообщение AlexSpl » 05 апр 2020, 09:05

Это тайлы карты. Как я понимаю, Вы сканируете карту и ищете входы в объекты?

Цитата:
У меня это поле canBeBlocked.

Я про isEntrance говорю.
Последний раз редактировалось AlexSpl 05 апр 2020, 09:08, всего редактировалось 1 раз.
Вернуться к началу

Пред.След.

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

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

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

cron