Объявления
Поздравляем
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 » 17 дек 2021, 17:37

Ага. Видимо, изначально планировался только для воздушников иммунитет, а потом добавили уже иммунитет к разуму.

Кстати, type_spellvalue, похоже, не имеет никакого отношения к боёвке и используется только для расчётов ценности объектов на карте и степени угрозы вражеских героев*. Я начал уже разбирать функции. Даже табличку для будущей статьи сделал:

Spells.pdf
(569.04 КБ) Скачиваний: 219

Будет с самых основ. Оказывается, подсчёт эффективности заклинаний проще, чем я себе его представлял. Я уже разбирал эти алгоритмы частично, когда писал о выборе вторичных навыков героями AI.

*) Хотя в том же type_spell_choice есть поле для value, только какое это value, предстоит выяснить. Есть вес заклинания, а есть raw_spell_value, которое потом модифицируется.

calss type_spellvalue:

Код: Выделить всё
0x4080 : Length = 666, Leaf = 0x1203 LF_FIELDLIST
list[0] = LF_METHOD, count = 2, list = 0x4076, name = 'type_spellvalue'
list[1] = LF_ONEMETHOD, public, VANILLA, index = 0x4077, name = 'can_cast_spells'
list[2] = LF_ONEMETHOD, public, VANILLA, index = 0x4078, name = 'get_duration'
list[3] = LF_ONEMETHOD, public, VANILLA, index = 0x4078, name = 'get_power'
list[4] = LF_ONEMETHOD, public, VANILLA, index = 0x4078, name = 'get_mana'
list[5] = LF_ONEMETHOD, public, VANILLA, index = 0x4078, name = 'get_stack_value'
list[6] = LF_ONEMETHOD, public, VANILLA, index = 0x4070, name = 'get_best_spell_value'
list[7] = LF_ONEMETHOD, public, VANILLA, index = 0x407A, name = 'get_value_of_increase'
list[8] = LF_ONEMETHOD, public, VANILLA, index = 0x4067, name = 'get_raw_spell_value'
list[9] = LF_ONEMETHOD, public, VANILLA, index = 0x407B, name = 'set_duration'
list[10] = LF_ONEMETHOD, public, VANILLA, index = 0x407B, name = 'set_power'
list[11] = LF_ONEMETHOD, public, VANILLA, index = 0x407B, name = 'set_mana'
list[12] = LF_ONEMETHOD, public, VANILLA, index = 0x407B, name = 'set_stack_value'
list[13] = LF_ONEMETHOD, protected, VANILLA, index = 0x4068, name = 'fill_creature_value_list'
list[14] = LF_ONEMETHOD, protected, VANILLA, index = 0x4064, name = 'get_damage_spell_value'
list[15] = LF_ONEMETHOD, protected, VANILLA, index = 0x4065, name = 'get_enchantment_value'
list[16] = LF_ONEMETHOD, protected, VANILLA, index = 0x4065, name = 'get_mass_damage_spell_value'
list[17] = LF_ONEMETHOD, protected, VANILLA, index = 0x4066, name = 'get_summoning_value'
list[18] = LF_MEMBER, protected, type = 0x1AA2, offset = 0
   member name = 'our_hero'
list[19] = LF_MEMBER, protected, type = T_LONG(0012), offset = 4
   member name = 'stack_value'
list[20] = LF_MEMBER, protected, type = T_LONG(0012), offset = 8
   member name = 'power'
list[21] = LF_MEMBER, protected, type = T_LONG(0012), offset = 12
   member name = 'duration'
list[22] = LF_MEMBER, protected, type = T_LONG(0012), offset = 16
   member name = 'mana'
list[23] = LF_MEMBER, protected, type = 0x407C, offset = 20
   member name = 'list'
list[24] = LF_ONEMETHOD, public, VANILLA, (compgenx), index = 0x407E, name = 'operator='
list[25] = LF_ONEMETHOD, public, VANILLA, (compgenx), index = 0x4068, name = '~type_spellvalue'
list[26] = LF_ONEMETHOD, public, VANILLA, (compgenx), index = 0x407F, name = '__vecDelDtor'
Вернуться к началу

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

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

Сообщение void_17 » 17 дек 2021, 18:37

Кстати говоря очень даже удобочитаемый дамп получился. Я без справки спокойно его читаю и восстанавливаю типы.
Совет: типы шифруются 4-значным шестнадцатеричным кодом. Ctrl+F в дампе по шаблону "0хАДРЕС :", прыгните на определение типа. Единственно, с массивами не всегда понятно , а так впринципе нормально.

Вообще это сокровише настоящее, ничего не скажешь. Скоро восстановлю все типы и у нас еще будет полноценный реверснутый мультиплеер и интерфейс.

Кстати, вас вообще не интересует изучение вне-боевого ИИ?
Вернуться к началу

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 » 17 дек 2021, 18:48

Цитата:
Вообще это сокровише настоящее, ничего не скажешь. Скоро восстановлю все типы и у нас еще будет полноценный реверснутый мультиплеер и интерфейс.

Да, я уже разобрался. Все типы находятся, даже с модификаторами типа const :smile20: Разве что можно это дело автоматизировать, если не жалко времени: написать скрипт, который будет проходить по всем индексам и возвращать уже готовый тип нужного поля, аргумента и т.п.

Цитата:
Кстати, вас вообще не интересует изучение вне-боевого ИИ?

С боевым бы разобраться. Но 100% заинтересует кого-то в будущем. Это выход на новый уровень понимания AI. Если раньше при упоминании AI плагиностроители пожимали плечами, то сейчас, я думаю, пойдёт волна плагинов*, нацеленных на улучшение AI.

*) Как только разберутся, какой документ перед ними.
Вернуться к началу

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

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

Сообщение void_17 » 17 дек 2021, 18:55

Мне не очень ясна логика простановки типов некоторых полей разработчиками. Вот почему ресурсы хранятся в int-овом 32-битном массиве? Тем более signed. Ну это же очевидная ловушка, да и к тому же, как может вообще быть с точки зрения логики отрицательное количество золото еще более менее понятно, но отрицательный опыт??? Надо будет это дело обязательно исправлять.

А еще. Почему-то иногда вместо bool ставится int, который там принимает только 0 или 1. Зачем? Есть же bool... Намерений разработчиков не понять конечно. Вроде толковые программисты, а такие косяки профукали.
Вернуться к началу

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 » 17 дек 2021, 19:04

Цитата:
Мне не очень ясна логика простановки типов некоторых полей разработчиками. Вот почему ресурсы хранятся в int-овом 32-битном массиве? Тем более signed. Ну это же очевидная ловушка, да и к тому же, как может вообще быть с точки зрения логики отрицательное количество золото еще более менее понятно, но отрицательный опыт??? Надо будет это дело обязательно исправлять.

Я вообще не люблю беззнаковые типы. Как раз таки они - ловушка. А знаковые нужны для той же -1 (отсутствия чего-либо и т.п.). И сравнивать легче, а не с какой-то огромной константой. Насчёт опыта. Отрицательные числа изначально придуманы для подсчёта займов и долгов. Так что -1000 опыта имеет смысл в некоторых ситуациях.

