changeset 1906:768590235c2c

UpdateActorAI getting rid of unnecessary memcpys
author Grumpy7
date Sun, 20 Oct 2013 23:50:19 -0700
parents dd9d4b7c1199
children 1eb0515ff54b
files Actor.cpp CastSpellInfo.cpp Party.h
diffstat 3 files changed, 53 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/Actor.cpp	Sun Oct 20 23:12:09 2013 -0700
+++ b/Actor.cpp	Sun Oct 20 23:50:19 2013 -0700
@@ -2922,7 +2922,7 @@
 	int target_pid_type; // [sp+70h] [bp-40h]@83
 	signed int a1; // [sp+74h] [bp-3Ch]@129
 	int v78; // [sp+78h] [bp-38h]@79
-	AIDirection pDir; // [sp+7Ch] [bp-34h]@129
+	AIDirection* pDir; // [sp+7Ch] [bp-34h]@129
 	float v80; // [sp+98h] [bp-18h]@33
 	int v81; // [sp+9Ch] [bp-14h]@100
 	//int v82; // [sp+A0h] [bp-10h]@45
@@ -2955,11 +2955,11 @@
 				
 			pParty->uFlags |= 2u;
 			pParty->armageddon_timer -= pMiscTimer->uTimeElapsed;
-			v4 = pParty->field_16140 + 50;
+			v4 = pParty->armageddonDamage + 50;
 			if ( pParty->armageddon_timer <= 0 )
 			{
 				pParty->armageddon_timer = 0;
-				for(int i = 0; i < uNumActors; i++)
+				for(size_t i = 0; i < uNumActors; i++)
 				{
 					pActor=&pActors[i];
 					if ( pActor->CanAct() )
@@ -2984,7 +2984,7 @@
 				for(int i = 1; i <= 4; i++)
 				{
 					pPlayer = pPlayers[i];
-					if ( !pPlayer->pConditions[14] && !pPlayer->pConditions[15] && !pPlayer->pConditions[16] )
+					if ( !pPlayer->pConditions[Condition_Dead] && !pPlayer->pConditions[Condition_Pertified] && !pPlayer->pConditions[Condition_Eradicated] )
 						pPlayer->ReceiveDamage(v4, DMGT_5);
 				}
 			}
@@ -3127,14 +3127,14 @@
 					pActor->pActorBuffs[i].IsBuffExpiredToTime(pParty->uTimePlayed);
 				}
 			}
-			if ( (signed __int64)pActor->pActorBuffs[ACTOR_BUFF_SHRINK].uExpireTime < 0 )
+			if ( pActor->pActorBuffs[ACTOR_BUFF_SHRINK].uExpireTime < 0 )
 				pActor->uActorHeight = pMonsterList->pMonsters[pActor->pMonsterInfo.uID - 1].uMonsterHeight;
-			if ( (signed __int64)pActor->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime > 0 )
+			if ( pActor->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime > 0 )
 				pActor->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly;
 			// not sure
-			else if ( (signed __int64)pActor->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime < 0 )
+			else if ( pActor->pActorBuffs[ACTOR_BUFF_CHARM].uExpireTime < 0 )
 				pActor->pMonsterInfo.uHostilityType = pMonsterStats->pInfos[pActor->pMonsterInfo.uID].uHostilityType;
