changeset 418:913675aac25b

Merge
author Nomad
date Sat, 23 Feb 2013 19:34:05 +0200
parents 55684f4eda73 (diff) 233f9cfc32a3 (current diff)
children ad1e9c0bf6da ee47cc585e1b
files lib/legacy_dx/lib/.svn/all-wcprops lib/legacy_dx/lib/.svn/entries lib/legacy_dx/lib/.svn/prop-base/d3dxof.lib.svn-base lib/legacy_dx/lib/.svn/prop-base/ddraw.lib.svn-base lib/legacy_dx/lib/.svn/prop-base/dinput.lib.svn-base lib/legacy_dx/lib/.svn/prop-base/dinput8.lib.svn-base lib/legacy_dx/lib/.svn/prop-base/dxguid.lib.svn-base lib/legacy_dx/lib/.svn/text-base/d3dxof.lib.svn-base lib/legacy_dx/lib/.svn/text-base/ddraw.lib.svn-base lib/legacy_dx/lib/.svn/text-base/dinput.lib.svn-base lib/legacy_dx/lib/.svn/text-base/dinput8.lib.svn-base lib/legacy_dx/lib/.svn/text-base/dxguid.lib.svn-base
diffstat 7 files changed, 111 insertions(+), 143 deletions(-) [+]
line wrap: on
line diff
--- a/Actor.cpp	Sat Feb 23 19:35:32 2013 +0400
+++ b/Actor.cpp	Sat Feb 23 19:34:05 2013 +0200
@@ -3055,42 +3055,19 @@
 //----- (00402F87) --------------------------------------------------------
 void Actor::AI_Bored(unsigned int uActorID, unsigned int uObjID, AIDirection *a4)
 {
-  //int v3; // edi@1
-  //AIDirection *v4; // esi@1
-  //Actor *v5; // ebx@1
-  //SpriteFrame *v6; // ecx@3
   unsigned int v7; // eax@3
-  //int v8; // edx@3
   unsigned int v9; // eax@3
-  //int result; // eax@4
-  AIDirection a3; // [sp+Ch] [bp-5Ch]@2
-  //AIDirection v12; // [sp+28h] [bp-40h]@2
-  //AIDirection v13; // [sp+44h] [bp-24h]@2
-  //unsigned int v14; // [sp+60h] [bp-8h]@1
-  //unsigned int v15; // [sp+64h] [bp-4h]@1
 
   assert(uActorID < uNumActors);
   auto actor = pActors + uActorID;
-
-  //v3 = uActorID;
-  //v4 = a4;
-  //v5 = &pActors[uActorID];
-  //v14 = uObjID;
-  //v15 = uActorID;
+  
+  AIDirection a3; // [sp+Ch] [bp-5Ch]@2
   if (!a4)
     a4 = Actor::GetDirectionInfo(8 * uActorID | OBJECT_Actor, uObjID, &a3, 0);
-  /*{
-    memcpy(&v13, Actor::GetDirectionInfo(8 * uActorID | OBJECT_Actor, uObjID, &a3, (int)a4), sizeof(v13));
-    memcpy(&v12, &v13, sizeof(v12));
-    v3 = v15;
-    v4 = &v12;
-  }*/
 
-  //v6 = pSpriteFrameTable->pSpriteSFrames;
   actor->uCurrentActionLength = 8 * pSpriteFrameTable->pSpriteSFrames[actor->pSpriteIDs[ANIM_Bored]].uAnimLength;
 
   v7 = stru_5C6E00->Atan2(actor->vPosition.x - pIndoorCamera->pos.x, actor->vPosition.y - pIndoorCamera->pos.y);
-  //LOWORD(v8) = actor->uYawAngle;
   v9 = stru_5C6E00->uIntegerPi + actor->uYawAngle + ((signed int)stru_5C6E00->uIntegerPi >> 3) - v7;
 
   if ( BYTE1(v9) & 7 )      // turned away - just stand
@@ -3572,146 +3549,137 @@
   v6->UpdateAnimation();
 }
 