Цитата:
А еще. Почему-то иногда вместо bool ставится int, который там принимает только 0 или 1. Зачем? Есть же bool... Намерений разработчиков не понять конечно. Вроде толковые программисты, а такие косяки профукали.

Тоже заметил. Может, в планах было расширение кол-ва значений, типа перестраховки такой.
Вернуться к началу

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 » 17 дек 2021, 19:20

combatManager:

Код: Выделить всё
0x4429 : Length = 11502, Leaf = 0x1203 LF_FIELDLIST
list[0] = LF_BCLASS, public, type = 0x1866, offset = 0
list[1] = LF_NESTTYPE, type = 0x432A, __unnamed
list[2] = LF_NESTTYPE, type = 0x430F, TWallSection
list[3] = LF_NESTTYPE, type = 0x1F11, TObstacleInfo
list[4] = LF_NESTTYPE, type = 0x1F16, TObstacle
list[5] = LF_NESTTYPE, type = 0x41E6, TObstacleVector
list[6] = LF_METHOD, count = 2, list = 0x432E, name = 'combatManager'
list[7] = LF_ONEMETHOD, public, STATIC, index = 0x432F, name = 'LoadWallTraitsTable'
list[8] = LF_ONEMETHOD, public, VIRTUAL, index = 0x4330, name = 'Open'
list[9] = LF_ONEMETHOD, public, VIRTUAL, index = 0x1FD6, name = 'Close'
list[10] = LF_ONEMETHOD, public, VANILLA, index = 0x4332, name = 'SetupCombat'
list[11] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'InitNonVisualVars'
list[12] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'SetupAndLoadObstacles'
list[13] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'InitializeArchers'
list[14] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'DetermineCombatTerrain'
list[15] = LF_ONEMETHOD, public, VANILLA, index = 0x4333, name = 'GetBackgroundName'
list[16] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'GenerateMap'
list[17] = LF_ONEMETHOD, public, VIRTUAL, index = 0x4334, name = 'Main'
list[18] = LF_ONEMETHOD, public, VANILLA, index = 0x4334, name = 'ProcessCombatMsg'
list[19] = LF_ONEMETHOD, public, VANILLA, index = 0x4335, name = 'ProcessNextAction'
list[20] = LF_ONEMETHOD, public, VANILLA, index = 0x4336, name = 'ValidHexToStandOn'
list[21] = LF_ONEMETHOD, public, STATIC, index = 0x4337, name = 'ValidHex'
list[22] = LF_ONEMETHOD, public, STATIC, index = 0x4338, name = 'InCombatArea'
list[23] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'SetCombatDirections'
list[24] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD5, name = 'CheckSetMouseDirection'
list[25] = LF_ONEMETHOD, public, VANILLA, index = 0x4339, name = 'NextArmy'
list[26] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'SetNextArmy'
list[27] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'UpdateArmyLuckAndMorale'
list[28] = LF_ONEMETHOD, public, VANILLA, index = 0x4330, name = 'GetCommand'
list[29] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'DoCommand'
list[30] = LF_ONEMETHOD, public, VANILLA, index = 0x4330, name = 'RightClick'
list[31] = LF_ONEMETHOD, public, VANILLA, index = 0x433A, name = 'IsWinner'
list[32] = LF_ONEMETHOD, public, VANILLA, index = 0x433B, name = 'CombatIsOver'
list[33] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'DoVictory'
list[34] = LF_ONEMETHOD, public, VANILLA, index = 0x433C, name = 'DoSurrender'
list[35] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'RaiseSkeletons'
list[36] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'LearnSpellFromEagleEye'
list[37] = LF_ONEMETHOD, public, VANILLA, index = 0x4340, name = 'LootDeadHero'
list[38] = LF_ONEMETHOD, public, VANILLA, index = 0x4342, name = 'CalculateGainedExperience'
list[39] = LF_ONEMETHOD, public, VANILLA, index = 0x4344, name = 'berserk_attack'
list[40] = LF_ONEMETHOD, public, VANILLA, index = 0x4345, name = 'can_cast_spells'
list[41] = LF_ONEMETHOD, public, VANILLA, index = 0x1F0C, name = 'check_fire_wall'
list[42] = LF_ONEMETHOD, public, VANILLA, index = 0x1F0C, name = 'check_landmine'
list[43] = LF_ONEMETHOD, public, VANILLA, index = 0x4349, name = 'choose_cyclops_action'
list[44] = LF_ONEMETHOD, public, VANILLA, index = 0x434B, name = 'choose_melee_action'
list[45] = LF_ONEMETHOD, public, VANILLA, index = 0x434D, name = 'compute_fire_shield_damage'
list[46] = LF_ONEMETHOD, public, VANILLA, index = 0x434F, name = 'damage_message'
list[47] = LF_ONEMETHOD, public, VANILLA, index = 0x2061, name = 'demonic_resurrection'
list[48] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'do_animations'
list[49] = LF_METHOD, count = 2, list = 0x4351, name = 'get_current_army'
list[50] = LF_ONEMETHOD, public, VANILLA, index = 0x4353, name = 'enemy_is_adjacent'
list[51] = LF_ONEMETHOD, public, VANILLA, index = 0x4354, name = 'failed_siege'
list[52] = LF_ONEMETHOD, public, VANILLA, index = 0x4358, name = 'find_AI_targets'
list[53] = LF_ONEMETHOD, public, VANILLA, index = 0x435B, name = 'find_move_order'
list[54] = LF_METHOD, count = 2, list = 0x435D, name = 'get_distance'
list[55] = LF_ONEMETHOD, public, STATIC, index = 0x1FB7, name = 'hex_to_point'
list[56] = LF_ONEMETHOD, public, STATIC, index = 0x1FB9, name = 'point_to_hex'
list[57] = LF_ONEMETHOD, public, VANILLA, index = 0x435F, name = 'get_wall_strength'
list[58] = LF_ONEMETHOD, public, VANILLA, index = 0x4361, name = 'get_total_combat_value'
list[59] = LF_ONEMETHOD, public, VANILLA, index = 0x4362, name = 'is_adjacent'
list[60] = LF_ONEMETHOD, public, VANILLA, index = 0x1FA9, name = 'is_valid_teleport'
list[61] = LF_METHOD, count = 3, list = 0x4363, name = 'mark_area_effect'
list[62] = LF_METHOD, count = 2, list = 0x4364, name = 'mark_berserk_area_effect'
list[63] = LF_ONEMETHOD, public, VANILLA, index = 0x1FBF, name = 'mark_wall_area_effect'
list[64] = LF_METHOD, count = 2, list = 0x4365, name = 'remove_corpse'
list[65] = LF_ONEMETHOD, public, VANILLA, index = 0x4367, name = 'should_lower_door'
list[66] = LF_ONEMETHOD, public, VANILLA, index = 0x4368, name = 'simulate_combat'
list[67] = LF_ONEMETHOD, public, VANILLA, index = 0x4369, name = 'valid_wall_target'
list[68] = LF_ONEMETHOD, public, VANILLA, index = 0x207A, name = 'GetSpellWallHex'
list[69] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'DoCompAI'
list[70] = LF_ONEMETHOD, public, VANILLA, index = 0x4354, name = 'DoSpellAI'
list[71] = LF_ONEMETHOD, public, VANILLA, index = 0x4354, name = 'AICheckRetreat'
list[72] = LF_ONEMETHOD, public, VANILLA, index = 0x207A, name = 'ChooseBallistaTarget'
list[73] = LF_ONEMETHOD, public, VANILLA, index = 0x436B, name = 'PowEffect'
list[74] = LF_ONEMETHOD, public, VANILLA, index = 0x2076, name = 'LoadSpellEffect'
list[75] = LF_ONEMETHOD, public, VANILLA, index = 0x436E, name = 'CheckWin'
list[76] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'DoLoseWindow'
list[77] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ClearEffects'
list[78] = LF_ONEMETHOD, public, VANILLA, index = 0x436F, name = 'CheckApplyBadMorale'
list[79] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'CheckApplyGoodMorale'
list[80] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ResetRound'
list[81] = LF_ONEMETHOD, public, VANILLA, index = 0x4370, name = 'ClearWinLoseBottom'
list[82] = LF_ONEMETHOD, public, VANILLA, index = 0x4371, name = 'ShowWinLoseArtifact'
list[83] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CheckChangeSelector'
list[84] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'CheckChangeHighlighter'
list[85] = LF_ONEMETHOD, public, VANILLA, index = 0x4372, name = 'TurnOffSelector'
list[86] = LF_ONEMETHOD, public, VANILLA, index = 0x4372, name = 'TurnOffHighlighter'
list[87] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CheckCastleAttack'
list[88] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CheckGetAIMove'
list[89] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'GetControl'
list[90] = LF_ONEMETHOD, public, VANILLA, index = 0x436F, name = 'GetPointer'
list[91] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ResetMouse'
list[92] = LF_ONEMETHOD, public, VANILLA, index = 0x4330, name = 'ExperienceValueOfStack'
list[93] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ResetLimitCreature'
list[94] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ResetHitByCreature'
list[95] = LF_ONEMETHOD, public, VANILLA, index = 0x1EDA, name = 'ViewSpells'
list[96] = LF_ONEMETHOD, public, VANILLA, index = 0x1F09, name = 'InitiateSpell'
list[97] = LF_ONEMETHOD, public, VANILLA, index = 0x1FB6, name = 'HasValidSpellTarget'
list[98] = LF_ONEMETHOD, public, VANILLA, index = 0x1FAD, name = 'ValidSpellTarget'
list[99] = LF_ONEMETHOD, public, VANILLA, index = 0x1FAF, name = 'ValidSpellTargetArmy'
list[100] = LF_ONEMETHOD, public, VANILLA, index = 0x1F0E, name = 'CastSpell'
list[101] = LF_ONEMETHOD, public, VANILLA, index = 0x2071, name = 'SpellCastWorkChance'
list[102] = LF_ONEMETHOD, public, VANILLA, index = 0x1FAF, name = 'SpellCastWorks'
list[103] = LF_ONEMETHOD, public, VANILLA, index = 0x2073, name = 'SpellTargetMessage'
list[104] = LF_ONEMETHOD, public, VANILLA, index = 0x2075, name = 'ShowSpellMessage'
list[105] = LF_ONEMETHOD, public, VANILLA, index = 0x2079, name = 'AbleToSummonElemental'
list[106] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD8, name = 'SetMassSpellInfluence'
list[107] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC7, name = 'AreaEffect'
list[108] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'Armageddon'
list[109] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD5, name = 'ChainLightning'
list[110] = LF_ONEMETHOD, public, VANILLA, index = 0x4374, name = 'EffectSpellCure'
list[111] = LF_ONEMETHOD, public, VANILLA, index = 0x4376, name = 'EffectSpellResurrect'
list[112] = LF_ONEMETHOD, public, VANILLA, index = 0x4378, name = 'TurnToStone'
list[113] = LF_ONEMETHOD, public, VANILLA, index = 0x2066, name = 'BloodLustEffect'
list[114] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'Earthquake'
list[115] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'VaporizeCreature'
list[116] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD5, name = 'RippleCreature'
list[117] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'CastMassSpell'
list[118] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'MirrorImage'
list[119] = LF_ONEMETHOD, public, VANILLA, index = 0x1FDD, name = 'ShowMassSpell'
list[120] = LF_ONEMETHOD, public, VANILLA, index = 0x1FDF, name = 'SummonElemental'
list[121] = LF_METHOD, count = 2, list = 0x437B, name = 'find_resurrection_target'
list[122] = LF_ONEMETHOD, public, VANILLA, index = 0x1FB4, name = 'find_demonic_resurrection_target'
list[123] = LF_ONEMETHOD, public, VANILLA, index = 0x1FB4, name = 'find_animate_dead_target'
list[124] = LF_METHOD, count = 2, list = 0x437C, name = 'Resurrect'
list[125] = LF_ONEMETHOD, public, VANILLA, index = 0x437D, name = 'Bolt'
list[126] = LF_ONEMETHOD, public, VANILLA, index = 0x1FCC, name = 'ResetBoltAngle'
list[127] = LF_ONEMETHOD, public, VANILLA, index = 0x1FCE, name = 'DrawBolt'
list[128] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD0, name = 'AddBolt'
list[129] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD2, name = 'DoBolt'
list[130] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD4, name = 'GetNextChainLightningTarget'
list[131] = LF_ONEMETHOD, public, VANILLA, index = 0x436F, name = 'EffectSpellCreateCreature'
list[132] = LF_ONEMETHOD, public, VANILLA, index = 0x2066, name = 'ShowSpellCastFailure'
list[133] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'MakeCreaturesVanish'
list[134] = LF_ONEMETHOD, public, VANILLA, index = 0x2068, name = 'ComputeSpellDamage'
list[135] = LF_ONEMETHOD, public, VANILLA, index = 0x206A, name = 'ModifySpellDamage'
list[136] = LF_ONEMETHOD, public, VANILLA, index = 0x206C, name = 'ModifySpellDamageForSpells'
list[137] = LF_METHOD, count = 2, list = 0x4381, name = 'SpellEffect'
list[138] = LF_ONEMETHOD, public, VANILLA, index = 0x4380, name = 'MassSpellEffect'
list[139] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'MarkCreatureEffect'
list[140] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'RaiseDoor'
list[141] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'TestRaiseDoor'
list[142] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'LowerDoor'
list[143] = LF_ONEMETHOD, public, VANILLA, index = 0x4384, name = 'ShootMissile'
list[144] = LF_ONEMETHOD, public, VANILLA, index = 0x4387, name = 'ShootAnimatedMissile'
list[145] = LF_ONEMETHOD, public, VANILLA, index = 0x4389, name = 'ShootBallisticMissile'
list[146] = LF_ONEMETHOD, public, VANILLA, index = 0x438B, name = 'ShotIsNotOptimal'
list[147] = LF_ONEMETHOD, public, VANILLA, index = 0x438C, name = 'ShotIsThroughWall'
list[148] = LF_ONEMETHOD, public, VANILLA, index = 0x4362, name = 'InLineOfSight'
list[149] = LF_ONEMETHOD, public, STATIC, index = 0x438E, name = 'GetMissileStartingPosition'
list[150] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'DoLuck'
list[151] = LF_ONEMETHOD, public, VANILLA, index = 0x438F, name = 'NoShowCombatLog'
list[152] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ResetCycleTimers'
list[153] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ResetCyclingCreatures'
list[154] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'CombatMessage'
list[155] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CycleCombatScreen'
list[156] = LF_ONEMETHOD, public, VANILLA, index = 0x4390, name = 'SetupGridForArmy'
list[157] = LF_ONEMETHOD, public, VANILLA, index = 0x436F, name = 'UpdateGrid'
list[158] = LF_METHOD, count = 2, list = 0x4393, name = 'UpdateMouseGrid'
list[159] = LF_ONEMETHOD, public, VANILLA, index = 0x437E, name = 'SetCombatGrid'
list[160] = LF_ONEMETHOD, public, VANILLA, index = 0x4394, name = 'AddArmy'
list[161] = LF_ONEMETHOD, public, VANILLA, index = 0x2066, name = 'ViewArmy'
list[162] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'SetCombatViewArmy'
list[163] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CombatSystemOptions'
list[164] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'ViewCastleBallista'
list[165] = LF_ONEMETHOD, public, VANILLA, index = 0x4395, name = 'PlaceLargeObstacle'
list[166] = LF_ONEMETHOD, public, VANILLA, index = 0x4396, name = 'place_obstacle'
list[167] = LF_ONEMETHOD, public, VANILLA, index = 0x4398, name = 'PlaceObstacle'
list[168] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'RemoveObstacle'
list[169] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'PlaceAllObstacles'
list[170] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'DrawBackground'
list[171] = LF_METHOD, count = 3, list = 0x439B, name = 'UpdateCombatArea'
list[172] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 56
   member name = 'inmenu'
