Так, ввиду того, что пост  XEPOMAHT'a обрезается (первый пост в этой странице) - размещу ещё раз.
 Полностью! разобранные структуры Героя, Битвы и Стека
 PHP 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
   // normal  void Hide() {CALL_1(void, __thiscall, 0x4D7950, this);}  void Show(_int_ mapitem_type, _int_ mapitem_setup) {CALL_3(void, __thiscall, 0x4D7840, this, mapitem_type, mapitem_setup);}  char* Get_className() {return CALL_1(char*, __thiscall, 0x4D91E0, this);}  int GetLandModifierUnder() {return CALL_1(int, __thiscall, 0x4E5210, this);}  void CastFly(int powerCast) {CALL_2(void, __thiscall, 0x4E5C10, this, powerCast);}
   // телепортировать героя  _byte_ Teleport(_dword_ xyz) { return CALL_6(_byte_, __thiscall, 0x41DAB0, o_AdvMgr, this, xyz, 0, 1, 0); }  // дать армию герою  _bool_ AddStack(_int_ type, _int_ amount, _int_ slot = -1) { return CALL_4(_bool_, __thiscall, 0x44A9B0, &this->army, type, amount, slot); }
   // обучение грамотностью между героями  void TeachScholar(_Hero_* heroRight) { CALL_2(void, __fastcall, 0x4A25B0, this, heroRight); }
   void GiveArtifact(_Artifact_* art, int is_need_build_combo, int check_win_game) {CALL_4(void, __thiscall, 0x4E32E0, this, art, is_need_build_combo, check_win_game);}  void GiveArtifact(_int_ art_id, int is_need_build_combo, int check_win_game)   {   _Artifact_ art;   art.id = art_id;   art.mod = 0xFFFF;   GiveArtifact(&art, is_need_build_combo, check_win_game);  }
   _bool_ DoesHasArtifact(int art_id) {return CALL_2(_bool_, __thiscall, 0x4D9420, this, art_id);}  _bool_ DoesWearArtifact(int art_id) {return CALL_2(_bool_, __thiscall, 0x4D9460, this, art_id);}  void RemoveBattleMachine(int creature_id) {CALL_2(void, __thiscall, 0x4D94D0, this, creature_id);}  int RemoveDollArtifact(int doll_slot_index) {return CALL_2(int, __thiscall, 0x4E2E40, this, doll_slot_index);}  int AddDollArtifact(_Artifact_* art, int doll_slot_index) {return CALL_3(int, __thiscall, 0x4E2C70, this, art, doll_slot_index);}  int RemoveBackpackArtifact(int index) {return CALL_2(int, __thiscall, 0x4E2FC0, this, index);}  int AddBackpackArtifact(_Artifact_* art, int index) {return CALL_3(int, __thiscall, 0x4E3200, this, art, index);}
    // открытие окна героя  _int_ ShowHeroScreen(_int_ noDissmiss, _int_ noRedrawAdvMap, _byte_ rightClickDlg)  {    return CALL_4(_int_, __fastcall, 0x4E1A70, this->id, noDissmiss, noRedrawAdvMap, rightClickDlg);  }
   // получить стоимость маны за заклинание   _int_ GetSpellCost(_int_ spell_id, _Army_* army, _int_ land_modifier)  {    return CALL_4(_int_, __thiscall, 0x4E54B0, this, spell_id, army, land_modifier);  }
    // Получение уровня силы магии в бою  _int_ Get_School_Level_Of_Spell(_int_ spell_id, _int_ land_modifier)  {    return CALL_3(_int_, __thiscall, 0x4E52F0, this, spell_id, land_modifier);  }
  // Получение силы спелла от бонуса артов (длительность действия)  _int_ Get_Spell_Rounds_Bonus_Arts()  {    return CALL_1(_int_, __thiscall, 0x4E5020, this);  }  // Получение силы спелла от бонуса втор.навыка Волшебство  _int64_ Get_Spell_Power_Bonus_Arts_And_Sorcery(int spell, signed int damage, _BattleStack_* stack)  {    return CALL_4(_int64_, __thiscall, 0x4E59D0, this, spell, damage, stack);  }
   // Получение бонуса к эффекту заклинания за специализацию.  _int_ GetSpell_Specialisation_PowerBonuses(int Spell_id, signed int damage, int Creature_level)  {    return CALL_4(_int_, __thiscall, 0x4E6260, this, Spell_id, Creature_level, damage);  }
   _int_ GetSpecialTerrain() {return CALL_1(_int_, __thiscall, 0x4E5130, this); } 
   // СПЕЦИАЛИЗАЦИИ ГЕРОЕВ // float SS_GetArcheryPower = CALL_1(float, __thiscall, 0x4E43D0, hero);    // Стрельба (Archery) // float SS_GetDiplomacyPower = CALL_1(float, __thiscall, 0x4E47F0, hero);  // Дипломатия (Diplomacy) // float SS_GetEagleEyePower = CALL_1(float, __thiscall, 0x4E4690, hero);   // Зоркость (Eagle Eye) // float SS_GetNecromancyPower = CALL_1(float, __thiscall, 0x4E3F40, hero, _bool8_ isSetMaxValuePower); // Некромантия (Necromancy) // float SS_GetEstatesPower = CALL_1(float, __thiscall, 0x4E4600, hero);    // Имущество (Estates) // float SS_GetLearningPower = CALL_1(float, __thiscall, 0x4E4AB0, hero);   // Обучение (Learning) // float SS_GetOffensePower = CALL_1(float, __thiscall, 0x4E4520, hero);    // Нападение (Offense) // float SS_GetArmorerPower = CALL_1(float, __thiscall, 0x4E4580, hero);    // Доспехи (Armorer) // float SS_GetIntelligencePower = CALL_1(float, __thiscall, 0x4E4B20, hero); // Интеллект (Intelligence) // float SS_GetResistancePower = CALL_1(float, __thiscall, 0x4E4950, hero); // Сопротивление (Resistance) // float SS_GetFirstAidPower = CALL_1(float, __thiscall, 0x4E4B90, hero);   // Первая помощь (First Aid) // _int_ SS_GetEstatesPower = CALL_1(_int_, __thiscall, 0x4E4600, hero);    // Имущество // _int_ SS_GetMysticismPower = CALL_1(_int_, __thiscall, 0x4E41B0, hero);  // Мистицизм // _int_ SS_GetScoutingRadius = CALL_1(_int_, __thiscall, 0x4E42E0, hero);  // Разведка // _int_ ReCalculateMovementPoints = CALL_1(_int_, __thiscall, 0x4E4C00, hero, _bool8_ inOnBoat);  // Пересчитать мувпоинты      //my  void ShowSpellBookDlg(int a1, int a2, int land_modifier)  {   if (this->doll_art[17].id != -1)   {    _Dlg_* dlg = (_Dlg_*)o_New(0xD0);    // create spellbook dlg    CALL_5(void, __thiscall, 0x59C0F0, dlg, this, a1, a2, land_modifier);    dlg->Run();    // destroy spellbook dlg    CALL_1(void, __thiscall, 0x59CBF0, dlg);    o_Delete(dlg);   }  }  void ShowSpellBookDlg(int a1, int a2)    {ShowSpellBookDlg(a1, a2, this->GetLandModifierUnder());} }; 
 
  
