diff mm7_1.cpp @ 50:fde5c5acb66e

BLV render
author Nomad
date Tue, 23 Oct 2012 23:38:05 +0200
parents 8a8dd0164b12
children 4211cceb3813
line wrap: on
line diff
--- a/mm7_1.cpp	Tue Oct 23 13:51:21 2012 +0200
+++ b/mm7_1.cpp	Tue Oct 23 23:38:05 2012 +0200
@@ -6394,13 +6394,13 @@
 {
   BLVFace *v1; // ebx@1
   Vec3_short_ *v2; // esi@1
-  int v3; // ST28_4@1
+  //int v3; // ST28_4@1
   __int16 v4; // ST2C_2@1
-  signed int v5; // esi@1
-  Vec3_short_ *v6; // eax@4
-  signed int v7; // edi@5
-  signed int v8; // eax@5
-  signed int i_; // ecx@10
+  //signed int v5; // esi@1
+  //Vec3_short_ *v6; // eax@4
+  //signed int v7; // edi@5
+  //signed int v8; // eax@5
+  //signed int i_; // ecx@10
   int v10; // eax@10
   int v11; // edx@11
   int v12; // ST28_4@12
@@ -6417,64 +6417,65 @@
   int v23; // edi@21
   int v24; // eax@21
   int v25; // eax@22
-  signed int v26; // ST30_4@24
-  signed __int64 v27; // qtt@24
-  int v28; // ST18_4@25
-  int v29; // eax@26
-  int v30; // eax@27
-  signed int v31; // ST30_4@29
-  signed __int64 v32; // qtt@29
-  int v33; // ST30_4@30
-  signed int v34; // edi@31
-  unsigned int v35; // eax@31
-  bool v36; // edx@31
-  int v37; // ecx@31
-  int v38; // ecx@32
-  int v39; // esi@32
-  int v40; // eax@34
-  signed int v41; // ebx@41
-  unsigned int v42; // eax@41
-  signed int v43; // ecx@42
-  int v44; // esi@42
-  int v45; // eax@44
-  signed int v46; // edi@51
-  unsigned int v47; // eax@51
-  bool v48; // edx@51
-  int v49; // ecx@51
-  int v50; // ecx@52
-  signed int v51; // esi@52
-  int v52; // eax@54
-  int v53; // ebx@61
-  unsigned int v54; // eax@61
-  signed int v55; // ecx@62
-  int v56; // esi@62
-  int v57; // eax@64
-  char v59; // zf@72
-  signed int v60; // edx@75
-  int v61; // ecx@76
-  int v62; // esi@76
-  int v63; // ecx@83
-  signed int v64; // [sp+14h] [bp-14h]@3
-  int v65; // [sp+14h] [bp-14h]@34
-  int v66; // [sp+14h] [bp-14h]@44
-  int v67; // [sp+14h] [bp-14h]@54
-  int v68; // [sp+14h] [bp-14h]@64
-  signed int v69; // [sp+14h] [bp-14h]@75
-  IndoorCameraD3D *_this; // [sp+18h] [bp-10h]@1
+  int v26; // eax@22
+  signed int v27; // ST30_4@24
+  signed __int64 v28; // qtt@24
+  int v29; // ST18_4@25
+  int v30; // eax@26
+  int v31; // eax@27
+  int v32; // eax@27
+  signed int v33; // ST30_4@29
+  signed __int64 v34; // qtt@29
+  int v35; // ST30_4@30
+  signed int v36; // edi@31
+  unsigned int v37; // eax@31
+  bool v38; // edx@31
+  int v39; // ecx@31
+  int v40; // ecx@32
+  int v41; // esi@32
+  int v42; // eax@34
+  signed int v43; // ebx@41
+  unsigned int v44; // eax@41
+  signed int v45; // ecx@42
+  int v46; // esi@42
+  int v47; // eax@44
+  signed int v48; // edi@51
+  unsigned int v49; // eax@51
+  bool v50; // edx@51
+  int v51; // ecx@51
+  int v52; // ecx@52
+  signed int v53; // esi@52
+  int v54; // eax@54
+  int v55; // ebx@61
+  unsigned int v56; // eax@61
+  signed int v57; // ecx@62
+  int v58; // esi@62
+  int v59; // eax@64
+  char v61; // zf@72
+  signed int v62; // edx@75
+  int v63; // ecx@76
+  int v64; // esi@76
+  int v65; // ecx@83
+  //signed int v66; // [sp+14h] [bp-14h]@3
+  int v67; // [sp+14h] [bp-14h]@34
+  int v68; // [sp+14h] [bp-14h]@44
+  int v69; // [sp+14h] [bp-14h]@54
+  int v70; // [sp+14h] [bp-14h]@64
+  signed int v71; // [sp+14h] [bp-14h]@75
   bool thisa; // [sp+18h] [bp-10h]@9
   int thisb; // [sp+18h] [bp-10h]@12
   int thisc; // [sp+18h] [bp-10h]@20
   bool thisd; // [sp+18h] [bp-10h]@41
   bool thise; // [sp+18h] [bp-10h]@61
   int thisf; // [sp+18h] [bp-10h]@74
-  signed int v77; // [sp+1Ch] [bp-Ch]@9
-  int v78; // [sp+1Ch] [bp-Ch]@76
-  bool v79; // [sp+20h] [bp-8h]@10
-  bool v80; // [sp+20h] [bp-8h]@32
-  bool v81; // [sp+20h] [bp-8h]@42
-  bool v82; // [sp+20h] [bp-8h]@52
-  bool v83; // [sp+20h] [bp-8h]@62
-  signed int i; // [sp+24h] [bp-4h]@9
+  signed int v79; // [sp+1Ch] [bp-Ch]@9
+  int v80; // [sp+1Ch] [bp-Ch]@76
+  bool v81; // [sp+20h] [bp-8h]@10
+  bool v82; // [sp+20h] [bp-8h]@32
+  bool v83; // [sp+20h] [bp-8h]@42
+  bool v84; // [sp+20h] [bp-8h]@52
+  bool v85; // [sp+20h] [bp-8h]@62
+  //signed int i; // [sp+24h] [bp-4h]@9
   signed int ia; // [sp+24h] [bp-4h]@19
   signed int ib; // [sp+24h] [bp-4h]@31
   signed int ic; // [sp+24h] [bp-4h]@41
@@ -6482,13 +6483,13 @@
   signed int ie; // [sp+24h] [bp-4h]@61
 
   v1 = &pIndoor->pFaces[uFaceID];
-  _this = pGame->pIndoorCameraD3D;
+  //this = pGame->pIndoorCameraD3D;
   v2 = &pIndoor->pVertices[*v1->pVertexIDs];
-  v3 = *(int *)&v2->x;
+  //v3 = *(_DWORD *)&v2->x;
   v4 = v2->z;
-  v5 = 0;
-  if ( v1->pFacePlane_old.vNormal.x * ((signed __int16)v3 - pBLVRenderParams->vPartyPos.x)
-     + v1->pFacePlane_old.vNormal.y * (SHIWORD(v3) - pBLVRenderParams->vPartyPos.y)
+  //v5 = 0;
+  if ( v1->pFacePlane_old.vNormal.x * (v2->x - pBLVRenderParams->vPartyPos.x)
+     + v1->pFacePlane_old.vNormal.y * (v2->y - pBLVRenderParams->vPartyPos.y)
      + v1->pFacePlane_old.vNormal.z * (v4 - pBLVRenderParams->vPartyPos.z) < 0 )
   {
     dword_50B700 = 1;
@@ -6499,110 +6500,103 @@
     if ( !(v1->uAttributes & 1) )
       return 0;
   }
-  v64 = v1->uNumVertices;
-  if ( (signed int)v1->uNumVertices > 0 )
-  {
-    do
-    {
-      v6 = &pIndoor->pVertices[v1->pVertexIDs[v5]];
-      _this->ApplyViewTransform_TrueIfStillVisible(
+  //v66 = v1->uNumVertices;
+  for (uint i = 0; i < v1->uNumVertices; ++i)
+  {
+      auto v6 = &pIndoor->pVertices[v1->pVertexIDs[i]];
+      pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible(
         v6->x,
         v6->y,
         v6->z,
-        &_50B924_view_transformed_xs[v5],
-        &_50B834_view_transformed_zs[v5],
-        &_50B744_view_transformed_ys[v5],
+        &_50B924_view_transformed_xs[i],
+        &_50B834_view_transformed_zs[i],
+        &_50B744_view_transformed_ys[i],
         0);
-      ++v5;
-    }
-    while ( v5 < v64 );
-  }
-  v7 = v64;
-  v8 = 0;
-  if ( v64 <= 0 )
+  }
+
+  //v7 = v1->uNumVertices;
+  //v8 = 0;
+  if (v1->uNumVertices <= 0)
     return 0;
-  do
-  {
-    if ( _50B924_view_transformed_xs[v8] >= 524288 )
+
+  bool bFound = false;
+  for (uint i = 0; i < v1->uNumVertices; ++i)
+    if (_50B924_view_transformed_xs[i] >= 0x80000u)
+    {
+      bFound = true;
       break;
-    ++v8;
-  }
-  while ( v8 < v64 );
-  if ( v8 >= v64 )
+    }
+  if (!bFound)
     return 0;
-  v77 = 0;
-  _50B924_view_transformed_xs[v64] = _50B924_view_transformed_xs[0];
-  _50B834_view_transformed_zs[v64] = _50B834_view_transformed_zs[0];
-  _50B744_view_transformed_ys[v64] = _50B744_view_transformed_ys[0];
-  thisa = _50B924_view_transformed_xs[0] >= 524288;
-  i = 1;
-  if ( v64 >= 1 )
-  {
-    do
-    {
-      i_ = i;
+
+  v79 = 0;
+  _50B924_view_transformed_xs[v1->uNumVertices] = _50B924_view_transformed_xs[0];
+  _50B834_view_transformed_zs[v1->uNumVertices] = _50B834_view_transformed_zs[0];
+  _50B744_view_transformed_ys[v1->uNumVertices] = _50B744_view_transformed_ys[0];
+  thisa = _50B924_view_transformed_xs[0] >= 0x80000u;
+  //int i = 1;
+  for (uint i = 1; i < v1->uNumVertices; ++i)
+  {
       v10 = _50B924_view_transformed_xs[i];
-      v79 = v10 >= 524288;
-      if ( thisa ^ v79 )
-      {
-        v11 = _50B924_view_transformed_xs_minus1[i_];
-        if ( v10 >= 524288 )
+      v81 = v10 >= (signed int)0x80000u;
+      if ( thisa ^ v81 )
+      {
+        v11 = _50B924_view_transformed_xs[i - 1];
+        if ( v10 >= (signed int)0x80000u )
         {
           v12 = v10 - v11;
-          v13 = 524288 - v11;
+          v13 = 0x80000 - v11;
           LODWORD(v14) = v13 << 16;
           HIDWORD(v14) = v13 >> 16;
-          v15 = &_50B744_view_transformed_ys_minus1[i_];
-          dword_50B828[v77] = ((unsigned __int64)((_50B834_view_transformed_zs[i_] - _50B834_view_transformed_zs_minus1[i_])
+          v15 = &_50B744_view_transformed_ys[i - 1];
+          dword_50B828[v79] = ((unsigned __int64)((_50B834_view_transformed_zs[i] - _50B834_view_transformed_zs[i - 1])
                                                 * v14
                                                 / v12) >> 16)
-                            + _50B834_view_transformed_zs_minus1[i_];
-          thisb = (unsigned __int64)((_50B744_view_transformed_ys[i_] - _50B744_view_transformed_ys_minus1[i_]) * v14 / v12) >> 16;
+                            + _50B834_view_transformed_zs[i - 1];
+          thisb = (unsigned __int64)((_50B744_view_transformed_ys[i] - _50B744_view_transformed_ys[i - 1]) * v14 / v12) >> 16;
         }
         else
         {
           v16 = v11 - v10;
-          v17 = 524288 - v10;
+          v17 = 0x80000 - v10;
           LODWORD(v18) = v17 << 16;
           HIDWORD(v18) = v17 >> 16;
-          v15 = &_50B744_view_transformed_ys[i_];
-          dword_50B828[v77] = ((unsigned __int64)((_50B834_view_transformed_zs_minus1[i_] - _50B834_view_transformed_zs[i_])
+          v15 = &_50B744_view_transformed_ys[i];
+          dword_50B828[v79] = ((unsigned __int64)((_50B834_view_transformed_zs[i - 1] - _50B834_view_transformed_zs[i])
                                                 * v18
                                                 / v16) >> 16)
-                            + _50B834_view_transformed_zs[i_];
-          thisb = (unsigned __int64)((_50B744_view_transformed_ys_minus1[i_] - _50B744_view_transformed_ys[i_]) * v18 / v16) >> 16;
+                            + _50B834_view_transformed_zs[i];
+          thisb = (unsigned __int64)((_50B744_view_transformed_ys[i - 1] - _50B744_view_transformed_ys[i]) * v18 / v16) >> 16;
         }
-        v19 = v77++;
-        v7 = v64;
+        v19 = v79++;
+        //v7 = v66;
         dword_50B738[v19] = thisb + *v15;
-        dword_50B918[v19] = 524288;
-      }
-      if ( v79 )
-      {
-        v20 = v77++;
-        dword_50B918[v20] = _50B924_view_transformed_xs[i_];
-        dword_50B828[v20] = _50B834_view_transformed_zs[i_];
-        dword_50B738[v20] = _50B744_view_transformed_ys[i_];
-      }
-      ++i;
-      thisa = v79;
-    }
-    while ( i <= v7 );
+        dword_50B918[v19] = 0x80000u;
+      }
+      if ( v81 )
+      {
+        v20 = v79++;
+        dword_50B918[v20] = _50B924_view_transformed_xs[i];
+        dword_50B828[v20] = _50B834_view_transformed_zs[i];
+        dword_50B738[v20] = _50B744_view_transformed_ys[i];
+      }
+      //++i;
+      thisa = v81;
   }
   ia = 0;
-  v21 = v77;
-  dword_50B918[v77] = dword_50B918[0];
-  dword_50B828[v77] = dword_50B828[0];
-  for ( dword_50B738[v77] = dword_50B738[0]; ia < v77; dword_50BA08[v22] = pBLVRenderParams->uViewportCenterY - v33 )
+  v21 = v79;
+  dword_50B918[v79] = dword_50B918[0];
+  dword_50B828[v79] = dword_50B828[0];
+  for ( dword_50B738[v79] = dword_50B738[0]; ia < v79; dword_50BA08[v22] = pBLVRenderParams->uViewportCenterY - v35 )
   {
     v22 = ia;
     thisc = abs(dword_50B918[ia]);
     if ( abs(dword_50B828[ia]) >> 13 <= thisc )
     {
-      v26 = dword_50B828[v22];
-      LODWORD(v27) = v26 << 16;
-      HIDWORD(v27) = v26 >> 16;
-      v25 = v27 / dword_50B918[v22];
+      v27 = dword_50B828[v22];
+      LODWORD(v28) = v27 << 16;
+      HIDWORD(v28) = v27 >> 16;
+      v26 = v28 / dword_50B918[v22];
       v23 = 0;
     }
     else
@@ -6612,272 +6606,277 @@
       if ( dword_50B828[v22] >= 0 )
       {
         LOBYTE(v24) = dword_50B918[v22] >= 0;
-        v25 = ((v24 - 1) & 0xFF800000) + 0x400000;
+        v26 = ((v24 - 1) & 0xFF800000) + 0x400000;
       }
       else
       {
         LOBYTE(v24) = dword_50B918[v22] >= 0;
-        v25 = ((unsigned int)&array_77EC08[1975].pEdgeList1[1] & (v24 - 1)) - 4194304;
-      }
-    }
-    v28 = dword_50B738[v22];
-    dword_50BAF8_xs[v22] = v25;
-    if ( abs(v28) >> 13 <= thisc )
-    {
-      v31 = dword_50B738[v22];
-      LODWORD(v32) = v31 << 16;
-      HIDWORD(v32) = v31 >> 16;
-      v30 = v32 / dword_50B918[v22];
+        v25 = v24 - 1;
+        v26 = (v25 & 0x800000) - 0x400000;
+      }
+    }
+    v29 = dword_50B738[v22];
+    dword_50BAF4_xs[v22 + 1] = v26;
+    if ( abs(v29) >> 13 <= thisc )
+    {
+      v33 = dword_50B738[v22];
+      LODWORD(v34) = v33 << 16;
+      HIDWORD(v34) = v33 >> 16;
+      v32 = v34 / dword_50B918[v22];
     }
     else
     {
-      v29 = 0;
+      v30 = 0;
       if ( dword_50B738[v22] >= v23 )
       {
-        LOBYTE(v29) = dword_50B918[v22] >= v23;
-        v30 = ((v29 - 1) & 0xFF800000) + 4194304;
+        LOBYTE(v30) = dword_50B918[v22] >= v23;
+        v32 = ((v30 - 1) & 0xFF800000) + 0x400000;
       }
       else
       {
-        LOBYTE(v29) = dword_50B918[v22] >= v23;
-        v30 = ((unsigned int)&array_77EC08[1975].pEdgeList1[1] & (v29 - 1)) - 4194304;
-      }
-    }
-    dword_50BA08[v22] = v30;
-    dword_50BAF8_xs[v22] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BAF8_xs[v22]) >> 16;
-    v33 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BA08[v22]) >> 16;
-    dword_50BAF8_xs[v22] = pBLVRenderParams->uViewportCenterX - dword_50BAF8_xs[v22];
+        LOBYTE(v30) = dword_50B918[v22] >= v23;
+        v31 = v30 - 1;
+        v32 = (v31 & 0x800000) - 0x400000;
+      }
+    }
+    dword_50BA08[v22] = v32;
+    dword_50BAF4_xs[v22 + 1] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)
+                                                * (signed __int64)dword_50BAF4_xs[v22 + 1]) >> 16;
+    v35 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BA08[v22]) >> 16;
+    dword_50BAF4_xs[v22 + 1] = pBLVRenderParams->uViewportCenterX - dword_50BAF4_xs[v22 + 1];
     ++ia;
   }
