А как понять какой тип имеет параметр функции?
Вот как igrik понял что int a3 имеет тип _RMGMapItems_?
Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: RMG SODА как понять какой тип имеет параметр функции?
Вот как igrik понял что int a3 имеет тип _RMGMapItems_? |
Re: RMG SODЕсли тип - структура/класс (обычно в качестве аргумента функции идёт указатель на них), то только с помощью анализа кода/реверса. Видим, что данные идут последовательно, создаём из них структуру (чем точнее отреверсили, тем ближе к оригинальной она будет) и используем в коде. Именно так все структуры/классы и появляются на свет (_Hero_, _BattleStack_ и т.п.). Необязательно даже полностью понимать, за что в игре отвечает то или иное поле структуры, равно как необязательно знать её точный размер: достаточно описать только несколько первых полей.
|
Re: RMG SODПолучилось полностью убрать блоки, через изменение порядка формирования дорог, но есть проблемы:
1. пустые дороги визуально выглядят не очень 2. не получается нормально поменять порядок формирования дорог и объектов в подземелье. По п.1 помогло бы понимание - охраняется ли объект или нет, и если нет, то смело ставить его рядом с дорогой. Но в RMGMapItems_00531D80_CantPlace это никак не понять. Кстати в это новом проекте, пока не наблюдаю изменение плотности центра, при использовании RMGMapItems_00531D80_CantPlace. По п.2 вообще идей нет что можно сделать. Алгоритм изменения порядка формирования дорог и объектов: - перед генерацией объектов: устанавливаем всем клеткам с маской 011, маску 000, запоминаем их устанавливаем всем клеткам с маской 010, маску 110, запоминаем их формируем дороги восстанавливаем маски клеток всем дорожным клеткам устанавливаем mustBeBlocked = 0, чтобы на дорогах не генерились объекты Используемая маска клетки: isBlocked, mustBeBlocked, canBeBlocked.
|
Re: RMG SODПоле "zoneInfo" в структуре "RMG_ZoneGenerator" имеет тип "RMG_Zone".
В SDK сейчас стоит тип "PUINT8". Последний раз редактировалось as239 28 ноя 2019, 16:21, всего редактировалось 1 раз.
|
Re: RMG SODС блоками на поверхности все получилось.
Помог ручной контроль маски проходимости в RMGMapItems_00531D80_CantPlace. Здесь проверяется пересекает ли объект дорогу.
Осталась проблема с подземкой. Не очень понятно что делает RMG_00543ED0, и как правильно вызывать sub_005B79B0. И можно ли без этого обойтись, может как-то можно получить координаты клеток пропасти, до их появления в RMG_MapItem? |
|
Re: RMG SODRMG_00543ED0 places rock terrain underground where needed.
Here I cancelled the subroutine: A look at RMG_00543ED0 helps us decipher the format of sub_005B79B0: unsigned int __thiscall sub_005B79B0(H3SmartPointer *a1, int a2, int a3, unsigned int a4, unsigned int a5) I've seen the "H3SmartPointer" type a few times, it's essentially
In this case the m_data is a 68-byte allocated structure by the constructor sub_5B7570 which looks to have some binary trees. sub_5B7570(H3SmartPointer& This, arg2,terrain_type, arg4) No clue what arg4 does, I tried changing its value and couldn't see any effects. It seems like it's always 4. To call the constructor there is another structure that is needed (arg2)
You can try to initiate the smartpointer with a dummy structure like so:
I don't know if this is of any help to you but with the above you could theoretically do:
Последний раз редактировалось RoseKavalier 30 ноя 2019, 17:31, всего редактировалось 2 раз(а).
|
|
Re: RMG SODIMO the logic that comes before the sub_5B79B0 call at 543F82 should reveal how to get whether a tile needs to be rock.
However even this condition is not quite sufficient to guarantee this mapitem will be rock terrain. |
Re: RMG SODLooks like no needs to do something with RMG_00543ED0 the problem is different.
My main goal is to change the order of the formation of roads, it gives a lot of opportunities. But i have problems with it in the underground. F.e. template 6LM10A. Here is the scheme: http://forum.heroesworld.ru/showpost.ph ... stcount=21 Here is the right connections from the red without any program changes: The road from red goes to neutral zone, which have3 monoliths: one to the teal AI, another to the tan AI and another to the local treasure. Here is my best result: The connection are wrong. And also there is a problem with some roads: Tile x 113 y 108 z 1 has mask 010, tile x 113 y 107 z 1 has mask 110. I need to block tile with mask 010 otherwise there will be completely wrong roads zones connections. And of course it causes this problem with road display. I tried many options, and now I have no idea what else can be done. I tried to visually understand the location of the zones and the values of the mask in this stage, but this is so far from the real map. mask: zones: The main code is simple here is:
In the attachment, the source code with the described example. I would be grateful for any help, how to get the right roads connections in the underground.
|
|
Re: RMG SOD0x54878B
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8