PHP Code: 
 NOALIGN struct _BattleMgr_ : _Struct_ {   _Manager_ mgr;      // 0...56   _byte_ field_38[4]; // +56 (что-то из manager)
    enum BATTLE_ACTION   {     BA_CANCEL,     BA_HERO_CAST_SPELL,     BA_WALK,     BA_DEFEND,     BA_RETREAT,     BA_SURRENDER,     BA_WALK_ATTACK,     BA_SHOOT,     BA_WAIT,     BA_CATAPULT,     BA_MONSTER_SPELL,     BA_FIRST_AID_TENT,     BA_NOTHING //12 = No action(can be to disable stack for this round)   };
    _int32_ action;                 // +60 (BG:A)   _int32_ actionParam;            // +64   _int32_ actionTarget;           // +68   _int32_ actionParam2;           // +72   _byte_ iLastDrawGridShade[187]; // +76   _byte_ iCurDrawGridShade[187];  // +263   _byte_ f_1C2[2];                // +450 (выравнивание)   _BattleHex_ hex[187];           // +452 (112*187)   _int32_ combatTerrain;          // +21396   _int32_ combatFringe;           // +21400   _int32_ iCombatCycleType;       // +21404   _int32_ iElevationOverlay;      // +21408   _bool32_ iDoorStatus;           // +21412   _bool32_ bMoatOn;               // +21416   _bool32_ moatIsWide;            // +21420   _Pcx16_* saveScreenPreGrid;     // +21424 (Bitmap16Bit*)   _Pcx16_* saveScreenPostGrid;    // +21428   _Pcx16_* combatMouseBackground; // +21432   _MapItem_* MapItem;             // +21436   _int32_ special_Ground;         // +21440   _bool8_ antiMagic_Garrison;     // +21444   _bool8_ isBank;                 // +21445   _bool8_ f_53C6[2];           // +21446 (выравнивание)   _Town_* town;                   // +21448   _Hero_* hero[2];                // +21452   _int32_ heroSpellPower[2];      // +21460   _bool32_ playDoh;               // +21468   _bool32_ playYeah;              // 21472   _int32_ heroFrameType[2];       // +21476   _int32_ heroFrameIndex[2];      // +21484   _int32_ heroDataSet[2];         // +21492   _dword_ heroLastFidgetTime[2];  // +21500   _Def_* heroDefLoaded[2];        // +21508   _Def_* heroFlagLoaded[2];       // +21516   _int32_ heroFlagCadre[2];       // +21524   _int32_ heroUpdateRect[2][4];   // +21532   _int32_ heroFlagUpdateRect[2][4]; // +21564   _List_<_int32_> EagleEyeSpellLearned[2]; // +21596 (H3Vector<INT32>)   _byte_ armyEffected[2][20];     // +21668   _bool8_ isHuman[2];             // +21668 (isNotAI[2])   _bool8_ isLocalHuman[2];        // +21670 (isHuman[2])   _int32_ playerID[2];            // +21672 (owner_id[2])   _bool8_ hasArtifactAutoCast[2]; // 21680   _byte_ f_54B2[2];         // +21682 (выравнивание)   _bool32_ isCasted[2];           // +21684   _int32_ countMonsters[2];       // +21692   _Army_* army[2];                // +21700   _BattleStack_ stack[2][21];     // +21708   _bool8_ onNativeTerrain[2];     // +78492   _byte_ f_1329E[2];      // +78494  (выравнивание)   _int32_ turnsSinceLastEnchanterCast[2]; // +78496   _int32_ summonedElemental[2];   // +78504   _bool8_ sideRetreated[2];       // +78512   _bool8_ sideSurrendered[2];     // +78514   _int32_ gbThisNetHasControl;    // +78516 (netControl_BG_A)   _int32_ currentStackSide;       // +78520   _int32_ currentStackIndex;      // +78524   _int32_ currentActiveSide;      // +78528   _int32_ autoCombatOn;           // +78532   _BattleStack_* activeStack;     // +78536   _int32_ highlighterOn;          // +78540   _int32_ lastHexIndex;           // +78544   _int32_ lastMoveToIndex;        // +78548   _int32_ attackerHexIndex;       // +78552   _int32_ lastCommand;            // +78556   _int32_ combatCommand;          // +78560   _int32_ castleAttackDone;       // +78564   _Def_* currentSpellDef;         // +78568   _int32_ currentSpellID;         // +78572   _int32_ currentSpellDefFrame;   // +78576   _int32_ numShootingTowers;      // +78580   _int32_ isBattleOver;           // +78584   _Dlg_* dlg;                     // +78588   _int32_ bCombatShowIt;          // +78592    _dword_* iconWidgetWL[25];      // +78596 (iconWidget = _DlgStaticDef_?)   _dword_* textWidgetWL[25];      // +78696 (textWidget = _DlgStaticText_?)   _int32_ attackCursorEnumType[12];  // +78796   _int32_ attackHex[12];          // +78844   _int32_ lastAttackCursorEnumType; // +78892   _int32_ iTtlCombatDirections;   // +78896   _int32_ iBackgroundFrame;       // +78900   _bool8_ bCreatureIsDead[2][20]; // +78904   _bool8_ bSomeCreaturesVanish;   // +78944   _byte_ f_13461[3];              // +78945 (выравнивание)   char* backPcxName;              // +78948   _BattleHexAdjacent_ adjacentSquares[187];    // +78952 (_BattleHexAdjacent_ adjacentSquares[187])   _int32_ saveBiggestExtent;      // +81196   _int32_ limitToExtent;          // +81200   _int32_ computeExtentOnly;      // +81204   _int32_ extent[4];              // +81208 (RECT = size 16 bytes)   _int32_ sideWinner;             // +81224   _int32_ necromanty_Count;       // +81228   _int32_ necromanty_Type;        // +81232   _dword_* NumberWindow;          // +81236   _List_<_int32_> Obstacles;      // +81240 (_H3Vector_<H3Obstacle>)   _bool8_ isTactics;              // +81256   _byte_ f_13D69[3];              // +81257 (выравнивание)   _int32_ round;                  // +81260   _int32_ tacticsDifference;      // +81264   _bool8_ cheatNoSpellLimit;      // +81268   _bool8_ cheatShowHiddenObjects; // +81269   _bool8_ cheatShowBlockedHexes;  // +81270   _byte_ f_13D77;                 // +81271 (выравнивание)   _dword_* Towers[3];             // +81272 ( struct TownTowerLoaded (size 0x24h)   _bool8_ waitPhase;              // +81380   _byte_ f_13DE5[3];              // +81381 (выравнивание)   _int32_ defenderHeroOriginalPSkill[4];  // +81384 (герой защитник: сохранить атаку до битвы)   char* wallImagesNames[90];      // +81400   _int32_ wallLevel[18];          // +81760   _int32_ wallFrame[18];          // +81832   _int32_ mapPoint;               // +81904 (пакованные координаты битвы)   _Pcx8_* combatCellGrid;         // +81908   _Pcx8_* combatCellShaded;       // +81912   _int32_ obstacleAnimationFrame; // +81916   _bool8_ redrawCreatureFrame[40];// +81920   _bool8_ redrawHeroFrame[2];     // +81960   _bool8_ redrawFlagFrame[2];     // +81962   _bool8_ redrawTowersFrame[3];   // +81964   _bool8_ askRunBattle;           // +81967   _bool8_ anyActionTaken;         // +81968   _byte_ creaturePath[187];       // +81969
   // normal  //inline _Def_* LoadSpellAnimation(int spell_anim_ix)  inline int GetHexIxAtXY(int x, int y) {return CALL_2(int, __stdcall, 0x464380, x - dlg->x, y - dlg->y);}  inline void CastSpell(int spell_id, int hex_ix, int cast_type_012, int hex2_ix /*для телепорта и жертвы*/, int skill_level, int spell_power)   {CALL_7(void, __thiscall, 0x5A0140,      this, spell_id, hex_ix, cast_type_012, hex2_ix, skill_level, spell_power);} 
  // может ли впринципе сторона колдовать любое заклинание   inline _bool8_ CanUseAnySpell(int side, _byte_ isHeroCaster)  {    return CALL_3(_bool8_, __thiscall, 0x41FA10, this, side, isHeroCaster);  }
   // даём игроку управление для поиска цели уже выбранного заклинания   inline void UserChooseSpellTarget(int spell, int position)  {    return CALL_4(void, __fastcall, 0x59EF60, this, position, spell, 0);  }
   // скрытая ли битва: 0=видимая, 1=скрытая   inline _bool8_ IsHiddenBattle()  {    return CALL_1(_bool8_, __thiscall, 0x46A080, this);  }    // Проверка необходимости отрисовки битвы.  // При необходимости отрисовки возвращает FALSE, иначе TRUE.  inline _bool8_ ShouldNotRenderBattle()  {    return CALL_1(_bool8_, __thiscall, 0x46A080, this);  }
   // проиграть анимацию заклинания на активном стеке  inline _byte_ StackActive_PlaySpellAnimation(_int_ spell_anim_id, _int_ play_damage_to_stack = 0)   {     return CALL_3(_byte_, __thiscall, 0x468570, this, spell_anim_id, play_damage_to_stack);  }
   // поставить тень курсора на гекс  inline _int32_ SetCursorShadowOnGex(_int32_ GexID)  {   return CALL_1(_int32_, __fastcall, 0x59FA10, GexID);  }
   // получить тип курсора в бою  inline _int32_ GetCursorFrame(_int32_ GexID)  {   return CALL_2(_int32_, __thiscall, 0x475DC0, this, GexID);  }
   // добавить хинт действия в битве (в лог битвы) НЕ сохранится в логе  // в зависимости от типа действия (считывается из кадра курсора мыши)  inline void AddHintMessage_ByCursorFrame(_int32_ cursor_frame)  {   CALL_2(void, __thiscall, 0x4923C0, this, cursor_frame);  }
   // добавить статус действия в битве (в лог битвы) сохранится в логе   inline void AddStatusMessage(const char* statusbar_text)   {     return CALL_4(void, __thiscall, 0x4729D0, this->dlg, statusbar_text, 1, 0);  } 
   // добавить хинт действия в битве (в лог битвы) НЕ сохранится в логе   inline void AddHintMessage(const char* statusbar_text)  {     return CALL_4(void, __thiscall, 0x4729D0, this->dlg, statusbar_text, 0, 1);  }
   // получить в текст урона, который можно записать в лог битвы  inline _HStr_* GetHintMessage_AttackDamage(_HStr_* H3Str, _BattleStack_* atacker, _BattleStack_* target, _bool8_ isShoot, _int32_ stepsToTarget)  {   return CALL_5(_HStr_*, __fastcall, 0x492F50, H3Str, atacker, target, isShoot, stepsToTarget);  }
   // Сделать стек активным  inline void SetActiveStack(_int_ side, _int_ index_on_side)  {    return CALL_3(void, __thiscall, 0x464F10, this, side, index_on_side);  }
   // Проиграть магическую анимацию на определенном гексе поля боя  inline _byte_ PlayMagicAnimationOnGEX(_int_ anim_id, _int_ gex_id)  {   return CALL_5(_byte_, __thiscall, 0x496590, this, anim_id, gex_id, 100, 1);  }    // Сброс полей необходимости перерисовки.  inline void ClearRedrawFields()  {    return CALL_1(void, __thiscall, 0x493290, this);  }     // Указание необходимости перерисовки при следующей отрисовке для стека - стрелковой башни.  inline void SetArrowTowerToRedraw(_BattleStack_* Stack)  {    return CALL_2(void, __thiscall, 0x46A040, this, Stack);  }
   // получение прямого расстояния между двумя гексами (без учёта препятствий)  inline _int_ GetDistance(_int_ gex_start, _int_ gex_finish)  {    return CALL_2(_int_, __fastcall, 0x469250, gex_start, gex_finish);  }     // Определение границ перерисовки для кадра def`а.  inline void SetSpecRedrawBorders(_Def_* Def, _int_ DefGroupNum, _int_ FrameNum, _int_ X_Pos, _int_ Y_Pos, _RedrawBorders_* out_Borders, _bool_ Reflected, _bool_ NeedAddToGlobalBorders)  {    CALL_9(void, __thiscall, 0x495AD0, this, Def, DefGroupNum, FrameNum, X_Pos, Y_Pos, out_Borders, Reflected, NeedAddToGlobalBorders);  }     // Вычисление границ необходимости обновления экрана на основе полей необходимости перерисовки боевых элементов.  inline void SetRedrawBorders()  {    CALL_1(void, __thiscall, 0x495770, this);  }     // Отрисовка поля боя.  // Flip - необходимость обновления экрана.  // SetBattleRedraws - необходимость настройки границ обновления экрана.  // UseBattleRedraws - необходимость использования границ обновления экрана (при SetBattleRedraws = TRUE игнорируется, считаясь TRUE).  // WaitingTime - время, на ожидание которого надо настроить следующую отрисовку (игнорируется при Wait = FALSE).  // RedrawBackground - необходимость перерисовки заднего плана (и стёрки старого изображения).  // Wait - необходимость ожидания. В случае FALSE время ожидания для следующей отрисовки не меняется.  inline void RedrawBattlefield(_bool8_ Flip, _bool8_ SetBattleRedraws, _bool8_ UseBattleRedraws, _int_ WaitingTime, _bool8_ RedrawBackground, _bool8_ Wait)  {    return CALL_7(void, __thiscall, 0x493FC0, this, Flip, SetBattleRedraws, UseBattleRedraws, WaitingTime, RedrawBackground, Wait);  }     inline _int32_ RedrawGrid()  {   return CALL_3(_int32_, __thiscall, 0x4934B0, o_BattleMgr, 0, 1);  }
    inline void Redraw()  {   return RedrawBattlefield(1, 0, 0, 0, 1, 0);  }
   // Обновление всего поля боя.  inline void FlipBattlefield()  {    CALL_1(void, __fastcall, 0x493300, this);  }
   inline void Highlight_Hex(int gex_id = -1, signed int item = -1)   {     CALL_3(void, __thiscall, 0x493F10, this, gex_id, item);  }     // Инициализация переменных, управляющих временем случайных анимаций.  inline void InitRandAnimsTimes()  {    CALL_1(void, __thiscall, 0x479860, this);  }     // Проигрывание одного кадра анимации ожидания поля боя.  // Это анимация флагов героев, анимация самих героев, случайная анимация существ, мигающая рамка вокруг стеков.  inline void PlayWaitAnim()  {    CALL_1(void, __thiscall, 0x495C50, this);  }     // Проигрывание одного кадра анимации ожидания поля боя только в случае наступления времени.  inline void PlayWaitAnimOnce()  {    CALL_1(void, __thiscall, 0x473970, this);  }     // Нанесение урона элементу замка по его номеру.  inline void DamageCastleElement(_int_ CastleElementNum, _int_ Damage)  {    CALL_3(void, __thiscall, 0x465570, this, CastleElementNum, Damage);  }
   inline _bool8_ Get_StackShoot_ObstacklePenalty(_BattleStack_* stack, _int32_ stackHexID, _int32_ gexTargetID)  {   return CALL_4(_bool8_, __thiscall, 0x4670F0, this, stack, stackHexID, gexTargetID);  }    inline _bool8_ Get_StackShoot_DistancePenalty(_BattleStack_* stack, _BattleStack_* target)  {   return CALL_3(_bool8_, __thiscall, 0x4671E0, this, stack, target);  }    // Удаление стека с гекса, на котором он стоит.  inline void RemoveStackFromGexes(_BattleStack_* stack)  {    CALL_2(void, __thiscall, 0x468310, this, stack);  }     // Постановка стека на гекс.  inline void PutStackToGex(_BattleStack_* Stack, _int_ GexNum)  {    CALL_3(void, __thiscall, 0x4683A0, this, Stack, GexNum);  }    // Удаление препятствия.  inline void RemoveObstacle(_int_ ObstacleNum)  {    CALL_2(void, __thiscall, 0x466710, this, ObstacleNum);  }
   // проверка препятствий на гексе (0-пуст, 1-занят)  inline _byte_ IsGexNotObstacle(_int_ gexID)  {     // проверяем, правильно ли передали в функцию номер гекса     if (gexID <= 0 || gexID > 187)       return 1; // не правильно, значит гекс занят
     return CALL_2(_byte_, __thiscall, 0x4695F0, this, gexID);  } } 
 
  