-//----- (00401221) --------------------------------------------------------
-void Actor::_401221(unsigned int uActorID, int *a2, unsigned int a3)
+//----- (00SelectTarget) --------------------------------------------------------
+void Actor::_SelectTarget(unsigned int uActorID, int *a2, bool can_target_party)
 {
-  Actor *v3; // esi@1
-  unsigned int v4; // ebx@1
+  //Actor *v3; // esi@1
+  //unsigned int v4; // ebx@1
   int v5; // ecx@1
-  unsigned int v6; // eax@1
-  Actor *v7; // edi@2
-  __int16 v8; // ax@3
+  //unsigned int v6; // eax@1
+  //Actor *v7; // edi@2
+  //__int16 v8; // ax@3
   int v9; // eax@10
   signed int v10; // eax@13
   int v11; // ebx@16
   int v12; // eax@16
-  int v13; // eax@25
+  //int v13; // eax@25
   signed int v14; // eax@31
   int v15; // edi@43
   int v16; // ebx@45
   int v17; // eax@45
-  int v18; // eax@51
+  //int v18; // eax@51
   int v19; // [sp+Ch] [bp-24h]@16
-  int *v20; // [sp+10h] [bp-20h]@1
+  //int *v20; // [sp+10h] [bp-20h]@1
   signed int v21; // [sp+14h] [bp-1Ch]@1
-  unsigned int v22; // [sp+18h] [bp-18h]@1
+  //unsigned int v22; // [sp+18h] [bp-18h]@1
   int v23; // [sp+1Ch] [bp-14h]@16
-  unsigned int v24; // [sp+20h] [bp-10h]@1
+  //unsigned int v24; // [sp+20h] [bp-10h]@1
   int v25; // [sp+24h] [bp-Ch]@1
-  signed int v26; // [sp+28h] [bp-8h]@1
+  //signed int v26; // [sp+28h] [bp-8h]@1
   int v27; // [sp+2Ch] [bp-4h]@16
   int v28; // [sp+2Ch] [bp-4h]@45
 
   v25 = -1;
-  v22 = uActorID;
-  v3 = &pActors[uActorID];
-  v4 = 0;
+  //v22 = uActorID;
+  //v3 = &pActors[uActorID];
+  //v4 = 0;
   v5 = 0;
-  v6 = v3->uLastCharacterIDToHit;
+  //v6 = v3->uLastCharacterIDToHit;
   *a2 = 0;
-  v20 = a2;
+  //v20 = a2;
   v21 = 0;
-  v24 = v6;
-  v26 = 0;
-  if ( (signed int)uNumActors > 0 )
+  //v24 = v3->uLastCharacterIDToHit;
+  //v26 = 0;
+  assert(uActorID < uNumActors);
+  auto _this = pActors + uActorID;
+
+  for (uint i = 0; i < uNumActors; ++i)
   {
-	  v7 = pActors;
-	  do
-	  {
-		v8 = v7->uAIState;
-		if ( v7->uAIState == 5 || v8 == 4 || v8 == 11 || v8 == 17 || v8 == 19 || v22 == v5 )
+    auto actor = pActors + i;
+	  //v7 = pActors;
+	  //do
+	  //{
+		//v8 = v7->uAIState;
+    if (actor->uAIState == Dead || actor->uAIState == Dying ||
+        actor->uAIState == Removed || actor->uAIState == Summoned || actor->uAIState == Disabled || uActorID == i )
+      continue;
+
+		if (_this->uLastCharacterIDToHit == 0 || (v9 = 8 * v5, LOBYTE(v9) = 8 * v5 | 3, _this->uLastCharacterIDToHit != v9) )
 		{
-			++v7;
-			v5 = v26++ + 1;
+		  v10 = _this->GetActorsRelation(actor);
+		  if ( v10 == 0 )
 			continue;
 		}
-		if ( v24 == v4 || (v9 = 8 * v5, LOBYTE(v9) = 8 * v5 | 3, v24 != v9) )
+		else if (_this->IsNotAlive())
 		{
-		  v10 = v3->GetActorsRelation(v7);
-		  if ( v10 == v4 )
-		  {
-			++v7;
-			v5 = v26++ + 1;
+		  _this->uLastCharacterIDToHit = 0;
+		  v10 = _this->GetActorsRelation(actor);
+		  if ( v10 == 0 )
 			continue;
-		  }
-		}
-		else if (v7->IsNotAlive())
-		{
-		  v24 = v4;
-		  v3->uLastCharacterIDToHit = v4;
-		  v10 = v3->GetActorsRelation(v7);
-		  if ( v10 == v4 )
-		  {
-			++v7;
-			v5 = v26++ + 1;
-			continue;
-		  }
 		}
 		else
 		{
-			v18 = v7->uGroup;
-			if ( (v18 != v4 || v3->uGroup != v4) && v18 == v3->uGroup )
-			{
-				++v7;
-				v5 = v26++ + 1;
+			//v18 = actor->uGroup;
+			if ( (actor->uGroup != 0 || _this->uGroup != 0) && actor->uGroup == _this->uGroup )
 				continue;
-			}
 			v10 = 4;
 		}
-		if ( v3->pMonsterInfo.uHostilityType )
-		  v10 = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uHostilityType;
+		if ( _this->pMonsterInfo.uHostilityType )
+		  v10 = pMonsterStats->pInfos[_this->pMonsterInfo.uID].uHostilityType;
 		v11 = dword_4DF380[v10];
-		v23 = abs(v3->vPosition.x - v7->vPosition.x);
-		v27 = abs(v3->vPosition.y - v7->vPosition.y);
-		v12 = abs(v3->vPosition.z - v7->vPosition.z);
+		v23 = abs(_this->vPosition.x - actor->vPosition.x);
+		v27 = abs(_this->vPosition.y - actor->vPosition.y);
+		v12 = abs(_this->vPosition.z - actor->vPosition.z);
 		v19 = v12;
 		if ( v23 <= v11
 		  && v27 <= v11
 		  && v12 <= v11
-		  && sub_4070EF_prolly_collide_objects(8 * v26 | 3, 8 * v22 | 3)
+		  && sub_4070EF_prolly_collide_objects(8 * i | OBJECT_Actor, 8 * uActorID | OBJECT_Actor)
 		  && v23 * v23 + v27 * v27 + v19 * v19 < (unsigned int)v25 )
 		{
 		  v25 = v23 * v23 + v27 * v27 + v19 * v19;
-		  v21 = v26;
+		  v21 = i;
 		}
-		v4 = 0;
-		++v7;
-		v5 = v26++ + 1;
-	  }
-	  while ( v26 < (signed int)uNumActors );
-	  if ( v25 != -1 )
-	  {
-		v13 = 8 * v21;
-		LOBYTE(v13) = 8 * v21 | 3;
-		*v20 = v13;
-	  }
+		//v4 = 0;
+		//++v7;
+		//v5 = v26++ + 1;
+	  //}
+	  //while ( v26 < (signed int)uNumActors );
+
   }
-  if ( SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) >= (signed int)v4
-    && (SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) > (signed int)v4 || LODWORD(pParty->pPartyBuffs[11].uExpireTime) > v4) )
-    a3 = v4;
-  if ( a3 != v4 )
+  	  if ( v25 != -1 )
+	  {
+		//v13 = 8 * v21;
+		//LOBYTE(v13) = 8 * v21 | OBJECT_Actor;
+		*a2 = 8 * v21 | OBJECT_Actor;
+	  }
+
+  if (pParty->Invisible())
+    can_target_party = false;
+
+  if (can_target_party)
   {
-    v14 = v3->GetActorsRelation(0);
-    if ( BYTE2(v3->uAttributes) & 8
-      && SHIDWORD(v3->pActorBuffs[12].uExpireTime) <= (signed int)v4
-      && (SHIDWORD(v3->pActorBuffs[12].uExpireTime) < (signed int)v4 || LODWORD(v3->pActorBuffs[12].uExpireTime) <= v4)
-      && SHIDWORD(v3->pActorBuffs[1].uExpireTime) <= (signed int)v4
-      && (SHIDWORD(v3->pActorBuffs[1].uExpireTime) < (signed int)v4 || LODWORD(v3->pActorBuffs[1].uExpireTime) <= v4)
-      && SHIDWORD(v3->pActorBuffs[2].uExpireTime) <= (signed int)v4
-      && (SHIDWORD(v3->pActorBuffs[2].uExpireTime) < (signed int)v4 || LODWORD(v3->pActorBuffs[2].uExpireTime) <= v4) )
+    v14 = _this->GetActorsRelation(0);
+    if ( BYTE2(_this->uAttributes) & 8
+      && SHIDWORD(_this->pActorBuffs[12].uExpireTime) <= (signed int)0
+      && (SHIDWORD(_this->pActorBuffs[12].uExpireTime) < (signed int)0 || LODWORD(_this->pActorBuffs[12].uExpireTime) <= 0)
+      && SHIDWORD(_this->pActorBuffs[1].uExpireTime) <= (signed int)0
+      && (SHIDWORD(_this->pActorBuffs[1].uExpireTime) < (signed int)0 || LODWORD(_this->pActorBuffs[1].uExpireTime) <= 0)
+      && SHIDWORD(_this->pActorBuffs[2].uExpireTime) <= (signed int)0
+      && (SHIDWORD(_this->pActorBuffs[2].uExpireTime) < (signed int)0 || LODWORD(_this->pActorBuffs[2].uExpireTime) <= 0) )
       v14 = 4;
-    if ( v14 != v4 )
+    if ( v14 != 0 )
     {
       v15 = dword_4DF390;
-      if ( !v3->pMonsterInfo.uHostilityType )
+      if ( !_this->pMonsterInfo.uHostilityType )
         v15 = dword_4DF380[v14];
-      v16 = abs(v3->vPosition.x - pParty->vPosition.x);
-      v28 = abs(v3->vPosition.y - pParty->vPosition.y);
-      v17 = abs(v3->vPosition.z - pParty->vPosition.z);
+      v16 = abs(_this->vPosition.x - pParty->vPosition.x);
+      v28 = abs(_this->vPosition.y - pParty->vPosition.y);
+      v17 = abs(_this->vPosition.z - pParty->vPosition.z);
       if ( v16 <= v15 && v28 <= v15 && v17 <= v15 )
       {
         if ( v16 * v16 + v28 * v28 + v17 * v17 < (unsigned int)v25 )
-          *v20 = 4;
+          *a2 = OBJECT_Player;
       }
     }
   }
