diff mm7_5.cpp @ 828:0f56abdcce94

Massive refactors of spells + PID (packed id) macros introduced.
author Nomad
date Wed, 27 Mar 2013 00:27:38 +0200
parents fe4c8b113548
children dfd683c4f538
line wrap: on
line diff
--- a/mm7_5.cpp	Tue Mar 26 20:06:51 2013 +0200
+++ b/mm7_5.cpp	Wed Mar 27 00:27:38 2013 +0200
@@ -5680,44 +5680,32 @@
 //----- (0043A97E) --------------------------------------------------------
 void __fastcall sub_43A97E(unsigned int uLayingItemID, signed int a2)
 {
-  unsigned int v2; // esi@1
-  unsigned int v3; // ebx@1
-  int v4; // edi@1
-  int v5; // edx@1
-  unsigned int v6; // [sp+10h] [bp-4h]@1
-
-  v6 = uLayingItemID;
-  v2 = uLayingItemID;
-  v3 = a2 >> 3;
-  v4 = pSpriteObjects[uLayingItemID].spell_caster_pid & 7;
-  v5 = (a2 & 7) - 3;
-  if ( v5 )
-  {
-    if ( v5 == 1 )
-    {
-      layingitem_vel_50FDFC.x = pSpriteObjects[v2].vVelocity.x;
-      layingitem_vel_50FDFC.y = pSpriteObjects[v2].vVelocity.y;
-      layingitem_vel_50FDFC.z = pSpriteObjects[v2].vVelocity.z;
-      Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z);
-      DamagePlayerFromMonster(8 * v6 | 2, pSpriteObjects[v2].field_61, &layingitem_vel_50FDFC, 0xFFFFFFFFu);
-    }
-  }
-  else
-  {
-    layingitem_vel_50FDFC.x = pSpriteObjects[v2].vVelocity.x;
-    layingitem_vel_50FDFC.y = pSpriteObjects[v2].vVelocity.y;
-    layingitem_vel_50FDFC.z = pSpriteObjects[v2].vVelocity.z;
+  if ( PID_TYPE(a2) == OBJECT_BLVDoor)
+  {
+    layingitem_vel_50FDFC.x = pSpriteObjects[uLayingItemID].vVelocity.x;
+    layingitem_vel_50FDFC.y = pSpriteObjects[uLayingItemID].vVelocity.y;
+    layingitem_vel_50FDFC.z = pSpriteObjects[uLayingItemID].vVelocity.z;
+
     Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z);
-    switch ( v4 )
+    DamagePlayerFromMonster(PID(OBJECT_Item, uLayingItemID), pSpriteObjects[uLayingItemID].field_61, &layingitem_vel_50FDFC, 0xFFFFFFFFu);
+  }
+  else if (PID_TYPE(a2) == OBJECT_Actor)
+  {
+    layingitem_vel_50FDFC.x = pSpriteObjects[uLayingItemID].vVelocity.x;
+    layingitem_vel_50FDFC.y = pSpriteObjects[uLayingItemID].vVelocity.y;
+    layingitem_vel_50FDFC.z = pSpriteObjects[uLayingItemID].vVelocity.z;
+
+    Vec3_int_::Normalize(&layingitem_vel_50FDFC.x, &layingitem_vel_50FDFC.y, &layingitem_vel_50FDFC.z);
+    switch (PID_TYPE(pSpriteObjects[uLayingItemID].spell_caster_pid))
     {
       case OBJECT_Actor:
-        sub_43B1B0(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC, pSpriteObjects[v2].field_61);
+        sub_43B1B0(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC, pSpriteObjects[uLayingItemID].field_61);
         break;
       case OBJECT_Player:
-        DamageMonsterFromParty(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC);
+        DamageMonsterFromParty(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC);
         break;
       case OBJECT_Item:
-        sub_43B057(8 * v6 | AI_OBJECT_LAYING_ITEM, v3, &layingitem_vel_50FDFC);
+        sub_43B057(PID(OBJECT_Item, uLayingItemID), PID_ID(a2), &layingitem_vel_50FDFC);
         break;
     }
   }
@@ -6894,8 +6882,8 @@
   _404544();
   v2 = v1->pQueue;
   v3 = 0;
