Объявления

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

H3API by RoseKavalier

Герои Меча и Магии 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: H3API by RoseKavalier

Сообщение AlexSpl » 16 июн 2021, 09:52

Пример можете привести? Неизвестные поля иногда могут быть выравниванием. Нужно смотреть выравнивание структуры: может, оно не 1.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение Ben80 » 16 июн 2021, 10:14

AlexSpl писал(а):

Пример можете привести? Неизвестные поля иногда могут быть выравниванием. Нужно смотреть выравнивание структуры: может, оно не 1.


Тогда понятно, спасибо. Ну, например https://github.com/RoseKavalier/H3API/b ... Square.hpp

Цитата:
INT8 stackIndex;
/** @brief [1A] */
// * true if a wide creature is here
BOOL8 twoHexMonsterSquare;
/** @brief [1C] */
INT32 deadStacksNumber;


С 0x1A идет прирост до 0x1С
Вернуться к началу

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: H3API by RoseKavalier

Сообщение AlexSpl » 16 июн 2021, 10:34

Код: Выделить всё
/** @brief [18] */
// * the side of stack on this square
INT8 stackSide;
/** @brief [19] */
// * the index of stack on this square
INT8 stackIndex;
/** @brief [1A] */
// * true if a wide creature is here
BOOL8 twoHexMonsterSquare;

Эти три поля + неиспользуемый байт = размер выравнивания (4). 4 - размер выравнивания по умолчанию, не думаю, что программисты NWC "играли" с выравниванием, поэтому некоторые неизвестные поля заведомо мусор.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение RoseKavalier » 16 июн 2021, 13:36

There are a few classes where alignment is 1, but otherwise everything else has alignment 4.
e.g. Hero, Boat, QuestGuard, SeerHut, Mapitem...
You can identify by looking for:
Код: Выделить всё
#pragma pack(push, 1)
....
#pragma pack(pop) /* align-1 */


NWC liked to re-use old code (who wouldn't) so some things came from Heroes 2 which was built with even older standards where alignment may have specifically been set.

In any case, almost everything has a static_assert to verify alignment
e.g.
Код: Выделить всё

struct H3Hero
{
   _H3API_SIZE_(0x492); // static const UINT32 SIZE = 0x492;
    ...
};
_H3API_ASSERT_SIZE_(H3Hero); // essentially static_assert(sizeof(H3Hero) == H3Hero::SIZE, "H3Hero size is incorrect.");

The moment I compile the library, every relevant struct size is verified, otherwise it fails to compile and lets me know what's the issue.
Вернуться к началу

offlineDimon  
имя: Дима
 
Сообщения: 1
Зарегистрирован: 24 окт 2022, 18:36
Пол: Мужчина
Поблагодарили: 0 раз.

Re: H3API by RoseKavalier

Сообщение Dimon » 24 окт 2022, 18:38

h3api совместим в HOMM3ROE Hd edition? Если да то где найти обучение по нему?
Вернуться к началу

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: H3API by RoseKavalier

Сообщение AlexSpl » 24 окт 2022, 18:39

К сожалению, не совместим.

Вкратце почему. API жёстко привязан к экзешнику, а точнее, статическим адресам указателей, структуре классов и т.д. Даже для "ванильной" версии RoE нужен уже другой API. Единственный более-менее удобный способ вносить изменения в код RoE HD Edition - сделать так, чтобы она подгружала patcher_x86. В этом случае можно уже будет работать с кодом средствами API патчера. Однако в этом случае заново придётся искать адреса всех указателей и размеры, поля и методы основных классов игры. Но не всё так печально: у нас есть база RoE HD Edition для Android-версии игры с дебажными символами, что сильно облегчает задачу написания API для RoE HD. Правда, за это дело вряд ли кто-то возьмётся из-за того, что RoE HD в геройском комьюнити слегка не популярна :smile1:
Вернуться к началу

Пред.

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

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

Сейчас этот форум просматривают: Yandex [bot] и гости: 5