Объявления

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

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

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

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

Сообщение as239 » 26 апр 2019, 07:16

Никто не знает как активизировать героя по Shift+LCM ?
Вернуться к началу

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

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

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

Нашел проблему с кодом на дипломатию.
По RCM все работает правильно.
А вот при непосредственной атаке, иногда могут быть сюрпризы - существа, которые должны были присоединиться убегают, а те что не проходят по лимиту - присоединяются.
Проблема в GetMonCount, при непосредственной атаке monCount = 0.
Как получить количество существ при непосредственной атаке, но до вызова HiHook на 0x4A7230?

Код: Выделить всё
int DiploLimit = 25000;
int monCount = 0;

//Дипломатия
int __stdcall Diplomacy( HiHook* hook, _Hero_* hero, _int_ mon_ID ) {

   int netrPow = o_pCreatureInfo[mon_ID].AI_value * monCount;
   _int_ ret = CALL_2(_int_, __fastcall, hook->GetDefaultFunc(), hero, mon_ID);

   if ( netrPow > DiploLimit ) {
      ret = -4;
   }
   return ret;
}

int __stdcall GetMonCount(LoHook* h, HookContext* c) {
   monCount = c->esi;
   return EXEC_DEFAULT;
}

.................         
_PI->WriteLoHook(0x4170E8, GetMonCount);
_PI->WriteHiHook(0x4A7230, SPLICE_, EXTENDED_, FASTCALL_, Diplomacy);
Вернуться к началу

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

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

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

Creature count for fight is stored to EBX at 0x4A73D6; LoHook at 0x4A7456 just a bit before call to 0x4A7230 would be a valid spot.
Вернуться к началу

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

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

Сообщение RoseKavalier » 04 май 2019, 21:20

A quick word on RMG connection guardians.

When looking at tiles where to place zone guardians, the RMG searches nearby tiles in a square shape... 3 tiles by 3 tiles... and marks them as not requiring object placement (or something similar).
The upper limits of the square are written down at:
Код: Выделить всё
0x540F43 + 2 // x < xCenter+2
0x540F67 + 2 // y < yCenter+2


This is done on the current zone only, so if any of the squares belong to another zone, it is ignored.
Изображение

All these are generated from the same map seed.

Default setting:
 
Изображение


Larger settings:
 
Изображение
Изображение


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

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

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

Сообщение Ben80 » 05 май 2019, 05:16

RoseKavalier писал(а):

marks them as not requiring object placement (or something similar).


Set 5th bit (4th if from 0 counting) of _access to 0 ?
Вернуться к началу

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

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

Сообщение as239 » 05 май 2019, 09:43

Цитата:
and marks them as not requiring object placement

Can it be used for "free roads"?
Is it possible to mark all road tiles as not requiring object placement?

How to set this values?
Цитата:
0x540F43 + 2 // x < xCenter+2
0x540F67 + 2 // y < yCenter+2

Tried:
Код: Выделить всё
_PI->WriteByte(0x540F67, 1);

it does not work.
Вернуться к началу

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

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

Сообщение RoseKavalier » 05 май 2019, 14:17

Ben80 писал(а):

RoseKavalier писал(а):

marks them as not requiring object placement (or something similar).

Set 5th bit (4th if from 0 counting) of _access to 0 ?


RMG_MapItem + 0x28

Код: Выделить всё
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!


as239 писал(а):

Цитата:
and marks them as not requiring object placement

Can it be used for "free roads"?
Is it possible to mark all road tiles as not requiring object placement?

How to set this values?
Цитата:
0x540F43 + 2 // x < xCenter+2
0x540F67 + 2 // y < yCenter+2

Tried:
Код: Выделить всё
_PI->WriteByte(0x540F67, 1);

it does not work.

0x540F67 + 2 = 0x540F69
Изображение

The three states of tiles are changed quite often, so it's difficult to find a spot at some point to do this correctly.
I think the "best" fix would be to ensure a single connection between zones, that will solve road problems.
 
Изображение
Вернуться к началу

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

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

Сообщение as239 » 05 май 2019, 16:50

Tried this:
Код: Выделить всё
_PI->WriteByte(0x540F43+2, 1);
_PI->WriteByte(0x540F67+2, 1);


And get 1/10, 3/13. Bad roads/Total generation.
It looks better then usual generations.
But did not get idea how to get a single connection between zones.

Needs code how to set seed at 0x53662F.
Вернуться к началу

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

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

Сообщение RoseKavalier » 05 май 2019, 17:15

Код: Выделить всё
{
    *(int*)c->edi = YOUR_SEED;
    return EXEC_DEFAULT;
}
LoHook @ 0x536635

*or, not as effective I think*

{
    c->eax = YOUR_SEED;
    return EXEC_DEFAULT;
}
LoHook @ 0x536637


From what I can tell of land connections between zones so far...
All tiles are marked as belonging to zone 1, 2, 3, ....
They have a secondary zone marking 2, 3, 4, ... when they are close to another zone (not sure how close).
When making connections, code runs through all tiles to check if they belong to primary zone, and then if they are adjacent to the secondary zone.
All tiles that match these criteria have monsters added to block the connection.

There does not seem to be anything checking if any of these tiles are close to each other.

I have not made further progress on this end, I was just taking a break of reviewing stuff for SoD_SP 1.16 and decided to check what I previously posted.
Вернуться к началу

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

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

Сообщение as239 » 05 май 2019, 18:11

Generated random map, looked seed at map description: 689697574.
Set it at LoHook @ 0x536635.
But random map is generated with seed: 689675492.
Вернуться к началу

Пред.След.

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

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

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