list[173] = LF_MEMBER, public, type = T_LONG(0012), offset = 60
   member name = 'combat_pos'
list[174] = LF_MEMBER, public, type = T_INT4(0074), offset = 64
   member name = 'combat_row'
list[175] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 68
   member name = 'defaultinput'
list[176] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'FullUpdate'
list[177] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 69
   member name = 'no_scrolling'
list[178] = LF_ONEMETHOD, public, VANILLA, index = 0x439C, name = 'ScrollCombatArea'
list[179] = LF_ONEMETHOD, public, VANILLA, index = 0x439D, name = 'ScrollToPixel'
list[180] = LF_METHOD, count = 3, list = 0x43A4, name = 'ScrollTo'
list[181] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CheckAutoScrolling'
list[182] = LF_ONEMETHOD, public, VANILLA, index = 0x43A5, name = 'ShiftXY'
list[183] = LF_ONEMETHOD, public, VANILLA, index = 0x43A6, name = 'DoKeyboardNavigation'
list[184] = LF_ONEMETHOD, public, VANILLA, index = 0x4372, name = 'InitMouse'
list[185] = LF_ONEMETHOD, public, VANILLA, index = 0x43A8, name = 'GetHexXY'
list[186] = LF_ONEMETHOD, public, VANILLA, index = 0x43A9, name = 'MoveCursorTo'
list[187] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'MoveCursorMenu'
list[188] = LF_ONEMETHOD, public, VANILLA, index = 0x43AA, name = 'MoveCursor'
list[189] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'MoveCursorCombatXY'
list[190] = LF_ONEMETHOD, public, VANILLA, index = 0x43AB, name = 'ClientToCombat'
list[191] = LF_ONEMETHOD, public, VANILLA, index = 0x43AB, name = 'CombatToScreen'
list[192] = LF_ONEMETHOD, public, VANILLA, index = 0x4396, name = 'SelectAttackDir'
list[193] = LF_ONEMETHOD, public, VANILLA, index = 0x4330, name = 'ValidAttackHex'
list[194] = LF_ONEMETHOD, public, VANILLA, index = 0x436F, name = 'MoveToValidHex'
list[195] = LF_METHOD, count = 2, list = 0x43AC, name = 'HighlightHex'
list[196] = LF_ONEMETHOD, public, VANILLA, index = 0x1F68, name = 'display_failure_reason'
list[197] = LF_ONEMETHOD, public, VANILLA, index = 0x43AE, name = 'DrawFrame'
list[198] = LF_ONEMETHOD, public, VANILLA, index = 0x43B1, name = 'DrawArcher'
list[199] = LF_ONEMETHOD, public, VANILLA, index = 0x43B3, name = 'DrawCreature'
list[200] = LF_ONEMETHOD, public, VANILLA, index = 0x43B5, name = 'DrawCreatureAlpha'
list[201] = LF_ONEMETHOD, public, VANILLA, index = 0x43B1, name = 'DrawCombatHero'
list[202] = LF_ONEMETHOD, public, VANILLA, index = 0x43B7, name = 'DrawSpriteObject'
list[203] = LF_ONEMETHOD, public, VANILLA, index = 0x43B9, name = 'DrawSpellEffect'
list[204] = LF_ONEMETHOD, public, VANILLA, index = 0x43BB, name = 'DrawWall'
list[205] = LF_ONEMETHOD, public, VANILLA, index = 0x43BD, name = 'DrawObject'
list[206] = LF_ONEMETHOD, public, VANILLA, index = 0x43BF, name = 'DrawObstacle'
list[207] = LF_ONEMETHOD, public, VANILLA, index = 0x4330, name = 'DrawMoatOverlay'
list[208] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD5, name = 'DrawOccupant'
list[209] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'DrawDeadOccupants'
list[210] = LF_ONEMETHOD, public, VANILLA, index = 0x1FC8, name = 'DrawWallAt'
list[211] = LF_ONEMETHOD, public, VANILLA, index = 0x206D, name = 'DrawObstacleAt'
list[212] = LF_ONEMETHOD, public, VANILLA, index = 0x433C, name = 'DrawCreatureAndHeroSubwindows'
list[213] = LF_ONEMETHOD, public, VANILLA, index = 0x43C0, name = 'RemoveArmyFromGrid'
list[214] = LF_ONEMETHOD, public, VANILLA, index = 0x43C2, name = 'PlaceArmyInGrid'
list[215] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'ComputeMaxExtent'
list[216] = LF_ONEMETHOD, public, STATIC, index = 0x43C3, name = 'GetTargetWallIndex'
list[217] = LF_ONEMETHOD, public, VANILLA, index = 0x43C5, name = 'DamageWall'
list[218] = LF_ONEMETHOD, public, STATIC, index = 0x43C6, name = 'ComputeDamageModifier'
list[219] = LF_ONEMETHOD, public, VANILLA, index = 0x43C7, name = 'GetGridIndex'
list[220] = LF_ONEMETHOD, public, STATIC, index = 0x43C8, name = 'GetHexIndex'
list[221] = LF_ONEMETHOD, public, VANILLA, index = 0x433A, name = 'RowIsOdd'
list[222] = LF_ONEMETHOD, public, STATIC, index = 0x4337, name = 'InCastle'
list[223] = LF_ONEMETHOD, public, STATIC, index = 0x4337, name = 'LeftOfMoat'
list[224] = LF_ONEMETHOD, public, VANILLA, index = 0x43C9, name = 'GetCell'
list[225] = LF_ONEMETHOD, public, VANILLA, index = 0x43CA, name = 'GetObstacle'
list[226] = LF_ONEMETHOD, public, STATIC, index = 0x43CB, name = 'GridY'
list[227] = LF_ONEMETHOD, public, STATIC, index = 0x43CB, name = 'GridX'
list[228] = LF_ONEMETHOD, public, STATIC, index = 0x4337, name = 'InInvisibleColumn'
list[229] = LF_ONEMETHOD, public, VANILLA, index = 0x433A, name = 'HexIsBlocked'
list[230] = LF_ONEMETHOD, public, VANILLA, index = 0x43CC, name = 'is_affected'
list[231] = LF_ONEMETHOD, public, VANILLA, index = 0x433B, name = 'is_in_second_phase'
list[232] = LF_ONEMETHOD, public, VANILLA, index = 0x43CD, name = 'IsInMoat'
list[233] = LF_ONEMETHOD, public, VANILLA, index = 0x43CE, name = 'is_outside_placement_boundry'
list[234] = LF_ONEMETHOD, public, VANILLA, index = 0x43D0, name = 'HandleCombatPlayerDrop'
list[235] = LF_ONEMETHOD, public, VANILLA, index = 0x433B, name = 'IsQuickCombat'
list[236] = LF_MEMBER, public, type = 0x43D1, offset = 72
   member name = 'netMsgHandlerPause'