--- a/Actor.h	Sat Feb 23 19:35:32 2013 +0400
+++ b/Actor.h	Sat Feb 23 19:34:05 2013 +0200
@@ -201,7 +201,7 @@
   bool IsPeasant();
 
   
-  static void _401221(unsigned int uActorID, int *a2, unsigned int a3);
+  static void _SelectTarget(unsigned int uActorID, int *a2, bool can_target_party);
   static void _402686(unsigned int uActorID, unsigned int a2, signed int uActionLength, struct AIDirection *a4);
   static void _40281C(unsigned int uActorID, unsigned int a2, signed int uActionLength, struct AIDirection *pDir, int a5);
   static void _402968(unsigned int uActorID, signed int edx0, int uActionLength, struct AIDirection *a4);
@@ -265,7 +265,7 @@
   char field_B7;
   unsigned int uCurrentActionTime;
   unsigned __int16 pSpriteIDs[8];
-  unsigned __int16 pSoundSampleIDs[4];
+  unsigned __int16 pSoundSampleIDs[4]; // 1 die     3 bored
   struct SpellBuff pActorBuffs[22];
   struct ItemGen array_000234[4];
   unsigned int uGroup;
--- a/mm7_3.cpp	Sat Feb 23 19:35:32 2013 +0400
+++ b/mm7_3.cpp	Sat Feb 23 19:34:05 2013 +0200
@@ -17691,7 +17691,7 @@
   //unsigned int v17; // edx@67
   //unsigned int v18; // ecx@67
   //unsigned __int16 v19; // ax@72
