Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 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 » 03 май 2022, 15:34

Вот пример самого просто кейса:

Код: Выделить всё
void __thiscall AI_get_value_of_buying_creatures(
        void *this,
        TTown *town,
        eCreatures creatureType,
        int *arg8,
        int creaturesNum,
        float *a6)
{
  float v6; // [esp+0h] [ebp-5Ch]
  int j; // [esp+Ch] [ebp-50h]
  int i; // [esp+10h] [ebp-4Ch]
  THero *defenderHero; // [esp+14h] [ebp-48h]
  int num2HexAttackUnits; // [esp+18h] [ebp-44h]
  char v11[4]; // [esp+1Ch] [ebp-40h] BYREF
  char v12[4]; // [esp+20h] [ebp-3Ch] BYREF
  float v13; // [esp+24h] [ebp-38h]
  char v14[4]; // [esp+28h] [ebp-34h] BYREF
  float a4; // [esp+2Ch] [ebp-30h] BYREF
  int effective_cost; // [esp+30h] [ebp-2Ch]
  float a3; // [esp+34h] [ebp-28h] BYREF
  int cost[7]; // [esp+38h] [ebp-24h] BYREF
  float a8; // [esp+54h] [ebp-8h] BYREF
  int value; // [esp+58h] [ebp-4h]

  num2HexAttackUnits = 0;
  getCreatureCost(creatureType, cost);
  effective_cost = AI_get_effective_cost(cost) * creaturesNum;
  value = ((*&akCreatureTypeTraits[creatureType].ai_value * creaturesNum) * *&o_ActivePlayer->gap4[8]);
  if ( town->defenderHeroId != -1 )
  {
    defenderHero = &gpGame->hero[town->defenderHeroId];
    value = (value * 1.1);
    if ( creatureType / 6 == defenderHero->class_id )
      value = (value * 1.1);
    if ( (akCreatureTypeTraits[creatureType].abilities & 8) != 0 )
    {
      for ( i = 0; i < 5; ++i )
      {
        if ( defenderHero->armyGroup.id[i] != -1
          && (akCreatureTypeTraits[defenderHero->armyGroup.id[i]].abilities & 8) != 0 )
        {
          ++num2HexAttackUnits;
        }
      }
      value = (value * (1.18 - num2HexAttackUnits * 0.06));
    }
    value = (value * (*&gpGame->player[town->owner].gap3[24] + 0.66));
  }
  if ( (akCreatureTypeTraits[creatureType].abilities & 8) != 0 )
  {
    for ( j = 0; j < 5; ++j )
    {
      if ( town->garrison.id[j] != -1 && (akCreatureTypeTraits[town->garrison.id[j]].abilities & 8) != 0 )
        ++num2HexAttackUnits;
    }
    value = (value * (1.18 - num2HexAttackUnits * 0.06));
  }
  sub_44B9BD(town, 0, &a3, &a4, v14, v12, v11, &a8);
  v13 = a8 + 0.96;
  value = (value * (v13 * v13 * v13));
  v6 = value;
  value = (sub_44CD10(cost) * v6);
  *arg8 = value;
  *a6 = *arg8 / effective_cost;
}
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

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

Сообщение void_17 » 03 май 2022, 15:35

Тогда С++ был в новинку, стандарта языка еще не было
 
(появился за год до релиза тройки, тройка первая игра в NWC, написанная на С++98).


А С все знали хорошо, лишь иногда балуясь с новыми фичами типа ООП и метапрограммирования.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 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 » 03 май 2022, 15:36

Или вот это:

