Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 31 мар 2019, 15:46

You don't have IDA database?

All items you need should be in there.
If you only wish to inspect hook there and don't want access to structure, just pass int type instead.

Код: Выделить всё
#pragma pack(push, 1)
struct _RMGStruct_
{
  int VMT;
  int RandomSeed;
  int GameVersion;
  int MapItemsVMT;
  char MapItemsRef;
  char gap_11[3];
  void *MapItems;
  int SizeX;
  int SizeY;
  int Levels;
  char ObjectsTxtRef;
  char gap_25[3];
  int ObjectsTxt;
  int ObjectsTxtEnd;
  int ObjectsTxtMemEnd;
  _Vector_ ObjectPrototypesByType[232];
  char field_EB4;
  char gap_EB5[3];
  int field_EB8;
  int field_EBC;
  int field_EC0;
  _Vector_ ObjectPositions;
  int Progress;
  char PlayerIsHuman[8];
  int PlayerByOwner[8];
  char gap_F00[36];
  int PlayerTown[8];
  int MonstersOrObjectsCount;
  int HumansCount;
  int HumansTeams;
  int ComputersCount;
  int ComputersTeams;
  int field_F58;
  int field_F5C;
  int field_F60;
  int field_F64;
  char gap_F68[32];
  char DenyHeroes[156];
  char Artifacts_1024[144];
  char field_10B4;
  char gap_10B5[3];
  int WaterAmount;
  int MonstersStrength;
  _FMes_ TemplateName;
  char TemplatesUnk;
  char gap_10D1[3];
  void *Templates;
  int TemplatesEnd;
  int TemplatesMemEnd;
  char field_10E0;
  char gap_10E1[3];
  void *GenZones;
  int GenZonesEnd;
  int GenZonesMemEnd;
  char gap_10F0[4];
  void *ObjectsUnk;
  int ObjectsUnkEnd;
  int ObjectsUnkMemEnd;
  char field_1100;
  char gap_1101[3];
  int field_1104;
  int field_1108;
  int field_110C;
  int ObjectCountByType[232];
  char field_14B0;
  char gap_14B1[3];
  int field_14B4;
  int field_14B8;
  int field_14BC;
  char field_14C0;
  char gap_14C1[3];
  int field_14C4;
  int field_14C8;
  int field_14CC;
  char field_14D0;
  char gap_14D1[3];
  int field_14D4;
  int field_14D8;
  int field_14DC;
};
#pragma pack(pop)
Вернуться к началу

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

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

Сообщение as239 » 31 мар 2019, 16:03

I have it, but i don't know how to use it. I gain experience with examples, did not see any code using RMG.
Also IDA 5.5 works awful at Parallels Desktop.
Изображение
Вернуться к началу

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

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

Сообщение RoseKavalier » 31 мар 2019, 16:20

Oh poor you, I remember having this issue long ago but I don't remember how I solved it((
Changing the font may help, it may have been what I did.

I highly recommend 7.0 if you can get your hands on it, it is much improved in my opinion with ability to move to address within decompiled function for example.
Вернуться к началу

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

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

Сообщение as239 » 31 мар 2019, 16:40

I have IDA 6.8 its working good.
But my IDA database working only with IDA 5.5
Вернуться к началу

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

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

Сообщение Ben80 » 31 мар 2019, 16:47

RoseKavalier писал(а):

_List_ is essentially a Vector, unlike what its name implies.


I'm not strong in such terminology, but probably you are correct.

Zones in _RMGTemplate_ is not simply Vector ?
(unlike connections in _ZoneSettings_)

Or it would be correct to say that it is Vector which contains pointers ?

Sorry for mixed terminology (IDA + baratorch's SDK), still I hope you will understand what I meant.
Вернуться к началу

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

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

Сообщение RoseKavalier » 31 мар 2019, 17:25

@as239
With 7.0 I was able to upgrade the 5.5 database with no issues.

@Ben80
It's a vector of pointers to zones.
_List_<_ZoneSettings_*> which means each item in this list is 4 bytes wide, and these pointers refer to a 212 bytes-wide structure _ZoneSettings_.

 Vector
Objects
Изображение
Object Pointers
Изображение


 List
Изображение


int __thiscall RMG_CalculateMovementCost_00547D70(_RMGStruct_ *this, int x, int y, int z) is quite interesting as I said in a previous post.
It is exactly as what is in Smedstad presentation... excerpt
Код: Выделить всё
if ( !hasRoad || (costToMove = 2, !(mi_offset->PackedGroundData & 0x3C000000)) )// no road, cost 20, road cost 2 - 10 times less
                      costToMove = 20;
                    if ( direction & 1 )        // diagonal movement
                      costToMove *= 3          // skewed against diagonal movement ? should be +50% not + 200%
Вернуться к началу

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

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

Сообщение Ben80 » 31 мар 2019, 17:28

I wrote to you private message about source code of H3 :)
Вернуться к началу

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

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

Сообщение Ben80 » 31 мар 2019, 17:54

RoseKavalier писал(а):

int __thiscall RMG_CalculateMovementCost_00547D70(_RMGStruct_ *this, int x, int y, int z) is quite interesting as I said in a previous post.
It is exactly as what is in Smedstad presentation... excerpt
Код: Выделить всё
if ( !hasRoad || (costToMove = 2, !(mi_offset->PackedGroundData & 0x3C000000)) )// no road, cost 20, road cost 2 - 10 times less
                      costToMove = 20;
                    if ( direction & 1 )        // diagonal movement
                      costToMove *= 3          // skewed against diagonal movement ? should be +50% not + 200%


Possibly costToMove *=3 only when initial costToMove = 1. So, still we have +50% (if we take 2 as base value).

Below do not belong to movement cost, but shows that NWC use +2 for non-diagonal shift/movement and +3 for diagonal ones.
Изображение

Though I don't see why one should not use floats:
2.0 and 2.83 respectively.

Int and float take the same size.
Последний раз редактировалось Ben80 31 мар 2019, 18:19, всего редактировалось 4 раз(а).
Вернуться к началу

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

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

Сообщение as239 » 31 мар 2019, 17:57

Поизучал RMG_Road_00548530.
Она вызывается для гарантированного соединения каждого города с каждым.
Т.е. для 13 городов она вызывается:
13+12+11+10+9+8+7+6+5+4+3+2+1 раз.
Помочь исправить неправильные дороги она не сможет.
Нужно все-таки другое место где RMG соединяет две координаты (x,y,z)
Вернуться к началу

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

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

Сообщение Ben80 » 31 мар 2019, 18:07

as239 писал(а):

Поизучал RMG_Road_00548530.
Она вызывается для гарантированного соединения каждого города с каждым.
Т.е. для 13 городов она вызывается:
13+12+11+10+9+8+7+6+5+4+3+2+1 раз.
Помочь исправить неправильные дороги она не сможет.
Нужно все-таки другое место где RMG соединяет две координаты (x,y,z)


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

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

Пред.След.

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

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

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