| 
 
				Посмотрел, DrawAction_Play вызывается и для любого удара, и для стрельбы. 
Удар (Enemy_Gex_Around_Stack - номер атакуемого гекса вокруг стека - т. е. 0-6 (0-8), с учётом того, что гексы, окружающие стек, пронумерованы по определённому принципу):
 PHP Code:
 char __thiscall A0_Battle_Stack_MakeHit_sub_441330(_BattleStack_ *this, _BattleStack_ *Enemy, int Enemy_Gex_Around_Stack){
 int Enemy_Gex_Around_Stack_v3; // ebx@1
 _BattleStack_ *this_v4; // esi@1
 char v5; // al@6
 char v6; // zf@6
 int v7; // edx@7
 int v8; // edi@9
 int v9; // edx@10
 signed int SomeGexNum_v10; // eax@14
 signed int EnemyGex_Num_v11; // eax@14
 _BattleStack_ *GexStack_v12; // eax@16
 int v13; // ebx@20
 int v14; // edi@20
 _BattleMgr_ *BattleMgr_v15; // ebx@23
 int v16; // eax@24
 signed int *v17; // ebx@25
 int v18; // eax@29
 unsigned int v19; // edx@31
 _BattleStack_ *v20; // ebx@32
 _BattleStack_ *Enemy_v21; // edi@32
 int v22; // ecx@33
 int v23; // edi@33
 int v24; // ebx@37
 int v25; // edi@37
 signed int v26; // eax@41
 _BattleStack_ *Enemy_v27; // eax@44
 int Damage_v28; // eax@45
 int v29; // eax@49
 int v30; // eax@50
 void *v31; // eax@59
 void *v32; // eax@66
 void *v33; // eax@72
 int v34; // eax@82
 char *Attacker_Name_v35; // eax@85
 int Attacker_type_v36; // eax@89
 char result; // al@100
 int Attacker_count_v38; // [sp-10h] [bp-40h]@88
 int v39; // [sp-Ch] [bp-3Ch]@3
 int Damage_v40; // [sp-Ch] [bp-3Ch]@88
 int Type_v41; // [sp-8h] [bp-38h]@3
 _BattleStack_ *Enemy_v42; // [sp-8h] [bp-38h]@88
 int Dead_v43; // [sp-4h] [bp-34h]@88
 signed int a5; // [sp+Ch] [bp-24h]@9
 int v45; // [sp+10h] [bp-20h]@25
 int v46; // [sp+14h] [bp-1Ch]@31
 _BattleStack_ *Enemy_v47; // [sp+18h] [bp-18h]@31
 int v48; // [sp+1Ch] [bp-14h]@5
 signed int a3; // [sp+20h] [bp-10h]@31
 int Num; // [sp+24h] [bp-Ch]@31
 _BattleStack_ *DragonBreathAttackedStack_v51; // [sp+28h] [bp-8h]@1
 char v52; // [sp+2Fh] [bp-1h]@6
 
 this_v4 = this;
 DragonBreathAttackedStack_v51 = 0;
 A0_Battle_ClearStacksWereHitted_sub_465BC0(A0_BattleMgr_dword_699420);
 Enemy_Gex_Around_Stack_v3 = Enemy_Gex_Around_Stack;
 if ( (this_v4->Creature_29dword74.Flags_dword10 >> 19) & 1 )// Атакует всех врагов вокруг
 {
 if ( this_v4->Spells_Lengths_adword198[59] )// Берсерк
 {
 Type_v41 = 2;
 v39 = this_v4->GexNum_dword38;
 }
 else
 {
 Type_v41 = 1;
 v39 = this_v4->GexNum_dword38;
 }
 v48 = sub_524010(this_v4, v39, Type_v41, -1);
 if ( this_v4->CreatureType_dword34 == 47 )  // Цербер
 {
 v5 = this_v4->Creature_29dword74.Flags_dword10 & 1;
 v6 = (this_v4->Creature_29dword74.Flags_dword10 & 1) == 0;
 v52 = this_v4->Creature_29dword74.Flags_dword10 & 1;
 if ( v6 )
 {
 v7 = (Enemy_Gex_Around_Stack_v3 + 5) % 6;
 v5 = v52;
 }
 else
 {
 v7 = dword_660898[(dword_660878[Enemy_Gex_Around_Stack_v3] + 7) % 8];
 }
 a5 = 1;
 v8 = ~(1 << v7) & (unsigned __int8)~(unsigned __int8)(1 << Enemy_Gex_Around_Stack_v3);
 if ( v5 )
 v9 = dword_660898[(dword_660878[Enemy_Gex_Around_Stack_v3] + 1) % 8];
 else
 v9 = (Enemy_Gex_Around_Stack_v3 + 1) % 6;
 v48 |= v8 & ~(1 << v9);
 }
 }
 else
 {
 Enemy->IsTarget_OfNonRoundHit_byteF0 = 1;
 if ( (this_v4->Creature_29dword74.Flags_dword10 >> 3) & 1 )// Атакующий стек обладает драконьим дыханием
 {
 EnemyGex_Num_v11 = A0_Battle_Stack_Get_AroungGexNum_sub_5242E0(
 this_v4,
 this_v4->GexNum_dword38,
 Enemy_Gex_Around_Stack_v3);
 SomeGexNum_v10 = sub_524280(this_v4, EnemyGex_Num_v11, Enemy_Gex_Around_Stack_v3);
 if ( SomeGexNum_v10 >= 0 )
 {
 if ( SomeGexNum_v10 < 187 )
 {
 GexStack_v12 = A0_Battle_get_StackByGex_sub_4E7230((int)&A0_BattleMgr_dword_699420->hex[SomeGexNum_v10]);
 DragonBreathAttackedStack_v51 = GexStack_v12;
 if ( GexStack_v12 )
 {
 if ( GexStack_v12->IsTarget_OfNonRoundHit_byteF0 )
 DragonBreathAttackedStack_v51 = 0;
 else
 GexStack_v12->IsTarget_OfNonRoundHit_byteF0 = 1;
 }
 }
 }
 }
 }
 A0_Battle_ClearRedrawNeeds_sub_493290(A0_BattleMgr_dword_699420);
 v14 = this_v4->Owner_dwordF4;
 v13 = this_v4->StackNum_dwordF8;
 if ( A0_BattleMgr_dword_699420->stack[0][v13 + 14 * v14 + 7 * v14].CreatureType_dword34 == 149 )// Стрелковая башня
 A0_Battle_SetArrowTowerRedraw_sub_46A040(
 A0_BattleMgr_dword_699420,
 (_BattleStack_ *)A0_BattleMgr_dword_699420->stack + v13 + 14 * v14 + 7 * v14);
 else
 *(&A0_BattleMgr_dword_699420->field_0[4 * (5 * v14 + 20480)] + v13) = 1;
 this_v4->CurrAttack_Is_Lucky_dword70 = 0;
 BattleMgr_v15 = A0_BattleMgr_dword_699420;
 if ( A0_BattleMgr_dword_699420->hero[A0_Battle_Stack_Get_Controller_sub_43FE60(this_v4)] )
 {
 v16 = this_v4->Luck_dword4EC;
 if ( v16 > 0 )
 {
 v45 = this_v4->Luck_dword4EC;
 a5 = 3;
 v17 = &a5;
 if ( v16 <= 3 )
 v17 = &v45;
 if ( A0_Rand_Int_sub_50C7C0(1, 24) <= *v17 )
 {
 this_v4->CurrAttack_Is_Lucky_dword70 = 1;
 if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
 {
 A0_StartAndPlaySample_Parallel_sub_59A890("goodluck.82m", -1, 3);
 v18 = (int)A0_Get_CreatureName_by_Type_adn_Count_sub_43FE20(
 this_v4->CreatureType_dword34,
 this_v4->Count_dword4C);
 sprintf((int)A0_TempText_unk_697428, *(char **)(*((_DWORD *)off_6A5DC4 + 8) + 184), v18);
 A0_Battle_MessageToLog_sub_4729D0(A0_BattleMgr_dword_699420->dlg, A0_TempText_unk_697428, 1, 0);
 A0_Battle_Play_Std_BattleAnimation_sub_4963C0(A0_BattleMgr_dword_699420, 18, this_v4, 100, 0);
 }
 }
 BattleMgr_v15 = A0_BattleMgr_dword_699420;
 }
 }
 v19 = this_v4->Creature_29dword74.Flags_dword10;
 a3 = 0;
 Num = 0;
 v45 = 0;
 v46 = 0;
 Enemy_v47 = 0;
 a5 = 0;
 if ( (v19 >> 19) & 1 )
 {
 A0_Battle_Stack_RoundHit_MakeDamage_sub_440030(this_v4, v48, &a3, &Num, (int)&Enemy_v47);
 Enemy_v21 = Enemy;
 v20 = DragonBreathAttackedStack_v51;
 }
 else
 {
 v23 = Enemy->Owner_dwordF4;
 v22 = Enemy->StackNum_dwordF8;
 if ( BattleMgr_v15->stack[0][v22 + 14 * v23 + 7 * v23].CreatureType_dword34 == 149 )
 A0_Battle_SetArrowTowerRedraw_sub_46A040(
 BattleMgr_v15,
 (_BattleStack_ *)BattleMgr_v15->stack + v22 + 14 * v23 + 7 * v23);
 else
 *(&BattleMgr_v15->field_0[4 * (5 * v23 + 20480)] + v22) = 1;
 if ( DragonBreathAttackedStack_v51 )
 {
 v25 = DragonBreathAttackedStack_v51->Owner_dwordF4;
 v24 = DragonBreathAttackedStack_v51->StackNum_dwordF8;
 if ( A0_BattleMgr_dword_699420->stack[0][v24 + 14 * v25 + 7 * v25].CreatureType_dword34 == 149 )
 A0_Battle_SetArrowTowerRedraw_sub_46A040(
 A0_BattleMgr_dword_699420,
 (_BattleStack_ *)A0_BattleMgr_dword_699420->stack + v24 + 14 * v25 + 7 * v25);
 else
 *(&A0_BattleMgr_dword_699420->field_0[4 * (5 * v25 + 20480)] + v24) = 1;
 }
 Enemy_v21 = Enemy;
 if ( (Enemy->Creature_29dword74.Flags_dword10 >> 23) & 1 )
 v26 = 1;
 else
 v26 = Enemy->Count_dword4C * Enemy->Creature_29dword74.Health_dword4C - Enemy->HealthLoses_dword58;
 a5 = v26;
 Enemy = 0;
 if ( Enemy_v21 )
 {
 Damage_v28 = A0_Battle_Stack_CalcDamage_sub_442E80((int)this_v4, 0);
 a3 = A0_Battle_Stack_CalcDamageModifs_sub_443C60(
 this_v4,
 Enemy_v21,
 Damage_v28,
 0,
 0,
 this_v4->GexesWay_Length_dword490,
 (int *)&Enemy);
 Num = A0_Battle_Stack_MakeDamage_sub_443DB0(Enemy_v21, a3);
 Enemy_v27 = Enemy;
 this_v4->CurrAttack_Is_Lucky_dword70 = 0;
 }
 else
 {
 Enemy_v27 = 0;
 }
 Enemy_v47 = Enemy_v27;
 if ( (signed int)Enemy_v27 > 0 )
 Enemy_v21->CurrHit_WasDamagedByFireshield_byteE8 = 1;
 v20 = DragonBreathAttackedStack_v51;
 if ( DragonBreathAttackedStack_v51 )
 {
 Enemy = 0;
 v29 = A0_Battle_Stack_CalcDamage_sub_442E80((int)this_v4, 0);
 v45 = A0_Battle_Stack_CalcDamageModifs_sub_443C60(
 this_v4,
 v20,
 v29,
 0,
 0,
 this_v4->GexesWay_Length_dword490,
 (int *)&Enemy);
 v46 = A0_Battle_Stack_MakeDamage_sub_443DB0(v20, v45);
 this_v4->CurrAttack_Is_Lucky_dword70 = 0;
 }
 }
 A0_Battle_Set_RedrawBorders_sub_495770((int)A0_BattleMgr_dword_699420);
 v30 = this_v4->CreatureType_dword34;
 this_v4->CurrDrawAct_IsAttacker_byte0 = 1;
 if ( v30 == 110 || v30 == 111 || A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )// Гидра, гидра хаоса.
 goto LABEL_78;
 if ( Enemy_Gex_Around_Stack != 6 && Enemy_Gex_Around_Stack != 5 && Enemy_Gex_Around_Stack )
 {
 if ( Enemy_Gex_Around_Stack != 1 && Enemy_Gex_Around_Stack != 4 )
 {
 if ( v20 && (v31 = this_v4->Def_dword164, *((_DWORD *)v31 + 10) > 19) && *(_DWORD *)(*((_DWORD *)v31 + 11) + 76) )
 {
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 19;
 }
 else
 {
 if ( this_v4->CreatureType_dword34 == 146 )// Баллиста.
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 16;
 else
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 13;
 }
 goto LABEL_79;
 }
 if ( v20 )
 {
 v32 = this_v4->Def_dword164;
 if ( *((_DWORD *)v32 + 10) > 18 )
 {
 if ( *(_DWORD *)(*((_DWORD *)v32 + 11) + 72) )
 {
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 18;
 goto LABEL_79;
 }
 }
 }
 if ( this_v4->CreatureType_dword34 == 146 ) // Баллиста.
 {
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 15;
 goto LABEL_79;
 }
 LABEL_78:
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 12;
 goto LABEL_79;
 }
 if ( v20 && (v33 = this_v4->Def_dword164, *((_DWORD *)v33 + 10) > 17) && *(_DWORD *)(*((_DWORD *)v33 + 11) + 68) )
 {
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 17;
 }
 else
 {
 if ( this_v4->CreatureType_dword34 == 146 ) // Баллиста.
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 14;
 else
 this_v4->CurrDrawAct_AttackAnimFrameSection_byte2 = 11;
 }
 LABEL_79:
 Enemy->CurrDrawAct_AnimFrameSection_byte3 = A0_Battle_Stack_After_Hit_Spells_sub_440220(this_v4, Enemy_v21);// Глюк, это другая переменная
 A0_Battle_DrawAction_Play_sub_468570(A0_BattleMgr_dword_699420, -1, 0);
 if ( !((this_v4->Creature_29dword74.Flags_dword10 >> 19) & 1) )// Атакует всех вогруг
 {
 if ( v20 && v20->CreatureType_dword34 != Enemy_v21->CreatureType_dword34 )
 {
 v34 = this_v4->CreatureType_dword34;
 if ( v34 < 0 || v34 > 150 )
 {
 Attacker_Name_v35 = A0_Empty_dword_691260;
 }
 else
 {
 if ( this_v4->Count_dword4C == 1 )
 Attacker_Name_v35 = (*Main_MonsersTable_off_6747B0)[v34].NameSingle_dword14;
 else
 Attacker_Name_v35 = (*Main_MonsersTable_off_6747B0)[v34].NameMulti_dword18;
 }
 Dead_v43 = Num + v46;
 Enemy_v42 = 0;
 Damage_v40 = a3 + v45;
 Attacker_count_v38 = this_v4->Count_dword4C;
 }
 else
 {
 Attacker_type_v36 = this_v4->CreatureType_dword34;
 if ( Attacker_type_v36 < 0 || Attacker_type_v36 > 150 )
 {
 Attacker_Name_v35 = A0_Empty_dword_691260;
 }
 else
 {
 if ( this_v4->Count_dword4C == 1 )
 Attacker_Name_v35 = (*Main_MonsersTable_off_6747B0)[Attacker_type_v36].NameSingle_dword14;
 else
 Attacker_Name_v35 = (*Main_MonsersTable_off_6747B0)[Attacker_type_v36].NameMulti_dword18;
 }
 Dead_v43 = Num;
 Enemy_v42 = Enemy_v21;
 Damage_v40 = a3;
 Attacker_count_v38 = this_v4->Count_dword4C;
 }
 A0_Battle_Attacking_Log_Message_sub_469670(
 (int)A0_BattleMgr_dword_699420,
 (char)Attacker_Name_v35,
 Attacker_count_v38,
 Damage_v40,
 Enemy_v42,
 Dead_v43);
 }
 A0_Battle_After_Attack_Abilities_sub_4408E0(this_v4, Enemy_v21, a3, Num, a5);
 if ( (signed int)Enemy_v47 > 0 )
 A0_Battle_Stack_GetFireshieldDamage_sub_4406E0(this_v4, Enemy_v47);
 if ( !Enemy_v21->CurrHit_IsBlinded_byte4C0 || (result = 1, Enemy_v21->BlindSpell_Modif_dword49C != 0.0) )
 result = Enemy->CurrDrawAct_AnimFrameSection_byte3;// Глюк, это другая переменная
 return result;
 }
 
