Объявления

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

Приобщение к Героям 2

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

Re: Приобщение к Героям 2

Сообщение Ben80 » 03 окт 2020, 14:06

Я Вам скажу как-нибудь, в какой части кампании более атмосферны. Жалко только, что в Тройке геймплей поломанный из-за масс слоу или на худой конец масс-хаста (в картах Тройки нужно обязательно запрещать эти заклинания на карте), ну и ИИ, который не тянет большой battlefield и Wait.
Вернуться к началу

offlineigrik  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 14 сен 2017, 12:35
Пол: Не указан
Поблагодарили: 84 раз.

Re: Приобщение к Героям 2

Сообщение igrik » 03 окт 2020, 14:27

Ben80 писал(а):

Жалко только, что в Тройке геймплей поломанный из-за масс слоу или на худой конец масс-хаста (в картах Тройки нужно обязательно запрещать эти заклинания на карте), ну и ИИ, который не тянет большой battlefield и Wait.

Когда то я писал плагин, чтобы масс слоу и хаст работали по площади как инферно, но так его и не закончил. Влом было копаться с ИИ, а он на нём вылетал.
Ben, если тебе интересно покапаться и дописать, то вот код:
 исходник
Код: Выделить всё
#include "stdafx.h"
#include "..\..\include\homm3.h"

//#include "..\..\include\era.h"
//using namespace Era;

Patcher* _P;
PatcherInstance* _PI;

#define SPL_SLOW 54
#define SPL_HASTE 53
#define SPL_BERSERK 59

// фукнция ведения мыши по площади
int __stdcall Y_Haste_MouseMoove(LoHook* h, HookContext* c)
{
   if (c->esi == SPL_HASTE || c->esi == SPL_SLOW || c->esi == SPL_BERSERK) {
      c->return_address = 0x59FA88;
   } else c->return_address = 0x59FA8C;

   return NO_EXEC_DEFAULT;
}

// радиус затемнения гексов
int __stdcall Y_Haste_RadiusGex(LoHook* h, HookContext* c)
{
   if (c->ecx == SPL_HASTE || c->ecx == SPL_SLOW || c->ecx == SPL_BERSERK) {
      c->return_address = 0x59FD09;
   } else c->return_address = 0x59FD1E;

   return NO_EXEC_DEFAULT;
}

// на кого может дейстовать (проверка на сторону действия и на гипноз (в данном случае)
int __stdcall Y_Haste_WhoCanBeAffected(LoHook* h, HookContext* c)
{

   int spell_id = *(int*)(c->ebp +12);
   if (spell_id == SPL_HASTE || spell_id == SPL_SLOW )
   {
      c->return_address = 0x5A6A2D;
      return NO_EXEC_DEFAULT;
   }

   return EXEC_DEFAULT;
}

// подсветка курсора (широкого затемнения) при ведении мыши
int __stdcall Y_Haste_SetCursorShadow(LoHook* h, HookContext* c)
{
   // восстанавливаем пропущенные параметры
   *(char*)(c->ebp -0x4) = c->edi;
   *(char*)(c->ebp -0xD) = 0;

   if (c->eax == SPL_HASTE || c->eax == SPL_SLOW || c->eax == SPL_BERSERK) {
      c->return_address = 0x59FBF7;
   } else c->return_address = 0x59FC09;

   return NO_EXEC_DEFAULT;
}

