Mercurial > mm7
changeset 1281:21a46b38ca24
m
author | Ritor1 |
---|---|
date | Sat, 15 Jun 2013 09:55:07 +0600 |
parents | 353cb3ad9725 |
children | 8a196c858180 |
files | Indoor.cpp Indoor_stuff.h mm7_1.cpp mm7_3.cpp mm7_4.cpp |
diffstat | 5 files changed, 607 insertions(+), 175 deletions(-) [+] |
line wrap: on
line diff
--- a/Indoor.cpp Mon Jun 10 00:57:51 2013 +0600 +++ b/Indoor.cpp Sat Jun 15 09:55:07 2013 +0600 @@ -348,8 +348,8 @@ if ( pNode->field_C._viewport_space_y <= pNode->field_C._viewport_space_w ) { //v5 = (char *)&pBspRenderer->nodes[0].field_C.array_3D8[pNode->field_C._viewport_space_y + v7]; - v5 = &pNode->field_C.array_3D8[pNode->field_C._viewport_space_y]; - v8 = &pNode->field_C.array_18[pNode->field_C._viewport_space_y]; + v5 = &pNode->field_C.viewport_right_side[pNode->field_C._viewport_space_y]; + v8 = &pNode->field_C.viewport_left_side[pNode->field_C._viewport_space_y]; do { v1[v4 + *v8] = 255; @@ -875,29 +875,29 @@ v120 = 2 * stru_F8A590._viewport_space_y; while ( 1 ) { - a1 = *(__int16 *)((char *)stru_F8A590.array_18 + v24); + a1 = *(__int16 *)((char *)stru_F8A590.viewport_left_side + v24); sub_4AE313(a1, v21, &stru_F81018.field_0); if ( LOBYTE(viewparams->field_20) ) { v27 = v111 * (v24 - pBLVRenderParams->uViewportY); pZPixel = &pBLVRenderParams->pTargetZBuffer[2 - * (*(__int16 *)((char *)stru_F8A590.array_18 + v24) + * (*(__int16 *)((char *)stru_F8A590.viewport_left_side + v24) + 320 * (v24 - pBLVRenderParams->uViewportY)) - pBLVRenderParams->uViewportX]; pColorPixel = &pBLVRenderParams->pRenderTarget[v27 - + 2 * *(__int16 *)((char *)stru_F8A590.array_18 + v24) + + 2 * *(__int16 *)((char *)stru_F8A590.viewport_left_side + v24) - pBLVRenderParams->uViewportX]; v26 = &pBLVRenderParams->pRenderTarget[v27 - + 2 * *(__int16 *)((char *)stru_F8A590.array_3D8 + v24) + + 2 * *(__int16 *)((char *)stru_F8A590.viewport_right_side + v24) - pBLVRenderParams->uViewportX]; v23 = v119; } else { - v25 = *(__int16 *)((char *)stru_F8A590.array_18 + v24); + v25 = *(__int16 *)((char *)stru_F8A590.viewport_left_side + v24); pZPixel = &pBLVRenderParams->pTargetZBuffer[v25 + v23]; pColorPixel = &pBLVRenderParams->pRenderTarget[v25 + v110]; - v26 = &pBLVRenderParams->pRenderTarget[v110 + *(__int16 *)((char *)stru_F8A590.array_3D8 + v24)]; + v26 = &pBLVRenderParams->pRenderTarget[v110 + *(__int16 *)((char *)stru_F8A590.viewport_right_side + v24)]; } v131 = (unsigned int)v26; HIWORD(v28) = HIWORD(stru_F81018.field_0.field_0); @@ -1610,8 +1610,8 @@ v6 = 640 * stru_F8A590._viewport_space_y; do { - v5[v6 + stru_F8A590.array_18[v4]] = -1; - v7 = v6 + stru_F8A590.array_3D8[v4]; + v5[v6 + stru_F8A590.viewport_left_side[v4]] = -1; + v7 = v6 + stru_F8A590.viewport_right_side[v4]; v6 += 640; v5[v7] = -1; ++v4;
--- a/Indoor_stuff.h Mon Jun 10 00:57:51 2013 +0600 +++ b/Indoor_stuff.h Sat Jun 15 09:55:07 2013 +0600 @@ -16,8 +16,8 @@ int field_C; int field_10; int field_14; - __int16 array_18[480]; - __int16 array_3D8[480]; + __int16 viewport_left_side[480]; + __int16 viewport_right_side[480]; }; #pragma pack(pop) extern BspRenderer_stru2 stru_F8A590;
--- a/mm7_1.cpp Mon Jun 10 00:57:51 2013 +0600 +++ b/mm7_1.cpp Sat Jun 15 09:55:07 2013 +0600 @@ -11,6 +11,8 @@ //#include <defs.h> #include <assert.h> +#include "Texture.h" +#include "mm7_data.h" #include "VideoPlayer.h" #include "BSPModel.h" #include "Mouse.h" @@ -1488,6 +1490,431 @@ int __fastcall sub_423B5D(unsigned int uFaceID) { BLVFace *pFace; // ebx@1 + //Vec3_short_ *v2; // esi@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 + //int v10; // eax@10 + //int v11; // edx@11 + //int v12; // ST28_4@12 + //signed int v13; // edx@12 + //signed __int64 v14; // qtt@12 + //int *v15; // ebx@12 + //int v16; // ST28_4@14 + //signed int v17; // eax@14 + //signed __int64 v18; // qtt@14 + //signed int v19; // edx@15 + //signed int v20; // edx@17 + //signed int v21; // ebx@19 + //signed int v22; // esi@20 + //int v23; // edi@21 + int v24; // eax@21 + //int v25; // eax@22 + 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 for_x_num_vertices; // 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 for_z_num_vertices; // ebx@41 + //unsigned int v44; // eax@41 + //signed int v45; // ecx@42 + //int v46; // esi@42 + int v47; // eax@44 + signed int for_y_num_vertices; // 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 for_w_num_vertices; // 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 current_vertices_flag; // [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 depth_num_vertices; // [sp+1Ch] [bp-Ch]@9 + int v80; // [sp+1Ch] [bp-Ch]@76 + bool next_vertices_flag; // [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 + //unsigned int i; // [sp+24h] [bp-4h]@19 + //signed int ix; // [sp+24h] [bp-4h]@31 + //signed int iz; // [sp+24h] [bp-4h]@41 + //signed int iy; // [sp+24h] [bp-4h]@51 + //signed int iw; // [sp+24h] [bp-4h]@61 + + pFace = &pIndoor->pFaces[uFaceID]; + memset(&stru_50B700, 0, sizeof(stru367)); + + if ( pFace->pFacePlane.vNormal.x * (pIndoor->pVertices[pFace->pVertexIDs[0]].x - pBLVRenderParams->vPartyPos.x)//check the angle of the vector and the plane + + pFace->pFacePlane.vNormal.y * (pIndoor->pVertices[pFace->pVertexIDs[0]].y - pBLVRenderParams->vPartyPos.y) + + pFace->pFacePlane.vNormal.z * (pIndoor->pVertices[pFace->pVertexIDs[0]].z - pBLVRenderParams->vPartyPos.z) < 0 ) + { + stru_50B700.field_0 = 1; + } + else + { + stru_50B700.field_0 = 0; + if ( !pFace->Portal() ) + return 0; + } + for (uint i = 0; i < pFace->uNumVertices; ++i) + { + //перенос вершины в пространство камеры(перед камерой), определяет находятся ли она после этого в её поле зрения + pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible(pIndoor->pVertices[pFace->pVertexIDs[i]].x, + pIndoor->pVertices[pFace->pVertexIDs[i]].y, pIndoor->pVertices[pFace->pVertexIDs[i]].z, + &stru_50B700._view_transformed_xs[i], &stru_50B700._view_transformed_zs[i], &stru_50B700._view_transformed_ys[i], 0); + } + + if (pFace->uNumVertices <= 0) + return 0; + + bool bFound = false; + for (uint i = 0; i < pFace->uNumVertices; ++i) + if (stru_50B700._view_transformed_xs[i] >= 0x80000u)//отбраковывание по задней границе(cull for near clip plane) по z координате + { + bFound = true; + break; + } + if (!bFound) + return 0; + + int t; + depth_num_vertices = 0; + stru_50B700._view_transformed_xs[pFace->uNumVertices] = stru_50B700._view_transformed_xs[0]; + stru_50B700._view_transformed_zs[pFace->uNumVertices] = stru_50B700._view_transformed_zs[0]; + stru_50B700._view_transformed_ys[pFace->uNumVertices] = stru_50B700._view_transformed_ys[0]; + + //for near clip plane + current_vertices_flag = stru_50B700._view_transformed_xs[0] >= (signed int)0x80000u; + for ( uint i = 1; i <= pFace->uNumVertices; ++i) + { + next_vertices_flag = stru_50B700._view_transformed_xs[i] >= (signed int)0x80000u; + if ( current_vertices_flag ^ next_vertices_flag ) + { + if ( next_vertices_flag ) + { + //t = (near_clip - v0.z)/(v1.z - v0.z) + t = (0x80000 - stru_50B700._view_transformed_xs[i - 1]) / (stru_50B700._view_transformed_xs[i] - stru_50B700._view_transformed_xs[i - 1]); + //x = (v1.x -v0.x)*t + v1.x + stru_50B700.field_38[depth_num_vertices] = (unsigned __int64)((stru_50B700._view_transformed_ys[i] - stru_50B700._view_transformed_ys[i - 1]) + * t) + stru_50B700._view_transformed_ys[i]; + //y = (v1.y - v0.y)*t + v0.y + stru_50B700.field_128[depth_num_vertices] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i] - stru_50B700._view_transformed_zs[i - 1]) + * t)) + stru_50B700._view_transformed_zs[i - 1]; + stru_50B700.field_218[depth_num_vertices] = 0x80000u;//z = 8.0 + } + else + { + t = (0x80000 - stru_50B700._view_transformed_xs[i]) / (stru_50B700._view_transformed_xs[i - 1] - stru_50B700._view_transformed_xs[i]); + //x = (v0.x - v1.x)*t + v1.x + stru_50B700.field_38[depth_num_vertices] = (unsigned __int64)((stru_50B700._view_transformed_ys[i - 1] - stru_50B700._view_transformed_ys[i]) + * t) + stru_50B700._view_transformed_ys[i]; + //y = (v0.y - v1.y)*t + v1.y + stru_50B700.field_128[depth_num_vertices] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i - 1] - stru_50B700._view_transformed_zs[i]) + * t)) + stru_50B700._view_transformed_zs[i]; + stru_50B700.field_218[depth_num_vertices] = 0x80000u;//z = 8.0 + } + depth_num_vertices++; + } + if ( next_vertices_flag ) + { + stru_50B700.field_38[depth_num_vertices] = stru_50B700._view_transformed_ys[i]; + stru_50B700.field_128[depth_num_vertices] = stru_50B700._view_transformed_zs[i]; + stru_50B700.field_218[depth_num_vertices] = stru_50B700._view_transformed_xs[i]; + depth_num_vertices++; + } + current_vertices_flag = next_vertices_flag; + } + stru_50B700.field_218[depth_num_vertices] = stru_50B700.field_218[0]; + stru_50B700.field_128[depth_num_vertices] = stru_50B700.field_128[0]; + stru_50B700.field_38[depth_num_vertices] = stru_50B700.field_38[0]; + + //for far clip plane + for ( uint i = 1; i <= depth_num_vertices; ++i ) + { + if (SHIWORD(stru_50B700.field_128[i]) >= 0) + { + if (SHIWORD(stru_50B700.field_218[i]) >= 0) + v26 = 0x400000; // 64.0 + else + v26 = 0xFFC00000; // -63.0 + } + else + { + if (SHIWORD(stru_50B700.field_218[i]) >= 0) + v26 = 0xFFC00000; // -63.0 + else + v26 = 0x400000; // 64.0 + } + stru_50B700._xs3[i] = v26; + if (SHIWORD(stru_50B700.field_38[i]) >= 0) + { + if (SHIWORD(stru_50B700.field_218[i]) >= 0) + v26 = 0x400000; // 64.0 + else + v26 = 0xFFC00000; // -63.0 + } + else + { + if (SHIWORD(stru_50B700.field_218[i]) >= 0) + v26 = 0xFFC00000; // -63.0 + else + v26 = 0x400000; // 64.0 + } + stru_50B700._ys2[i] = v26; + stru_50B700._xs3[i] = pBLVRenderParams->uViewportCenterX -(unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)//maybe screen space x + * (signed __int64)stru_50B700._xs3[i]); + stru_50B700._ys2[i] = pBLVRenderParams->uViewportCenterY - (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)//screen space y + * (signed __int64)stru_50B700._ys2[i]); + } + + for_x_num_vertices = 0; + stru_50B700._xs3[depth_num_vertices] = stru_50B700._xs3[0]; + stru_50B700._ys2[depth_num_vertices] = stru_50B700._ys2[0]; + if ( depth_num_vertices < 1 ) + return 0; + + //for left clip plane + current_vertices_flag = stru_50B700._xs3[0] >= (signed int)pBLVRenderParams->uViewportX; + for ( uint i = 1; i <= depth_num_vertices; i++ ) + { + next_vertices_flag = stru_50B700._xs3[i] >= (signed int)pBLVRenderParams->uViewportX;//координата у первой вершины >= левой границы + if ( current_vertices_flag ^ next_vertices_flag ) + { + if ( next_vertices_flag ) + { + v67 = (signed int)(pBLVRenderParams->uViewportX - stru_50B700._xs3[i - 1]) + * (signed __int64)(stru_50B700._ys2[i] - stru_50B700._ys2[i - 1]) / (stru_50B700._xs3[i] - stru_50B700._xs3[i - 1]); + v42 = stru_50B700._ys2[i - 1]; + } + else + { + v67 = (signed int)(pBLVRenderParams->uViewportX - stru_50B700._xs3[i]) + * (signed __int64)(stru_50B700._ys2[i - 1] - stru_50B700._ys2[i]) / (stru_50B700._xs3[i - 1] - stru_50B700._xs3[i]); + v42 = stru_50B700._ys2[i]; + } + stru_50B700._ys[for_x_num_vertices] = v67 + v42; + stru_50B700._xs2[for_x_num_vertices] = pBLVRenderParams->uViewportX; + ++for_x_num_vertices; + } + current_vertices_flag = next_vertices_flag; + if ( next_vertices_flag ) + { + stru_50B700._xs2[for_x_num_vertices] = stru_50B700._xs3[i]; + stru_50B700._ys[for_x_num_vertices] = stru_50B700._ys2[i]; + ++for_x_num_vertices; + } + } + + if (for_x_num_vertices < 1) + return 0; + + for_z_num_vertices = 0; + stru_50B700._xs2[for_x_num_vertices] = stru_50B700._xs2[0]; + stru_50B700._ys[for_x_num_vertices] = stru_50B700._ys[0]; + + //for right clip plane + current_vertices_flag = stru_50B700._xs2[0] <= (signed int)pBLVRenderParams->uViewportZ; + for ( uint i = 1; i <= for_x_num_vertices; ++i ) + { + next_vertices_flag = stru_50B700._xs2[i] <= (signed int)pBLVRenderParams->uViewportZ; + if ( current_vertices_flag ^ next_vertices_flag ) + { + if ( next_vertices_flag ) + { + v68 = (signed int)(pBLVRenderParams->uViewportZ - stru_50B700._xs2[i - 1]) + * (signed __int64)(stru_50B700._ys[i] - stru_50B700._ys[i - 1]) / (stru_50B700._xs2[i] - stru_50B700._xs2[i - 1]); + v47 = stru_50B700._ys[i - 1]; + } + else + { + v68 = (signed int)(pBLVRenderParams->uViewportZ - stru_50B700._xs2[i]) + * (signed __int64)(stru_50B700._ys[i - 1] - stru_50B700._ys[i]) / (stru_50B700._xs2[i - 1] - stru_50B700._xs2[i]); + v47 = stru_50B700._ys[i]; + } + stru_50B700.field_2F0[for_z_num_vertices] = v68 + v47; + stru_50B700._xs[for_z_num_vertices] = pBLVRenderParams->uViewportZ; + ++for_z_num_vertices; + } + if ( next_vertices_flag ) + { + stru_50B700._xs[for_z_num_vertices] = stru_50B700._xs2[i]; + stru_50B700.field_2F0[for_z_num_vertices++] = stru_50B700._ys[i]; + } + current_vertices_flag = next_vertices_flag; + } + + if (for_z_num_vertices < 1) + return 0; + + for_y_num_vertices = 0; + stru_50B700._xs[for_z_num_vertices] = stru_50B700._xs[0]; + stru_50B700.field_2F0[for_z_num_vertices] = stru_50B700.field_2F0[0]; + + //for top clip plane + current_vertices_flag = stru_50B700.field_2F0[0] >= (signed int)pBLVRenderParams->uViewportY; + for ( uint i = 1; i <= for_z_num_vertices; i++ ) + { + next_vertices_flag = stru_50B700.field_2F0[i] >= (signed int)pBLVRenderParams->uViewportY; + if ( current_vertices_flag ^ next_vertices_flag ) + { + if ( next_vertices_flag ) + { + v69 = (signed int)(pBLVRenderParams->uViewportY - stru_50B700.field_2F0[i - 1]) + * (signed __int64)(stru_50B700._xs[i] - stru_50B700._xs[i - 1]) / (stru_50B700.field_2F0[i] - stru_50B700.field_2F0[i - 1]); + v54 = stru_50B700._xs[i - 1]; + } + else + { + v69 = (signed int)(pBLVRenderParams->uViewportY - stru_50B700.field_2F0[i]) + * (signed __int64)(stru_50B700._xs[i - 1] - stru_50B700._xs[i]) / (stru_50B700.field_2F0[i - 1] - stru_50B700.field_2F0[i]); + v54 = stru_50B700._xs[i]; + } + stru_50B700.field_3D4[for_y_num_vertices] = v69 + v54; + stru_50B700._xs[for_y_num_vertices + 1] = pBLVRenderParams->uViewportY; + ++for_y_num_vertices; + } + current_vertices_flag = next_vertices_flag; + if ( next_vertices_flag ) + { + stru_50B700.field_3D4[for_y_num_vertices] = stru_50B700._xs[i]; + stru_50B700._xs[for_y_num_vertices + 1] = stru_50B700.field_2F0[i]; + for_y_num_vertices++; + } + } + + if (for_y_num_vertices < 1) + return 0; + + for_w_num_vertices = 0; + stru_50B700.field_3D4[for_y_num_vertices] = stru_50B700.field_3D4[0]; + stru_50B700._xs[for_y_num_vertices + 1] = stru_50B700._xs[1]; + + //for bottom clip plane + current_vertices_flag = stru_50B700._xs[1] <= (signed int)pBLVRenderParams->uViewportW; + for ( uint i = 1; i <= for_y_num_vertices; ++i ) + { + next_vertices_flag = stru_50B700._xs[i + 1] <= (signed int)pBLVRenderParams->uViewportW; + if ( current_vertices_flag ^ next_vertices_flag ) + { + if ( next_vertices_flag ) + { + v70 = (signed int)(pBLVRenderParams->uViewportW - stru_50B700._xs[i]) + * (signed __int64)(stru_50B700.field_3D4[i] - stru_50B700.field_3D4[i - 1]) / (stru_50B700._xs[i + 1] - stru_50B700._xs[i]); + v59 = stru_50B700.field_3D4[i - 1]; + } + else + { + v70 = (signed int)(pBLVRenderParams->uViewportW - stru_50B700._xs[i + 1]) + * (signed __int64)(stru_50B700.field_3D4[i - 1] - stru_50B700.field_3D4[i]) / (stru_50B700._xs[i] - stru_50B700._xs[i + 1]); + v59 = stru_50B700.field_3D4[i]; + } + stru_50B700._screen_space_x[for_w_num_vertices] = v70 + v59; + stru_50B700._screen_space_y[for_w_num_vertices] = pBLVRenderParams->uViewportW; + ++for_w_num_vertices; + } + if ( next_vertices_flag ) + { + stru_50B700._screen_space_x[for_w_num_vertices] = stru_50B700.field_3D4[i]; + stru_50B700._screen_space_y[for_w_num_vertices++] = stru_50B700._xs[i + 1]; + } + current_vertices_flag = next_vertices_flag; + } + + if ( !for_w_num_vertices ) + return 0; + v61 = pRenderer->pRenderD3D == 0; + stru_50B700._screen_space_x[for_w_num_vertices] = stru_50B700._screen_space_x[0]; + stru_50B700._screen_space_y[for_w_num_vertices] = stru_50B700._screen_space_y[0]; + if ( v61 && for_w_num_vertices > 3 ) + { + stru_50B700._screen_space_x[for_w_num_vertices + 1] = stru_50B700._screen_space_x[1]; + stru_50B700._screen_space_y[for_w_num_vertices + 1] = stru_50B700._screen_space_y[1]; + thisf = 2 * (stru_50B700.field_0 != 0) - 1; + if ( for_w_num_vertices > 0 ) + { + v62 = 1; + v71 = 1; + do + { + v63 = v62 - 1; + v64 = v62 + 1; + v80 = v62 + 1; + if ( v62 - 1 >= for_w_num_vertices ) + v63 -= for_w_num_vertices; + if ( v62 >= for_w_num_vertices ) + v62 -= for_w_num_vertices; + if ( v64 >= for_w_num_vertices ) + v64 -= for_w_num_vertices; + if ( thisf * ((stru_50B700._screen_space_y[v64] - stru_50B700._screen_space_y[v63]) + * (stru_50B700._screen_space_x[v62] - stru_50B700._screen_space_x[v63]) + - (stru_50B700._screen_space_y[v62] - stru_50B700._screen_space_y[v63]) + * (stru_50B700._screen_space_x[v64] - stru_50B700._screen_space_x[v63])) < 0 ) + { + v62 = v80; + v71 = v80; + } + else + { + v62 = v71; + v65 = v71; + if ( v71 < for_w_num_vertices || (v65 = v71 - for_w_num_vertices, v71 - for_w_num_vertices < for_w_num_vertices) ) + { + memcpy(&stru_50B700._screen_space_y[v65], &stru_50B700._screen_space_y[v65 + 1], 4 * ((unsigned int)(4 * (for_w_num_vertices - v65)) >> 2)); + memcpy(&stru_50B700._screen_space_x[v65], &stru_50B700._screen_space_x[v65 + 1], 4 * ((unsigned int)(4 * (for_w_num_vertices - v65)) >> 2)); + } + --for_w_num_vertices; + } + } + while ( v62 - 1 < for_w_num_vertices ); + } + stru_50B700._screen_space_x[for_w_num_vertices] = stru_50B700._screen_space_x[0]; + stru_50B700._screen_space_y[for_w_num_vertices] = stru_50B700._screen_space_y[0]; + } + return for_w_num_vertices; +} + +//old function +/*int __fastcall sub_423B5D(unsigned int uFaceID) +{ + BLVFace *v1; // ebx@1 Vec3_short_ *v2; // esi@1 //int v3; // ST28_4@1 __int16 v4; // ST2C_2@1 @@ -1577,40 +2004,46 @@ signed int id; // [sp+24h] [bp-4h]@51 signed int ie; // [sp+24h] [bp-4h]@61 - pFace = &pIndoor->pFaces[uFaceID]; + v1 = &pIndoor->pFaces[uFaceID]; //this = pGame->pIndoorCameraD3D; - v2 = &pIndoor->pVertices[pFace->pVertexIDs[0]]; + v2 = &pIndoor->pVertices[v1->pVertexIDs[0]]; //v3 = *(_DWORD *)&v2->x; v4 = v2->z; //v5 = 0; - if ( pFace->pFacePlane_old.vNormal.x * (v2->x - pBLVRenderParams->vPartyPos.x) - + pFace->pFacePlane_old.vNormal.y * (v2->y - pBLVRenderParams->vPartyPos.y) - + pFace->pFacePlane_old.vNormal.z * (v2->z - pBLVRenderParams->vPartyPos.z) < 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 * (v2->z - pBLVRenderParams->vPartyPos.z) < 0 ) { - stru_50B700.field_0 = 1; + dword_50B700 = 1; } else { - stru_50B700.field_0 = 0; - if ( !pFace->Portal() ) + dword_50B700 = 0; + if ( !v1->Portal() ) return 0; } //v66 = v1->uNumVertices; - for (uint i = 0; i < pFace->uNumVertices; ++i) + for (uint i = 0; i < v1->uNumVertices; ++i) { - auto v6 = &pIndoor->pVertices[pFace->pVertexIDs[i]]; - pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible(v6->x, v6->y, v6->z, - &stru_50B700._view_transformed_xs[i], &stru_50B700._view_transformed_zs[i], &stru_50B700._view_transformed_ys[i], 0); + auto v6 = &pIndoor->pVertices[v1->pVertexIDs[i]]; + pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible( + v6->x, + v6->y, + v6->z, + &_50B924_view_transformed_xs[i], + &_50B834_view_transformed_zs[i], + &_50B744_view_transformed_ys[i], + 0); } //v7 = v1->uNumVertices; //v8 = 0; - if (pFace->uNumVertices <= 0) + if (v1->uNumVertices <= 0) return 0; bool bFound = false; - for (uint i = 0; i < pFace->uNumVertices; ++i) - if (stru_50B700._view_transformed_xs[i] >= 0x80000u) + for (uint i = 0; i < v1->uNumVertices; ++i) + if (_50B924_view_transformed_xs[i] >= 0x80000u) { bFound = true; break; @@ -1619,27 +2052,27 @@ return 0; v79 = 0; - stru_50B700._view_transformed_xs[pFace->uNumVertices] = stru_50B700._view_transformed_xs[0]; - stru_50B700._view_transformed_zs[pFace->uNumVertices] = stru_50B700._view_transformed_zs[0]; - stru_50B700._view_transformed_ys[pFace->uNumVertices] = stru_50B700._view_transformed_ys[0]; - thisa = stru_50B700._view_transformed_xs[0] >= (signed int)0x80000u; + _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] >= (signed int)0x80000u; //int i = 1; - for (uint i = 1; i <= pFace->uNumVertices; ++i) + for (uint i = 1; i <= v1->uNumVertices; ++i) { - v10 = stru_50B700._view_transformed_xs[i]; + v10 = _50B924_view_transformed_xs[i]; v81 = v10 >= (signed int)0x80000u; if ( thisa ^ v81 ) { - v11 = stru_50B700._view_transformed_xs[i - 1]; + v11 = _50B924_view_transformed_xs[i - 1]; if ( v10 >= (signed int)0x80000u ) { v12 = v10 - v11; v13 = 0x80000 - v11; LODWORD(v14) = v13 << 16; HIDWORD(v14) = v13 >> 16; - v15 = &stru_50B700._view_transformed_ys[i - 1]; - stru_50B700.field_128[v79] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i] - stru_50B700._view_transformed_zs[i - 1]) * v14 / v12) >> 16) + stru_50B700._view_transformed_zs[i - 1]; - thisb = (unsigned __int64)((stru_50B700._view_transformed_ys[i] - stru_50B700._view_transformed_ys[i - 1]) * v14 / v12) >> 16; + 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[i - 1]; + thisb = (unsigned __int64)((_50B744_view_transformed_ys[i] - _50B744_view_transformed_ys[i - 1]) * v14 / v12) >> 16; } else { @@ -1647,93 +2080,93 @@ v17 = 0x80000 - v10; LODWORD(v18) = v17 << 16; HIDWORD(v18) = v17 >> 16; - v15 = &stru_50B700._view_transformed_ys[i]; - stru_50B700.field_128[v79] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i - 1] - stru_50B700._view_transformed_zs[i]) * v18 / v16) >> 16) + stru_50B700._view_transformed_zs[i]; - thisb = (unsigned __int64)((stru_50B700._view_transformed_ys[i - 1] - stru_50B700._view_transformed_ys[i]) * v18 / v16) >> 16; + 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[i - 1] - _50B744_view_transformed_ys[i]) * v18 / v16) >> 16; } v19 = v79++; //v7 = v66; - stru_50B700.field_38[v19] = thisb + *v15; - stru_50B700.field_218[v19] = 0x80000u; + dword_50B738[v19] = thisb + *v15; + dword_50B918[v19] = 0x80000u; } if ( v81 ) { v20 = v79++; - stru_50B700.field_218[v20] = stru_50B700._view_transformed_xs[i]; - stru_50B700.field_128[v20] = stru_50B700._view_transformed_zs[i]; - stru_50B700.field_38[v20] = stru_50B700._view_transformed_ys[i]; + 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; } v21 = v79; - stru_50B700.field_218[v79] = stru_50B700.field_218[0]; - stru_50B700.field_128[v79] = stru_50B700.field_128[0]; - stru_50B700.field_38[v79] = stru_50B700.field_38[0]; + dword_50B918[v79] = dword_50B918[0]; + dword_50B828[v79] = dword_50B828[0]; + dword_50B738[v79] = dword_50B738[0]; for (ia = 0; ia < v79; ++ia) { v22 = ia; - thisc = abs(stru_50B700.field_218[ia]); - if ( abs(stru_50B700.field_128[ia]) >> 13 <= thisc ) + thisc = abs(dword_50B918[ia]); + if ( abs(dword_50B828[ia]) >> 13 <= thisc ) { - v27 = stru_50B700.field_128[v22]; + v27 = dword_50B828[v22]; LODWORD(v28) = v27 << 16; HIDWORD(v28) = v27 >> 16; - v26 = v28 / stru_50B700.field_218[v22]; + v26 = v28 / dword_50B918[v22]; v23 = 0; } else { v23 = 0; v24 = 0; - if ( stru_50B700.field_128[v22] >= 0 ) + if ( dword_50B828[v22] >= 0 ) { - LOBYTE(v24) = stru_50B700.field_218[v22] >= 0; + LOBYTE(v24) = dword_50B918[v22] >= 0; v26 = ((v24 - 1) & 0xFF800000) + 0x400000; } else { - LOBYTE(v24) = stru_50B700.field_218[v22] >= 0; + LOBYTE(v24) = dword_50B918[v22] >= 0; v25 = v24 - 1; v26 = (v25 & 0x800000) - 0x400000; } } - v29 = stru_50B700.field_38[v22]; - stru_50B700._xs3[v22] = v26; + v29 = dword_50B738[v22]; + dword_50BAF8_xs[v22] = v26; if ( abs(v29) >> 13 <= thisc ) { - v33 = stru_50B700.field_38[v22]; + v33 = dword_50B738[v22]; LODWORD(v34) = v33 << 16; HIDWORD(v34) = v33 >> 16; - v32 = v34 / stru_50B700.field_218[v22]; + v32 = v34 / dword_50B918[v22]; } else { v30 = 0; - if ( stru_50B700.field_38[v22] >= v23 ) + if ( dword_50B738[v22] >= v23 ) { - LOBYTE(v30) = stru_50B700.field_218[v22] >= v23; + LOBYTE(v30) = dword_50B918[v22] >= v23; v32 = ((v30 - 1) & 0xFF800000) + 0x400000; } else { - LOBYTE(v30) = stru_50B700.field_218[v22] >= v23; + LOBYTE(v30) = dword_50B918[v22] >= v23; v31 = v30 - 1; v32 = (v31 & 0x800000) - 0x400000; } } - stru_50B700._ys2[v22] = v32; - stru_50B700._xs3[v22] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)stru_50B700._xs3[v22]) >> 16; - v35 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)stru_50B700._ys2[v22]) >> 16; - stru_50B700._xs3[v22] = pBLVRenderParams->uViewportCenterX - stru_50B700._xs3[v22]; - stru_50B700._ys2[v22] = pBLVRenderParams->uViewportCenterY - v35; + dword_50BA08_ys[v22] = v32; + dword_50BAF8_xs[v22] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BAF8_xs[v22]) >> 16; + v35 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BA08_ys[v22]) >> 16; + dword_50BAF8_xs[v22] = pBLVRenderParams->uViewportCenterX - dword_50BAF8_xs[v22]; + dword_50BA08_ys[v22] = pBLVRenderParams->uViewportCenterY - v35; } v36 = 0; - stru_50B700._xs3[v21] = stru_50B700._xs3[0]; - stru_50B700._ys2[v21] = stru_50B700._ys2[0]; + dword_50BAF8_xs[v21] = dword_50BAF8_xs[0]; + dword_50BA08_ys[v21] = dword_50BA08_ys[0]; v37 = pBLVRenderParams->uViewportX; - v38 = stru_50B700._xs3[0] < (signed int)pBLVRenderParams->uViewportX; - LOBYTE(v38) = stru_50B700._xs3[0] >= (signed int)pBLVRenderParams->uViewportX; + v38 = dword_50BAF8_xs[0] < (signed int)pBLVRenderParams->uViewportX; + LOBYTE(v38) = dword_50BAF8_xs[0] >= (signed int)pBLVRenderParams->uViewportX; v39 = 1; ib = 1; if ( v79 < 1 ) @@ -1741,30 +2174,30 @@ do { v40 = v39; - v41 = stru_50B700._xs3[v40]; + v41 = dword_50BAF8_xs[v40]; v82 = v41 >= (signed int)v37; if ( v38 ^ v82 ) { if ( v41 >= (signed int)v37 ) { - v67 = (signed int)(v37 - stru_50B700._xs3[v40 - 1]) * (signed __int64)(stru_50B700._ys2[v40] - stru_50B700._ys2[v40 - 1]) / (v41 - stru_50B700._xs3[v40 - 1]); - v42 = stru_50B700._ys2[v40 - 1]; + v67 = (signed int)(v37 - dword_50BAF8_xs[v40 - 1]) * (signed __int64)(dword_50BA08_ys[v40] - dword_50BA08_ys[v40 - 1]) / (v41 - dword_50BAF8_xs[v40 - 1]); + v42 = dword_50BA08_ys[v40 - 1]; } else { - v67 = (signed int)(v37 - v41) * (signed __int64)(stru_50B700._ys2[v40 - 1] - stru_50B700._ys2[v40]) / (stru_50B700._xs3[v40 - 1] - v41); - v42 = stru_50B700._ys2[v40]; + v67 = (signed int)(v37 - v41) * (signed __int64)(dword_50BA08_ys[v40 - 1] - dword_50BA08_ys[v40]) / (dword_50BAF8_xs[v40 - 1] - v41); + v42 = dword_50BA08_ys[v40]; } - stru_50B700._ys[v36] = v67 + v42; + dword_50B9FC_ys[v36] = v67 + v42; v37 = pBLVRenderParams->uViewportX; - stru_50B700._xs2[v36] = pBLVRenderParams->uViewportX; + dword_50BAEC_xs[v36] = pBLVRenderParams->uViewportX; ++v36; } v38 = v82; if ( v82 ) { - stru_50B700._xs2[v36] = stru_50B700._xs3[v40]; - stru_50B700._ys[v36] = stru_50B700._ys2[v40]; + dword_50BAEC_xs[v36] = dword_50BAF8_xs[v40]; + dword_50B9FC_ys[v36] = dword_50BA08_ys[v40]; ++v36; } v39 = ib++ + 1; @@ -1775,38 +2208,38 @@ return 0; v43 = 0; - stru_50B700._xs2[v36] = stru_50B700._xs2[0]; - stru_50B700._ys[v36] = stru_50B700._ys[0]; + dword_50BAEC_xs[v36] = dword_50BAEC_xs[0]; + dword_50B9FC_ys[v36] = dword_50B9FC_ys[0]; v44 = pBLVRenderParams->uViewportZ; - thisd = stru_50B700._xs2[0] <= (signed int)pBLVRenderParams->uViewportZ; + thisd = dword_50BAEC_xs[0] <= (signed int)pBLVRenderParams->uViewportZ; ic = 1; do { v45 = ic; - v46 = stru_50B700._xs2[ic]; + v46 = dword_50BAEC_xs[ic]; v83 = v46 <= (signed int)v44; if ( thisd ^ v83 ) { if ( v46 <= (signed int)v44 ) { - v68 = (signed int)(v44 - stru_50B700._xs2[v45 - 1]) * (signed __int64)(stru_50B700._ys[v45] - stru_50B700._ys[v45 - 1]) / (v46 - stru_50B700._xs2[v45 - 1]); - v47 = stru_50B700._ys[v45 - 1]; + v68 = (signed int)(v44 - dword_50BAEC_xs[v45 - 1]) * (signed __int64)(dword_50B9FC_ys[v45] - dword_50B9FC_ys[v45 - 1]) / (v46 - dword_50BAEC_xs[v45 - 1]); + v47 = dword_50B9FC_ys[v45 - 1]; } else { - v68 = (signed int)(v44 - v46) * (signed __int64)(stru_50B700._ys[v45 - 1] - stru_50B700._ys[v45]) / (stru_50B700._xs2[v45 - 1] - v46); - v47 = stru_50B700._ys[v45]; + v68 = (signed int)(v44 - v46) * (signed __int64)(dword_50B9FC_ys[v45 - 1] - dword_50B9FC_ys[v45]) / (dword_50BAEC_xs[v45 - 1] - v46); + v47 = dword_50B9FC_ys[v45]; } - stru_50B700.field_2F0[v43] = v68 + v47; + dword_50B9F0[v43] = v68 + v47; v44 = pBLVRenderParams->uViewportZ; - stru_50B700._xs[v43] = pBLVRenderParams->uViewportZ; + dword_50BAE0[v43] = pBLVRenderParams->uViewportZ; ++v43; } if ( v83 ) { - stru_50B700._xs[v43] = stru_50B700._xs2[v45]; - stru_50B700.field_2F0[v43++] = stru_50B700._ys[v45]; + dword_50BAE0[v43] = dword_50BAEC_xs[v45]; + dword_50B9F0[v43++] = dword_50B9FC_ys[v45]; } ++ic; thisd = v83; @@ -1817,41 +2250,40 @@ return 0; v48 = 0; - stru_50B700._xs[v43] = stru_50B700._xs[0]; - stru_50B700.field_2F0[v43] = stru_50B700.field_2F0[0]; + dword_50BAE0[v43] = dword_50BAE0[0]; + dword_50B9F0[v43] = dword_50B9F0[0]; v49 = pBLVRenderParams->uViewportY; - v50 = stru_50B700.field_2F0[0] < (signed int)pBLVRenderParams->uViewportY; - LOBYTE(v50) = stru_50B700.field_2F0[0] >= (signed int)pBLVRenderParams->uViewportY; + v50 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY; + LOBYTE(v50) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY; v51 = 1; id = 1; do { v52 = v51; - v53 = stru_50B700.field_2F0[v52]; + v53 = dword_50B9F0[v52]; v84 = v53 >= (signed int)v49; if ( v50 ^ v84 ) { if ( v53 >= (signed int)v49 ) { - v69 = (signed int)(v49 - stru_50B700.field_2F0[v52 - 1]) * (signed __int64)(stru_50B700._xs[v52] - stru_50B700._xs[v52 - 1]) / (v53 - stru_50B700.field_2F0[v52 - 1]); - v54 = stru_50B700._xs[v52 - 1]; + v69 = (signed int)(v49 - dword_50B9F0[v52 - 1]) * (signed __int64)(dword_50BAE0[v52] - dword_50BAE0[v52 - 1]) / (v53 - dword_50B9F0[v52 - 1]); + v54 = dword_50BAE0[v52 - 1]; } else { - v69 = (signed int)(v49 - v53) * (signed __int64)(stru_50B700._xs[v52 - 1] - stru_50B700._xs[v52]) / (stru_50B700.field_2F0[v52 - 1] - v53); - v54 = stru_50B700._xs[v52]; + v69 = (signed int)(v49 - v53) * (signed __int64)(dword_50BAE0[v52 - 1] - dword_50BAE0[v52]) / (dword_50B9F0[v52 - 1] - v53); + v54 = dword_50BAE0[v52]; } - stru_50B700.field_3D4[v48] = v69 + v54; + dword_50BAD4[v48] = v69 + v54; v49 = pBLVRenderParams->uViewportY; - stru_50B700._xs[v48+1] = pBLVRenderParams->uViewportY; + dword_50B9E4[v48] = pBLVRenderParams->uViewportY; ++v48; } v50 = v84; if ( v84 ) { - stru_50B700.field_3D4[v48] = stru_50B700._xs[v52]; - stru_50B700._xs[v48+1] = stru_50B700.field_2F0[v52]; - v48++; + dword_50BAD4[v48] = dword_50BAE0[v52]; + dword_50B9E4[v48++] = dword_50B9F0[v52]; } v51 = id++ + 1; } @@ -1861,37 +2293,37 @@ return 0; v55 = 0; - stru_50B700.field_3D4[v48] = stru_50B700.field_3D4[0]; - stru_50B700._xs[v48+1] = stru_50B700._xs[1]; + dword_50BAD4[v48] = dword_50BAD4[0]; + dword_50B9E4[v48] = dword_50B9E4[0]; v56 = pBLVRenderParams->uViewportW; - thise = stru_50B700._xs[1] <= (signed int)pBLVRenderParams->uViewportW; + thise = dword_50B9E4[0] <= (signed int)pBLVRenderParams->uViewportW; ie = 1; do { v57 = ie; - v58 = stru_50B700._xs[ie+1]; + v58 = dword_50B9E4[ie]; v85 = v58 <= (signed int)v56; if ( thise ^ v85 ) { if ( v58 <= (signed int)v56 ) { - v70 = (signed int)(v56 - stru_50B700._xs[v57]) * (signed __int64)(stru_50B700.field_3D4[v57] - stru_50B700.field_3D4[v57 - 1]) / (v58 - stru_50B700._xs[v57]); - v59 = stru_50B700.field_3D4[v57 - 1]; + v70 = (signed int)(v56 - dword_50B9E4[v57 - 1]) * (signed __int64)(dword_50BAD4[v57] - dword_50BAD4[v57 - 1]) / (v58 - dword_50B9E4[v57 - 1]); + v59 = dword_50BAD4[v57 - 1]; } else { - v70 = (signed int)(v56 - v58) * (signed __int64)(stru_50B700.field_3D4[v57 - 1] - stru_50B700.field_3D4[v57]) / (stru_50B700._xs[v57] - v58); - v59 = stru_50B700.field_3D4[v57]; + v70 = (signed int)(v56 - v58) * (signed __int64)(dword_50BAD4[v57 - 1] - dword_50BAD4[v57]) / (dword_50B9E4[v57 - 1] - v58); + v59 = dword_50BAD4[v57]; } - stru_50B700._screen_space_x[v55] = v70 + v59; + _50BAC8_screen_space_x[v55] = v70 + v59; v56 = pBLVRenderParams->uViewportW; - stru_50B700._screen_space_y[v55] = pBLVRenderParams->uViewportW; + _50B9D8_screen_space_y[v55] = pBLVRenderParams->uViewportW; ++v55; } if ( v85 ) { - stru_50B700._screen_space_x[v55] = stru_50B700.field_3D4[v57]; - stru_50B700._screen_space_y[v55++] = stru_50B700._xs[v57+1]; + _50BAC8_screen_space_x[v55] = dword_50BAD4[v57]; + _50B9D8_screen_space_y[v55++] = dword_50B9E4[v57]; } ++ie; thise = v85; @@ -1901,13 +2333,13 @@ if ( !v55 ) return 0; v61 = pRenderer->pRenderD3D == 0; - stru_50B700._screen_space_x[v55] = stru_50B700._screen_space_x[0]; - stru_50B700._screen_space_y[v55] = stru_50B700._screen_space_y[0]; + _50BAC8_screen_space_x[v55] = _50BAC8_screen_space_x[0]; + _50B9D8_screen_space_y[v55] = _50B9D8_screen_space_y[0]; if ( v61 && v55 > 3 ) { - stru_50B700._screen_space_x[v55 + 1] = stru_50B700._screen_space_x[1]; - stru_50B700._screen_space_y[v55 + 1] = stru_50B700._screen_space_y[1]; - thisf = 2 * (stru_50B700.field_0 != 0) - 1; + _50BAC8_screen_space_x[v55 + 1] = _50BAC8_screen_space_x[1]; + _50B9D8_screen_space_y[v55 + 1] = _50B9D8_screen_space_y[1]; + thisf = 2 * (dword_50B700 != 0) - 1; if ( v55 > 0 ) { v62 = 1; @@ -1924,8 +2356,8 @@ if ( v64 >= v55 ) v64 -= v55; if ( thisf - * ((stru_50B700._screen_space_y[v64] - stru_50B700._screen_space_y[v63]) * (stru_50B700._screen_space_x[v62] - stru_50B700._screen_space_x[v63]) - - (stru_50B700._screen_space_y[v62] - stru_50B700._screen_space_y[v63]) * (stru_50B700._screen_space_x[v64] - stru_50B700._screen_space_x[v63])) < 0 ) + * ((_50B9D8_screen_space_y[v64] - _50B9D8_screen_space_y[v63]) * (_50BAC8_screen_space_x[v62] - _50BAC8_screen_space_x[v63]) + - (_50B9D8_screen_space_y[v62] - _50B9D8_screen_space_y[v63]) * (_50BAC8_screen_space_x[v64] - _50BAC8_screen_space_x[v63])) < 0 ) { v62 = v80; v71 = v80; @@ -1936,19 +2368,19 @@ v65 = v71; if ( v71 < v55 || (v65 = v71 - v55, v71 - v55 < v55) ) { - memcpy(&stru_50B700._screen_space_y[v65], &stru_50B700._screen_space_y[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2)); - memcpy(&stru_50B700._screen_space_x[v65], &stru_50B700._screen_space_x[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2)); + memcpy(&_50B9D8_screen_space_y[v65], &_50B9D8_screen_space_y[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2)); + memcpy(&_50BAC8_screen_space_x[v65], &_50BAC8_screen_space_x[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2)); } --v55; } } while ( v62 - 1 < v55 ); } - stru_50B700._screen_space_x[v55] = stru_50B700._screen_space_x[0]; - stru_50B700._screen_space_y[v55] = stru_50B700._screen_space_y[0]; + _50BAC8_screen_space_x[v55] = _50BAC8_screen_space_x[0]; + _50B9D8_screen_space_y[v55] = _50B9D8_screen_space_y[0]; } return v55; -} +}*/ //----- (00424579) -------------------------------------------------------- int __fastcall sub_424579(int uFaceID, stru320 *a2) @@ -2367,7 +2799,7 @@ { v62 = stru_50B700._screen_space_x[v55] << 16; v54 = ((stru_50B700._screen_space_x[v13] - stru_50B700._screen_space_x[v55]) << 16) / (stru_50B700._screen_space_y[v13] - stru_50B700._screen_space_y[v55]); - a2->array_18[min_y] = LOWORD(stru_50B700._screen_space_x[v55]); + a2->viewport_left_side[min_y] = LOWORD(stru_50B700._screen_space_x[v55]); } v15 = v65; v61 = v65; @@ -2404,13 +2836,13 @@ { v61 = stru_50B700._screen_space_x[v20] << 16; v53 = ((stru_50B700._screen_space_x[v19] - stru_50B700._screen_space_x[v20]) << 16) / stru_50B700._screen_space_y[v19] - stru_50B700._screen_space_y[v20]; - a2->array_3D8[max_y] = LOWORD(stru_50B700._screen_space_x[v20]); + a2->viewport_right_side[max_y] = LOWORD(stru_50B700._screen_space_x[v20]); } v22 = min_y; if ( min_y <= max_y ) { - //v56 = &a2->array_3D8[v7]; - //v23 = &a2->array_18[v7]; + //v56 = &a2->viewport_right_side[v7]; + //v23 = &a2->viewport_left_side[v7]; for ( v70 = min_y; v70 <= max_y; ++v70 ) { v24 = v13; @@ -2451,21 +2883,21 @@ v61 = stru_50B700._screen_space_x[v29] << 16; } } - //v34 = (char *)a2->array_18 - (char *)a2->array_3D8; - //v35 = *(__int16 *)((char *)&a2->array_3D8[v70] + v34); + //v34 = (char *)a2->viewport_left_side - (char *)a2->viewport_right_side; + //v35 = *(__int16 *)((char *)&a2->viewport_right_side[v70] + v34); //v35 = HIWORD(v62); - a2->array_18[v70] = HIWORD(v62); - a2->array_3D8[v70] = HIWORD(v61); + a2->viewport_left_side[v70] = HIWORD(v62); + a2->viewport_right_side[v70] = HIWORD(v61); //v34 = &a2->array_3D8[v70]; //v35 = a2->array_3D8[v70]; - if ( a2->array_18[v70] > a2->array_3D8[v70] ) + if ( a2->viewport_left_side[v70] > a2->viewport_right_side[v70] ) { - v36 = a2->array_18[v70] ^ a2->array_3D8[v70]; - v37 = a2->array_3D8[v70]; - a2->array_18[v70] = v36; + v36 = a2->viewport_left_side[v70] ^ a2->viewport_right_side[v70]; + v37 = a2->viewport_right_side[v70]; + a2->viewport_left_side[v70] = v36; v38 = v37 ^ v36; - a2->array_18[v70] ^= v38; - a2->array_3D8[v70] = v38; + a2->viewport_left_side[v70] ^= v38; + a2->viewport_right_side[v70] = v38; } //++v56; v62 += v54; @@ -2485,11 +2917,11 @@ if ( min_y <= max_y ) { //a3a = (char *)a2 - (char *)a3; - //v42 = &a3->array_3D8[v7]; + //v42 = &a3->viewport_right_side[v7]; //v57 = *(__int16 *)((char *)v42 + a3a); for ( v71 = min_y; v71 <= max_y; ++v71 ) { - if ( a2->array_18[v71] >= a3->array_18[v71] && a2->array_18[v71] <= a3->array_3D8[v71] ) + if ( a2->viewport_left_side[v71] >= a3->viewport_left_side[v71] && a2->viewport_left_side[v71] <= a3->viewport_right_side[v71] ) break; //++v57; ++min_y; @@ -2499,11 +2931,11 @@ if ( max_y < min_y ) return false; //a3a = (char *)a2 - (char *)a3; - //v43 = &a3->array_3D8[v8]; + //v43 = &a3->viewport_right_side[v8]; //v58 = *(__int16 *)((char *)v43 + a3a); for ( v72 = max_y; v72 >= min_y; --v72 ) { - if ( a2->array_3D8[v72] >= a3->array_18[v72] && a2->array_18[v72] <= a3->array_3D8[v72] ) + if ( a2->viewport_right_side[v72] >= a3->viewport_left_side[v72] && a2->viewport_left_side[v72] <= a3->viewport_right_side[v72] ) break; //--v58; --max_y; @@ -2514,40 +2946,40 @@ return false; //a3b = (char *)a3 - (char *)a2; v59 = min_y; - //v45 = &a2->array_18[v7]; + //v45 = &a2->viewport_left_side[v7]; for ( v46 = max_y - min_y + 1; v46; --v46 ) { //v47 = *(__int16 *)((char *)v45 + a3b); - if ( a2->array_18[v59] < a3->array_18[v59] ) - a2->array_18[v59] = a3->array_18[v59]; - if ( a2->array_3D8[v59] > a3->array_3D8[v59] ) - a2->array_3D8[v59] = a3->array_3D8[v59]; + if ( a2->viewport_left_side[v59] < a3->viewport_left_side[v59] ) + a2->viewport_left_side[v59] = a3->viewport_left_side[v59]; + if ( a2->viewport_right_side[v59] > a3->viewport_right_side[v59] ) + a2->viewport_right_side[v59] = a3->viewport_right_side[v59]; ++v59; //++v45; } a2->_viewport_space_y = min_y; a2->_viewport_space_w = max_y; - a2->field_8 = a2->array_18[min_y]; - //v48 = a2->array_3D8[v7]; + a2->field_8 = a2->viewport_left_side[min_y]; + //v48 = a2->viewport_right_side[v7]; a2->field_10 = min_y; a2->field_14 = min_y; - a2->field_C = a2->array_3D8[min_y]; + a2->field_C = a2->viewport_right_side[min_y]; v49 = min_y + 1; if ( v49 <= max_y ) { - //v50 = &a2->array_3D8[v49]; + //v50 = &a2->viewport_right_side[v49]; for ( v49; v49 <= max_y; ++v49 ) { - //v51 = a2->array_18[v49]; - if ( a2->array_18[v49] < a2->field_8 ) + //v51 = a2->viewport_left_side[v49]; + if ( a2->viewport_left_side[v49] < a2->field_8 ) { - a2->field_8 = a2->array_18[v49]; + a2->field_8 = a2->viewport_left_side[v49]; a2->field_10 = v49; } - if ( a2->array_3D8[v49] > a2->field_C ) + if ( a2->viewport_right_side[v49] > a2->field_C ) { - a2->field_C = a2->array_3D8[v49]; + a2->field_C = a2->viewport_right_side[v49]; a2->field_14 = v49; } //++v50;
--- a/mm7_3.cpp Mon Jun 10 00:57:51 2013 +0600 +++ b/mm7_3.cpp Sat Jun 15 09:55:07 2013 +0600 @@ -11039,13 +11039,13 @@ { if ( i < y || i > w ) { - array_18[i] = 640; - array_3D8[i] = -1; + viewport_left_side[i] = 640; + viewport_right_side[i] = -1; } else { - array_18[i] = x; - array_3D8[i] = z; + viewport_left_side[i] = x; + viewport_right_side[i] = z; } } }
--- a/mm7_4.cpp Mon Jun 10 00:57:51 2013 +0600 +++ b/mm7_4.cpp Sat Jun 15 09:55:07 2013 +0600 @@ -4516,29 +4516,29 @@ v101 = 2 * stru_F8A590._viewport_space_y; while ( 1 ) { - a1 = *(__int16 *)((char *)stru_F8A590.array_18 + v12); + a1 = *(__int16 *)((char *)stru_F8A590.viewport_left_side + v12); sub_4AE313(a1, result, &stru_F81018.field_0); if ( LOBYTE(viewparams->field_20) ) { v15 = v95 * (v12 - pBLVRenderParams->uViewportY); v119 = &pBLVRenderParams->pTargetZBuffer[2 - * (*(__int16 *)((char *)stru_F8A590.array_18 + v12) + * (*(__int16 *)((char *)stru_F8A590.viewport_left_side + v12) + 320 * (v12 - pBLVRenderParams->uViewportY)) - pBLVRenderParams->uViewportX]; v16 = &pBLVRenderParams->pRenderTarget[v15 - + 2 * *(__int16 *)((char *)stru_F8A590.array_18 + v12) + + 2 * *(__int16 *)((char *)stru_F8A590.viewport_left_side + v12) - pBLVRenderParams->uViewportX]; v14 = &pBLVRenderParams->pRenderTarget[v15 - + 2 * *(__int16 *)((char *)stru_F8A590.array_3D8 + v12) + + 2 * *(__int16 *)((char *)stru_F8A590.viewport_right_side + v12) - pBLVRenderParams->uViewportX]; v123 = (unsigned int)v16; } else { - v13 = *(__int16 *)((char *)stru_F8A590.array_18 + v12); + v13 = *(__int16 *)((char *)stru_F8A590.viewport_left_side + v12); v119 = &pBLVRenderParams->pTargetZBuffer[v13 + v99]; v123 = (unsigned int)&pBLVRenderParams->pRenderTarget[v13 + v11]; - v14 = &pBLVRenderParams->pRenderTarget[v11 + *(__int16 *)((char *)stru_F8A590.array_3D8 + v12)]; + v14 = &pBLVRenderParams->pRenderTarget[v11 + *(__int16 *)((char *)stru_F8A590.viewport_right_side + v12)]; } v117 = (unsigned int)v14; HIWORD(v17) = HIWORD(stru_F81018.field_0.field_0); @@ -5004,7 +5004,7 @@ v56 = 640 * stru_F8A590._viewport_space_y; for ( i = &stru_F83B80[stru_F8A590._viewport_space_y]; ; v14 = i ) { - sub_4AE1E7(v12, *(__int16 *)((char *)stru_F8A590.array_18 + v13), v12); + sub_4AE1E7(v12, *(__int16 *)((char *)stru_F8A590.viewport_left_side + v13), v12); v14->field_0 += (GetTickCount() << 11) - (pBLVRenderParams->vPartyPos.x << 16); v15 = GetTickCount(); v16 = v14->field_0; @@ -5015,10 +5015,10 @@ v52 = (unsigned __int64)(v17 * (signed __int64)-pBLVRenderParams->sSineY) >> 16; v53 = (unsigned __int64)(v17 * (signed __int64)pBLVRenderParams->sCosineY) >> 16; v18 = v14->field_28; - v19 = *(__int16 *)((char *)stru_F8A590.array_18 + v13); + v19 = *(__int16 *)((char *)stru_F8A590.viewport_left_side + v13); LOWORD(v18) = 0; v46 = stru_F8AD28.field_0 | v18; - v61 = *(__int16 *)((char *)stru_F8A590.array_3D8 + v13) - v19; + v61 = *(__int16 *)((char *)stru_F8A590.viewport_right_side + v13) - v19; if ( LOBYTE(viewparams->field_20) ) { v63 = &pBLVRenderParams->pTargetZBuffer[2 * (v19 + 320 * (v13 - pBLVRenderParams->uViewportY))