Код: Выделить всё
void __thiscall AI_considerCreatures(void *this, TTown *town, TAIAction *action, float *value)
{
  char v5[4]; // [esp+8h] [ebp-30h] BYREF
  int canBuy; // [esp+Ch] [ebp-2Ch]
  float BuyingRV; // [esp+10h] [ebp-28h]
  float max_value; // [esp+14h] [ebp-24h]
  eCreatures creature_id; // [esp+18h] [ebp-20h]
  float value_of_buying; // [esp+1Ch] [ebp-1Ch] BYREF
  int i; // [esp+20h] [ebp-18h]
  int creatures_to_buy; // [esp+24h] [ebp-14h]
  int iTier; // [esp+28h] [ebp-10h]
  int tier; // [esp+2Ch] [ebp-Ch]
  int num; // [esp+30h] [ebp-8h]
  float result; // [esp+34h] [ebp-4h]

  tier = -1;
  num = 0;
  result = -99.0;
  max_value = -99.0;
  for ( iTier = 0; iTier < 6; ++iTier )
  {
    creature_id = dbTownCreaturesId[town->type][iTier];
    if ( ((1 << (iTier + 7)) & town->buildings) != 0 && town->numCreatures[iTier] > 0 )
    {
      canBuy = 0;
      for ( i = 0; i < 5; ++i )
      {
        if ( town->garrison.id[i] == -1 || town->garrison.id[i] == creature_id )
          canBuy = 1;
      }
      if ( canBuy )
      {
        creatures_to_buy = AI_getCreaturesNumberToBuyInTown(town, iTier);
        if ( creatures_to_buy > 0 )
        {
          AI_get_value_of_buying_creatures(this, town, creature_id, v5, creatures_to_buy, &value_of_buying);
          BuyingRV = (RandInt(1, 10) + 90) * value_of_buying / 100.0;
          if ( BuyingRV > max_value )
          {
            tier = iTier;
            result = value_of_buying;
            max_value = BuyingRV;
            num = creatures_to_buy;
          }
        }
      }
    }
  }
  action->town = town;
  action->type = 2;
  action->id = tier;
  action->num = num;
  *value = result;
}
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

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

Сообщение void_17 » 03 май 2022, 15:39

Для двойки была версия с сигнатурами, даже две для тройки нашлись.
Неужели для первой части тьма тьмущая? Ужас.

А вы полностью хотите декомпилировать?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 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 » 03 май 2022, 15:48

Цитата:
Для двойки была версия с сигнатурами, даже две для тройки нашлись.
Неужели для первой части тьма тьмущая? Ужас.

А вы полностью хотите декомпилировать?

В то время никто не думал сохранять код. Я даже не уверен, что исходники у кого-то остались, что печально. Для 3DO игра была экспериментом. Но как только они увидели потенциал, начали пилить Двойку, куда многие классы Героев 1 перекочевали. Думаю, никто не думал о сохрании кода Героев 1. Но! Этот код должен быть у локализаторов Героев 1 (т.е. у "Буки"). В коде есть даже имя того, что переписывал код (Игорь). Но, я думаю, он сделал свою работу и стёр исходники со своего HDD (возможно, это даже было прописано в договоре).
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

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

Сообщение void_17 » 03 май 2022, 16:23

Код Героев 3 всех аддонов тоже был у Буки.

Возможно их тоже все постёрли, печально это конечно.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 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 » 04 май 2022, 14:14

Сегодня случайно наткнулся на блог Quantomas'а, автора усиленного AI для Героев 5. Может, кому будет интересно. Там не только про 5-ку, а про AI и С++ в целом (с примерами кода).
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

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

Сообщение void_17 » 05 май 2022, 16:40

Полезно, конечно.

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

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 890
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 49 раз.

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

Сообщение Rolex » 01 июн 2022, 13:34

AlexSpl, я так понимаю вы сейчас сильно заняты первыми Героями или уже не очень? Просто появилась интересная идея для весьма полезного плагина к третьим Героям. Хотел обсудить его с вами. Может найдется у вас время и на него. Он относительно небольшей должен быть в плане кол-ва кода, но интересный и полезный.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 529
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 116 раз.

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

Сообщение void_17 » 01 июн 2022, 13:55

Можете обратиться ко мне если что. :smile2:
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 8