Mercurial > might-and-magic-trilogy
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; }