PHP 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 (id стэка клона)   _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 направление монстра (1-как атакующий, 0-как защитник)  _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
   // normal  inline void Construct(int creature_id, int count, _Hero_* hero_owner, int side, int index_on_side/*0 - 21*/, int position_hex_ix,  int army_slot_ix)   {CALL_8(void, __thiscall, 0x43D5D0, this, creature_id, count, hero_owner, side, index_on_side, position_hex_ix, army_slot_ix);}
   inline _BattleStack_* Create() {return CALL_1(_BattleStack_*, __thiscall, 0x43CF70, this);} // need (_BattleStack_*)o_New(sizeof(_BattleStack_))  inline void InitDefsAndWavs() {CALL_1(void, __thiscall, 0x43D710, this);}  inline _int32_ InitSpells() {return CALL_1(_int32_, __thiscall, 0x43D2E0, this);}  inline _int32_ Delete() {return CALL_1(_int32_, __thiscall, 0x43D120, this);}
   inline _int32_ GetFullHealth(_bool_ isAI) {return CALL_2(_int32_, __thiscall, 0x442DA0, this, isAI);}  inline _int32_ GetSide() {return CALL_1(_int32_, __thiscall, 0x43FE60, this);}
   // получение базового урона монстром   inline _int32_ Calc_Damage_Base(_bool_ isTeoretic = TRUE)   {    return CALL_2(_int32_, __thiscall, 0x442E80, this, isTeoretic);   }    // Подсчёт добавок к наносимому урону (возвращается новый урон).  // Enemy - указатель на атакуемый стек.  // BaseDamage - начальный урон.  // IsShot - является ли атака выстрелом (TRUE - является).  // Virtual - является ли подсчёт производимым ИИ (TRUE - является).  // WayLength - пройденный путь до цели (для расчёта кавалерийского бонуса).  // out_FireshieldDamage - указатель на переменную, в которую в результате работы функции запишется урон от огненного щита (0 - не подсчитывать).  inline _int32_ Calc_Damage_Bonuses(_BattleStack_* enemy, _int32_ BaseDamage, _bool8_ IsShot, _bool8_ Virtual, _int32_ WayLength, _int32_* out_FireshieldDamage)  {    return CALL_7(_int32_, __thiscall, 0x443C60, this, enemy, BaseDamage, IsShot, Virtual, WayLength, out_FireshieldDamage);  }
   // Проиграть анимацию заклинания на стеке  inline _int_ PlayMagicAnimation(_int_ spell_anim_id, _byte_ is_show_damage = 0)  {   return CALL_5(_int_, __thiscall, 0x4963C0, o_BattleMgr, spell_anim_id, this, 100, is_show_damage);  } 
    // проиграть анимацию заклинания на активном стеке (почему их 2 функции?)  inline _byte_ PlayMagicAnimation2(_int_ spell_anim_id, _int_ is_show_damage = 0)   {     return CALL_3(_byte_, __thiscall, 0x468570, o_BattleMgr, spell_anim_id, is_show_damage);  } 
   // Проиграть анимацию самого стека    inline _byte_ PlayStackAnimation(_int_ anim_id, _int_ is_restore_state)  {   if (is_restore_state) // если необходимо восстановить исходную стойку   {     CALL_4(_byte_, __thiscall, 0x446660, this, anim_id, -1, 0);     return CALL_4(_byte_, __thiscall, 0x446660, this, 2, 1, 0);    } else return CALL_4(_byte_, __thiscall, 0x446660, this, anim_id, -1, 0);  } 
   // Сделать этот стек активным  inline void SetActiveThisStack()  {    return CALL_3(void, __thiscall, 0x464F10, o_BattleMgr, this->side, this->index_on_side);  }
   // переместить стек (если не хватает дальности хода, стек не двинется) inline _byte_ Move(_int_ gex_id)  {    return CALL_3(_byte_, __thiscall, 0x445A30, this, gex_id, 0);  }
   // поворот стека в противоположную сторону  inline _byte_ Rotate()  {    return CALL_2(_byte_, __thiscall, 0x445A30, this, 1);  }
   // Атаковать стеком (врукопашную)  inline _byte_ Attack_Melee(_BattleStack_* enemy)  {    return CALL_3(_byte_, __thiscall, 0x441330, this, enemy, 2);  }
   // Атаковать стеком (стрелять)   inline void Attack_Shoot(_BattleStack_* enemy)  {    return CALL_2(void, __thiscall, 0x43F620, this, enemy);  }
   // Отрисовка выстрела стека по противнику и полёта снаряда.  inline void Draw_Shot(_BattleStack_* enemy)  {    CALL_2(void, __thiscall, 0x43EFE0, this, enemy);  }
   // может ли стрелять с проверкой на врага рядом   _bool8_ CanShoot(_BattleStack_* aim = NULL)    {     return CALL_2(_bool_, __thiscall, 0x442610, this, aim);   }
    // впринципе умеет ли стрелять (без проверки на врага рядом)   _bool8_ CanShoot2(_BattleStack_* aim = NULL)    {     if (this->creature_id == CID_ARROW_TOWER)         return TRUE;     if ( (this->creature.flags & BCF_CAN_SHOOT) && this->creature.shots > 0)         return TRUE;
      return FALSE;   }    // Получение второго гекса, занимаемого стеком (если стек 1-клеточный, первого).  inline _int32_ GetSecondGexID()  {    return CALL_1(_int32_, __thiscall, 0x4463C0, this);  }     // Уничтожение стека.  // dead_itself - умер ли стек сам собой (например, как клон при гибели хозяина или окончании длительности заклинания).  inline void Die(_bool8_ dead_itself)  {    CALL_2(void, __thiscall, 0x443E40, this, dead_itself);  }
   // получение скорости стека  inline _int_ GetSpeed()  {    return CALL_1(_int_, __thiscall, 0x4489F0, this);  }
   // может ли дойти стек до цели  inline _int_ CanReachToTarget(int gex_target, int a3 = 0, int a4 = 0)  {    return CALL_4(_int_, __thiscall, 0x446960, this, gex_target, a3, a4);  }
   // получить иммунитет существа  // caster_type: 0 - герой 1 - монстр, 2 - арт    inline double GetResistMagic(int spell_id, int side, char a5, char a6, int caster_type)  {    return CALL_7(double, __thiscall, 0x5A83A0, o_BattleMgr, spell_id, side, this, a5, a6, caster_type);  }
   // получить ослабление силы магии (големы)  inline int GetResistGolem(int spell_id, int damage)  {    return CALL_3(int, __fastcall, 0x44B180, damage, spell_id, this->creature_id);  }
   // получить получить ослабление силы магии (защита от воды и т.п.)   inline int GetResistSpellProtection(int spell_id, signed int damage)  {    return CALL_3(int, __stdcall, 0x5A7EC0, damage, spell_id, this);  }
   // может ли колдовать как Сказочный Дракон  inline _bool8_ CanCastSpellAkaFaerieDragon()  {    if (this->faerie_dragon_spell && this->creature.spells_count) {     return TRUE;   }    return FALSE;  }
   // может ли монстр колдовать на позицию  inline _bool8_ CanCastToGex(int targetPos)  {    return CALL_2(_bool8_, __thiscall, 0x4473E0, this, targetPos);  }
   // может ли монст колдовать на поле боя (расширенная функция указанной выше)  _bool8_ CanCastToBattleField()  {   _bool8_ result = FALSE;   for(int i=0; i<=187; i++) {     if(this->CanCastToGex(i)) {       result = TRUE;       break;     }   }   return result;  }
   // можно ли кастовать на монстра  // 5A3F90 bool __thiscall CombatMan_CanUseSpell(_BattleMgr_ *this, int spell, int side, _BattleStack_ *targetMon, int a5, int a6)   inline bool CanUseSpell(int spell_id, int side, char a5, int caster_type)  {    return CALL_6(bool, __thiscall, 0x5A3F90, o_BattleMgr, spell_id, side, this, a5, caster_type);  }
   // получить кол-во воскрешаемых существ (Архангелы или Пит-Лорды)  inline int Get_Resurrect_Count(_BattleStack_* stack_target)  {    return CALL_2(int, __thiscall, 0x447050, this, stack_target);  }    // Получение номера стрелковой башни стека (-1 - стек не является стрелковой башней).  inline _int32_ Get_ArrowTowerNum()  {    // Выбираем номер стрелковой башни в зависимости от её позиции (стандартный способ игры).    switch (this->hex_ix)    {      case 254:        return 0;      case 251:        return 1;      case 255:        return 2;      default:        return -1;    }  }
   // WOG ФУНКЦИИ   #define WOG_IS_HARPY *(_byte_*)0x75E05B  #define WOG_IS_HARPY_HAG *(_byte_*)0x75E060  #define WOG_IS_DARKNESS_DRAGON *(_dword_*)0x75E064  _bool8_ WOG_isHarpy()  {   if( this->creature_id == WOG_IS_HARPY ||       this->creature_id == WOG_IS_HARPY_HAG ||       this->creature_id == WOG_IS_DARKNESS_DRAGON ||       CALL_1(int, __cdecl , 0x71E433, this)    ) {     return TRUE;   }   return FALSE;  } }; 
 
  