-  v34 = 0;
-  dword_50BAF8_xs[v21] = dword_50BAF8_xs[0];
+  v36 = 0;
+  dword_50BAF4_xs[v21 + 1] = dword_50BAF4_xs[1];
   dword_50BA08[v21] = dword_50BA08[0];
-  v35 = pBLVRenderParams->uViewportX;
-  v36 = dword_50BAF8_xs[0] < (signed int)pBLVRenderParams->uViewportX;
-  LOBYTE(v36) = dword_50BAF8_xs[0] >= (signed int)pBLVRenderParams->uViewportX;
-  v37 = 1;
+  v37 = pBLVRenderParams->uViewportX;
+  v38 = dword_50BAF4_xs[1] < (signed int)pBLVRenderParams->uViewportX;
+  LOBYTE(v38) = dword_50BAF4_xs[1] >= (signed int)pBLVRenderParams->uViewportX;
+  v39 = 1;
   ib = 1;
-  if ( v77 < 1 )
+  if ( v79 < 1 )
     return 0;
   do
   {
-    v38 = v37;
-    v39 = dword_50BAF8_xs[v38];
-    v80 = v39 >= (signed int)v35;
-    if ( v36 ^ v80 )
-    {
-      if ( v39 >= (signed int)v35 )
-      {
-        v65 = (signed int)(v35 - dword_50BAF4[v38])
-            * (signed __int64)(dword_50BA08[v38] - dword_50B9F8[v38 + 3])
-            / (v39 - dword_50BAF4[v38]);
-        v40 = dword_50B9F8[v38 + 3];
+    v40 = v39;
+    v41 = dword_50BAF4_xs[v40 + 1];
+    v82 = v41 >= (signed int)v37;
+    if ( v38 ^ v82 )
+    {
+      if ( v41 >= (signed int)v37 )
+      {
+        v67 = (signed int)(v37 - dword_50BAF4_xs[v40])
+            * (signed __int64)(dword_50BA08[v40] - dword_50B9F8[v40 + 3])
+            / (v41 - dword_50BAF4_xs[v40]);
+        v42 = dword_50B9F8[v40 + 3];
       }
       else
       {
-        v65 = (signed int)(v35 - v39)
-            * (signed __int64)(dword_50B9F8[v38 + 3] - dword_50BA08[v38])
-            / (dword_50BAF4[v38] - v39);
-        v40 = dword_50BA08[v38];
-      }
-      ++v34;
-      dword_50B9F8[v34] = v65 + v40;
-      v35 = pBLVRenderParams->uViewportX;
-      dword_50BAE8[v34] = pBLVRenderParams->uViewportX;
-    }
-    v36 = v80;
-    if ( v80 )
-    {
-      dword_50BAEC_xs[v34] = dword_50BAF8_xs[v38];
-      dword_50B9F8[v34++ + 1] = dword_50BA08[v38];
-    }
-    v37 = ib++ + 1;
-  }
-  while ( ib <= v77 );
-  if ( !v34
-    || (v41 = 0,
-        dword_50BAEC_xs[v34] = dword_50BAEC_xs[0],
-        dword_50B9F8[v34 + 1] = dword_50B9F8[1],
-        v42 = pBLVRenderParams->uViewportZ,
-        thisd = dword_50BAEC_xs[0] <= (signed int)pBLVRenderParams->uViewportZ,
+        v67 = (signed int)(v37 - v41)
+            * (signed __int64)(dword_50B9F8[v40 + 3] - dword_50BA08[v40])
+            / (dword_50BAF4_xs[v40] - v41);
+        v42 = dword_50BA08[v40];
+      }
+      ++v36;
+      dword_50B9F8[v36] = v67 + v42;
+      v37 = pBLVRenderParams->uViewportX;
+      dword_50BAE8_xs[v36] = pBLVRenderParams->uViewportX;
+    }
+    v38 = v82;
+    if ( v82 )
+    {
+      dword_50BAE8_xs[v36 + 1] = dword_50BAF4_xs[v40 + 1];
+      dword_50B9F8[v36++ + 1] = dword_50BA08[v40];
+    }
+    v39 = ib++ + 1;
+  }
+  while ( ib <= v79 );
+
+  if ( !v36
+    || (v43 = 0,
+        dword_50BAE8_xs[v36 + 1] = dword_50BAE8_xs[1],
+        dword_50B9F8[v36 + 1] = dword_50B9F8[1],
+        v44 = pBLVRenderParams->uViewportZ,
+        thisd = dword_50BAE8_xs[1] <= (signed int)pBLVRenderParams->uViewportZ,
         ic = 1,
-        v34 < 1) )
+        v36 < 1) )
     return 0;
