diff DecalBuilder.cpp @ 1119:aa706cde7fda

* dark spells working * found aoe apply buff function * round() moved * some global variable fixes * DecalBuilder::ApplyDecals_OutdoorFace() clean
author zipi
date Wed, 29 May 2013 22:51:00 +0100
parents 39eaa6b00141
children 45a8862d8b6e
line wrap: on
line diff
--- a/DecalBuilder.cpp	Wed May 29 20:12:22 2013 +0100
+++ b/DecalBuilder.cpp	Wed May 29 22:51:00 2013 +0100
@@ -487,66 +487,38 @@
 //----- (0049BCEB) --------------------------------------------------------
 char DecalBuilder::ApplyDecals_OutdoorFace(ODMFace *pFace)
 {
-  int v2; // edi@1
-  unsigned int v3; // eax@2
-  char *v4; // edx@5
-  double v5; // ST1C_8@12
-  double v6; // ST14_8@12
-  double v7; // ST0C_8@12
-  double v8; // st7@12
-  unsigned int v10; // [sp+20h] [bp-1Ch]@1
+	double v8; // st7@12
+	unsigned int v10; // [sp+20h] [bp-1Ch]@1
+
+	Bloodsplat *pBloodsplat;
 
-  v2 = 0;
-  this->uNumDecals = 0;
-  v10 = pBloodsplatContainer->std__vector_pBloodsplats_size;
-  if ( pBloodsplatContainer->std__vector_pBloodsplats_size )
-  {
-    v3 = pFace->uAttributes;
-    if ( !(v3 & 0x400000) )
-    {
-      if ( !(v3 & 0x10) && (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 )
-      {
-        v4 = (char *)&pBloodsplatContainer->std__vector_pBloodsplats[0].y;
-        do
-        {
-          if ( (double)pFace->pBoundingBox.x1 - *((float *)v4 + 2) < *((float *)v4 - 1) )
-          {
-            if ( (double)pFace->pBoundingBox.x2 + *((float *)v4 + 2) > *((float *)v4 - 1) )
-            {
-              if ( (double)pFace->pBoundingBox.y1 - *((float *)v4 + 2) < *(float *)v4 )
-              {
-                if ( (double)pFace->pBoundingBox.y2 + *((float *)v4 + 2) > *(float *)v4 )
-                {
-                  if ( (double)pFace->pBoundingBox.z1 - *((float *)v4 + 2) < *((float *)v4 + 1) )
-                  {
-                    if ( (double)pFace->pBoundingBox.z2 + *((float *)v4 + 2) > *((float *)v4 + 1) )
-                    {
-                      v5 = *((float *)v4 - 1) + 6.7553994e15;
-                      v6 = *(float *)v4 + 6.7553994e15;
-                      v7 = *((float *)v4 + 1) + 6.7553994e15;
-                      v8 = (double)((pFace->pFacePlane.dist
-                                   + LODWORD(v5) * pFace->pFacePlane.vNormal.x
-                                   + LODWORD(v6) * pFace->pFacePlane.vNormal.y
-                                   + LODWORD(v7) * pFace->pFacePlane.vNormal.z) >> 16);
-                      if ( v8 <= *((float *)v4 + 2) )
-                      {
-                        *((float *)v4 + 3) = v8;
-                        this->std__vector_30B00C[this->uNumDecals++] = v2;
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-          ++v2;
-          v4 += 40;
-        }
-        while ( v2 < (signed int)v10 );
-      }
-    }
-  }
-  return 1;
+	this->uNumDecals = 0;
+	v10 = pBloodsplatContainer->std__vector_pBloodsplats_size;
+	if ( !(pFace->uAttributes & 0x400000) && !(pFace->uAttributes & 0x10) )
+	{
+		for(int i = 0; i < pBloodsplatContainer->std__vector_pBloodsplats_size; i++ )
+		{
+			pBloodsplat = &pBloodsplatContainer->std__vector_pBloodsplats[i];
+			if ( (double)pFace->pBoundingBox.x1 - pBloodsplat->radius < pBloodsplat->x &&
+				(double)pFace->pBoundingBox.x2 + pBloodsplat->radius > pBloodsplat->x &&
+				(double)pFace->pBoundingBox.y1 - pBloodsplat->radius < pBloodsplat->y &&
+				(double)pFace->pBoundingBox.y2 + pBloodsplat->radius > pBloodsplat->y &&
+				(double)pFace->pBoundingBox.z1 - pBloodsplat->radius < pBloodsplat->z &&
+				(double)pFace->pBoundingBox.z2 + pBloodsplat->radius > pBloodsplat->z )
+			{
+				v8 = (double)((pFace->pFacePlane.dist
+							+ round(pBloodsplat->x) * pFace->pFacePlane.vNormal.x
+							+ round(pBloodsplat->y) * pFace->pFacePlane.vNormal.y
+							+ round(pBloodsplat->z) * pFace->pFacePlane.vNormal.z) >> 16);
+				if ( v8 <= pBloodsplat->radius )
+				{
+					pBloodsplat->dot_dist = v8;
+					this->std__vector_30B00C[this->uNumDecals++] = i;
+				}
+			}
+		}
+	}
+	return 1;
 }
 
 //----- (0049BE8A) --------------------------------------------------------