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


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

База данных IDA от void17

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 02:37

Посмотрите ещё пост выше. Очень интересная тема. Что инлайн здесь, а что нет. Но Ваша функция в ProcessDead явно не вызывается.
Вернуться к началу

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

Re: База данных IDA от void17

Сообщение void_17 » 30 ноя 2021, 02:38

Я видел. Я приеду домой и разберусь, пока я не могу. Лучше не берите на себя сигнатуры.

Просто напишите все адреса, которые вас смущают и я просмотрю повторно.

Класс army один из самых "опасных" на тему инлайнов.

Цитата:
Не обгоняйте сапера! (с)
Вернуться к началу

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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 02:46

А что в army поменялось? Я не вижу изменений.
Вернуться к началу

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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 02:54

Код: Выделить всё
if ( !iArmy->activeSpellDuration[SPL_HYPNOTIZE] )
{
  if ( Random(1, 100) >= 60 )
  {
   if ( Random(1, 100) < 80 )
     *(&gpCombatManager->field_53DF - iArmy->side) = 1;
  }
  else
  {
   *(&gpCombatManager->heroSpellPower[2] + iArmy->side) = 1;
  }
}

Вот этот рандом при смерти отряда меня всегда интересовал. Я его учитывал ещё для предсказания морали/удачи в LMOracle. Было бы здорово, наконец, решить эту загадку 10-ти летней давности :smile1:

Пишет в эти поля:

Код: Выделить всё
000053DC field_53DC db ?
000053DD field_53DD db ?
000053DE field_53DE db ?
000053DF field_53DF db ?
Вернуться к началу

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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 03:09

Судя по
Код: Выделить всё
int __thiscall army::FlyTo(army *this, int a2, char a3)
{
int secondHexOrientation; // edi

if ( a2 >= 0 && a2 < 187 )
{
  secondHexOrientation = this->secondHexOrientation;
  army::remove_aura(this);
  army::remove_binding(this);
  army::Fly(this, a2);
  army::add_aura(this);
  if ( this->secondHexOrientation != secondHexOrientation && a3 )
    army::Turn(this, 1);
  army::PlayAnimation(this, 2, 1, 0);
  army::check_obstacle_attacks(this, 0);
  combatManager::RaiseDoor(gpCombatManager);
}
return 0;

в ProcessDead действительно инлайн какой-то странный. А если посмотреть на кол-во обращений, то в SoD army::remove_aura() почти везде инлайн: 3 вызова в SoD, 6 в RoE. Немножко вкурил SH-4 ассемблер. Вызовов 6.

Ясно одно. 0x514 поле связано с Гипнозом.

А может быть вот это всё:

Код: Выделить всё
char _f_514[20];
int hypnotize_528;
int hypnotize_52C;
int f_530;

двумя векторами? Размер 20 + 4 + 4 + 4 = 32 = 2 по 16, как раз на 2 вектора для обеих сторон.
Вернуться к началу

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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 03:27

Я гений :smile13:

Код: Выделить всё
for ( iArmy = this; (iArmy->creatureInfo.flags & CF_IMMOBILE) == 0; iArmy->numberAlive = 0 )
{
   First = iArmy->hypnotized[1].First;
   if ( First )
     v4 = (iArmy->hypnotized[1].Last - First) >> 2;
   else
     v4 = 0;
   v5 = v4;
   v6 = v4 - 1;
   if ( v5 > 0 )
   {
     do
     {
      combatMonster_0043E720((*(iArmy->hypnotized[1].First + v6) + 1300), iArmy);
      v7 = v6--;
     }
     while ( v7 > 0 );
   }
   sub_004D4E90(&iArmy->hypnotized[1], iArmy->hypnotized[1].First, iArmy->hypnotized[1].Last);
   v8 = std::vector<int>::size(iArmy->hypnotized);
   v9 = v8 - 1;
   if ( v8 > 0 )
   {
     do
     {
      combatMonster_0043E720((*(iArmy->hypnotized[0].First + v9) + 1316), iArmy);
      v10 = v9--;
     }
     while ( v10 > 0 );
   }
   sub_00448A40(iArmy->hypnotized);
...

Это реально два вектора.
Последний раз редактировалось AlexSpl 30 ноя 2021, 03:29, всего редактировалось 1 раз.
Вернуться к началу

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

Re: База данных IDA от void17

Сообщение void_17 » 30 ноя 2021, 03:28

AlexSpl писал(а):

А что в army поменялось? Я не вижу изменений.

как это что? Там в начале промежуток пустой вы сделали. Я исправил
Вернуться к началу

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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 03:30

Цитата:
как это что? Там в начале промежуток пустой вы сделали. Я исправил

Это IDA, я уже разобрался. Она автоматически ставит, если неверно определяешь тип lvar. Жутко неудобно. Я у себя уже удалил.
Вернуться к началу

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

Re: База данных IDA от void17

Сообщение void_17 » 30 ноя 2021, 03:31

Цитата:
Вызовов 6.

Врядли 6. Там есть реальные вызовы, а есть мусор. Когда на X жмете, там будет два вида адресов: с плюсом и loc.
Те что с плюсом — реальные вызовы. А loc_... это мусор, фактически реальное количество вызовов соответствует количеству адресов "с плюсом". Можете нажать Ctrl+F и ввести +, так высветятся только реальные вызовы.

Так работает SH-4 ассемблер.
Вернуться к началу

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: База данных IDA от void17

Сообщение AlexSpl » 30 ноя 2021, 03:34

Я уже разобрался. Всего 20, 6 реальных jsr.
Вернуться к началу

Пред.След.

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

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

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

cron