+
   do
   {
-    v43 = ic;
-    v44 = dword_50BAEC_xs[ic];
-    v81 = v44 <= (signed int)v42;
-    if ( thisd ^ v81 )
-    {
-      if ( v44 <= (signed int)v42 )
-      {
-        v66 = (signed int)(v42 - dword_50BAE8[v43])
-            * (signed __int64)(dword_50B9F8[v43 + 1] - dword_50B9F8[v43])
-            / (v44 - dword_50BAE8[v43]);
-        v45 = dword_50B9F8[v43];
+    v45 = ic;
+    v46 = dword_50BAE8_xs[ic + 1];
+    v83 = v46 <= (signed int)v44;
+    if ( thisd ^ v83 )
+    {
+      if ( v46 <= (signed int)v44 )
+      {
+        v68 = (signed int)(v44 - dword_50BAE8_xs[v45])
+            * (signed __int64)(dword_50B9F8[v45 + 1] - dword_50B9F8[v45])
+            / (v46 - dword_50BAE8_xs[v45]);
+        v47 = dword_50B9F8[v45];
       }
       else
       {
-        v66 = (signed int)(v42 - v44)
-            * (signed __int64)(dword_50B9F8[v43] - dword_50B9F8[v43 + 1])
-            / (dword_50BAE8[v43] - v44);
-        v45 = dword_50B9F8[v43 + 1];
-      }
-      ++v41;
-      dword_50B9EC[v41] = v66 + v45;
-      v42 = pBLVRenderParams->uViewportZ;
-      dword_50BADC_xs[v41] = pBLVRenderParams->uViewportZ;
-    }
-    if ( v81 )
-    {
-      dword_50BAE0[v41] = dword_50BAEC_xs[v43];
-      dword_50B9F0[v41++] = dword_50B9F8[v43 + 1];
+        v68 = (signed int)(v44 - v46)
+            * (signed __int64)(dword_50B9F8[v45] - dword_50B9F8[v45 + 1])
+            / (dword_50BAE8_xs[v45] - v46);
+        v47 = dword_50B9F8[v45 + 1];
+      }
+      ++v43;
+      dword_50B9EC[v43] = v68 + v47;
+      v44 = pBLVRenderParams->uViewportZ;
+      dword_50BADC_xs[v43] = pBLVRenderParams->uViewportZ;
+    }
+    if ( v83 )
+    {
+      dword_50BAE0[v43] = dword_50BAE8_xs[v45 + 1];
+      dword_50B9F0[v43++] = dword_50B9F8[v45 + 1];
     }
     ++ic;
-    thisd = v81;
-  }
-  while ( ic <= v34 );
-  if ( !v41
-    || (v46 = 0,
-        dword_50BAE0[v41] = dword_50BAE0[0],
-        dword_50B9F0[v41] = dword_50B9F0[0],
-        v47 = pBLVRenderParams->uViewportY,
-        v48 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY,
-        LOBYTE(v48) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY,
-        v49 = 1,
+    thisd = v83;
+  }
+  while ( ic <= v36 );
+  if ( !v43
+    || (v48 = 0,
+        dword_50BAE0[v43] = dword_50BAE0[0],
+        dword_50B9F0[v43] = dword_50B9F0[0],
+        v49 = pBLVRenderParams->uViewportY,
+        v50 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY,
+        LOBYTE(v50) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY,
+        v51 = 1,
         id = 1,
-        v41 < 1) )
+        v43 < 1) )
     return 0;
   do
   {
-    v50 = v49;
-    v51 = dword_50B9F0[v50];
-    v82 = v51 >= (signed int)v47;
-    if ( v48 ^ v82 )
-    {
-      if ( v51 >= (signed int)v47 )
-      {
-        v67 = (signed int)(v47 - dword_50B9EC[v50])
-            * (signed __int64)(dword_50BAE0[v50] - dword_50BADC_xs[v50])
-            / (v51 - dword_50B9EC[v50]);
-        v52 = dword_50BADC_xs[v50];
+    v52 = v51;
+    v53 = dword_50B9F0[v52];
+    v84 = v53 >= (signed int)v49;
+    if ( v50 ^ v84 )
+    {
+      if ( v53 >= (signed int)v49 )
+      {
+        v69 = (signed int)(v49 - dword_50B9EC[v52])
+            * (signed __int64)(dword_50BAE0[v52] - dword_50BADC_xs[v52])
+            / (v53 - dword_50B9EC[v52]);
+        v54 = dword_50BADC_xs[v52];
       }
       else
       {
-        v67 = (signed int)(v47 - v51)
-            * (signed __int64)(dword_50BADC_xs[v50] - dword_50BAE0[v50])
-            / (dword_50B9EC[v50] - v51);
-        v52 = dword_50BAE0[v50];
-      }
-      ++v46;
-      dword_50BAD0[v46] = v67 + v52;
-      v47 = pBLVRenderParams->uViewportY;
-      dword_50B9E0_ys[v46] = pBLVRenderParams->uViewportY;
-    }
-    v48 = v82;
-    if ( v82 )
-    {
-      dword_50BAD4[v46] = dword_50BAE0[v50];
-      dword_50B9E0_ys[v46++ + 1] = dword_50B9F0[v50];
-    }
-    v49 = id++ + 1;
-  }
-  while ( id <= v41 );
-  if ( !v46
-    || (v53 = 0,
-        dword_50BAD4[v46] = dword_50BAD4[0],
-        dword_50B9E0_ys[v46 + 1] = dword_50B9E0_ys[1],
-        v54 = pBLVRenderParams->uViewportW,
+        v69 = (signed int)(v49 - v53)
+            * (signed __int64)(dword_50BADC_xs[v52] - dword_50BAE0[v52])
+            / (dword_50B9EC[v52] - v53);
+        v54 = dword_50BAE0[v52];
+      }
+      ++v48;
+      dword_50BAD0[v48] = v69 + v54;
+      v49 = pBLVRenderParams->uViewportY;
+      dword_50B9E0_ys[v48] = pBLVRenderParams->uViewportY;
+    }
+    v50 = v84;
+    if ( v84 )
+    {
+      dword_50BAD4[v48] = dword_50BAE0[v52];
+      dword_50B9E0_ys[v48++ + 1] = dword_50B9F0[v52];
+    }
+    v51 = id++ + 1;
+  }
+  while ( id <= v43 );
+  if ( !v48
+    || (v55 = 0,
+        dword_50BAD4[v48] = dword_50BAD4[0],
+        dword_50B9E0_ys[v48 + 1] = dword_50B9E0_ys[1],
+        v56 = pBLVRenderParams->uViewportW,
         thise = dword_50B9E0_ys[1] <= (signed int)pBLVRenderParams->uViewportW,
         ie = 1,
-        v46 < 1) )
+        v48 < 1) )
     return 0;
   do
   {
-    v55 = ie;
-    v56 = dword_50B9E0_ys[ie + 1];
-    v83 = v56 <= (signed int)v54;
-    if ( thise ^ v83 )
-    {
-      if ( v56 <= (signed int)v54 )
-      {
-        v68 = (signed int)(v54 - dword_50B9E0_ys[v55])
-            * (signed __int64)(dword_50BAD4[v55] - dword_50BAD0[v55])
-            / (v56 - dword_50B9E0_ys[v55]);
-        v57 = dword_50BAD0[v55];
+    v57 = ie;
+    v58 = dword_50B9E0_ys[ie + 1];
+    v85 = v58 <= (signed int)v56;
+    if ( thise ^ v85 )
+    {
+      if ( v58 <= (signed int)v56 )
+      {
+        v70 = (signed int)(v56 - dword_50B9E0_ys[v57])
+            * (signed __int64)(dword_50BAD4[v57] - dword_50BAD0[v57])
+            / (v58 - dword_50B9E0_ys[v57]);
+        v59 = dword_50BAD0[v57];
       }
       else
       {
-        v68 = (signed int)(v54 - v56)
-            * (signed __int64)(dword_50BAD0[v55] - dword_50BAD4[v55])
-            / (dword_50B9E0_ys[v55] - v56);
-        v57 = dword_50BAD4[v55];
-      }
-      ++v53;
-      dword_50BAC4[v53] = v68 + v57;
-      v54 = pBLVRenderParams->uViewportW;
-      unk_50B9D4[v53] = pBLVRenderParams->uViewportW;
-    }
-    if ( v83 )
-    {
-      dword_50BAC8[v53] = dword_50BAD4[v55];
-      dword_50B9D8_ys[v53++] = dword_50B9E0_ys[v55 + 1];
+        v70 = (signed int)(v56 - v58)
+            * (signed __int64)(dword_50BAD0[v57] - dword_50BAD4[v57])
+            / (dword_50B9E0_ys[v57] - v58);
+        v59 = dword_50BAD4[v57];
+      }
+      ++v55;
+      dword_50BAC4[v55] = v70 + v59;
+      v56 = pBLVRenderParams->uViewportW;
+      unk_50B9D4[v55] = pBLVRenderParams->uViewportW;
+    }
+    if ( v85 )
+    {
+      dword_50BAC8[v55] = dword_50BAD4[v57];
+      dword_50B9D8_ys[v55++] = dword_50B9E0_ys[v57 + 1];
     }
     ++ie;
-    thise = v83;
-  }
-  while ( ie <= v46 );
-  if ( !v53 )
+    thise = v85;
+  }
+  while ( ie <= v48 );
+  if ( !v55 )
     return 0;