list[237] = LF_STATICMEMBER, public, type = 0x187C      member name = 'CombatAreaLimits'
list[238] = LF_STATICMEMBER, public, type = 0x187C      member name = 'CombatAreaLimits_Visible'
list[239] = LF_STATICMEMBER, public, type = 0x187C      member name = 'GridAreaLimits'
list[240] = LF_STATICMEMBER, public, type = 0x187C      member name = 'DrawbridgeLimits'
list[241] = LF_STATICMEMBER, public, type = 0x187C      member name = 'LeftHeroLimits'
list[242] = LF_STATICMEMBER, public, type = 0x187C      member name = 'RightHeroLimits'
list[243] = LF_STATICMEMBER, public, type = 0x187C      member name = 'MainBuildingLimits'
list[244] = LF_STATICMEMBER, public, type = 0x187C      member name = 'UpperTowerLimits'
list[245] = LF_MEMBER, public, type = T_INT4(0074), offset = 76
   member name = 'giNextAction'
list[246] = LF_MEMBER, public, type = T_INT4(0074), offset = 80
   member name = 'giNextActionExtra'
list[247] = LF_MEMBER, public, type = T_INT4(0074), offset = 84
   member name = 'giNextActionGridIndex'
list[248] = LF_MEMBER, public, type = T_INT4(0074), offset = 88
   member name = 'giNextActionGridIndex2'