-  int *v20; // esi@80
+  //int *v20; // esi@80
   Actor *v21; // ebx@80
   unsigned __int16 v22; // ax@86
   signed int v23; // eax@94
@@ -17848,7 +17848,7 @@
       //pActor = (Actor *)(LODWORD(v80) - 176);
       //v11 = *(unsigned int *)LODWORD(v80);
       //v49 = *(unsigned int *)LODWORD(v80) == 5;
-    dword_4F6E08[i] = 4;
+    ai_near_actors_targets_pid[i] = OBJECT_Player;
     if (actor->uAIState == Dead || actor->uAIState == Removed || actor->uAIState == Disabled || actor->uAttributes & 0x0400)
       continue;
 
@@ -17937,12 +17937,12 @@
       actor_id = ai_near_actors_ids[v78];
       assert(actor_id < uNumActors);
 
-      v20 = &dword_4F6E08[actor_id];
+      //v20 = &ai_near_actors_targets_pid[actor_id];
       v21 = &pActors[actor_id];
-      Actor::_401221(actor_id, &dword_4F6E08[actor_id], 1u);
-      if ( v21->pMonsterInfo.uHostilityType && !*v20 )
+      Actor::_SelectTarget(actor_id, &ai_near_actors_targets_pid[actor_id], true);
+      if (v21->pMonsterInfo.uHostilityType && !ai_near_actors_targets_pid[actor_id])
         v21->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly;