-  v59 = pRenderer->pRenderD3D == 0;
-  dword_50BAC8[v53] = dword_50BAC8[0];
-  dword_50B9D8_ys[v53] = dword_50B9D8_ys[0];
-  if ( v59 && v53 > 3 )
-  {
-    dword_50BAC8[v53 + 1] = dword_50BAC8[1];
-    dword_50B9D8_ys[v53 + 1] = dword_50B9D8_ys[1];
+  v61 = pRenderer->pRenderD3D == 0;
+  dword_50BAC8[v55] = dword_50BAC8[0];
+  dword_50B9D8_ys[v55] = dword_50B9D8_ys[0];
+  if ( v61 && v55 > 3 )
+  {
+    dword_50BAC8[v55 + 1] = dword_50BAC8[1];
+    dword_50B9D8_ys[v55 + 1] = dword_50B9D8_ys[1];
     thisf = 2 * (dword_50B700 != 0) - 1;
-    if ( v53 > 0 )
-    {
-      v60 = 1;
-      v69 = 1;
+    if ( v55 > 0 )
+    {
+      v62 = 1;
+      v71 = 1;
       do
       {
-        v61 = v60 - 1;
-        v62 = v60 + 1;
-        v78 = v60 + 1;
-        if ( v60 - 1 >= v53 )
-          v61 -= v53;
-        if ( v60 >= v53 )
-          v60 -= v53;
-        if ( v62 >= v53 )
-          v62 -= v53;
+        v63 = v62 - 1;
+        v64 = v62 + 1;
+        v80 = v62 + 1;
+        if ( v62 - 1 >= v55 )
+          v63 -= v55;
+        if ( v62 >= v55 )
+          v62 -= v55;
+        if ( v64 >= v55 )
+          v64 -= v55;
         if ( thisf
-           * ((dword_50B9D8_ys[v62] - dword_50B9D8_ys[v61]) * (dword_50BAC8[v60] - dword_50BAC8[v61])
-            - (dword_50B9D8_ys[v60] - dword_50B9D8_ys[v61]) * (dword_50BAC8[v62] - dword_50BAC8[v61])) < 0 )
+           * ((dword_50B9D8_ys[v64] - dword_50B9D8_ys[v63]) * (dword_50BAC8[v62] - dword_50BAC8[v63])
+            - (dword_50B9D8_ys[v62] - dword_50B9D8_ys[v63]) * (dword_50BAC8[v64] - dword_50BAC8[v63])) < 0 )
         {
-          v60 = v78;
-          v69 = v78;
+          v62 = v80;
+          v71 = v80;
         }
         else
         {
-          v60 = v69;
-          v63 = v69;
-          if ( v69 < v53 || (v63 = v69 - v53, v69 - v53 < v53) )
+          v62 = v71;
+          v65 = v71;
+          if ( v71 < v55 || (v65 = v71 - v55, v71 - v55 < v55) )
           {
-            memcpy(&dword_50B9D8_ys[v63], &dword_50B9D8_ys[v63 + 1], 4 * ((unsigned int)(4 * (v53 - v63)) >> 2));
-            memcpy(&dword_50BAC8[v63], &dword_50BAC8[v63 + 1], 4 * ((unsigned int)(4 * (v53 - v63)) >> 2));
+            memcpy(&dword_50B9D8_ys[v65], &dword_50B9D8_ys[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2));
+            memcpy(&dword_50BAC8[v65], &dword_50BAC8[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2));
           }
-          --v53;
+          --v55;
         }
       }
-      while ( v60 - 1 < v53 );
-    }
-    dword_50BAC8[v53] = dword_50BAC8[0];
-    dword_50B9D8_ys[v53] = dword_50B9D8_ys[0];
-  }
-  return v53;
+      while ( v62 - 1 < v55 );
+    }
+    dword_50BAC8[v55] = dword_50BAC8[0];
+    dword_50B9D8_ys[v55] = dword_50B9D8_ys[0];
+  }
+  return v55;
 }