list[249] = LF_MEMBER, public, type = 0x43D2, offset = 92
   member name = 'iLastDrawGridShade'
list[250] = LF_MEMBER, public, type = 0x43D2, offset = 279
   member name = 'iCurDrawGridShade'
list[251] = LF_MEMBER, public, type = 0x43D3, offset = 468
   member name = 'cell'
list[252] = LF_MEMBER, public, type = T_INT4(0074), offset = 21412
   member name = 'combatTerrain'
list[253] = LF_MEMBER, public, type = T_INT4(0074), offset = 21416
   member name = 'combatFringe'
list[254] = LF_MEMBER, public, type = T_INT4(0074), offset = 21420
   member name = 'iCombatCycleType'
list[255] = LF_MEMBER, public, type = T_INT4(0074), offset = 21424
   member name = 'iElevationOverlay'
list[256] = LF_NESTTYPE, type = 0x4312, TDoorStatus
list[257] = LF_MEMBER, public, type = T_INT4(0074), offset = 21428
   member name = 'iDoorStatus'
list[258] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21432
   member name = 'bMoatOn'
list[259] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21433
   member name = 'moatIsWide'
list[260] = LF_MEMBER, public, type = 0x2291, offset = 21436
   member name = 'SaveScreenPreGrid'
list[261] = LF_MEMBER, public, type = 0x2291, offset = 21440
   member name = 'SaveScreenPostGrid'
list[262] = LF_MEMBER, public, type = 0x2291, offset = 21444
   member name = 'combatMouseBackground'
list[263] = LF_MEMBER, public, type = T_INT4(0074), offset = 21448
   member name = 'bBackgroundDrawn'
list[264] = LF_MEMBER, public, type = 0x1A65, offset = 21452
   member name = 'EventCell'
list[265] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21456
   member name = 'OnMagicPlains'
list[266] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21457
   member name = 'OnCursedGround'
list[267] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21458
   member name = 'OnAntiMagicGarrison'
list[268] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21459
   member name = 'IsSurrounded'
list[269] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21460
   member name = 'OnBoats'
list[270] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 21461
   member name = 'OnBeach'
list[271] = LF_MEMBER, public, type = 0x1ACA, offset = 21464
   member name = 'combatTown'
list[272] = LF_MEMBER, public, type = 0x43D4, offset = 21468
   member name = 'Heroes'
list[273] = LF_MEMBER, public, type = 0x3EE3, offset = 21476
   member name = 'iSideSpellPower'
list[274] = LF_MEMBER, public, type = 0x43D5, offset = 21484
   member name = 'PlayDoh'
list[275] = LF_MEMBER, public, type = 0x43D5, offset = 21486
   member name = 'PlayYeah'
list[276] = LF_MEMBER, public, type = 0x43D5, offset = 21488
   member name = 'DohPlayedThisRound'
list[277] = LF_MEMBER, public, type = 0x43D5, offset = 21490
   member name = 'YeahPlayedThisRound'
list[278] = LF_MEMBER, public, type = 0x3EE3, offset = 21492
   member name = 'cmbtHeroFrameType'
list[279] = LF_MEMBER, public, type = 0x3EE3, offset = 21500
   member name = 'cmbtHeroFrameIndex'
list[280] = LF_MEMBER, public, type = 0x3EE3, offset = 21508
   member name = 'cmbtHeroDataSet'
list[281] = LF_MEMBER, public, type = 0x3051, offset = 21516
   member name = 'cmbtHeroLastFidgetTime'
list[282] = LF_MEMBER, public, type = 0x43D6, offset = 21524
   member name = 'cmbtHero'
list[283] = LF_MEMBER, public, type = 0x43D6, offset = 21532
   member name = 'cmbtHeroFlag'
list[284] = LF_MEMBER, public, type = 0x3EE3, offset = 21540
   member name = 'cmbtHeroFlagFrame'
list[285] = LF_MEMBER, public, type = 0x43D7, offset = 21548
   member name = 'sCmbtHeroLimitData'
list[286] = LF_MEMBER, public, type = 0x43D7, offset = 21580
   member name = 'sCmbtHeroFlagLimitData'
list[287] = LF_MEMBER, public, type = 0x43D8, offset = 21612
   member name = 'EagleEyeSpellLearned'