-			if ( (signed __int64)pActor->pActorBuffs[2].uExpireTime < 0 )
+			if ( pActor->pActorBuffs[2].uExpireTime < 0 )
 			{
 				pActor->uAIState = Removed;
 				continue;
@@ -3154,9 +3154,7 @@
 			if ( !(pActor->uAttributes & 0x8000) )
 				pActor->uAttributes |= 0x8000;
 			a1 = PID(OBJECT_Actor,actor_id);
-			v30 = Actor::GetDirectionInfo(PID(OBJECT_Actor,actor_id), target_pid, &a3, 0);
-			memcpy(&v75, v30, sizeof(v75));
-			memcpy(&pDir, &v75, sizeof(pDir));
+			pDir = Actor::GetDirectionInfo(PID(OBJECT_Actor,actor_id), target_pid, &a3, 0);
 			uAIState = pActor->uAIState; 
 			/*if ( v21->pMonsterInfo.uHostilityType != MonsterInfo::Hostility_Friendly
 				&& (signed int)v21->pMonsterInfo.uRecoveryTime <= 0
@@ -3170,7 +3168,7 @@
 			*/
 			if ( pActor->pMonsterInfo.uHostilityType == MonsterInfo::Hostility_Friendly
 				|| (signed int)pActor->pMonsterInfo.uRecoveryTime > 0
-				|| v80 * 307.2 < (double)(signed int)v75.uDistance
+				|| v80 * 307.2 < pDir->uDistance
 				|| uAIState != Pursuing && uAIState != Standing && uAIState != Tethered && uAIState != Fidgeting
 				&&  !pActor->pMonsterInfo.uMissleAttack1Type || uAIState != Stunned )
 			{
@@ -3194,33 +3192,33 @@
 				else if ( pActor->uAIState == AttackingRanged1 )
 				{
 					v34 = pActor->pMonsterInfo.uMissleAttack1Type;
-					Actor::AI_RangedAttack(actor_id, &pDir, v34, 0);
+					Actor::AI_RangedAttack(actor_id, pDir, v34, 0);
 				}
 				else if ( pActor->uAIState == AttackingRanged2 )
 				{
 					v34 = pActor->pMonsterInfo.uMissleAttack2Type;
-					Actor::AI_RangedAttack(actor_id, &pDir, v34, 1);
+					Actor::AI_RangedAttack(actor_id, pDir, v34, 1);
 				}
 				else if ( pActor->uAIState == AttackingRanged3 )
 				{
 					v65 = pActor->pMonsterInfo.uSpellSkillAndMastery1;
 					v33 = pActor->pMonsterInfo.uSpell1ID;
-					Actor::AI_SpellAttack(actor_id, &pDir, v33, 2, v65);
+					Actor::AI_SpellAttack(actor_id, pDir, v33, 2, v65);
 				}
 				else if ( pActor->uAIState == AttackingRanged4 )
 				{
 					v65 = pActor->pMonsterInfo.uSpellSkillAndMastery2;
 					v33 = pActor->pMonsterInfo.uSpell2ID;
-					Actor::AI_SpellAttack(actor_id, &pDir, v33, 3, v65);
+					Actor::AI_SpellAttack(actor_id, pDir, v33, 3, v65);
 				}
 			}
 
-			v36 = v75.uDistance;
+			v36 = pDir->uDistance;
 			if ( pActor->pMonsterInfo.uHostilityType == MonsterInfo::Hostility_Friendly)
 			{
 				if ( target_pid_type == OBJECT_Actor )
 				{
-					v36 = v75.uDistance;
+					v36 = pDir->uDistance;
 					//v37 = (unsigned __int8)*(&byte_5C8D1A[89 * (pActor->pMonsterInfo.uID - 1) / 3]
 					//	+ (pActors[PID_ID(target_pid)].pMonsterInfo.uID - 1) / 3);
                     v37 =pFactionTable->relations[(pActor->pMonsterInfo.uID-1) / 3 + 1][(pActors[PID_ID(target_pid)].pMonsterInfo.uID - 1) / 3 + 1];
@@ -3262,7 +3260,7 @@
 				{
 					//peasents after attacked
 					//guard after attacked
-					Actor::AI_Flee(actor_id, target_pid, 0, &pDir);
+					Actor::AI_Flee(actor_id, target_pid, 0, pDir);
 				}
 				continue;
 			}
@@ -3274,11 +3272,11 @@
 				{
 					if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 					{
-						Actor::AI_Stand(actor_id, target_pid, pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333,	&pDir);
+						Actor::AI_Stand(actor_id, target_pid, pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333,	pDir);
 					}
 					else
 					{
-						Actor::AI_Flee(actor_id, target_pid, 0, &pDir);
+						Actor::AI_Flee(actor_id, target_pid, 0, pDir);
 						continue;
 					}
 						
@@ -3295,7 +3293,7 @@
 						v42 = (double)(signed int)v84;
 						if ( v43 > v42 && (signed int)v36 < 10240 )
 						{
-							Actor::AI_Flee(actor_id, target_pid, 0, &pDir);
+							Actor::AI_Flee(actor_id, target_pid, 0, pDir);
 							continue;
 						}
 					}
@@ -3317,23 +3315,23 @@
 						{
 							if ( (signed int)pActor->pMonsterInfo.uRecoveryTime <= 0 )
 							{
-								Actor::AI_MissileAttack1(actor_id, target_pid, &pDir);
+								Actor::AI_MissileAttack1(actor_id, target_pid, pDir);
 							}
 							else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 							{
 								v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-								Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+								Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 							}
 							else
 							{
 								v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
 								if ( v80 * 307.2 > (double)v81 )
 								{
-									Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+									Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 								}
 								else
 								{
-									Actor::AI_Pursue1(actor_id, target_pid, actor_id, v47, &pDir);
+									Actor::AI_Pursue1(actor_id, target_pid, actor_id, v47, pDir);
 								}
 							}
 						}
@@ -3346,18 +3344,18 @@
 									if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 									{
 										v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-										Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+										Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 									}
 									else
 									{
 										//monsters
-										Actor::AI_Pursue3(actor_id, target_pid, 0, &pDir);
+										Actor::AI_Pursue3(actor_id, target_pid, 0, pDir);
 									}
 								}
 								else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 								{
 									v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-									Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+									Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 								}
 								else
 								{
@@ -3365,18 +3363,18 @@
 									//monsters
 									//guard after player runs away
 									// follow player
-									Actor::AI_Pursue2(actor_id, target_pid, 0, &pDir, v70);
+									Actor::AI_Pursue2(actor_id, target_pid, 0, pDir, v70);
 								}
 							}
 							else if ( (signed int)pActor->pMonsterInfo.uRecoveryTime > 0 )
 							{
 								v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-								Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+								Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 							}
 							else
 							{
 								//monsters
-								Actor::AI_MeleeAttack(actor_id, target_pid, &pDir);
+								Actor::AI_MeleeAttack(actor_id, target_pid, pDir);
 							}
 						}
 						continue;
