Объявления

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

Heroes of Might and Magic III: The Succession Wars

Обсуждаем, делимся впечатлениями, новой информацией
offlineАватара пользователя
Orzie  
Ветеран
Ветеран
 
Сообщения: 698
Зарегистрирован: 12 сен 2013, 15:17
Откуда: Томск
Пол: Не указан
Награды: 3
Высшая медаль (1) 3 место 1 этапа по HMM1 (1) Бонусный шлем (1)
Поблагодарили: 457 раз.

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение Orzie » 30 сен 2019, 11:16

Ульи и консерватории в данный момент в моде отсутствуют полностью, и в оригинальном виде не появятся. С самого начала мы хотели отойти от современной модели онлайн-геймплея в тройку. Правда, для того, чтобы появилась альтернатива, придётся серьёзно переработать некоторые принципы поздней игры: в настоящий момент планируется сделать больший упор на "родные" жилища верхних тиров, которые могли бы генериться в большем количестве и иметь изменённую охрану для предотвращения раннего пробива.

Код передам Феанору, спасибо. :)
Вернуться к началу

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

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение Ben80 » 27 окт 2019, 10:08

Код для накопления существ во внешних жилищах:

Код: Выделить всё
int __stdcall growthAccumulation(LoHook* h, HookContext* c)
{
   *(_word_*)c->edi = *(_word_*)c->edi + (_word_)c->ecx;
   c->eax = *(int*)c->esi;

   return NO_EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4B87A0, growthAccumulation);