list[288] = LF_MEMBER, public, type = 0x1FDA, offset = 21636
   member name = 'ArmyEffected'
list[289] = LF_MEMBER, public, type = 0x43D5, offset = 21676
   member name = 'IsHuman'
list[290] = LF_MEMBER, public, type = 0x43D5, offset = 21678
   member name = 'IsLocalHuman'
list[291] = LF_MEMBER, public, type = 0x3EE3, offset = 21680
   member name = 'iPlayer'
list[292] = LF_MEMBER, public, type = 0x3EE3, offset = 21688
   member name = 'bSpellsCast'
list[293] = LF_MEMBER, public, type = 0x3EE3, offset = 21696
   member name = 'numArmies'
list[294] = LF_MEMBER, public, type = 0x1C42, offset = 21704
   member name = 'ArmyGroups'
list[295] = LF_MEMBER, public, type = 0x43DA, offset = 21712
   member name = 'Armies'
list[296] = LF_MEMBER, public, type = 0x43D5, offset = (LF_ULONG) 76144
   member name = 'OnNativeTerrain'
list[297] = LF_MEMBER, public, type = 0x43DB, offset = (LF_ULONG) 76148
   member name = 'SummonedElemental'
list[298] = LF_MEMBER, public, type = 0x43D5, offset = (LF_ULONG) 76156
   member name = 'SideRetreated'
list[299] = LF_MEMBER, public, type = 0x43D5, offset = (LF_ULONG) 76158
   member name = 'SideSurrendered'
list[300] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76160
   member name = 'gbThisNetHasControl'
list[301] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76164
   member name = 'currArmyGroup'
list[302] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76168
   member name = 'currArmyIndex'
list[303] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76172
   member name = 'currControl'
list[304] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76176
   member name = 'autoCombatOn'
list[305] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 76180
   member name = 'selectorOn'
list[306] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76184
   member name = 'selectorIndex'
list[307] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 76188
   member name = 'highlighterOn'
list[308] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76192
   member name = 'highlighterIndex'
list[309] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76196
   member name = 'lastCellIndex'
list[310] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76200
   member name = 'lastMoveToIndex'
list[311] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76204
   member name = 'lastCommand'
list[312] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76208
   member name = 'combatCommand'
list[313] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 76212
   member name = 'CastleAttackDone'
list[314] = LF_MEMBER, public, type = 0x1A63, offset = (LF_ULONG) 76216
   member name = 'gCurLoadedSpellIcon'
list[315] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76220
   member name = 'gCurLoadedSpellEffect'
list[316] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76224
   member name = 'gCurSpellEffectFrame'
list[317] = LF_MEMBER, public, type = 0x42E1, offset = (LF_ULONG) 76228
   member name = 'fortificationLevel'
list[318] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76232
   member name = 'bBattleOver'
list[319] = LF_MEMBER, public, type = 0x43DD, offset = (LF_ULONG) 76236
   member name = 'mainWindow'
list[320] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76240
   member name = 'bCombatShowIt'
list[321] = LF_MEMBER, public, type = 0x43DE, offset = (LF_ULONG) 76244
   member name = 'iconWidgetWL'
list[322] = LF_MEMBER, public, type = 0x43DF, offset = (LF_ULONG) 76344
   member name = 'textWidgetWL'
list[323] = LF_MEMBER, public, type = 0x43E0, offset = (LF_ULONG) 76444
   member name = 'attack_cursor'
list[324] = LF_MEMBER, public, type = 0x43E1, offset = (LF_ULONG) 76492
   member name = 'attack_hex'
list[325] = LF_MEMBER, public, type = 0x40FD, offset = (LF_ULONG) 76540
   member name = 'last_attack_cursor'
list[326] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76544
   member name = 'iTtlCombatDirections'
list[327] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 76548
   member name = 'iBackgroundFrame'
list[328] = LF_MEMBER, public, type = 0x1FDA, offset = (LF_ULONG) 76552
   member name = 'bCreatureVanish'
list[329] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 76592
   member name = 'bSomeCreaturesVanish'
list[330] = LF_MEMBER, public, type = 0x1001, offset = (LF_ULONG) 76596
   member name = 'cBkgName'
list[331] = LF_NESTTYPE, type = 0x4315, adjacency_array
list[332] = LF_MEMBER, public, type = 0x43E2, offset = (LF_ULONG) 76600
   member name = 'gAdjacentIndex'
list[333] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 78844
   member name = 'SaveBiggestExtent'
list[334] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78848
   member name = 'LimitToExtent'
list[335] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78852
   member name = 'ComputeExtentOnly'
list[336] = LF_MEMBER, public, type = 0x187D, offset = (LF_ULONG) 78856
   member name = 'Extent'
list[337] = LF_STATICMEMBER, public, type = 0x43E3      member name = 'moatCell'
list[338] = LF_STATICMEMBER, public, type = 0x43E3      member name = 'moat2Cell'
list[339] = LF_STATICMEMBER, public, type = 0x43E3      member name = 'wallCell'
list[340] = LF_STATICMEMBER, public, type = 0x43E3      member name = 'leftCell'
list[341] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78872
   member name = 'winner'
list[342] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78876
   member name = 'SkeletonsCreated'
list[343] = LF_MEMBER, public, type = 0x1BAC, offset = (LF_ULONG) 78880
   member name = 'skeleton_type'
list[344] = LF_MEMBER, public, type = 0x105F, offset = (LF_ULONG) 78884
   member name = 'NumberWindow'
list[345] = LF_MEMBER, public, type = 0x41E6, offset = (LF_ULONG) 78888
   member name = 'Obstacles'
list[346] = LF_STATICMEMBER, public, type = 0x43E4      member name = 'CombatSpeedMod'
list[347] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 78900
   member name = 'InPlacementPhase'
list[348] = LF_MEMBER, public, type = T_LONG(0012), offset = (LF_ULONG) 78904
   member name = 'turn_number'
list[349] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78908
   member name = 'BattleTacticsAdvantage'
list[350] = LF_NESTTYPE, type = 0x4316, TWallTarget
list[351] = LF_STATICMEMBER, public, type = 0x43E5      member name = 'wallTargets'
list[352] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 78912
   member name = 'DebugNoSpellLimit'
list[353] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 78913
   member name = 'DebugShowHiddenObjects'
list[354] = LF_MEMBER, public, type = T_UCHAR(0020), offset = (LF_ULONG) 78914
   member name = 'DebugShowBlockedHexes'
list[355] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78916
   member name = 'ca_scroll_x'
list[356] = LF_MEMBER, public, type = T_INT4(0074), offset = (LF_ULONG) 78920
   member name = 'ca_scroll_y'
list[357] = LF_NESTTYPE, type = 0x431D, TArcher
list[358] = LF_NESTTYPE, type = 0x431F, TArcherID
list[359] = LF_NESTTYPE, type = 0x4321, TArcherTraits
list[360] = LF_NESTTYPE, type = 0x4323, TWallTraits
list[361] = LF_NESTTYPE, type = 0x4325, SCmbtHero
list[362] = LF_NESTTYPE, type = 0x4328, SElevationOverlay
list[363] = LF_MEMBER, private, type = 0x43E6, offset = (LF_ULONG) 78924
   member name = 'Archers'
