(17.07.2020 16:12)Bes Wrote: может кто выложить на форуме структуру героя
Code:
struct _Hero_{
Word x; // +00 dw = x position
Word y; // +02 dw = y position
Word l; // +04 dw = ? уровень старшая часть y (y<<2>>C)
Byte Visible; // +06 db = 1 - есть на карте (внутри города или не активен)
// Byte _u1[17];
// +07 db - x
// +08 db - (?) мусор (к x)
// +09 db - y
// +0A db - l(?) мусор (к y)
Dword PlMapItem; // MixedPos
// +0B db - (?) l
Byte _u1;
// +0C dd - тип объекта на котором герой стоял
long PlOType; // dd +1E с карты
// +10 db - бит занятости во флагах поверхности 00001000
// это бит означающий, что здесь есть/была точка входа (желтая клетка)
Dword Pl0Cflag;
// +14 dd - SetUp с карты
Dword PlSetUp; // dd +0 с карты
Word SpPoints; // +18 dw = баллы заклинаний
int Number; // +1A dd = номер подтипа (конкретный герой)
Dword _unk_Id; // +1E dd = Id (при чём тут Id???)
char Owner; // +22 db = нозяин (цвет)
char Name[13]; //* +23 db*D = имя,0
long Spec; // +30 dd = str[8] str=(*[67CD08])[номер подтипа *5C]
Byte Pic; //* +34 db = номер картинки
// dw +35 ???
// dw +41 ???
// db +43 0
Byte _u2[15];
// +3E db -??? 4E3BB5 - used in luck calculation
Byte x0; // +44 db = базовый x для обегания (FF-не ограничен)
Byte y0; // +45 db = базовый y для обегания (FF-не ограничен)
Byte Run; // +46 db = радиус обегания (FF-не ограничен)
Byte _u3; // +47 db = ???
Byte Flags; // +48 8*bb (463253)
// 01 - тип группировки юнитов
// 02 - разрешена тактика для героя
int Movement0;// +49 dd = полное перемещение начальное
int Movement; //* +4D dd = оставшиеся перемещения
Dword Exp; //* +51 dd = опыт
Word ExpLevel; //* +55 dw = уровень
// Dword VStones; // +57 32 камня (1-посещен,2-нет)
// Dword VMTower; // +5B Башня Мардетто
// Dword VGarden; // +5F сад откровения
// Dword VMCamp; // +63 лагерь наемников
// Dword VSAxis; // +67 звездное колесо
// Dword VKTree; // +6B дерево знаний
// Dword VUniver; // +6F университет
// Dword VArena; // +73 арена
// Dword VSMagic; // +77 школа магов
// Dword VSWar; // +7B школа войны
Dword Visited[10];
Byte _u4[18]; // +7F
int Ct[7]; // +91 dd*7 = тип существ (-1 - нет)
int Cn[7]; // +AD dd*7 = количество
Byte SSkill[28];// +C9 db*1C = уровень 2-х скилов (один байт - уровень этого номера скила 1,2,3) 0-нет
// C9=Pathfinding CA=Archery CB=Logistics CC=Scouting CD=Diplomacy CE=Navigation CF=Leadership
// D0=Wisdom D1=Mysticism D2=Luck D3=Ballistics D4=Eagle Eye D5=Necromancy D6=Estates D7=Fire Magic
// D8=Air Magic D9=Water Magic DA=Earth Magic DB=Scholar DC=Tactics DD=Artillery DE=Learning DF=Offence
// E0=Armorer E1=Intelligence E2=Sorcery E3=Resistance E4=First Aid
Byte SShow[28]; // +E5 db*1C = порядок отображения 2-х скилов в окне героя (1,2,3,4,5,6)
Dword SSNum; // +101 dd = количество 2-х скилов
// Word RefData1; // +105 4814D3+...
// Word RefData2; // +107 4DA466
Dword TempMod; // +105 временные модификаторы
// нач. иниц. при найме 0xFFF9FFFF
// 00000002 = конющня 3.59 ERM
// 00000008 = лебединое озеро swan pond 3.59 ERM
// 00000020 = (???) фонтан удачи fountain of fortune 3.59 ERM
// 00000080 = оазис
// 00002000 = домик фей
// 00040000 = в лодке на воде
// 00200000 = -3morale в вариор томб
// 00400000 = Give Maximum Luck
// 00800000 = Give Maximum Moral
// 38000000 = конкретный тип фонтана удачи
Byte _u6[9]; // +109
Dword _u7; // +112
char DMorale; // +116 модификаторы морали (накапливаются)
Byte _u60[3];
char DMorale1; // +11A модиф морали (оазис)
char DLuck; // +11B модиф удачи до след битвы
Byte _u6a[17];
int IArt[19][2]; //+12D dd*2*13h = артифакты dd-номер,dd-номер закла(или -1) (книга 3,FF)
Byte FreeAddSlots; //+1C5 количество пустых доп. слотов слева
char LockedSlot[14]; //+1C6
int OArt[64][2]; //+1D4 dd*2*40 = арт в рюкзаке dd-номер, dd-номер закла(или -1)
Byte OANum; // +3D4 db = число артифактов в рюкзаке
Dword Sex; // +3D5 dd = пол
Byte fl_B; // +3D9 db = есть биография
// char *Bibl; // +3DA dd -> биография
// Byte _u7[12]; // +3DE
Dword _5b; // +3DA
_AMes_ Bibl; // +3DE
Byte Spell[70]; // +3EA db*46 = заклинание (есть/нет)
Byte LSpell[70];// +430 db*46 = уровень заклинания (>=1)
char PSkill[4]; // +476 db*4 = первичные навыки
Byte _u8[24];
};
edited by igrik
Code:
NOALIGN struct _Hero_: _Struct_
{
_int16_ x; // +0
_int16_ y; // +2
_int16_ z; // +4
_byte_ visible; // +6
_dword_ mui_xyz; // +7
_byte_ miu_is; // +11
// miu = map_item under hero
_dword_ miu_object_type; // +12
_dword_ miu_object_c_flag; // +16
_dword_ miu_UnderHero; // +20
_word_ spell_points; // +24
_dword_ id; // +26
_dword_ id_wtf; // +30
_int8_ owner_id; // +34
_char_ name[13]; // +35
_dword_ _class; // +48
_byte_ pic; // +52
_dword_ targetX; // +53
_dword_ targetY; // +57
_dword_ targetZ; // +61
_word_ last_magic_school_level; // +65
_byte_ target_is_critical; // +67
_byte_ patrol_x; // +68
_byte_ patrol_y; // +69
_byte_ patrolRadius; // +70
_byte_ facing; // +71
_byte_ flags; // +72
_dword_ movement_max; // +73
_dword_ movement_curr; // +77
_dword_ expa; // +81
_word_ level; // +85
_dword_ visited[10]; // +87 (0-learningStones, 1-marlettoTower, 2-gardenRevelation, 3-mercenaryCamp, 4-starAxis, 5-treeKnowldge, 6-libraryEnlightenment, 7-arena, 8-schoolMagic, 9-schoolWar)
_dword_ shrineFlags[4]; // +127
_byte_ levelSeed; // +143
_byte_ lastWisdom; // +144
_Army_ army; // +145
_byte_ second_skill[28]; // +201
_byte_ second_skill_show[28]; // +229 // secSkillPosition[28]
_dword_ second_skill_count; // +257
_dword_ temp_mod_flags; // + 261
// _HeroFlags_ temp_mod_flags; // + 261
float turnExperienceToRVRatio; // +265
_byte_ dd_cast_this_turn; // +269
_int32_ disguise_cast_power; // +270
_int32_ fly_cast_power; // +274
_int32_ waterwalk_cast_power; // +278
_byte_ moraleBonus; // +282
_byte_ luckBonus; // +283
_byte_ is_sleeping; // +284
_int32_ bounty; // +285
_byte_ TownSpecialGrantedMask[8]; // +289 std::bitset<48> TownSpecialGrantedMask;
_int32_ VisionsPower; // +297
_Artifact_ doll_art[19]; // +301
_byte_ free_add_slots; // +453
_byte_ locked_slot[14]; // +454
_Artifact_ backpack_art[64]; // +468
_byte_ backpack_arts_count; // +980
_dword_ female; // +981
_bool8_ is_castom_biography; // +985
_HStringF_ biography; // +986 std::string biography;
_byte_ spells_spellbook[70]; // +1002
_byte_ spells_available[70]; // +1072
_byte_ primary_skill[4]; // +1142
_int32_ aggression; // +1146
_int32_ value_of_power; // +1150
_int32_ value_of_duration; // +1154
_int32_ value_of_knowledge; // +1158
_int32_ value_of_spring; // +1162
_int32_ value_of_well; // +1166
Code:
// * Hero structure on the adventure map
struct H3Hero
{
// * +0
INT16 x;
// * +2
INT16 y;
// * +4
INT16 z;
// * +6
// * used when the current hero is active and appears on H3MapItem
BOOL8 isVisible;
// * +7
// * used to show / hide active hero
H3Position mixedPosition;
// * +B
// * true if there is an object below the hero
BOOL8 objectBelow;
// * +C
// * the type of H3MapItem under hero
INT32 objectTypeUnder;
protected:
// * +10
// * ??? related to H3MapItem under hero
UINT32 _flag;
public:
// * +14
// * setup of H3MapItem under the hero
UINT32 objectBelowSetup;
// * +18
// * the number of spellpoints
INT16 spellPoints;
public:
// * +1A
// * 0~156, has to match class, cannot be used to change specialty
INT32 id;
protected:
h3unk _f_1E[4]; // set at 4D8DB1, unknown
public:
// * +22
// * 0 ~ 7 Red ~ Pink
INT8 owner;
// * +23
// * the hero's name
CHAR name[13];
// * +30
// * 0 ~ 0x11 Knight ~ Elementalist
// * 0x12 boat sprite no class - can't navigate water (more sprites after but can crash)
INT32 hero_class;
// * +34
// * the id of the hero's portrait, 0 ~ 156
UINT8 picture;
// * +35
// * the planned x destination
INT32 dest_x;
// * +39
// * the planned y destination
INT32 dest_y;
// * +3D
// * the planned z destination
INT32 dest_z;
protected:
h3unk _f_41[3];
public:
// * +44
// * starting x position
UINT8 patrol_x;
// * +45
// * starting y position
UINT8 patrol_y;
// * +46
// * the radius for patrolling, -1 means no range limit
UINT8 patrolRadius;
protected:
h3unk _u3; // +47 = ???
UINT8 _flags; // +48 = ???
public:
// * +49
// * the maximum movement points of the hero on a given turn
INT32 maxMovement;
// * +4D
// * the remaining movement points of the hero on a given turn
INT32 movement;
// * +51
// * the current experience of the hero
INT32 experience;
// * +55
// * the current level of the hero
INT16 level;
protected:
// * +57
// * bitfields of 32 visited object types per hero
H3Bitfield learningStones;
// * +5B
// * bitfields of 32 visited object types per hero
H3Bitfield marlettoTower;
// * +5F
// * bitfields of 32 visited object types per hero
H3Bitfield gardenRevelation;
// * +63
// * bitfields of 32 visited object types per hero
H3Bitfield mercenaryCamp;
// * +67
// * bitfields of 32 visited object types per hero
H3Bitfield starAxis;
// * +6B
// * bitfields of 32 visited object types per hero
H3Bitfield treeKnowldge;
// * +6F
// * bitfields of 32 visited object types per hero
H3Bitfield libraryEnlightenment;
// * +73
// * bitfields of 32 visited object types per hero
H3Bitfield arena;
// * +77
// * bitfields of 32 visited object types per hero
H3Bitfield schoolMagic;
// * +7B
// * bitfields of 32 visited object types per hero
H3Bitfield schoolWar;
UINT8 _7F[16];
public:
// * +8F
// * the seed for skill tree, 1~255
UINT8 levelSeed; // +8F
protected:
UINT8 _f90;
public:
// * +91
// * the creatures of the hero
H3Army army;
// * +C9
// * the level of each secondary skill
INT8 secSkill[28];
// * +E5
// * the order in which to display SSkills (1,2,3,...)
INT8 secSkillPosition[28];
// * +101
// * the number of secondary skills the hero has
INT32 secSkillCount;
// * +105
// * temporary hero flags
H3HeroFlags flags;
protected:
UINT8 _u6[4]; // +109
public:
// * +10D
// * the number of times dimension door was cast this day
INT8 dimDoorCastCount; // +10D
// * +10E
// * the spell expertise of disguise that was cast
INT32 disguisePower; // +10E
// * +112
// * the spell expertise of fly that was cast
INT32 flyPower; // +112
// * +116
// * the spell expertise of waterwalk that was cast
INT32 waterwalkPower; // +116
protected:
INT8 _DMorale1; // +11A ???
INT8 _DLuck; // +11B
INT8 isSleeping; // +11C
UINT8 _u7[12]; // 11D
INT32 visionPower; // +129
public:
// * +12D
// * the 19 artifacts on a hero
H3Artifact bodyArtifacts[19];
protected:
// * +1C5
// * ?
UINT8 freeAddSlots;
public:
// * +1C6
// * whether an artifact slot is blocked or not
UINT8 blockedArtifacts[14];
// * +1D4
// * the 64 artifacts in the backpack
H3Artifact backpackArtifacts[64];
// * +3D1
// * the number of artifacts in the backpack
UINT8 backpackCount;
// * +3D5
// * male or female
INT32 gender;
// * +3D9
// * has custom bibliography?
BOOL8 customBiblio;
// * +3DA
// * custom bibliography
H3String bibliography;
// * +3EA
// * Spells the hero has learned
INT8 learned_spell[70];
// * +430
// * Spells the hero has access to through artifacts
INT8 available_spell[70];
// * +476
// * the four primary skills, attack, defense, spell power, knowledge
INT8 primarySkill[4];
protected:
// * +47A
// * AI stuff
UINT8 _u8[24];
Code:
struct _Hero_
Word X ; 00
Word Y ; 02
Word L ; 04
Byte Visible ; 06 1 - есть на карте (внутри города или не активен)
Dword MapItemXYZ ; 07 mui_xyz - used to show / hide active hero
Byte objectBelow ; 0B true if there is an object below the hero
Dword Тип_объекта_в_котором_стоит_герой ; 0C miu_object_type
Dword Маска_доступа ; 10 miu_object_c_flag (бит 10h - вход)
Dword Контрольное_слово_объекта_в_котором_стоит_герой; 14 miu_setup
Word Баллы_заклинаний ; 18 spell_points
Dword Номер ; 1A id
Dword Индекс ; 1E hero_code
Byte Хозяин ; 22 owner_id
Char Имя, 13 ; 23 name[13]
Dword Класс ; 30 class
Byte Номер_портрета ; 34 pic
Dword dest_x ; 35 aim_x - the planned x destination - targetX
Dword dest_y ; 39 aim_y - the planned y destination - targetY
Word dest_z ; 3D aim_z - the planned z destination - targetZ
Word last_magic_school_level ; 3F last_magic_school_level - Последний из уровней, на переходе на который предложили магию стихии
db ?,?,? ; 41 target_is_critical
Byte patrol_x ; 44 starting x position
Byte patrol_y ; 45 starting y position
Byte patrolRadius ; 46 the radius for patrolling, -1 means no range limit
Byte facing ; 47
Byte formation ; 48 flags
Dword Полные_MovePoints ; 49 movement_points_max - maxMobility
Dword Оставшиеся_MovePoints ; 4D movement_points - currMobility
Dword Опыт ; 51 expa - experience
Word Уровень ; 55 level
Dword Биты_посещённости_Камней_Знаний ; 57 visited.learningStones - TrainingGroundFlags
Dword Биты_посещённости_Башен_Марлетто ; 5B visited.marlettoTower - DefenseTowerFlags
Dword Биты_посещённости_Садов_Откровения ; 5F visited.gardenRevelation - GardenOfRevelationFlags
Dword Биты_посещённости_Лагерей_Наёмников ; 63 visited.mercenaryCamp - MercCampFlags
Dword Биты_посещённости_Звёздных_Колёс ; 67 visited.starAxis - starAxisFlags
Dword Биты_посещённости_Древ_Знаний ; 6B visited.treeKnowldge - treeOfKnowledgeFlags
Dword Биты_посещённости_Библиотек_Просвещения ; 6F visited.libraryEnlightenment - libraryOfEnlightmentFlags
Dword Биты_посещённости_Арен ; 73 visited.arena - ArenaFlags
Dword Биты_посещённости_Школ_Магии ; 77 visited.schoolMagic - MagicSchoolFlags
Dword Биты_посещённости_Школ_Войны ; 7B visited.schoolWar - WarSchoolFlags
Dword Биты_посещённости_Колизеев_Магов ; 7F UniversityFlags
Dword Биты_посещённости_Беседки ; 83 Shrine1Flags
Dword Биты_посещённости_Толкователя_Снов ; 87 Shrine2Flags
Dword Биты_посещённости_Лачуги_Отшельника ; 8B Shrine3Flags
Byte random_number_for_level_up_seed ; 8F iLevelSeed
Byte last_wisdom_level ; 90 lastWisdom - Последний из уровней, на переходе на который предложили мудрость
Dword Тип_существ_в_слоте_0 ; 91 heroArmy
Dword Тип_существ_в_слоте_1
Dword Тип_существ_в_слоте_2
Dword Тип_существ_в_слоте_3
Dword Тип_существ_в_слоте_4
Dword Тип_существ_в_слоте_5
Dword Тип_существ_в_слоте_6
Dword Количество_существ_в_слоте_0
Dword Количество_существ_в_слоте_1
Dword Количество_существ_в_слоте_2
Dword Количество_существ_в_слоте_3
Dword Количество_существ_в_слоте_4
Dword Количество_существ_в_слоте_5
Dword Количество_существ_в_слоте_6
Byte Уровень_Поиска_Пути ; C9 second_skill[28] - SSLevel[28]
Byte Уровень_Меткости ; CA
Byte Уровень_Логистики ; CB
Byte Уровень_Разведки ; CC
Byte Уровень_Дипломатии ; CD
Byte Уровень_Навигации ; CE
Byte Уровень_Лидерства ; CF
Byte Уровень_Мудрости ; D0
Byte Уровень_Мистицизма ; D1
Byte Уровень_Удачи ; D2
Byte Уровень_Осадное_дело ; D3
Byte Уровень_Зоркости ; D4
Byte Уровень_Некромантии ; D5
Byte Уровень_Имущества ; D6
Byte Уровень_Магии_Огня ; D7
Byte Уровень_Магии_Воздуха ; D8
Byte Уровень_Магии_Воды ; D9
Byte Уровень_Магии_Земли ; DA
Byte Уровень_Грамотности ; DB
Byte Уровень_Тактики ; DC
Byte Уровень_Артиллерии ; DD
Byte Уровень_Обучаемости ; DE
Byte Уровень_Нападения ; DF
Byte Уровень_Обороны ; E0
Byte Уровень_Интеллекта ; E1
Byte Уровень_Волшебства ; E2
Byte Уровень_Сопротивления ; E3
Byte Уровень_Первой_Помощи ; E4
Порядок_отображения_вторичных_навыков db 28 dup (?) ;E5 second_skill_show[28] - SSOrder[28]
Dword Количество_вторичных_навыков ; 101 second_skill_count - numSSs
Dword Временные_модификаторы ; 105 temp_mod_flags (HE:R7) - flags
dd ? ; 109 turnExperienceToRVRatio
Byte dimDoorCastCount ; 10D dWalkSpellsCast - the number of times dimension door was cast this day
Dword disguisePower ; 10E disguiseLevel - the spell expertise of disguise that was cast
Dword flyPower ; 112 flightLevel - the spell expertise of fly that was cast
Dword waterwalkPower ; 116 waterWalkPower - the spell expertise of waterwalk that was cast
Byte Мораль_до_следующей_битвы ; 11A d_morale_1 - moraleBonus
Byte Удача_до_следующей_битвы ; 11B d_luck_1 - luckBonus
Byte isSleeping ; 11C IsSleeping
dd ? ; 11D bounty
dd ? ; 121 std::bitset<48> TownSpecialGrantedMask
dd ?
Dword visionPower ; 129 visionsPower
Dword Артефакт_в_слоте_головы ; 12D doll_art[19] - type_artifact equipped[19]
Dword CustomData_в_слоте_головы
Dword Артефакт_в_слоте_плеч
Dword CustomData_в_слоте_плеч
dd ?; слот амулет
dd ?
dd ?; слот оружия
dd ?
dd ?; слот щит
dd ?
dd ?; слот доспех
dd ?
Dword Артефакт_в_слоте_правого_кольца
Dword CustomData_в_слоте_правого_кольца
Dword Артефакт_в_слоте_левого_кольца
Dword CustomData_в_слоте_левого_кольца
Dword Артефакт_в_слоте_ног
Dword CustomData_в_слоте_ног
Dword Артефакт_в_слоте_разного_1
Dword CustomData_в_слоте_разного_1
Dword Артефакт_в_слоте_разного_2
Dword CustomData_в_слоте_разного_2
Dword Артефакт_в_слоте_разного_3
Dword CustomData_в_слоте_разного_3
Dword Артефакт_в_слоте_разного_4
Dword CustomData_в_слоте_разного_4
Dword Артефакт_в_слоте_Баллисты
Dword CustomData_в_слоте_Баллисты
Dword Артефакт_в_слоте_Подводы
Dword CustomData_в_слоте_Подводы
Dword Артефакт_в_слоте_Палатки
Dword CustomData_в_слоте_Палатки
Dword Артефакт_в_слоте_Катапульты
Dword CustomData_в_слоте_Катапульты
Dword Артефакт_в_слоте_Книги
Dword CustomData_в_слоте_Книги
Dword Артефакт_в_слоте_разного_5
Dword CustomData_в_слоте_разного_5
Byte Количество_пустых_доп_слотов_слева ; 1C5 freeAddSlots
Маска_заблокированных_слотов db 14 dup (?) ; 1C6 locked_slot[14] - whether an artifact slot is blocked or not
Артефакты_рюкзака dd 64*2 dup (?) ; 1D4 type_artifact artifacts[64] - the 64 artifacts in the backpack
Byte Количество_артефактов_в_рюкзаке ; 3D4 backpackArtsAmount - the number of artifacts in the backpack
Dword Пол ; 3D5 gender - female
Byte Есть_пользовательская_биография ; 3D9 has_biography - bioCustomized
Dword Биография_строка ; 3DA std::string biography
Dword Биография_строка_ ; 3DE
Dword Биография_строка__ ; 3E2
Dword Биография_строка___ ; 3E6
Заклинания_в_книге_магии db 70 dup (?) ; 3EA available_spells_in_spellbook[70]
Заклинания_от_артов db 70 dup (?) ; 430 available_spells_with_arts[70]
Byte Атака ; 476 primarySkill[4]
Byte Защита ; 477
Byte Колдовская_Сила ; 478
Byte Знание ; 479
db 24 dup (?) ; 47A aggression
ends
Попросили выложить сюда и структуру стека - выкладываю.
Code:
struct _CombatMon_{ // размер 0x548
// +00 db (1) когда отаковал уже(?)
// +01 db
// +02 db (0C) 44188C
// +03 db
// +08 dd = полное число стеков у игрока
// +10 dd =-1 после атаки и/или ответа(????)
// +1С dd = позиция на поле боя (куда бежать/стрелять)
// +20 db = огненный щит
// +28 dd = -1 (номер стэка клона этого)
// +30 db 43E33C
int Type; // +34 dd = тип монстра
int Pos; // +38 dd = позиция монстра на поле боя (куда атакует)
// +3C dd = заклинания
// +40 dd 43E236
// +44 dd (=1) сдвиг в сторону второй занятой клетки для монстра с двумя клетками
int MonNum; // +4C - число монстров
// +50 - число монстров до удара по ним в тек. атаку
int LostLastHP; // +58 - потери здоровья последнего монстра
// +5C - номер слота героя (0...6), -1 - будет удален после битвы
int MonNum0; // +60 - число монстров в начале битвы
// +6C - полное здоровье (исп. как база для лечения)
// +70 dd 44150F 441744
// +74 dd -1 для продвинутых элементалей
// +78 dd = уровень существа (0...6)
Dword Flags; // +84
// 00000001 - 0x00 DOUBLE_WIDE - занимает 2 клетки
// 00000002 - 0x01 летает
// 00000004 - 0x02 стреляет
// 00000008 - 0x03 расширенный радиус атаки (на две клетки)
// 00000010 - 0x04 живое существо (можно восстанавливаться вампиру)
// 00000020 - 0x05 CATAPULT - может разрушать стены
// 00000040 - 0x06 SIEGE_WEAPON - осадное оружие - не двигается (5508CB)
// 00000080 - 0x07 KING_1
// 00000100 - 0x08 KING_2
// 00000200 - 0x09 KING_3
// 00000400 - 0x0A ??? 00020000 + 40,41,83 - не чуствителен к псих атаке
// 00000800 - 0x0B нет описания (35,74,75)
// 00001000 - 0x0C в ближнем бою бьет как в дальнем
// 00002000 - 0x0D ----
// 00004000 - 0x0E ??? IMMUNE_TO_FIRE_SPELLS
// 00008000 - 0x0F стреляет дважды
// 00010000 - 0x10 атака без ответа
// 00020000 - 0x11 ... не подвержен низкой морали (?)
// 32,33,56-69,112-117,120,121,123,,125,127,129,141,145-149
// 00040000 - 0x12 нечисть
// 00080000 - 0x13 бьет всех врагов рядом
// 00100000 - 0x14 расширенный радиус стреляющих юнитов
// 00200000 - 0x15 стэк убит? 41E617 чародей,firebird - может еще кастовать?
// 00400000 - 0x16 421BDC,421FC4 (что-то с вызовом)
// 00800000 - 0x17 копия стэку - умирает сразу
// 01000000 - 0x18 гарпии-ведьмы
// 02000000 - 0x19 остался(уже) ждать СБРОСИТЬ - МОЖЕТ ЖДАТЬ СНОВА
// 04000000 - 0x1A уст. после атаки СБРОСИТЬ - ВНОВЬ МОЖЕТ ОТАКОВАТЬ
// 08000000 - 0x1B - выбрал защиту
// 10000000 - 0x1C - не может быть ресуректен ???
// 20000000 - 0x1D + 43DFAF
// 40000000 - 0x1E + 43E06F
// 80000000 - 0x1F дракон
// int FullHP; // +B0 dd = ???
int HitPoints; // +C0 dd = здоровье монстра
int Speed; // +С4 dd = скорость монстра
int Attack; // +C8 dd = атака с бонусами
int Defence; // +CC dd = защита с бонусами
// +D0 dd = мин. дамэдж
// +D4 dd = макс. дамэдж
// +D8 dd = количество выстрелов
// +DC dd = количество заклинаний 0=нет ДЛЯ ВОСКРЕШЕНИЯ УВЕЛИЧИТЬ
// +E8 db =
// +E9 db = 1, если умирал хоть один
// +EA db = 1, если был убит весь стэк
// +EC dd = номер заклинания существа в тек раунде 0x50 Acid breath
// +F0 db=1 перед атакой на него 441434
// +F4 dd (0,1) индекс игрока 0 или 1 4414AF 443D69
// +F8 dd = номер стэка у стороны на поле боя
// +FC dd = ? что-то с магией
// +100 dd 43DEA4
// +104 dd 43DEAD
// +108 dd
// +158 dd =?
// +164 dd -> ctroll.def (троль)
Byte *ShootDef; // +168 - загруж.деф. для стреляющих (иниц в 43DA8E)
// +16C
// +194 dd = количество уже наложенных заклинаний
// +198 dd*? (есть заклинание (длительность) или нет по номерам)
// +198 dd = Summon Boat
// +19C dd = Scuttle Boat
// +1A0 dd = Visions
// +1A4 dd = View Earth
// +1A8 dd = Disguise
// +1AC dd = View Air
// +1B0 dd = Fly
// +1B4 dd = Water Walk
// +1B8 dd = Dimension Door
// +1BC dd = Town Portal
// +1C0 dd = Quicksand
// +1C4 dd = Land Mine
// +1C8 dd = Force Field
// +1CC dd = Fire Wall
// +1D0 dd = Earthquake
// +1D4 dd = Magic Arrow
// +1D8 dd = Ice Bolt
// +1DC dd = Lightning Bolt
// +1E0 dd = Implosion
// +1E4 dd = Chain Lightning
// +1E8 dd = Frost Ring
// +1EC dd = Fireball
// +1F0 dd = Inferno
// +1F4 dd = Meteor Shower
// +1F8 dd = Death Ripple
// +1FC dd = Destroy Undead
// +200 dd = Armageddon
// +204 dd = Shield
// +208 dd = Air Shield
// +20C dd = fire Shield
// +210 dd = Protection from Air
// +214 dd = Protection from Fire
// +218 dd = Protection from Water
// +21C dd = Protection from Earth
// +220 dd = Anti-Magic
// +224 dd = Dispel
// +228 dd = Magic Mirror
// +22C dd = Cure
// +230 dd = Resurrection
// +234 dd = Animate Dead
// +238 dd = Sacrifice
// +23C dd = Bless
// +240 dd = Curse
// +244 dd = Bloodlust
// +248 dd = Precision
// +24C dd = Weakness
// +250 dd = Stone Skin
// +254 dd = Disrupting Ray
// +258 dd = Prayer
// +25C dd = Mirth
// +260 dd = Sorrow
// +264 dd = Fortune
// +268 dd = Misfortune
// +26C dd = Haste
// +270 dd = Slow
// +274 dd = Slayer
// +278 dd = Frenzy
// +27C dd = Titan's Lightning Bolt
// +280 dd = Counterstrike
// +284 dd = Berserk
// +288 dd = Hypnotize
// +28C dd = Forgetfulness
// +290 dd = Blind
// +294 dd = Teleport
// +298 dd = Remove Obstacle
// +29C dd = Clone
// +2A0 dd = Fire Elemental
// +2A4 dd = Earth Elemental
// +2A8 dd = Water Elemental
// +2AC dd = Air Elemental
// +2B0 dd = Stone 443D3A 43E0EB 441B0D (!= не отв. на атаку)
// +2B4 dd = Poison
// +2B8 dd = Bind
// +2BC dd = Desease
// +2C0 dd = Paralyze
// +2C4 dd = Aging
// +2C8 dd = Death Cloud
// +2CC dd = Thunderbolt
// +2D0 dd = Dispel
// +2D4 dd = Death Stare
// +2D8 dd = Acid Breath
// +2DC dd*? (сила действия заклинания)
// +2DC dd = Summon Boat
// +2E0 dd = Scuttle Boat
// +2E4 dd = Visions
// +2E8 dd = View Earth
// +2EC dd = Disguise
// +2F0 dd = View Air
// +2F4 dd = Fly
// +2F8 dd = Water Walk
// +2FC dd = Dimension Door
// +300 dd = Town Portal
// +304 dd = Quicksand
// +308 dd = Land Mine
// +30C dd = Force Field
// +310 dd = Fire Wall
// +314 dd = Earthquake
// +318 dd = Magic Arrow
// +31C dd = Ice Bolt
// +320 dd = Lightning Bolt
// +324 dd = Implosion
// +328 dd = Chain Lightning
// +32C dd = Frost Ring
// +330 dd = Fireball
// +334 dd = Inferno
// +338 dd = Meteor Shower
// +33C dd = Death Ripple
// +340 dd = Destroy Undead
// +344 dd = Armageddon
// +348 dd = Shield
// +34C dd = Air Shield
// +350 dd = fire Shield
// +354 dd = Protection from Air
// +358 dd = Protection from Fire
// +35C dd = Protection from Water
// +360 dd = Protection from Earth
// +364 dd = Anti-Magic
// +368 dd = Dispel
// +36C dd = Magic Mirror
// +370 dd = Cure
// +374 dd = Resurrection
// +378 dd = Animate Dead
// +37C dd = Sacrifice
// +380 dd = Bless
// +384 dd = Curse
// +388 dd = Bloodlust
// +38C dd = Precision
// +390 dd = Weakness
// +394 dd = Stone Skin
// +398 dd = Disrupting Ray
// +39C dd = Prayer
// +3A0 dd = Mirth
// +3A4 dd = Sorrow
// +3A8 dd = Fortune
// +3AC dd = Misfortune
// +3B0 dd = Haste
// +3B4 dd = Slow
// +3B8 dd = Slayer
// +3BC dd = Frenzy
// +3C0 dd = Titan's Lightning Bolt
// +3C4 dd = Counterstrike
// +3C8 dd = Berserk
// +3CC dd = Hypnotize
// +3D0 dd = Forgetfulness
// +3D4 dd = Blind
// +3D8 dd = Teleport
// +3DC dd = Remove Obstacle
// +3E0 dd = Clone
// +3E4 dd = Fire Elemental
// +3E8 dd = Earth Elemental
// +3EC dd = Water Elemental
// +3F0 dd = Air Elemental
// +3F4 dd = Stone 443D3A 43E0EB 441B0D (!= не отв. на атаку)
// +3F8 dd = Poison
// +3FC dd = Bind
// +400 dd = Desease
// +404 dd = Paralyze
// +408 dd = Aging
// +40C dd = Death Cloud
// +410 dd = Thunderbolt
// +414 dd = Dispel
// +418 dd = Death Stare
// +41C dd = Acid Breath
// +444 dd ->
// +448 dd (2)
// +44C dd
// +454 dd 441B17 (кол-во ответов на атаку 0= не отв. на атаку)
// настройка для грифонов 46D6A0
// КОЛИЧЕСТВО ОТВЕТОВ НВ АТАКУ
// +458 dd Bless добавка к Max. Damage
// +45C dd Curse убавка к Min. Damage
// +464 dd Bloodlast добавка к Атаке с бонусами
// +468 dd Precision добавка к Атаке с бонусами
// +48C dd KING_123 тип (1=KING_1,2=KING_2,3=KING_3)
// исп для расчета Slayer. Бонус 8 к Атаке: 0x4421D2
// +490 dd номер атакера по порядку??? уже атаковал??? (сбрасывается после первого удара)
// +494 dd кол. доп. ответов на атаку, добавленных Counerstrike заклом
// +4A4 dd
// +4C0 db Blinded - снизить защиту (сбросить после?) при атаке на него (уст. перед ударом)
// +4C1 db Paralized - снизить защиту (сбросить после?) при атаке на него (уст. перед ударом)
// +4C2 dd Forgetfulness - уровень (>2 - не может стрелять)
// +4DC dd = величина бонуса при выборе защиты
// +4E0 dd заклинание для сказ дракона
// +4EC dd 44152A
// +4F1 db 43DF88
// +514 dd
// +518 dd -> dd first \ adjusted stacks pointers
// +51C dd -> dd last /
// +524 dd
// +528 dd -> dd first \ adjusted to wich stacks pointers
// +52C dd -> dd last /
};
Code:
bm+54CC Монстры (42 штуки) (см. _CombatMon_)
размер 548h
+00 db (1) когда отаковал уже(?)
+01 db
+02 db (0C) 44188C
+03 db
+08 dd = полное число стеков у игрока
+08 db = Видимость существа (4 - виден, 8 - не виден)
Комментарий DracoLich'а: Отряды теряют невидимость при любом действии на поле боя. Но ее межно восстановить в триггере !?BG1 - ShadowTheAge
// +10 dd =-1 после атаки и/или ответа(????)
// +1С dd = позиция на поле боя (куда бежать/стрелять)
// +20 db = огненный щит
+10 dd = ? (-1 когда существо может атаковать стены замка и курсор над стеной, когда курсор над клеткой)
+14 dd = ? (255 когда существо может атаковать стены замка и курсор над стеной)
+20 db = Анимация закла показывается на этом монстре
+21 db = В движении??
+24 dd = ?
+28 dd = Номер стека-клона
+2C dd = ?
// +30 db 43E33C
+30 dd? = Есть ли цифры количества существ? 0-есть, 1-нет.
Комментарий DracoLich'а: отряд не имеет обозначения кол-ва существ, пока не походит. При этом на него можно колдовать магию и бить. Кол-во показывается при щелчке правой кнопки в нижнем правом углу картинки (где обычно, в общем). Аналогичное возражение - ShadowTheAge
+34 dd = Тип существа
Комментарий DracoLich'а: параметры отряда становятся как у существа, номер которого поставлен, но сразу же снижаются до стандартных параметров сущ-ва, которое меняют. имя отряда в меню при щелчке правой кнопкой по существу меняется; когда его бьют - имя остается измененным. когда битва окончена - на картинке будет показан настроенный отряд, а не старый. Если изменить тип существа, битву становится невозможно выиграть (вроде как комп требует убить того, на кого нападал, и изменения типа существ = вызову изменнного существа). Действительно проблема, делающая параметр почти бесполезным - ShadowTheAge
+38 dd = Позиция существа (если сменить, на старом месте останется стоять копия. Копия не может ходить и быть атакованой, занимает место)
+3C dd = Номер анимации
Комментарий DracoLich'а: при значение 2,6,9... (много еще где) игра выдает черный экран; кадры берутся в том порядке, как и при создании (надо бы найти хелп по дефмейкеру, где описан каждый шаг, и выдрать оттуда). Не сталкивался почему-то... - ShadowTheAge
+40 dd = Номер кадра в анимации
Анимация возвращается к нормальной, если навести мышкой
// +44 dd (=1) сторона сдвига второй занятой клетки для монстра с двумя клетками
+48 dd = ?
+4C dd = Количество существ
+50 dd = Число монстров до удара по ним в тек. атаку. Количество существ для отображения (может не совпадать с количеством. В этом случае написано будет одно, а реально другое). По умолчанию -1 - значит "полностью совпадает с реальным".
Комментарий DracoLich'а: после того, как любое сущ-во попадет под атаку, данному значению станет равно количество реальное; в итогах битвы показывается реальное количество убитых; при атаке измененного существа фантомные монстры не учитываются (т.е. если изменить 10 монстров на 100 этой командой, то урон будет нанесен именно этим 10). Поступаем как и с невидимостью - ShadowTheAge
+54 dd = безвозвратные потери. Количество существ после выигранной битвы (или после откупа) равно "текущее количество существ" минус "безвозвратные потери". Потери могут быть записаны в безвозвратные при использовании, например, после воскрешения на уровне none или basic. - by Demiurg
+58 dd = Разница между текущим здоровьем и полным. Если 0 значит стек здоров.
+5C dd = номер слота героя (0...6), -1 - будет удален после битвы
+60 dd = Количество существ в начале боя
+64 dd = ?
+68 dd = ?
+6C dd = полное здоровье (исп. как база для лечения)
+70 dd = выпала удача
+74 dd = Город-владелец
+78 dd = Уровень существа
+7C dd = У ShadowTheAge тут флаги существа
+80 dd = ?
+84 dd = Флаги существа (BM:F)
+88 dd = Название существа
+8C dd = Название существа (множественное число)
+90 dd = Строка состояния (например "Нет штрафа рукопашной")
+C0 dd = Здоровье (полное)
+C4 dd = Скорость
+C8 dd = Атака
+CC dd = Защита
+D0 dd = Мин. урон
+D4 dd = Макс. урон
+D8 dd = Боезапас
+DC dd = Casts left
+E0 dd = ?
+E4 dd = ?
+E8 dd = ? монстра нужно ударить Fire Shield'ом
+E9 db = 1, если хоть раз монстра били
+EA db = 1, если умирал хоть один
+EB db = ? (возможно, 1, если был убит весь стэк)
// +EC dd = номер заклинания существа в тек раунде 0x50 Acid breath
// +F0 db=1 перед атакой на него 441434, 44016F
+F4 dd = Сторона (BM:I)
+F8 dd = Номер стэка у стороны на поле боя
// +FC dd = ? что-то с магией
+100 dd = Смещение существа по Y
+104 dd = Смещение существа по X
От того места где должен быть. В пикселях
+14C dd = Смещение по оси OX прямоугольника с количеством существ.
+150 dd = ?
+154 dd = Частота проигрывания случайной анимации.
Чем меньше тем чаще. Поставьте 200, будет без перерыва
+158 dd = ?
+15C dd = ?
+160 dd = ?
+164 dd = Анимация существа (загруженный def?)
+168 dd = Анимация снаряда (загруженный def?)
+16C dd = ?
+170 dd = Звук перемещения (загруженный wav?)
+174 dd = Звук атаки (загруженный wav?)
+178 dd = Звук урона (загруженный wav?)
+17C dd = Звук выстрела (загруженный wav?)
+180 dd = Звук смерти (загруженный wav?)
+184 dd = Звук защиты (загруженный wav?)
+188 dd = ?
+18C dd = ?
+190 dd = ?
+194 dd = Кол-во активных заклинаний (для отображения цвета кол-ва существ)
+198 dd*51h = Spells duration (81 spell)
+2DC dd*51h = Spells level (81 spell)
+420 dd = ?
+44C dd = Кол-во активных заклинаний (Для отображения при щелчке правой кнопкой)
+454 dd = Number of retaliations
+458 dd Bless добавка к Max. Damage
+45C dd Curse убавка к Min. Damage
+460 dd AntiMagicEffect
+464 dd Bloodlust добавка к Атаке с бонусами
+468 dd Precision добавка к Атаке с бонусами
+46C dd WeaknessAddedEffect
+470 dd StoneSkinAddedBonus
+478 dd PrayerAddedBonus
+47C dd MirthEffect
+480 dd SorrowEffect
+484 dd FortuneEffect
+488 dd MisfortuneEffect
+48C dd KING_123 тип (1=KING_1, 2=KING_2, 3=KING_3) исп для расчета Slayer. Бонус 8 к Атаке: 0x4421D2
+490 dd Кол-во пройденных клеток до удара
+494 dd кол. доп. ответов на атаку, добавленных Counerstrike заклом
+49C float = BlindCounterattackDamageMul
+4A0 float = Fire Shield multiplier
+4A8 float = ProtAirMul
+4AC float = ProtFireMul
+4B0 float = ProtWaterMul
+4B4 float = ProtEarthMul
+4B8 float = ShieldMul
+4BC float = AirShieldMul
+4C0 db Blinded - снизить дамаг удара при оживании (сбросить после?) при атаке на него (уст. перед ударом)
+4C1 db Paralized - снизить дамаг удара при оживании (сбросить после?) при атаке на него (уст. перед ударом)
+4C4 dd = forgetfulness level (>2 - не может стрелять)
+4C8 float = slow multiplier
+4CC dd = HasteAddedBonus (вычитается из скорости при снятии)
+4D0 dd = DeseaseAddedEffect_Defence
+4D4 dd = DeseaseAddedEffect_Attack
// +4DC dd = величина бонуса при выборе защиты
// +4E0 dd заклинание для сказ дракона
+4E4 dd = MagicMirrorEffect
+4E8 dd = Мораль существа
+4EC dd = Удача существа (44152A)
Комментарий Demiurg'а: Мораль и удача пересчитывается при передаче хода другому существу. Поэтому полезно только для получения или проверки. Если очень нужно менять то можно делать это или перед атакой, или каждый ход - ShadowTheAge
// +4F1 db 43DF88
+508 dd = используется при снятии корней Дендроидов
+50C dd = используется при снятии корней Дендроидов
// +514 dd
// +518 dd -> dd first \ adjusted stacks pointers
// +51C dd -> dd last /
// +524 dd
// +528 dd -> dd first \ adjusted to wich stacks pointers (used when Hypnotize is removed)
// +52C dd -> dd last /
edited by igrik
Code:
NOALIGN struct _BattleStack_ : _Struct_ // размер 0x548 = 1352 байта
{
_byte_ bShowAttackFrames; // +0
_byte_ bShowRangeFrames; // +1
_byte_ iShowAttackFrameType; // +2
_byte_ iNextFrameType; // +3
_byte_ iRemainingFrames; // +4
_byte_ field_05[3]; // +5 выравнивание стуктуры
_int32_ iDrawPriority; // +8
_byte_ bShowTroopCount; // +12 0x0C
_byte_ field_0D[3]; // +13 0x0D выравнивание стуктуры
_dword_ targetStackSide; // +16 0x10
_dword_ targetStackIndex; // +20 0x14
_dword_ targetAttackLimit; // +24 0x18
_int32_ targetGexID; // 28 +0x1C позициякуда бежать/стрелять
_byte_ isFireshield; // +32 0x20 огненный щит
_byte_ field_21[3]; // +33 0x21 выравнивание стуктуры
_int32_ clone_owner_stack_ix; //+36
_int32_ clone_index; // +40 0x28 (номер стэка клона этого)
// _List_<_int32_>* clones; // Заменяем поле. Теперь это список клонов стека.
_dword_ clone_rounds_left_to_vanish; // +44 0x2C (число раундов до исчезновения)
_byte_ isMoving; // +48 0x30
_byte_ letsPretendImNotHere; // +49 0x31
_byte_ field_32[2]; // +50 0x30 выравнивание стуктуры
_int32_ creature_id; // +52 0x34 (тип монстра)
_int32_ hex_ix; // +56 0x38 (позиция на поле боя)
_int32_ def_group_ix; // +60 0x3C
_int32_ def_frame_ix; // +64 0x40
_dword_ orientation; // +68 0x44 направление монстра (0-как атакующий, 1-как защитник)
_dword_ walkDirection; // +72 0x48 ?
_int32_ count_current; // +76 0x4C (число монстров)
_int32_ count_before_attack; // +80 0x50 (число монстров до удара по ним в тек. атаку)
_dword_ count_battle_resurrected; // +84 0x54
_int32_ lost_hp; // +88 0x58 потери здоровья последнего монстра
_int32_ army_slot_ix; // +92 0x5C номер слота of _Army_ (0...6), -1 - будет удален после битвы
_int32_ count_at_start; // +96 0x60 число монстров в начале битвы
_dword_ base_speed; // +100 0x64 базовая скорость с бонусами земли, спецов и т.д. По ней видимо вычисляются ускорение и замедление
_dword_ anim_value; // +104 0x68 = cranim.f[15] при инициализации
_int32_ full_hp; // +108 0x6C полное здоровье (исп. как база для лечения)
_bool32_ isLucky; // +112 0x70 в этом раунде была удача
//////////////////////////////////////////////////////////////////////////////////
_CreatureInfo_ creature;
//////////////////////////////////////////////////////////////////////////////////
//_int_ town; //+116 0x74
//_int_ level; //+120 0x78
//_char_* sound_name; //+124 0x7C
//_char_* def_name; //+128 0x80
//_int_ flags; //+132 0x84
//_char_* name_single; //+136 0x88
//_char_* name_plural; //+140 0x8C
//_char_* specification_description; //+144 0x90
//_int_ cost_wood; //+148 0x94
//_int_ cost_mercury; //+152 0x98
//_int_ cost_ore; //+156 0x9C
//_int_ cost_sulfur; //+160 0xA0
//_int_ cost_crystal; //+164 0xA4
//_int_ cost_jems; //+168 0xA8
//_int_ cost_gold; //+172 0xAC
//_int_ fight_value; //+176 0xB0
//_int_ AI_value; //+180 0xB4
//_int_ growth; //+184 0xB8
//_int_ horde_growth; //+188 0xBC
//_int_ hit_points; //+192 0xC0
//_int_ speed; //+196 0xC4
//_int_ attack; //+200 0xC8
//_int_ defence; //+204 0xCC
//_int_ damage_min; //+208 0xD0
//_int_ damage_max; //+212 0xD4
//_int_ shots; //+216 0xD8
//_int_ spells_count; //+220 0xDC
//_int_ advmap_low; //+224 0xE0
//_int_ advmap_high; //+228 0xE4
///////////////////////////////////////////////////////////////////////////////
_byte_ show_fire_shield; // +232 0xE8 (например у Ифритов он не отображается)
_bool8_ isSomeKilled; // +233 0xE9 =1, если умирал хоть один
_bool8_ isAllKilled; // +234 0xEA =1, если был убит весь стэк
_byte_ field_EB; // +235 0xEB выравнивание структуры
_int32_ spellAfterAttack; // +236 0xEC номер заклинания существа в тек раунде 0x50 Acid breath
_int32_ hitByCreature; // +240 0xF0 _byte_=1 перед атакой на него 441434
_int32_ side; // +244 0xF4 0 - attacker, 1 - defender
_dword_ index_on_side; // +248 F8 dd = номер стэка у стороны на поле боя
_dword_ iLastFidgetTime; // +252 FC dd = ? что-то с магией
_dword_ ySpecialMod; // +256 100 dd 43DEA4
_dword_ xSpecialMod; // +260 104 dd 43DEAD
_dword_ bPowSequenceComplete; // +264 108 dd
_dword_ yModify; // +268 10C dd
_CreatureAnim_ cr_anim; // +272 0x110
_Def_* def; // +356 0x164 def монстра, загрузка: 43DA8E
_Def_* def_shot; // +360 0x168 def выстрела, загрузка: 43DA8E
_dword_ image_height; // +364 0x16С
_Wav_* wav_move; // +368 0x170 звук перемещения (move), загрузка: 43DA8E
_Wav_* wav_attack; // +372 0x174 звук атаки (attk/wnce/shot), загрузка: 43DA8E
_Wav_* wav_wnce; // +376 0x178 звук 'колдует' (wnce), загрузка: 43DA8E
_Wav_* wav_shot; // +380 0x17C звук выстрела (shot), загрузка: 43DA8E
_Wav_* wav_kill; // +384 0x180 звук смерти (kill), загрузка: 43DA8E
_Wav_* wav_defend; // +388 0x184 звук обороны (wnce/dfnd), загрузка: 43DA8E
_Wav_* wav_ext1; // +392 0x188 звук дополнительный 1 (ext1), загрузка: 43DA8E
_Wav_* wav_ext2; // +396 0x18С звук дополнительный 2 (ext2), загрузка: 43DA8E
_dword_ turnsToNextMove; // +400 0x190
_int32_ active_spells_count; // +404 0x194 dd = количество уже наложенных заклинаний
_int32_ active_spell_duration[81]; // +408 0x198 есть заклинание (длительность) или нет
_int32_ active_spells_power[81]; // +732 0x2DC (сила действия заклинания)
_byte_ SpellInfluenceQueue[48]; // +1056 0x420 std::deque
_int32_ PaletteEffect; // +1104 0x450
_int32_ retaliations; // +1108 0x454 // 441B17 (кол-во ответов на атаку 0= не отв. на атаку)// настройка для грифонов 46D6A0
_int32_ bless_value; // +1112 0x458 Bless добавка к Max. Damage
_int32_ curse_value; // +1116 0x45C Curse убавка к Min. Damage
_int32_ antimagic_value; // +1120 0x460
_int32_ bloodlast_value; // +1124 0x464 Bloodlast добавка к Атаке с бонусами
_int32_ precision_value; // +1128 0x468 Precision добавка к Атаке с бонусами
_int32_ weaknessPenalty; // +1132 0x46C
_int32_ stoneSkinBonus; // +1136 0x470
_int32_ disruptiverayPenalty; // +1140 0x474
_int32_ prayerBonus; // +1144 0x478
_int32_ mirthBonus; // +1148 0x47C
_int32_ sorrowPenalty; // +1152 0x480
_int32_ fortuneBonus; // +1156 0x484
_int32_ misfortunePenalty; // +1160 0x488
_int32_ slayerLevel; // +1164 0x48C
_int32_ steps_to_target; // +1168 0x490 dd (шаги до цели)
_int32_ counerstrike_retaliations; // +1172 0x494 dd кол. доп. ответов на атаку, добавленных Counerstrike заклом
_int32_ frenzyAdjust; // +1176 0x498
_int32_ blindFactor; // +1180 0x49C
_int32_ fire_shield_strength; // +1184 0x4A0
_int32_ poison_penalty; // +1188 0x4A4
_int32_ protectionFromAirFactor; // +1192 0x4A8
_int32_ protectionFromFireFactor; // +1196 0x4AC
_int32_ protectionFromWaterFactor; // +1200 0x4B0
_int32_ protectionFromEarthFactor; // +1204 0x4B4
_int32_ shieldDamageFactor; // +1208 0x4B8
_int32_ airShieldDamageFactor; // +1212 0x4BC
_bool8_ residualBlindness; // +1216 0x4C0 db Blinded - снизить защиту (сбросить после?) при атаке на него (уст. перед ударом)
_bool8_ residualParalyze; // +1217 0x4C1 db Paralized - снизить защиту (сбросить после?) при атаке на него (уст. перед ударом)
_bool8_ field4C2[2]; // +1218 0x4C2 выравнивание структур
_int32_ forgetfulness_level; // +1220 0x4C4 dd Forgetfulness - уровень (>2 - не может стрелять)
_int32_ slowPenalty; // +1224 0x4C8
_int32_ hasteBonus; // +1228 0x4CС
_int32_ diseaseDefensePenalty; // +1232 0x4D0
_int32_ diseaseAttackPenalty; // +1236 0x4D4
_byte_ isNativeTerrain; // +1240 0x4D8
_byte_ field_4C9[3]; // +1241 0x4D9 выравнивание структуры
_int32_ defend_bonus; // +1244 0x4DC dd = величина бонуса при выборе защиты
_int32_ faerie_dragon_spell; // +1248 0x4E0 dd заклинание для сказ дракона
_int32_ magicMirrorChance; // +1252 0x4E4
_int32_ morale; // +1256 0x4E8
_int32_ luck; // +1260 0x4EC
_byte_ resetOnThisRound; // +1264 0x4F0
_byte_ isAreaEffectTarget; // +1265 0x4F1
_byte_ field_4F2[2]; // +1266 0x4F2 выравнивание структуры
_List_<_int32_> binder_clients; // +1268 0x4F4 (bound_armies std::vector)
_List_<_int32_> binder_sources; // +1284 0x504 (binder std::vector)
_List_<_int32_> aura_clients; // +1300 0x514 (aura_clients std::vector)
_List_<_int32_> aura_sources; // +1316 0x524 (aura_clients std::vector)
_int32_ AI_expected_damage; // +1332 0x534
_int32_ AI_target; // +1336 0x538
_int32_ AI_target_value; // +1340 0x53C
_int32_ AI_target_distance; // +1344 0x540
_int32_ AI_possible_targets; // +1348 0x544
Code:
// * monster information on battlefield
struct H3CombatMonster
{
protected:
h3unk _f_000[52];
public:
// * +34
INT32 type;
// * +38
// * position on battlefield
INT32 position;
// * +3C
INT32 animation;
// * +40
INT32 animationFrame;
// * +44
// * left or right
INT32 secondHexOrientation;
protected:
h3unk _f_048[4];
public:
// * +4C
// the number of creatures that are currently alive
INT32 numberAlive;
// * +50
INT32 previousNumber;
protected:
h3unk _f_054[4];
public:
// * +58
// * the number of lost hitpoints of top creature in stack
INT32 healthLost;
// * +5C
// * ?reference to position on side?
INT32 slotIndex;
// * +60
// * the number of creatures in this stack to compare against resurrection
INT32 numberAtStart;
protected:
h3unk _f_064[8];
public:
// * +6C
// * maximum hit points
INT32 baseHP;
// * +70
INT32 isLucky;
public:
// * +74
// * a copy of H3CreatureInformation using combat values in some places
H3CreatureInformation info;
protected:
h3unk _f_0E8[4];
public:
// * +EC
// * set in After-Hit spell subroutine 0x440220
INT32 spellToApply;
protected:
h3unk _f_0F0[4];
public:
// * +F4
// * left or right
INT32 side;
// * +F8
// * reference to position on side
INT32 sideIndex;
protected:
// * +FC
UINT32 last_animation_time;
// * +100
INT32 yOffset;
// * +104
INT32 xOffset;
h3unk _f_108[8];
// * +110 from cranim
H3MonsterAnimation cranim;
public:
// * +164
H3LoadedDef* def;
protected:
// * +168
H3LoadedDef* shootingDef;
h3unk _f_16C[4];
// * +170
UINT32 moveSound;
// * +174
UINT32 attackSound;
// * +178
UINT32 getHitSound;
// * +17C
UINT32 shotSound;
// * +180
UINT32 deathSound;
// * +184
UINT32 defendSound;
// * +188
UINT32 extraSound1;
// * +18C
UINT32 extraSound2;
h3unk _f_190[4];
public:
// * +194
// * the number of spells currently active
INT32 activeSpellsNumber;
// * +198
// * the remaining number of turns of any spells
INT32 activeSpellsDuration[81];
// * +2DC
// * the secondary skill level of applied spells
INT32 activeSpellsLevel[81];
protected:
h3unk _f_420[52];
public:
// * +454
// * number of retaliations left
INT32 retaliations;
// * +458
// * information about some spell effects
INT32 bless_damage; // 0x458
INT32 curse_damage; // 0x45C
INT32 anti_magic; // 0x460
INT32 bloodlust_effect; // 0x464
INT32 precision_effect; // 0x468
INT32 weakness_effect; // 0x46C
INT32 stone_skin_effect; // 0x470
INT32 unknown13; // 0x474
INT32 prayer_effect; // 0x478
INT32 mirth_effect; // 0x47C
INT32 sorrow_effect; // 0x480
INT32 fortune_effect; // 0x484
INT32 misfortune_effect; // 0x488
INT32 slayer_type; // 0x48C - called KING_1/2/3
INT32 unknown14; // 0x490 - Max traversed cells before hitting?
INT32 counterstrike_effect; // 0x494
FLOAT frenzyMultiplier; // 0x498
INT32 blind_effect; // 0x49C - for calculating damage retaliation damage?
FLOAT fire_shield_effect; // 0x4A0
INT32 unknown16; // 0x4A4
FLOAT protection_air_effect; // 0x4A8 - in % as below
FLOAT protection_fire_effect; // 0x4AC
FLOAT protection_water_effect; // 0x4B0
FLOAT protection_earth_effect; // 0x4B4
INT32 shield_effect; // 0x4B8
INT32 air_shield_effect; // 0x4BC
INT8 blinded; // 0x4C0 - to reduce damage?
INT8 paralyzed; // 0x4C1 - to reduce damage?
h3unk _f_4C2[2]; // 0x4C2-0x4C3
INT32 forgetfulness_level; // 0x4C4
FLOAT slow_effect; // 0x4C8
INT32 haste_effect; // 0x4CC - value added/removed
INT32 disease_attack_effect; // 0x4D0
INT32 disease_defense_effect; // 0x4D4
h3unk _f_4D8[8]; // 0x4D8-0x4DC
INT32 faerie_dragon_spell; // +4E0
INT32 magic_mirror_effect; // 0x4E4
INT32 morale; // +4E8
INT32 luck; // +4EC
h3unk _f_4F0[4];
H3Vector<H3CombatMonster*> dendroidBinder; // +4F4 which dendroids have binded the current target (used for animation requirement)
H3Vector<H3CombatMonster*> dendroidBinds; // +504 a list of H3CombatMonsters binded by this dendroid
h3unk _f_514[20];
INT32 Hypnotize_528;
INT32 Hypnotize_52C;
h3unk _f_530[24];
|