Если нужно, чтобы накапливалось только для жилищ, имеющих хозяина игрока, тогда так:
Код: Выделить всё
int __stdcall growthAccumulation(LoHook* h, HookContext* c)
{
   _Dwelling_* dw = (_Dwelling_*)(*(int*)(c->ebp - 8) - 28);

   if(dw->owner_ix >= 0)
   {
      *(_word_*)c->edi = *(_word_*)c->edi + (_word_)c->ecx;
      c->eax = *(int*)c->esi;
      return NO_EXEC_DEFAULT;
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4B87A0, growthAccumulation);



Для Фабрики големов (только Каменные големы):
Код: Выделить всё
int __stdcall golemDwellingChangeType(LoHook* h, HookContext* c)
{
   _MapItem_* mi = *(_MapItem_**)(c->ebp + 0xC);
   if(mi->object_type == 20 && mi->os_type == 1)
      c->ecx = 17;

   return EXEC_DEFAULT;
}

int __stdcall golemDwellingChangeDwName(LoHook* h, HookContext* c)
{
   _MapItem_* mi = *(_MapItem_**)(c->ebp + 0xC);
   if(mi->object_type == 20 && mi->os_type == 1)
      c->eax = *(int*)(0x6913A4 + 4 * mi->os_type);

   return EXEC_DEFAULT;
}

int __stdcall golemDwellingOnlyStone(LoHook* h, HookContext* c)
{
   _Dwelling_* dw = (_Dwelling_*)c->ebx;

   if(dw->type == 20 && dw->subtype == 1)
   {
      dw->creature_types[1] = -1;
      dw->creature_types[2] = -1;
      dw->creature_types[3] = -1;

      dw->defenders.type[0] = CID_STONE_GOLEM;
      dw->defenders.count[0] = 3 * o_pCreatureInfo[CID_STONE_GOLEM].growth;

      for(int i=1; i<7; i++)
      {
         dw->defenders.type[i] = -1;
      }
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4A1548, golemDwellingChangeType);
_PI->WriteLoHook(0x4A1557, golemDwellingChangeDwName);
_PI->WriteLoHook(0x4A15B5, golemDwellingOnlyStone);


И вот еще дополнение для Фабрики големов (бонус прироста в замках) - но этот код не проверял. Может быть, и не нужна эта добавка, разве только если вы используете номера золотых и алмазных големов для каких-то своих существ, которые в замках прирастают.
Код: Выделить всё
int __stdcall golemDwellingSetTownBonus(LoHook* h, HookContext* c)
{
   _Dwelling_* dw = (_Dwelling_*)c->esi;
   if(dw->type == 20 && dw->subtype == 1)
   {
      c->eax = 1;
      c->return_address = 0x4B85C0;
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4B85B5, golemDwellingSetTownBonus);
Последний раз редактировалось Ben80 28 окт 2019, 16:16, всего редактировалось 1 раз.
Вернуться к началу

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

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение Ben80 » 27 окт 2019, 23:46

Чтобы избавиться от Wait для человека, наверно, лучше всего кнопку деактивировать, а для ИИ вот это вроде работает:

Код: Выделить всё
int __stdcall setWaitPhase(LoHook* h, HookContext* c)
{
   o_BattleMgr->f13300[2788] = 1;

   return EXEC_DEFAULT;
}

int __stdcall unsetWaitPhase(LoHook* h, HookContext* c)
{
   o_BattleMgr->f13300[2788] = 0;

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x477BDE, setWaitPhase);
_PI->WriteLoHook(0x477BEA, unsetWaitPhase);


f13300[2788] - это смещение 0x13DE4 структуры менеджера битвы.
Вернуться к началу

offlineАватара пользователя
Orzie  
Ветеран
Ветеран
 
Сообщения: 698
Зарегистрирован: 12 сен 2013, 15:17
Откуда: Томск
Пол: Не указан
Награды: 3
Высшая медаль (1) 3 место 1 этапа по HMM1 (1) Бонусный шлем (1)
Поблагодарили: 457 раз.

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение Orzie » 28 окт 2019, 19:16

Жаль, что "спасибо" здесь можно сказать только единожды. :)

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

Кстати, буквально только что я начал выкладывать ранее закрытые части дизайнерского документа на официальную ветку DF2. Там же и обновлена тема задач/целей по программированию, но судя по всему, она уже была посещена. :)
Когда дело дойдёт до секции игрового процесса (полагаю, скоро) - то там (либо здесь) можно будет поддерживать обсуждение, в том числе и по вопросам генерации.
Вернуться к началу

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

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение Ben80 » 28 окт 2019, 20:11

С големами я ошибся малость, вернее, изначально схалтурил.
Правильно то вот как будет:

Код: Выделить всё
int __stdcall golemDwellingSetBonus(LoHook* h, HookContext* c)
{
   _Dwelling_* dw = (_Dwelling_*)c->esi;
   if(dw->type == 20 && dw->subtype == 1)
   {
      c->eax = 1;
      c->return_address = 0x4B85C0;
   }

   return EXEC_DEFAULT;
}

int __stdcall golemDwellingChangeType(LoHook* h, HookContext* c)
{
   _MapItem_* mi = *(_MapItem_**)(c->ebp + 0xC);
   if(mi->object_type == 20 && mi->os_type == 1)
      c->ecx = 17;

   return EXEC_DEFAULT;
}

int __stdcall golemDwellingChangeDwName(LoHook* h, HookContext* c)
{
   _MapItem_* mi = *(_MapItem_**)(c->ebp + 0xC);
   if(mi->object_type == 20 && mi->os_type == 1)
      c->eax = *(int*)(0x6913A4 + 4 * mi->os_type);

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4A1548, golemDwellingChangeType);
_PI->WriteLoHook(0x4A1557, golemDwellingChangeDwName);
_PI->WriteLoHook(0x4B85B5, golemDwellingSetBonus);
Вернуться к началу

offlinebobchik  
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 15 апр 2013, 12:57
Пол: Не указан
Поблагодарили: 10 раз.

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение bobchik » 26 сен 2020, 15:51

А есть какие-то новости? Что слышно? Закончилась ли разработка?
Вернуться к началу

offlineАватара пользователя
Orzie  
Ветеран
Ветеран
 
Сообщения: 698
Зарегистрирован: 12 сен 2013, 15:17
Откуда: Томск
Пол: Не указан
Награды: 3
Высшая медаль (1) 3 место 1 этапа по HMM1 (1) Бонусный шлем (1)
Поблагодарили: 457 раз.

Re: Heroes of Might and Magic III: The Succession Wars

Сообщение Orzie » 07 окт 2020, 14:48

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

Пред.

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

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

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