list[364] = LF_STATICMEMBER, private, type = 0x43E8      member name = 'ArcherTraits'
list[365] = LF_MEMBER, private, type = T_UCHAR(0020), offset = (LF_ULONG) 79020
   member name = 'in_second_phase'
list[366] = LF_MEMBER, private, type = T_INT4(0074), offset = (LF_ULONG) 79024
   member name = 'OriginalAttackSkill'
list[367] = LF_MEMBER, private, type = T_INT4(0074), offset = (LF_ULONG) 79028
   member name = 'OriginalDefenseSkill'
list[368] = LF_MEMBER, private, type = T_INT4(0074), offset = (LF_ULONG) 79032
   member name = 'OriginalPowerSkill'
list[369] = LF_MEMBER, private, type = T_INT4(0074), offset = (LF_ULONG) 79036
   member name = 'original_mana'
list[370] = LF_STATICMEMBER, private, type = 0x43EA      member name = 'akWallTraits'
list[371] = LF_MEMBER, private, type = 0x43EC, offset = (LF_ULONG) 79040
   member name = 'wallImages'
list[372] = LF_MEMBER, private, type = 0x43ED, offset = (LF_ULONG) 79400
   member name = 'wallLevel'
list[373] = LF_MEMBER, private, type = 0x43ED, offset = (LF_ULONG) 79472
   member name = 'wall_frame'
list[374] = LF_MEMBER, private, type = 0x1A2C, offset = (LF_ULONG) 79544
   member name = 'map_point'
list[375] = LF_MEMBER, private, type = 0x105F, offset = (LF_ULONG) 79548
   member name = 'CombatCellGrid'
list[376] = LF_MEMBER, private, type = 0x105F, offset = (LF_ULONG) 79552
   member name = 'CombatCellShaded'
list[377] = LF_STATICMEMBER, private, type = 0x43F0      member name = 'sCmbtHero'
list[378] = LF_MEMBER, private, type = T_INT4(0074), offset = (LF_ULONG) 79556
   member name = 'ObstacleAnimationFrame'
list[379] = LF_STATICMEMBER, private, type = 0x43F2      member name = 'sElevationOverlay'
list[380] = LF_STATICMEMBER, private, type = 0x43F3      member name = 'ObstacleInfo'
list[381] = LF_STATICMEMBER, private, type = 0x43F3      member name = 'QuicksandInfo'
list[382] = LF_STATICMEMBER, private, type = 0x43F3      member name = 'LandMineInfo'
list[383] = LF_STATICMEMBER, private, type = 0x43F3      member name = 'WallObstacleInfo'
list[384] = LF_MEMBER, private, type = 0x1FDA, offset = (LF_ULONG) 79560
   member name = 'bCreatureEffect'
list[385] = LF_MEMBER, private, type = 0x43D5, offset = (LF_ULONG) 79600
   member name = 'bHeroEffect'
list[386] = LF_MEMBER, private, type = 0x43D5, offset = (LF_ULONG) 79602
   member name = 'bFlagEffect'
list[387] = LF_MEMBER, private, type = 0x3E53, offset = (LF_ULONG) 79604
   member name = 'bArcherEffect'
list[388] = LF_ONEMETHOD, private, VANILLA, index = 0x43F5, name = 'get_tower_string'
list[389] = LF_ONEMETHOD, private, VANILLA, index = 0x1FD6, name = 'auto_resolve_combat'
list[390] = LF_ONEMETHOD, private, VANILLA, index = 0x4354, name = 'automate_catapult'
list[391] = LF_ONEMETHOD, private, VANILLA, index = 0x4354, name = 'automate_first_aid_tent'
list[392] = LF_ONEMETHOD, private, VANILLA, index = 0x43F8, name = 'attempt_shooter_defense'
list[393] = LF_ONEMETHOD, private, VANILLA, index = 0x43FA, name = 'choose_creature_spell'
list[394] = LF_ONEMETHOD, private, VANILLA, index = 0x43FC, name = 'choose_defense_hex'
list[395] = LF_ONEMETHOD, private, VANILLA, index = 0x43FE, name = 'choose_melee_target'
list[396] = LF_ONEMETHOD, private, VANILLA, index = 0x43FA, name = 'choose_resurrect_action'
list[397] = LF_ONEMETHOD, private, VANILLA, index = 0x4400, name = 'choose_shooter_action'
list[398] = LF_ONEMETHOD, private, VANILLA, index = 0x4402, name = 'choose_shooter_target'
list[399] = LF_ONEMETHOD, private, VANILLA, index = 0x43FA, name = 'choose_spell_action'
list[400] = LF_ONEMETHOD, private, VANILLA, index = 0x4404, name = 'choose_to_run'
list[401] = LF_ONEMETHOD, private, VANILLA, index = 0x4405, name = 'CombineGroups'
list[402] = LF_ONEMETHOD, private, VANILLA, index = 0x1FAB, name = 'find_spell_target'
list[403] = LF_ONEMETHOD, private, VANILLA, index = 0x4407, name = 'get_attack_change'
list[404] = LF_ONEMETHOD, private, VANILLA, index = 0x4409, name = 'get_area_effect'
list[405] = LF_ONEMETHOD, private, VANILLA, index = 0x1F64, name = 'get_failure_reason'
list[406] = LF_ONEMETHOD, private, VANILLA, index = 0x440A, name = 'get_surrender_cost'
list[407] = LF_ONEMETHOD, private, VANILLA, index = 0x440C, name = 'has_ranged_advantage'
list[408] = LF_ONEMETHOD, private, VANILLA, index = 0x440E, name = 'mark_enemy_attacks'
list[409] = LF_ONEMETHOD, private, VANILLA, index = 0x4410, name = 'mark_firewalls'
list[410] = LF_ONEMETHOD, private, VANILLA, index = 0x4412, name = 'mark_friendly_armies'
list[411] = LF_ONEMETHOD, private, VANILLA, index = 0x4414, name = 'mark_multiheaded_enemy'
list[412] = LF_ONEMETHOD, private, VANILLA, index = 0x4416, name = 'move_toward'
list[413] = LF_ONEMETHOD, private, VANILLA, index = 0x4390, name = 'place_shooter'
list[414] = LF_ONEMETHOD, private, VANILLA, index = 0x205F, name = 'process_first_aid'
list[415] = LF_ONEMETHOD, private, VANILLA, index = 0x43A6, name = 'process_move_then_attack'
list[416] = LF_ONEMETHOD, private, VANILLA, index = 0x1FD6, name = 'SetupAdjacencyArray'
list[417] = LF_ONEMETHOD, private, VANILLA, index = 0x440C, name = 'should_stay_in_castle'
list[418] = LF_ONEMETHOD, private, VANILLA, index = 0x4418, name = 'show_creature_spell_error'
list[419] = LF_ONEMETHOD, private, VANILLA, index = 0x1FC8, name = 'show_eagle_eye'
list[420] = LF_ONEMETHOD, private, VANILLA, index = 0x441A, name = 'show_looted_artifacts'
list[421] = LF_ONEMETHOD, private, VANILLA, index = 0x441C, name = 'simulate_actions'
list[422] = LF_METHOD, count = 2, list = 0x4421, name = 'simulate_melee_attack'
list[423] = LF_ONEMETHOD, private, VANILLA, index = 0x4372, name = 'LoadArmies'
list[424] = LF_ONEMETHOD, private, VANILLA, index = 0x1FD6, name = 'FreeArmies'
list[425] = LF_ONEMETHOD, private, VANILLA, index = 0x1FD6, name = 'LoadIcons'
list[426] = LF_ONEMETHOD, private, VANILLA, index = 0x1FD6, name = 'FreeIcons'
list[427] = LF_ONEMETHOD, private, VANILLA, index = 0x1FD6, name = 'CheckNativeTerrain'
list[428] = LF_ONEMETHOD, private, VANILLA, index = 0x206D, name = 'UpdateArmyGroup'
list[429] = LF_ONEMETHOD, private, VANILLA, index = 0x4423, name = 'ComputeExtent'
list[430] = LF_ONEMETHOD, private, VANILLA, index = 0x4354, name = 'is_computer_action'
list[431] = LF_ONEMETHOD, private, VANILLA, index = 0x433B, name = 'DoorCanBeLowered'
list[432] = LF_ONEMETHOD, private, VANILLA, index = 0x4425, name = 'KeepAttack'
list[433] = LF_MEMBER, private, type = T_UCHAR(0020), offset = (LF_ULONG) 79607
   member name = 'auto_retreat_on'