@@ -3392,19 +3390,19 @@
 							if ( (signed int)pActor->pMonsterInfo.uRecoveryTime <= 0 )
 							{
 								if ( v45 == 2 )
-									Actor::AI_SpellAttack1(actor_id, target_pid, &pDir);
+									Actor::AI_SpellAttack1(actor_id, target_pid, pDir);
 								else
-									Actor::AI_SpellAttack2(actor_id, target_pid, &pDir);
+									Actor::AI_SpellAttack2(actor_id, target_pid, pDir);
 							}
 							else if ( v80 * 307.2 > (double)v81 || pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 							{
 								v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-								Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+								Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 							}
 							else
 							{
 								v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-								Actor::AI_Pursue1(actor_id, target_pid, actor_id, v47, &pDir);
+								Actor::AI_Pursue1(actor_id, target_pid, actor_id, v47, pDir);
 							}
 						}
 						else
@@ -3416,32 +3414,32 @@
 									if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 									{
 										v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-										Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+										Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 									}
 									else
 									{
-										Actor::AI_Pursue3(actor_id, target_pid, 256, &pDir);
+										Actor::AI_Pursue3(actor_id, target_pid, 256, pDir);
 									}
 								}
 								else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 								{
 									v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-									Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+									Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 								}
 								else
 								{
 									v70 = (signed __int64)v80 * 307.2;
-									Actor::AI_Pursue2(actor_id, target_pid, 0, &pDir, v70);
+									Actor::AI_Pursue2(actor_id, target_pid, 0, pDir, v70);
 								}
 							}
 							else if ( (signed int)pActor->pMonsterInfo.uRecoveryTime > 0 )
 							{
 								v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-								Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+								Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 							}
 							else