PHP Code: 
 NOALIGN struct _AdvMgr_: _Struct_ // size: 952 bytes = 0x3B8 {   _Manager_ mgr;              // 0...56   _ptr_ pNetMsgHandler;       // +56 0x38   _byte_ DebugShowFPS;        // +60 0x3C   _byte_ DebugViewAll;        // +61 0x3D   _byte_ f_3E[2];         // +62..63 выравнивание   _int_ advCommand;           // +64 0x40   _ptr_ advWindow;            // +68 0x44   _ptr_ pRouteArray;          // +72 0x48   _int_ bShowRoute;           // +76 0x4C   _int_ seedingValid;         // +80 0x50   _int_ fullySeeded;          // +84 0x54   _int_ lastTerrain;          // +88 0x58   _GameMap_* map;             // +92 0x5C    _Def_* groundTileset[10];   // +96 0x60   _Def_* riverTileset[5];     // +136 0x88   _Def_* roadTileset[4];      // +156 0x9C   _Def_* borderTileset;       // +172 0xAC   _Def_* arrowTileset;        // +176 0xB0   _Def_* gemIcons[4];         // +180 0xB4   _Def_* starTileset;         // +196 0xC4   _Def_* radarIcons;          // +200 0xC8   _Def_* cloudIcons;          // +204 0xCC   _H3Vector_ CachedGraphics;  // +208 0xD0   _Def_* monAttackSprites;    // +224 0xE0   type_point mapOrigin;       // +228 0xE4   type_point lastMapHover;    // +232 0xE8   _int_ lastHoverX;           // +236 0xEC   _int_ lastHoverY;           // +240 0xF0   _int_ scrollX;              // +244 0xF4   _int_ scrollY;              // +248 0xF8   _int_ animFrame;            // +252 0xFC   _int_ animCtr;              // +256 0x100   _byte_ animCtrPaused;       // +260 0x104   _byte_ f_105[3];        // +261...263 выравнивание   _int_ flagFrame;            // +264 0x108   _Def_* cursorIcons[18];     // +268 0x10C   _Def_* boatIcons[3];        // +340 0x154   _Def_* boatFrothIcons[3];   // +352 0x160   _Def_* flagIcons[8];        // +364 0x16C   _Def_* boatFlagIcons[24];   // +396 0x18C   _byte_ heroVisible;         // +492 0x1EC   _byte_ f_1ED[3];        // +493...495 выравнивание   _int_ heroType;             // +496 0x1F0   _int_ heroDirection;        // +500 0x1F4   _int_ heroBaseFrame;        // +504 0x1F8   _int_ heroSequence;         // +508 0x1FC   _int_ heroFrameCount;       // +512 0x200   _int_ heroTurning;          // +516 0x204   _int_ heroDrawn;            // +520 0x208   _byte_ bCurHeroMobile;      // +524 0x20C   _byte_ f_20D[3];        // +525...527 выравнивание   _int_ iShowMode;            // +528 0x210   _int_ bForceCompleteDraw;   // +532 0x214   _int_ monAttackObjIndex;    // +536 0x218   _int_ monAttackSpriteIndex; // +540 0x21C   _int_ monAttackFlip;        // +544 0x220   _int_ touchedSounds;        // +548 0x224   _SoundNode_ soundArray[4];  // +552 0x228   _Wav_* loopedSample[70];    // +584 0x248   _Wav_* heroSamples[11];     // +864 0x360   _int_ bHeroLogoShowing;     // +908 0x38C   _byte_ bHeroMoving;         // +912 0x390   _byte_ f_391[3];        // +913...915 выравнивание   _int_ CurrentBottomView;    // +916 0x394 (enum EBottomViewType)   _int_ BottomViewOverride;   // +920 0x398 (enum EBottomViewType)   _int_ BottomViewOverrideEndTime;  // +924 0x39C   _int_ BottomViewResource;   // +928 0x3A0   _int_ BottomViewResourceQty;// +932 0x3A4   _H3Str_ BottomViewText;     // +936 0x3A8 (std::string)   // end: +952 0x3B8 };
  _SoundNode_ // Size = 8 {   _int_ soundId; // enum e_looping_sound_id   _int_ priority; }
  enum AdvManager::EBottomViewType {   BVTYPE_NONE             = 0,   BVTYPE_NEW_TURN         = 1,   BVTYPE_KINGDOM          = 2,   BVTYPE_HERO             = 3,   BVTYPE_TOWN             = 4,   BVTYPE_ENEMY_TURN       = 5,   BVTYPE_RESOURCE_MESSAGE = 6,   BVTYPE_MESSAGE          = 7,   BVTYPE_HOLD            = 8 } 
 
  
 
			 
			
			
  
game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
			
		 |