// функция накладывания спеллов
int __stdcall Y_Haste_PlayDefAnim(LoHook* h, HookContext* c)
{
   int anim_id;
   int spell_id = *(int*)(c->ebp +8);
   switch (spell_id){
      case SPL_HASTE:      anim_id = 31; break;   
      case SPL_SLOW:      anim_id = 19; break;   
      case SPL_BERSERK:   anim_id = 35; break;   
      default:         anim_id = 35; break;
   }
   _BattleMgr_* bm = (_BattleMgr_*)c->ebx;
   int caster = *(int*)(c->ebp +0x10); // 0 - герой, 1 - монстр, 2 - артефакт, 3 - герой без вычета маны

   if ( caster == 1 ) {
      if ( bm->stack[bm->current_stack_ix]->creature_id == 136 ) { // если Чародей
         o_Spell[SPL_HASTE].type = 1;
         o_Spell[SPL_SLOW].type = -1;
         CALL_7(void, __thiscall, 0x5A69E0, c->ebx, *(int*)(c->ebp -0x14), *(int*)(c->ebp +0x8), c->esi, *(int*)(c->ebp +0x1C), bm->current_side, caster );
         o_Spell[SPL_HASTE].type = 0;
         o_Spell[SPL_SLOW].type = 0;
      }
   }

   CALL_5(char, __fastcall, 0x5A6AD0, c->ebx, (int)c->ebx +0x547C, (int)c->ebx +0x547C, anim_id, 0);

   c->return_address = 0x5A2168;
   return NO_EXEC_DEFAULT;
}


void New_Haste_and_Slow()
{
   // запрещаем масс.ускорение на экспертном уровне
   o_Spell[SPL_HASTE].flags = 266373; // 266261;
   o_Spell[SPL_HASTE].type = 0;
   o_Spell[SPL_HASTE].effect[0] = 2;
   o_Spell[SPL_HASTE].effect[1] = 3;
   o_Spell[SPL_HASTE].effect[2] = 4;
   o_Spell[SPL_HASTE].effect[3] = 5;
   // запрещаем масс.замедление на экспертном уровне
   o_Spell[SPL_SLOW].flags = 266373; //266261;
   o_Spell[SPL_SLOW].type = 0;
   o_Spell[SPL_SLOW].effect[0] = 80;
   o_Spell[SPL_SLOW].effect[1] = 70;
   o_Spell[SPL_SLOW].effect[2] = 60;
   o_Spell[SPL_SLOW].effect[3] = 50;
   // убираем эффект молитвы (бонус скорости)
   _PI->WriteHexPatch(0x444956, "90 E9");   // при касте молитвы
   _PI->WriteHexPatch(0x44440D, "90 E9");   // при снятии заклинания

   // патчим свитчи заклинаний
   _PI->WriteByte(0x59F9BC +SPL_HASTE -10, 5);
   _PI->WriteByte(0x59F9BC +SPL_SLOW -10, 5);
   _PI->WriteByte(0x5A2B48 +SPL_HASTE -10, 24);
   _PI->WriteByte(0x5A2B48 +SPL_SLOW -10, 24);

   // ставим хуки
   _PI->WriteLoHook(0x59FA83, Y_Haste_MouseMoove);
   _PI->WriteLoHook(0x59FD04, Y_Haste_RadiusGex);
   _PI->WriteLoHook(0x5A6A23, Y_Haste_WhoCanBeAffected);
   _PI->WriteLoHook(0x59FBED, Y_Haste_SetCursorShadow);   
   _PI->WriteLoHook(0x5A2156, Y_Haste_PlayDefAnim);

   // нужно исследовать для ИИ в местах
   // 0x5A4C36 +2 AI
   // 0x5A4CDE +2 AI

   return;
}
Вернуться к началу

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

Re: Приобщение к Героям 2

Сообщение Ben80 » 03 окт 2020, 14:31

Я думаю, твой плагин - прежде всего прекрасное учебное пособие для моддинга (а также, возможно, для кого-то из игроков хорошее геймдизайнерское решение). Но для тех, кто любит "поближе к оригиналу", оно вряд ли подойдет.
Вернуться к началу

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

Re: Приобщение к Героям 2

Сообщение Ben80 » 04 окт 2020, 06:45

А, ребят, я, кажется, понял фишку с Драконами и Титанами - ИИ сначала грейдит эти жилища до конца и только потом скупает, когда появляются финансовые возможности.