-  if ( (v1->pQueue[0].uPackedID & 7) == OBJECT_Player)
-    uActiveCharacter = (v1->pQueue[0].uPackedID >> 3) + 1;
+  if (PID_TYPE(v1->pQueue[0].uPackedID) == OBJECT_Player)
+    uActiveCharacter = PID_ID(v1->pQueue[0].uPackedID) + 1;
   else
     uActiveCharacter = 0;
   viewparams->bRedrawGameUI = 1;
@@ -6913,9 +6901,9 @@
     goto LABEL_27;
   do
   {
-    if ( (v2->uPackedID & 7) != OBJECT_Player)
-    {
-      v5 = &pActors[v2->uPackedID >> 3];
+    if (PID_TYPE(v2->uPackedID) != OBJECT_Player)
+    {
+      v5 = &pActors[PID_ID(v2->uPackedID)];
       LOWORD(v6) = v5->uAIState;
       if ( (short)v6 == 4
         || (short)v6 == 8
@@ -6971,9 +6959,9 @@
     v9 = v1->pQueue;
     do
     {
-      if ( (v9->uPackedID & 7) != OBJECT_Player)
-      {
-        v10 = v9->uPackedID >> 3;
+      if (PID_TYPE(v9->uPackedID) != OBJECT_Player)
+      {
+        v10 = PID_ID(v9->uPackedID);
         v11 = pActors[v10].uAIState;
         if ( v11 != 5 )
         {
@@ -7023,7 +7011,7 @@
   v4 = v1->pQueue[0].field_4;
   if ( v4 )
   {
-    if ( (v1->pQueue[0].uPackedID & 7) == OBJECT_Player)
+    if (PID_TYPE(v1->pQueue[0].uPackedID) == OBJECT_Player)
     {
       v5 = v1->uActorQueueSize;
       while ( 1 )
@@ -7122,8 +7110,8 @@
   }
   v2->pQueue[a2].field_4 = v6;
   v2->_404544();
-  if ( (v2->pQueue[0].uPackedID & 7) == OBJECT_Player)
-    uActiveCharacter = (v2->pQueue[0].uPackedID >> 3) + 1;
+  if (PID_TYPE(v2->pQueue[0].uPackedID) == OBJECT_Player)
+    uActiveCharacter = PID_ID(v2->pQueue[0].uPackedID) + 1;
   else
     uActiveCharacter = 0;
   result = (int)&v2->pQueue[0].field_4;
@@ -7201,7 +7189,7 @@
   v1 = this;
   LOWORD(v2) = _404544();
   if ( v1->pQueue[0].field_4 <= 0
-    || ((_4063A1(), v2 = v1->pQueue[0].uPackedID, (v1->pQueue[0].uPackedID & 7) != OBJECT_Player) ? (uActiveCharacter = 0) : (v2 = (v2 >> 3) + 1, uActiveCharacter = v2),
+    || ((_4063A1(), v2 = v1->pQueue[0].uPackedID, PID_TYPE(v1->pQueue[0].uPackedID) != OBJECT_Player) ? (uActiveCharacter = 0) : (v2 = (v2 >> 3) + 1, uActiveCharacter = v2),
         viewparams->bRedrawGameUI = 1,
         v1->pQueue[0].field_4 <= 0) )
   {
@@ -7269,13 +7257,13 @@
   v1 = (TurnBased_QueueElem *)((char *)this + 16 * (a2 + 2));
   v28 = v1;
   v3 = v1->uPackedID;
-  if ( (v1->uPackedID & 7) != OBJECT_Player)
-  {
-    v4 = v3 >> 3;                               // turn based only stuff
-    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));
+  if (PID_TYPE(v1->uPackedID) != OBJECT_Player)
+  {
+    v4 = PID_ID(v3);
+    a2a = ai_near_actors_targets_pid[PID_ID(v3)];
+    memcpy(&a3, Actor::GetDirectionInfo(v1->uPackedID, ai_near_actors_targets_pid[PID_ID(v3)], &a3, 0), sizeof(a3));
     memcpy(&a4, &a3, sizeof(a4));
-    v5 = &pActors[v3 >> 3];
+    v5 = &pActors[PID_ID(v3 >> 3)];
     LOWORD(v3) = v5->uAIState;
     if ( (short)v3 != Dead )
     {
@@ -7433,11 +7421,8 @@
           v9 = 0;
           v20 = 0;
         }
-        if ( (v22 & 7) == OBJECT_Actor)
-          v10 = (unsigned __int8)*(&byte_5C8D1A[89
-                                              * (pMonsterStats->pInfos[pActors[v22 >> 3].pMonsterInfo.uID].uID - 1)
-                                              / 3]
-                                 + (v5->pMonsterInfo.uID - 1) / 3);
+        if (PID_TYPE(v22) == OBJECT_Actor)
+          v10 = (unsigned __int8)*(&byte_5C8D1A[89 * (pMonsterStats->pInfos[pActors[v22 >> 3].pMonsterInfo.uID].uID - 1) / 3] + (v5->pMonsterInfo.uID - 1) / 3);
         else
           v10 = 4;
         if ( v10 == 1 )
@@ -7566,9 +7551,9 @@
     while ( 1 )
     {
       v5 = v10->uPackedID;
-      if ( (v10->uPackedID & 7) == OBJECT_Actor)
-      {
-        v8 = ai_near_actors_targets_pid[v5 >> 3];
+      if (PID_TYPE(v10->uPackedID) == OBJECT_Actor)
+      {
+        v8 = ai_near_actors_targets_pid[PID_ID(v5)];
         memcpy(&v7, Actor::GetDirectionInfo(v5, v8, &a3, v2), sizeof(v7));
         if ( !v1->_406D10(a2) )
           Actor::AI_Stand(v10->uPackedID >> 3, v8, 0x20u, &v7);
@@ -7605,9 +7590,9 @@
     v2 = this->pQueue;
     do
     {
-      if ( (v2->uPackedID & 7) == OBJECT_Actor)
-      {
-        v3 = v2->uPackedID >> 3;
+      if (PID_TYPE(v2->uPackedID) == OBJECT_Actor)
+      {
+        v3 = PID_ID(v2->uPackedID);
         v8 = v3;
         if ( pActors[v3].CanAct() )
         {
@@ -7660,7 +7645,7 @@
     {
       v4 = v14->uPackedID;
       a1 = v14->uPackedID;
-      if ( (a1 & 7) != OBJECT_Player)
+      if (PID_TYPE(a1) != OBJECT_Player)
       {
         v5 = v4 >> 3;
         v12 = v5;
@@ -7743,10 +7728,11 @@
   unsigned int uActorID; // [sp+50h] [bp-4h]@2
   unsigned int a2a; // [sp+5Ch] [bp+8h]@7
 
+  __debugbreak();
   v2 = *(&this->field_0 + 4 * (a2 + 2));
-  if ( (v2 & 7) == OBJECT_Player)
+  if (PID_TYPE(v2) == OBJECT_Player)
     return 0;
-  v3 = v2 >> 3;
+  v3 = PID_ID(v2);
   uActorID = v3;
   v4 = &pActors[v3];
   v5 = v4->uAIState;
@@ -7938,9 +7924,9 @@
     v14 = this->pQueue;
     do
     {
-      if ( (v3->uPackedID & 7) != OBJECT_Player)
-      {
-        v4 = v3->uPackedID >> 3;
+      if (PID_TYPE(v3->uPackedID) != OBJECT_Player)
+      {
+        v4 = PID_ID(v3->uPackedID);
         uActorID = v4;
         v5 = &pActors[v4];
         v6 = v5->uAIState;
@@ -11620,9 +11606,9 @@
   else
     v5 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]];
   v6 = (unsigned __int16)v5;
-  if ( (v5 & 7) == OBJECT_Actor
+  if (PID_TYPE(v5) == OBJECT_Actor
     && uActiveCharacter
-    && v5 < 33554432
+    && v5 < 0x2000000
     && pPlayers[uActiveCharacter]->CanAct()
     && pPlayers[uActiveCharacter]->CanSteal() )
   {
@@ -11633,7 +11619,7 @@
       *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
       ++pMessageQueue_50CBD0->uNumMessages;
     }*/
-    pMessageQueue_50CBD0->AddMessage(UIMSG_1B, v6 >> 3, 0);
+    pMessageQueue_50CBD0->AddMessage(UIMSG_1B, PID_ID(v6), 0);
 
     if ( pParty->bTurnBasedModeOn == 1 )
     {