-							{
-								Actor::AI_MeleeAttack(actor_id, target_pid, &pDir);
+							{								
+							    Actor::AI_MeleeAttack(actor_id, target_pid, pDir);
 							}
 						}
 						continue;
@@ -3471,9 +3469,7 @@
 				{
 					v57 = Actor::GetDirectionInfo(a1, 4u, &v72, 0);
 					v58 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-					memcpy(&v74, v57, sizeof(v74));
-					memcpy(&pDir, &v74, sizeof(pDir));
-					Actor::AI_Stand(actor_id, 4, v58, &pDir);
+					Actor::AI_Stand(actor_id, 4, v58, pDir);
 				}				
 			}
 			else if ( !pActor->pMonsterInfo.uMissleAttack2Type )
@@ -3485,45 +3481,45 @@
 						if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 						{
 							v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-							Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+							Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 						}
 						else
 						{
-							Actor::AI_Pursue3(actor_id, target_pid, 256, &pDir);
+							Actor::AI_Pursue3(actor_id, target_pid, 256, pDir);
 						}
 					}
 					else if ( pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
 					{
 						v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-						Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+						Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 					}
 					else
 					{
 						v70 = (signed __int64)v80 * 307.2;
-						Actor::AI_Pursue2(actor_id, target_pid, 0, &pDir, v70);
+						Actor::AI_Pursue2(actor_id, target_pid, 0, pDir, v70);
 					}
 				}
 				else if ( (signed int)pActor->pMonsterInfo.uRecoveryTime > 0 )
 				{
 					v47 = pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
-					Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+					Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 				}
 				else
 				{
-					Actor::AI_MeleeAttack(actor_id, target_pid, &pDir);
+					Actor::AI_MeleeAttack(actor_id, target_pid, pDir);
 				}
 			}
 			else if ( (signed int)pActor->pMonsterInfo.uRecoveryTime > 0 )
 			{
 				v47 = (double)(signed int)pActor->pMonsterInfo.uRecoveryTime * 2.133333333333333;
 				if ( v80 * 307.2 > (double)v81 || pActor->pMonsterInfo.uMovementType == MONSTER_MOVEMENT_TYPE_STAIONARY )
-					Actor::AI_Stand(actor_id, target_pid, v47, &pDir);
+					Actor::AI_Stand(actor_id, target_pid, v47, pDir);
 				else
-					Actor::AI_Pursue1(actor_id, target_pid, actor_id, v47, &pDir);
+					Actor::AI_Pursue1(actor_id, target_pid, actor_id, v47, pDir);
 			}
 			else
 			{
-				Actor::AI_MissileAttack2(actor_id, target_pid, &pDir);
+				Actor::AI_MissileAttack2(actor_id, target_pid, pDir);
 			}		
 		}
 	}
--- a/CastSpellInfo.cpp	Sun Oct 20 23:12:09 2013 -0700
+++ b/CastSpellInfo.cpp	Sun Oct 20 23:50:19 2013 -0700
@@ -4011,7 +4011,7 @@
 			if ( !pPlayer->CanCastSpell(uRequiredMana) )
 				break;
 			pParty->armageddon_timer = 256;
-			pParty->field_16140 = v2;
+			pParty->armageddonDamage = v2;
 			++pPlayer->uNumArmageddonCasts;
 			if ( pParty->bTurnBasedModeOn == 1 )
 				++pTurnEngine->pending_actions;
--- a/Party.h	Sun Oct 20 23:12:09 2013 -0700
+++ b/Party.h	Sun Oct 20 23:50:19 2013 -0700
@@ -301,7 +301,7 @@
   char pHireling1Name[100];
   char pHireling2Name[100];
   int armageddon_timer;
-  int field_16140;
+  int armageddonDamage;
   std::array<int, 4> pTurnBasedPlayerRecoveryTimes;
   std::array<int, 53> InTheShopFlags;
   int uFine;