list[434] = LF_MEMBER, private, type = T_UCHAR(0020), offset = (LF_ULONG) 79608
   member name = 'any_action_taken'
list[435] = LF_ONEMETHOD, public, VANILLA, (compgenx), index = 0x4427, name = 'operator='
list[436] = LF_ONEMETHOD, public, VANILLA, (compgenx), index = 0x1FD6, name = '~combatManager'
list[437] = LF_ONEMETHOD, public, VANILLA, (compgenx), index = 0x4428, name = '__vecDelDtor'

Осталось зачекать различия. Класс большой всё-таки.
Вернуться к началу

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

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

Сообщение void_17 » 17 дек 2021, 19:24

Удобно конечно. Выложили бы этот легендарный дримкаст диск еще в нулевых, в самом деле..
Вернуться к началу

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 » 17 дек 2021, 19:26

...И не было бы поколения реверсеров-самоучек, WoG, Era, HotA :smile1: С другой стороны, вместо WoG могло бы быть новое полноценное дополнение типа HotA уже в 2000-х.

Даже не знаю, с чем сравнить это открытие. Пусть будет открытием 2021-го. Для реверсеров к Новому Году - лучший подарок :smile16:

Но работы по адаптации много. Например, оффсет указателей на героев в RoE - 21468, а в SoD - 21452*. В RoE, получается, что-то лишнее было. Но, думаю, поля можно синхронизировать.

RoseKavalier, чувствую, теперь выдаст H3API, которую никто не переплюнет. А я только за. homm3.h устарела давно, а теперь, когда есть такая инфа, пора переходить на новую библиотеку :smile16: А лучше H3API ничего в открытом доступе нет. Теперь только подставить оригинальные типы и имена - и будет мега-H3API.

*) 16 байтов. Возможно, наследуются поля baseManager и всё в порядке (0x1866 - это и есть baseManager).

* * *
Кажется, не из-за этого, baseManager длиннее 16 байт. Скорее всего, из-за особенностей самой платформы:

Код: Выделить всё
list[177] = LF_MEMBER, public, type = T_UCHAR(0020), offset = 69
   member name = 'no_scrolling'
list[178] = LF_ONEMETHOD, public, VANILLA, index = 0x439C, name = 'ScrollCombatArea'
list[179] = LF_ONEMETHOD, public, VANILLA, index = 0x439D, name = 'ScrollToPixel'
list[180] = LF_METHOD, count = 3, list = 0x43A4, name = 'ScrollTo'
list[181] = LF_ONEMETHOD, public, VANILLA, index = 0x1FD6, name = 'CheckAutoScrolling'

Там реально нужно было скроллить поле боя. Такие поля, естественно, нужно выкидывать.
Вернуться к началу

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

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

Сообщение RoseKavalier » 18 дек 2021, 03:25

I've been working on the private h3api branch for a while now (ever since the last public update was made, it's now quite a bit larger) and I had already begun incorporating the symbols with very minor modifications.
Now with the class field names and even function parameter names, there is a lot of work to be redone - first parse all the data automatically in something usable.
Вернуться к началу

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

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

Сообщение void_17 » 18 дек 2021, 09:12

Полный класс hero
Код: Выделить всё
#pragma pack(push, 2)
struct type_obscuring_object
{
  __int16 mapX;
  __int16 mapY;
  __int16 mapZ;
  unsigned __int16 valid;
  struct type_point obscured_location;
  enum EAdventureObjectType type;
  unsigned int was_trigger;
  unsigned int extra_info;
};
#pragma pack(pop)


Код: Выделить всё
enum Formation : __int8
{
  GroupedFormation = 0x1,
  PlacementFormation = 0x2,
};


Код: Выделить всё
#pragma pack(push, 1)
class hero : public type_obscuring_object
{
  short mana;
  THeroID ID;
  THeroID id;
  char owner;
  char name[13];
  int hero_class;
  uchar portrait;
  int targetX;
  int targetY;
  int targetZ;
  short last_magic_school_level;
  uchar target_is_critical;
  uchar patrolX;
  uchar patrolY;
  uchar patrolRadius;
  uchar facing;
  enum Formation formation;
  int maxMobility;
  int currMobility;
  int experience;
  short Level;
  int TrainingGroundFlags;
  int DefenseTowerFlags;
  int GardenOfRevelationFlags;
  int MercCampFlags;
  int starAxis;
  int treeOfKnowledge;
  int libraryOfEnlightment;
  int ArenaFlags;
  int MagicSchoolFlags;
  int WarSchoolFlags;
  int UniversityFlags;
  int Shrine1Flags;
  int Shrine2Flags;
  int Shrine3Flags;
  uchar iLevelSeed;
  uchar lastWisdom;
  armyGroup heroArmy;
  char SSLevel[28];
  uchar SSOrder[28];
  int numSSs;
  uint flags;
  float turnExperienceToRVRatio;
  char dWalkSpellsCast;
  enum TSkillMastery disguiseLevel;
  enum TSkillMastery flightLevel;
  enum TSkillMastery waterWalkPower;
  char moraleBonus;
  char luckBonus;
  bool IsSleeping;
  int bounty;
  std::bitset<48> TownSpecialGrantedMask;
  int visionsPower;
  type_artifact equipped[19];
  uchar freeAddSlots;
  uchar blockedSlot[14];
  type_artifact artifacts[64];
  char backpackArtsAmount;
  int female;
  bool bioCustomized;
  std::string biography;
  bool in_spellbook[70];
  bool available_spells[70];
  char primarySkill[4];
  int aggression;
  int value_of_power;
  int value_of_duration;
  int value_of_knowledge;
  int value_of_spring;
  int value_of_well;
};
#pragma pack(pop)
Вернуться к началу

Пред.След.

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

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

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