Выстрел:
 PHP Code:
 void __thiscall A0_Battle_Stack_MakeShot_sub_43F620(_BattleStack_ *this, int Enemy){
 int v2; // ebx@1
 _BattleStack_ *this_v3; // esi@1
 int v4; // eax@2
 int *v5; // edi@3
 int v6; // eax@7
 _Hero_ *Hero_v7; // ecx@8
 _BattleStack_ *Enemy_v8; // edi@8
 int CreatureType_v9; // eax@11
 int v10; // ecx@14
 int v11; // ebx@14
 int v12; // edi@16
 int v13; // ecx@16
 int v14; // eax@19
 signed int v15; // edi@24
 int v16; // eax@26
 int v17; // ecx@28
 char v18; // al@30
 char *v19; // eax@31
 _BattleStack_ *Stack_v20; // edi@31
 int v21; // ebx@31
 int v22; // ebx@37
 int v23; // eax@37
 _BattleStack_ *v24; // ecx@44
 int v25; // eax@46
 char *v26; // eax@49
 int v27; // ebx@56
 int v28; // eax@56
 int v29; // eax@58
 char *v30; // eax@61
 int v31; // esi@66
 int v32; // ebx@68
 int v33; // ecx@70
 int v34; // ebx@70
 int v35; // edi@72
 int v36; // ecx@72
 int v37; // eax@75
 int v38; // eax@82
 int v39; // ecx@84
 char v40; // al@86
 int v41; // ebx@87
 _BattleStack_ *v42; // edi@87
 char *v43; // eax@89
 int v44; // eax@91
 unsigned __int8 v45; // sf@96
 unsigned __int8 v46; // of@96
 int v47; // eax@100
 char *v48; // eax@103
 int v49; // [sp+Ch] [bp-20h]@37
 int v50; // [sp+10h] [bp-1Ch]@37
 int v51; // [sp+14h] [bp-18h]@31
 int v52; // [sp+18h] [bp-14h]@3
 int v53; // [sp+1Ch] [bp-10h]@3
 int v54; // [sp+20h] [bp-Ch]@24
 _BattleStack_ *v55; // [sp+24h] [bp-8h]@24
 _BattleStack_ *v56; // [sp+28h] [bp-4h]@24
 
 this_v3 = this;
 v2 = 0;
 this->CurrAttack_Is_Lucky_dword70 = 0;
 if ( A0_BattleMgr_dword_699420->hero[A0_Battle_Stack_Get_Controller_sub_43FE60(this)] )
 {
 v4 = this_v3->Luck_dword4EC;
 if ( v4 > 0 )
 {
 v53 = this_v3->Luck_dword4EC;
 v52 = 3;
 v5 = &v52;
 if ( v4 <= 3 )
 v5 = &v53;
 if ( A0_Rand_Int_sub_50C7C0(1, 24) <= *v5 )
 {
 this_v3->CurrAttack_Is_Lucky_dword70 = 1;
 if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
 {
 A0_StartAndPlaySample_Parallel_sub_59A890("goodluck.82m", -1, 3);
 v6 = (int)A0_Get_CreatureName_by_Type_adn_Count_sub_43FE20(
 this_v3->CreatureType_dword34,
 this_v3->Count_dword4C);
 sprintf((int)A0_TempText_unk_697428, *(char **)(*((_DWORD *)off_6A5DC4 + 8) + 184), v6);
 A0_Battle_MessageToLog_sub_4729D0(A0_BattleMgr_dword_699420->dlg, A0_TempText_unk_697428, 1, 0);
 A0_Battle_Play_Std_BattleAnimation_sub_4963C0(A0_BattleMgr_dword_699420, 18, this_v3, 100, 0);
 }
 }
 }
 }
 Enemy_v8 = (_BattleStack_ *)Enemy;
 A0_Battle_Stack_DrawShot_Bullet_sub_43EFE0(this_v3, (_BattleStack_ *)Enemy);
 Hero_v7 = A0_BattleMgr_dword_699420->hero[this_v3->Owner_dwordF4];
 if ( !Hero_v7 || !A0_Hero_Check_Has_Artifact_Weared_sub_4D9460(Hero_v7, 5) )// Повода с боеприпасами
 --this_v3->Creature_29dword74.Ammo_dword64;
 CreatureType_v9 = this_v3->CreatureType_dword34;
 if ( CreatureType_v9 == 45 )                  // Магог
 {
 v52 = off_687FA8[716];
 if ( v52 != -1 )
 {
 if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
 {
 A0_StartAndPlaySample_Parallel_sub_59A890((char *)off_687FA8[715], -1, 3);
 v11 = A0_Load_Def_sub_55C9C0(A0_BattleAnims_off_641E18[3 * v52]);
 Enemy = (int)((char *)A0_BattleMgr_dword_699420 + 112 * Enemy_v8->GexNum_dword38);
 v10 = *(_WORD *)(Enemy + 452);
 if ( Enemy_v8->Creature_29dword74.Flags_dword10 & 1 )
 v10 += (Enemy_v8->Orientation_dword44 != 0 ? 0x2C : 0) - 22;
 v53 = v10 - *(_DWORD *)(v11 + 48) / 2;
 v13 = *(_WORD *)(Enemy + 454) - Enemy_v8->CreatureImageHeight_dword16C / 2 - *(_DWORD *)(v11 + 52) / 2;
 v12 = 0;
 Enemy = v13;
 while ( 1 )
 {
 v14 = *(_DWORD *)(v11 + 40) > 0 && **(_DWORD **)(v11 + 44) ? ***(_DWORD ***)(v11 + 28) : 0;
 if ( v12 >= v14 )
 break;
 A0_Battle_Draw_sub_493FC0((int)A0_BattleMgr_dword_699420, 0, 0, 0, 50, 1, 1);
 A0_Battle_DrawOrSetBorders_TranparentDef_sub_494F30(
 (int)A0_BattleMgr_dword_699420,
 v11,
 v12,
 v53,
 Enemy,
 0,
 0);
 A0_FlipBattle_sub_493300((int)A0_BattleMgr_dword_699420);
 ++v12;
 }
 A0_Battle_Draw_sub_493FC0((int)A0_BattleMgr_dword_699420, 1, 0, 0, 0, 1, 0);
 (*(void (__thiscall **)(int))(*(_DWORD *)v11 + 4))(v11);
 v2 = 0;
 }
 }
 A0_Battle_Clear_Stacks_Redraw_Needs_sub_5A69C0(A0_BattleMgr_dword_699420);
 v15 = 0;
 v53 = v2;
 v55 = (_BattleStack_ *)v2;
 v56 = (_BattleStack_ *)v2;
 BYTE3(Enemy) = 0;
 v54 = 0;
 do
 {
 if ( v15 == 6 )
 v16 = this_v3->Attacked_Or_MoveTarget_Gex_Num_dword1C;
 else
 v16 = sub_524370(this_v3->Attacked_Or_MoveTarget_Gex_Num_dword1C, v15);
 v17 = (int)&A0_BattleMgr_dword_699420->hex[v16];
 if ( v16 >= 0 )
 {
 if ( v16 < 187 )
 {
 v18 = A0_BattleMgr_dword_699420->hex[v16].bstack_side;
 if ( v18 >= 0 )
 {
 v51 = *(_BYTE *)(v17 + 25);
 v21 = v18;
 Stack_v20 = A0_Battle_get_StackByGex_sub_4E7230(v17);
 v19 = &A0_BattleMgr_dword_699420->field_53D4[20 * v21 + 168] + v51;
 if ( !*v19 )
 {
 *v19 = 1;
 if ( v56 )
 {
 if ( v56->CreatureType_dword34 != Stack_v20->CreatureType_dword34 )
 BYTE3(Enemy) = 1;
 }
 else
 {
 v56 = Stack_v20;
 }
 v51 = 0;
 if ( Stack_v20 )
 {
 v23 = A0_Battle_Stack_CalcDamage_sub_442E80((int)this_v3, 0);
 v22 = A0_Battle_Stack_CalcDamageModifs_sub_443C60(
 this_v3,
 Stack_v20,
 v23,
 1,
 0,
 this_v3->GexesWay_Length_dword490,
 &v51);
 v50 = v22;
 v49 = A0_Battle_Stack_MakeDamage_sub_443DB0(Stack_v20, v22);
 this_v3->CurrAttack_Is_Lucky_dword70 = 0;
 }
 else
 {
 v22 = v50;
 }
 v55 = (_BattleStack_ *)((char *)v55 + v22);
 v53 += v49;
 }
 v15 = v54;
 }
 }
 }
 ++v15;
 v54 = v15;
 }
 while ( v15 < 7 );
 if ( (signed int)v55 > 0 )
 {
 if ( BYTE3(Enemy) )
 v24 = 0;
 else
 v24 = v56;
 v25 = this_v3->CreatureType_dword34;
 if ( v25 < 0 || v25 > 150 )
 {
 v26 = A0_Empty_dword_691260;
 }
 else
 {
 if ( this_v3->Count_dword4C == 1 )
 v26 = (*Main_MonsersTable_off_6747B0)[v25].NameSingle_dword14;
 else
 v26 = (*Main_MonsersTable_off_6747B0)[v25].NameMulti_dword18;
 }
 A0_Battle_Attacking_Log_Message_sub_469670(
 (int)A0_BattleMgr_dword_699420,
 (char)v26,
 this_v3->Count_dword4C,
 (int)v55,
 v24,
 v53);
 A0_Battle_DrawAction_Play_sub_468570(A0_BattleMgr_dword_699420, v52, 1);
 }
 }
 else
 {
 if ( CreatureType_v9 == 64 || CreatureType_v9 == 65 )// Лич, могущественный лич
 {
 v32 = off_687FA8[2586];
 if ( v32 != -1 )
 {
 if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
 {
 A0_StartAndPlaySample_Parallel_sub_59A890((char *)off_687FA8[2585], -1, 3);
 v34 = A0_Load_Def_sub_55C9C0(A0_BattleAnims_off_641E18[3 * v32]);
 Enemy = (int)((char *)A0_BattleMgr_dword_699420 + 112 * Enemy_v8->GexNum_dword38);
 v33 = *(_WORD *)(Enemy + 452);
 if ( Enemy_v8->Creature_29dword74.Flags_dword10 & 1 )
 v33 += (Enemy_v8->Orientation_dword44 != 0 ? 0x2C : 0) - 22;
 v49 = v33 - *(_DWORD *)(v34 + 48) / 2;
 v36 = *(_WORD *)(Enemy + 454) - Enemy_v8->CreatureImageHeight_dword16C / 2 - *(_DWORD *)(v34 + 52) / 2;
 v35 = 0;
 Enemy = v36;
 while ( 1 )
 {
 v37 = *(_DWORD *)(v34 + 40) > 0 && **(_DWORD **)(v34 + 44) ? ***(_DWORD ***)(v34 + 28) : 0;
 if ( v35 >= v37 )
 break;
 A0_Battle_Draw_sub_493FC0((int)A0_BattleMgr_dword_699420, 0, 0, 0, 100, 1, 1);
 A0_Battle_DrawOrSetBorders_TranparentDef_sub_494F30(
 (int)A0_BattleMgr_dword_699420,
 v34,
 v35,
 v49,
 Enemy,
 0,
 0);
 A0_FlipBattle_sub_493300((int)A0_BattleMgr_dword_699420);
 ++v35;
 }
 A0_Battle_Draw_sub_493FC0((int)A0_BattleMgr_dword_699420, 1, 0, 0, 0, 1, 0);
 (*(void (__thiscall **)(int))(*(_DWORD *)v34 + 4))(v34);
 }
 }
 A0_Battle_Clear_Stacks_Redraw_Needs_sub_5A69C0(A0_BattleMgr_dword_699420);
 v53 = 0;
 v54 = 0;
 v55 = 0;
 BYTE3(Enemy) = 0;
 v56 = 0;
 do
 {
 if ( v56 == (_BattleStack_ *)6 )
 v38 = this_v3->Attacked_Or_MoveTarget_Gex_Num_dword1C;
 else
 v38 = sub_524370(this_v3->Attacked_Or_MoveTarget_Gex_Num_dword1C, v56);
 v39 = (int)&A0_BattleMgr_dword_699420->hex[v38];
 if ( v38 >= 0 )
 {
 if ( v38 < 187 )
 {
 v40 = A0_BattleMgr_dword_699420->hex[v38].bstack_side;
 if ( v40 >= 0 )
 {
 v49 = *(_BYTE *)(v39 + 25);
 v41 = v40;
 v42 = A0_Battle_get_StackByGex_sub_4E7230(v39);
 if ( v56 == (_BattleStack_ *)6 || (v42->Creature_29dword74.Flags_dword10 >> 4) & 1 )
 {
 v43 = &A0_BattleMgr_dword_699420->field_53D4[20 * v41 + 168] + v49;
 if ( !*v43 )
 {
 *v43 = 1;
 v49 = 0;
 if ( v42 )
 {
 v44 = A0_Battle_Stack_CalcDamage_sub_442E80((int)this_v3, 0);
 v50 = A0_Battle_Stack_CalcDamageModifs_sub_443C60(
 this_v3,
 v42,
 v44,
 1,
 0,
 this_v3->GexesWay_Length_dword490,
 &v49);
 v51 = A0_Battle_Stack_MakeDamage_sub_443DB0(v42, v50);
 this_v3->CurrAttack_Is_Lucky_dword70 = 0;
 }
 v54 += v50;
 v53 += v51;
 if ( v55 )
 {
 if ( v55->CreatureType_dword34 != v42->CreatureType_dword34 )
 BYTE3(Enemy) = 1;
 }
 else
 {
 v55 = v42;
 }
 }
 }
 }
 }
 }
 v46 = __SETO__(&v56->CurrDrawAct_IsShooter_byte1, 7);
 v45 = (signed int)((char *)v56 - 6) < 0;
 v56 = (_BattleStack_ *)((char *)v56 + 1);
 }
 while ( v45 ^ v46 );
 if ( v54 > 0 )
 {
 if ( BYTE3(Enemy) )
 v55 = 0;
 v47 = this_v3->CreatureType_dword34;
 if ( v47 < 0 || v47 > 150 )
 {
 v48 = A0_Empty_dword_691260;
 }
 else
 {
 if ( this_v3->Count_dword4C == 1 )
 v48 = (*Main_MonsersTable_off_6747B0)[v47].NameSingle_dword14;
 else
 v48 = (*Main_MonsersTable_off_6747B0)[v47].NameMulti_dword18;
 }
 A0_Battle_Attacking_Log_Message_sub_469670(
 (int)A0_BattleMgr_dword_699420,
 (char)v48,
 this_v3->Count_dword4C,
 v54,
 v55,
 v53);
 A0_Battle_DrawAction_Play_sub_468570(A0_BattleMgr_dword_699420, -1, 1);
 }
 }
 else
 {
 Enemy = 0;
 if ( Enemy_v8 )
 {
 v28 = A0_Battle_Stack_CalcDamage_sub_442E80((int)this_v3, 0);
 v27 = A0_Battle_Stack_CalcDamageModifs_sub_443C60(
 this_v3,
 Enemy_v8,
 v28,
 1,
 0,
 this_v3->GexesWay_Length_dword490,
 &Enemy);
 Enemy = A0_Battle_Stack_MakeDamage_sub_443DB0(Enemy_v8, v27);
 this_v3->CurrAttack_Is_Lucky_dword70 = 0;
 }
 else
 {
 v27 = Enemy;
 }
 A0_Battle_DrawAction_Play_sub_468570(A0_BattleMgr_dword_699420, -1, 0);
 v29 = this_v3->CreatureType_dword34;
 if ( v29 < 0 || v29 > 150 )
 {
 v30 = A0_Empty_dword_691260;
 }
 else
 {
 if ( this_v3->Count_dword4C == 1 )
 v30 = (*Main_MonsersTable_off_6747B0)[v29].NameSingle_dword14;
 else
 v30 = (*Main_MonsersTable_off_6747B0)[v29].NameMulti_dword18;
 }
 A0_Battle_Attacking_Log_Message_sub_469670(
 (int)A0_BattleMgr_dword_699420,
 (char)v30,
 this_v3->Count_dword4C,
 v27,
 Enemy_v8,
 Enemy);
 if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
 {
 if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
 {
 v31 = (int)this_v3->Shot_Sound_dword17C;
 if ( v31 )
 A0_Wait_Sample_sub_59A1C0((void *)A0_SoundMgr_dword_699414, *(_DWORD *)(v31 + 28), -1);
 }
 }
 }
 }
 }
 
Тут всё далеко не так хорошо описано, но код здесь и без этого можно понять, благо ссылки на структуры без смещений.
			
				
(This post was last modified: 17.06.2012 21:54 by Sav.)
 |