Если так, было бы очень интересно сделать патч, который позволяет ИИ скупать уже Зеленых Драконов и Гигантов, ну а потом, при возможности, уже загрейдить их. Грейд Гигантов, конечно, нерентабельный получится, ну да что поделать - зато геймплей интереснее.

AlexSpl, могли бы накатать такой патч ? Либо с помощью патчера, либо даже просто редактированием EXE файла (может быть, и такое возможно).
Мне кажется, здесь многие не отказались бы поиграть с таким патчем.

***

На какие-то сценарии это, конечно, повлияет сильно. Но если Колдун - не единственный противник на карте, сценарий должен быть проходим. Да и начинать сценарии со штурма замка Колдуна - способ сделать сценарий гораздо менее интересным.

***

Я даже название придумал для патча - BlueGigantPatch (сокращенно, bg patch) :smile1:
В итоге желающие могли бы дать свою оценку изменению сложности некоторых сценариев (например, с Hard меняется на Expert или даже Impossible) и можно было бы выложить архив с оригинальными картами с подредактированной сложностью сценариев.
Вернуться к началу

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: Приобщение к Героям 2

Сообщение AlexSpl » 04 окт 2020, 14:21

Цитата:
А, ребят, я, кажется, понял фишку с Драконами и Титанами - ИИ сначала грейдит эти жилища до конца и только потом скупает, когда появляются финансовые возможности.

Вот такого не помню. Сейчас не буду ничего утверждать, но, кажется, я видел героев ИИ и с Гигантами, и с Зелёными и Красными Драконами. Откуда они у них - другой вопрос.

Можно попробовать проверить на драконах: оставить только жилище Зелёных Драконов (убрать все остальные в редакторе карт), дать компу хилую армию (1 Крестьянина, например), но необходимое кол-во ресурсов на выкуп всех Зелёных Драконов с точностью до золотого. И для того, чтобы компу было интересно скупить драконов, поставить недалеко от его замка нашего героя с армией, которую точно можно пробить купленными драконами.

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

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

Re: Приобщение к Героям 2

Сообщение Ben80 » 04 окт 2020, 14:42

Сделал то, что я и предполагал - стал строить Красную башню :smile1:

Ну и Красный Дракон достался мне.
Вернуться к началу

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: Приобщение к Героям 2

Сообщение AlexSpl » 04 окт 2020, 14:44

А если у него нет ресурсов на грейд Башни, но есть на покупку Зелёного Дракона? Если он реально под угрозой поражения, когда купив Зелёного Дракона, может выиграть, с этим AI нужно что-то делать :smile12:
Вернуться к началу

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

Re: Приобщение к Героям 2

Сообщение Ben80 » 04 окт 2020, 14:48

На самом деле меня устраивает этот "детский" ИИ в Героях 2, но конкретно вот эта штука оказывает на геймплей очень сильное влияние. Хорошо бы это пропатчить. Кстати, автор GL Wrapper обещал добавить в свой WING.dll поддержку ASI плагинов.

Александр, не сочтите за фамильярность, но роль Деда-Мороза вам идет.
Побудьте им по моей просьбе в этот последний раз :smile1:
Вернуться к началу

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: Приобщение к Героям 2

Сообщение AlexSpl » 04 окт 2020, 14:52

ASI-плагины должны работать для Героев 2, т.к. они используют библиотеку MSS32.DLL. Ещё есть готовая версия Героев 2 с поддержкой "обычных" плагинов (см. тему).
Вернуться к началу

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

Re: Приобщение к Героям 2

Сообщение Ben80 » 04 окт 2020, 14:56

А там вроде слишком старая MSS библиотека.

По теме - я мог бы предположить, что дело просто в последовательности действий ИИ - сначала строит, потом закупается, но это не объясняет, почему я не вижу Гигантов - ведь пока дело дойдет до грейда нычки, вполне можно закупиться парочкой силачей.
Вернуться к началу

Пред.След.

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

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

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