-      a2 = *v20;
+      a2 = ai_near_actors_targets_pid[actor_id];
       v76 = a2 & 7;
       if ( (a2 & 7) == OBJECT_Actor)
         v80 = 0.5;
@@ -18696,7 +18696,7 @@
           v7 = v6->uAttributes;
           if ( v7 & 0x8000 < 0 )
           {
-            v8 = dword_4F6E08[v5];
+            v8 = ai_near_actors_targets_pid[v5];
             LOBYTE(v7) = v7 | 0x80;
             v6->uAttributes = v7;
             v33 = 8 * v5 | OBJECT_Actor;
--- a/mm7_4.cpp	Sat Feb 23 19:35:32 2013 +0400
+++ b/mm7_4.cpp	Sat Feb 23 19:34:05 2013 +0200
@@ -14374,8 +14374,8 @@
             v4->uCurrentActionTime += pMiscTimer->uTimeElapsed;
             if ( (signed int)v4->uCurrentActionTime >= v5 )
             {
-              v17 = dword_4F6E08[v20];
-              v6 = Actor::GetDirectionInfo(8 * v20 | 3, v17, &a3, v2);
+              v17 = ai_near_actors_targets_pid[v20];
+              v6 = Actor::GetDirectionInfo(8 * v20 | OBJECT_Actor, v17, &a3, v2);
               v7 = v4->uAIState;
               memcpy(&v15, v6, sizeof(v15));
               v8 = v7 - 4;
--- a/mm7_5.cpp	Sat Feb 23 19:35:32 2013 +0400
+++ b/mm7_5.cpp	Sat Feb 23 19:34:05 2013 +0200
@@ -4749,7 +4749,7 @@
       v37 = v3;
       if ( stru_50FE08.field_3EC[v0] & 1 )
       {
-        v6 = dword_4F6E08[v3];
+        v6 = ai_near_actors_targets_pid[v3];
         v7 = v6 >> 3;
         v8 = (v6 & 7) - 3;
         uActorID = v7;
@@ -9721,7 +9721,7 @@
           if ( v6 != 8 )
             goto LABEL_19;
           v3 = 0;
-          Actor::AI_StandOrBored(v2->uPackedID >> 3, dword_4F6E08[v2->uPackedID >> 3], 32, 0);
+          Actor::AI_StandOrBored(v2->uPackedID >> 3, ai_near_actors_targets_pid[v2->uPackedID >> 3], 32, 0);
         }
       }
     }
@@ -9753,7 +9753,7 @@
           {
             if ( v11 != 17 )
             {
-              v12 = dword_4F6E08[v10];
+              v12 = ai_near_actors_targets_pid[v10];
               v9->uActionLength = v3;
               Actor::AI_StandOrBored(v10, v12, 32, (AIDirection *)v3);
             }
@@ -10044,8 +10044,8 @@
   if ( (v1->uPackedID & 7) != OBJECT_Player)
   {
     v4 = v3 >> 3;                               // turn based only stuff
-    a2a = dword_4F6E08[v3 >> 3];
-    memcpy(&a3, Actor::GetDirectionInfo(v1->uPackedID, dword_4F6E08[v3 >> 3], &a3, 0), sizeof(a3));
+    a2a = ai_near_actors_targets_pid[v3 >> 3];
+    memcpy(&a3, Actor::GetDirectionInfo(v1->uPackedID, ai_near_actors_targets_pid[v3 >> 3], &a3, 0), sizeof(a3));
     memcpy(&a4, &a3, sizeof(a4));
     v5 = &pActors[v3 >> 3];
     LOWORD(v3) = v5->uAIState;
@@ -10189,8 +10189,8 @@
     {
       if ( (short)v3 != 4 && (short)v3 != 11 && (short)v3 != 19 && (short)v3 != 17 )
       {
-        v6 = (unsigned int *)&dword_4F6E08[(int)v4];
-        Actor::_401221((unsigned int)v4, &dword_4F6E08[(int)v4], 1u);
+        v6 = (unsigned int *)&ai_near_actors_targets_pid[(int)v4];
+        Actor::_SelectTarget((unsigned int)v4, &ai_near_actors_targets_pid[(int)v4], true);
         if ( v5->pMonsterInfo.uHostilityType && !*v6 )
           v5->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly;
         v22 = *v6;
@@ -10340,7 +10340,7 @@
       v5 = v10->uPackedID;
       if ( (v10->uPackedID & 7) == OBJECT_Actor)
       {
-        v8 = dword_4F6E08[v5 >> 3];
+        v8 = ai_near_actors_targets_pid[v5 >> 3];
         memcpy(&v7, Actor::GetDirectionInfo(v5, v8, &a3, v2), sizeof(v7));
         if ( !v1->_406D10(a2) )
           Actor::AI_Stand(v10->uPackedID >> 3, v8, 0x20u, &v7);
@@ -10384,7 +10384,7 @@
         if ( pActors[v3].CanAct() )
         {
           v4 = v2->uPackedID;
-          v9 = dword_4F6E08[v3];
+          v9 = ai_near_actors_targets_pid[v3];
           memcpy(&v6, Actor::GetDirectionInfo(v4, v9, &a3, 0), sizeof(v6));
           Actor::AI_Stand(v8, v9, 0x20u, &v6);
           v2->field_C = 0;
@@ -10447,7 +10447,7 @@
           result = 1;
         if ( !(v13 | result | v6->uAIState == 5 | v6->uAIState == 11 | v6->uAIState == 19) )
         {
-          v13 = dword_4F6E08[v5];
+          v13 = ai_near_actors_targets_pid[v5];
           memcpy(&v9, Actor::GetDirectionInfo(a1, v13, &a3, 0), sizeof(v9));
           v7 = v6->uAIState;
           if ( v7 == 6 || v7 == 1 )
@@ -10524,12 +10524,12 @@
   v5 = v4->uAIState;
   if ( v5 == 5 || v5 == 4 || v5 == 11 || v5 == 19 || v5 == 17 )
     return 1;
-  v6 = &dword_4F6E08[v3];
+  v6 = &ai_near_actors_targets_pid[v3];
   v7 = &pTurnEngine->pQueue[a2];
   v8 = *v6;
   v29 = &pTurnEngine->pQueue[a2];
   a2a = v8;
-  Actor::_401221(v3, &dword_4F6E08[v3], 1u);
+  Actor::_SelectTarget(v3, &ai_near_actors_targets_pid[v3], true);
   if ( v4->pMonsterInfo.uHostilityType && !*v6 )
     v4->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly;
   v9 = Actor::GetDirectionInfo(v7->uPackedID, a2a, &a3, 0);
@@ -10724,10 +10724,10 @@
             {
               if ( v6 != 17 )
               {
-                v7 = (unsigned int *)&dword_4F6E08[v4];
+                v7 = (unsigned int *)&ai_near_actors_targets_pid[v4];
                 a2 = *v7;
                 v8 = a2;
-                Actor::_401221(v4, (int *)v7, 1u);
+                Actor::_SelectTarget(v4, (int *)v7, true);
                 memcpy(&v11, Actor::GetDirectionInfo(*(int *)((char *)&v3->uPackedID + v18), v8, &a3, 0), sizeof(v11));
                 memcpy(&a4, &v11, sizeof(a4));
                 v5->uCurrentActionTime += pMiscTimer->uTimeElapsed;
@@ -12099,7 +12099,7 @@
   if (_449B57_test_bit(pParty->_award_bits, 100))
     v5 = 1;
 
-  Log::Warning(L"%S %S %u", __FILE__, __FUNCTION__, __LINE__); // dword_4F6E08[i] for AI_Stand seems always 0;  original code behaviour is identical
+  Log::Warning(L"%S %S %u", __FILE__, __FUNCTION__, __LINE__); // ai_near_actors_targets_pid[i] for AI_Stand seems always 0;  original code behaviour is identical
   for (uint i = 0; i < uNumActors; ++i)
   {
     auto actor = pActors + i;
@@ -12112,7 +12112,7 @@
       actor->sCurrentHP = actor->pMonsterInfo.uHP;
       if (actor->uAIState != Disabled)
       {
-        Actor::AI_Stand(i, dword_4F6E08[i], actor->pMonsterInfo.uRecoveryTime, 0);
+        Actor::AI_Stand(i, ai_near_actors_targets_pid[i], actor->pMonsterInfo.uRecoveryTime, 0);
       }
     }
 
--- a/mm7_data.cpp	Sat Feb 23 19:35:32 2013 +0400
+++ b/mm7_data.cpp	Sat Feb 23 19:34:05 2013 +0200
@@ -1711,7 +1711,7 @@
 int dword_4F5D98_xs[777]; // idb
 int ai_array_4F5E68[500];
 int ai_array_4F6638_actor_ids[500];
-int dword_4F6E08[500];
+int ai_near_actors_targets_pid[500];
 int ai_arrays_size; // weak
 int ai_near_actors_distances[500];
 unsigned int ai_near_actors_ids[500];
--- a/mm7_data.h	Sat Feb 23 19:35:32 2013 +0400
+++ b/mm7_data.h	Sat Feb 23 19:34:05 2013 +0200
@@ -1071,7 +1071,7 @@
 extern int dword_4F5D98_xs[]; // idb
 extern int ai_array_4F5E68[500];
 extern int ai_array_4F6638_actor_ids[500];
-extern int dword_4F6E08[500];
+extern int ai_near_actors_targets_pid[500];
 extern int ai_arrays_size; // weak
 extern int ai_near_actors_distances[500];
 extern unsigned int ai_near_actors_ids[500];