Mercurial > mm7
diff Render.cpp @ 1391:cc9a3a24d61d
Moved stru11, stru12 and some SW Rendering stuff to the archives.
stru148 -> struct Polygon
author | Nomad |
---|---|
date | Thu, 18 Jul 2013 14:42:54 +0200 |
parents | 613c77e51e38 |
children | 8ea496564034 |
line wrap: on
line diff
--- a/Render.cpp Thu Jul 18 04:08:20 2013 +0200 +++ b/Render.cpp Thu Jul 18 14:42:54 2013 +0200 @@ -221,1461 +221,13 @@ return result; } -//----- (00487389) -------------------------------------------------------- -void Render::ExecOutdoorDrawSW() -{ - unsigned __int16 *v0; // ebx@1 - unsigned int v1; // esi@1 - stru148 *v2; // eax@1 - Span *v3; // edi@6 - stru148 *v4; // esi@9 - Texture *v5; // ebp@10 - int v6; // esi@16 - unsigned int v7; // edx@16 - char *v8; // ecx@17 - unsigned int v9; // edi@22 - int v10; // eax@26 - int v11; // eax@27 - unsigned int v12; // ebp@32 - Span *v13; // esi@33 - int v14; // ecx@37 - int v15; // eax@40 - Texture *v16; // ebp@51 - //unsigned int v17; // eax@51 - int v18; // eax@54 - char v19; // al@56 - unsigned int v20; // eax@57 - int v21; // ecx@57 - unsigned int v22; // eax@57 - stru149 *v23; // eax@65 - int v24; // eax@67 - ODMFace *v25; // eax@78 - signed int v26; // edx@79 - signed int v27; // ecx@79 - unsigned int v28; // eax@106 - unsigned int v29; // ebp@117 - Span *v30; // esi@118 - unsigned int v31; // ST04_4@124 - int v33; // [sp+18h] [bp-44h]@80 - signed int v34; // [sp+1Ch] [bp-40h]@3 - signed int v35; // [sp+20h] [bp-3Ch]@79 - Span **v36; // [sp+24h] [bp-38h]@4 - unsigned int v37; // [sp+28h] [bp-34h]@1 - unsigned __int16 *a1; // [sp+2Ch] [bp-30h]@1 - int a1a; // [sp+2Ch] [bp-30h]@26 - unsigned int a1b; // [sp+2Ch] [bp-30h]@116 - char v41; // [sp+30h] [bp-2Ch]@57 - - v0 = pRenderer->pTargetSurface; - v1 = pOutdoorCamera->numStru148s; - a1 = pRenderer->pTargetSurface; - v2 = array_77EC08.data(); - v37 = pOutdoorCamera->numStru148s; - if ( !(pParty->uFlags & 2) ) - { - v1 = uNumElementsIn80AA28; - v2 = ptr_80AA28[0]; - v37 = uNumElementsIn80AA28; - } - v34 = 0; - if ( (signed int)v1 > 0 ) - { - v36 = &v2->prolly_head; - do - { - if ( pParty->uFlags & 2 ) - v3 = *v36; - else - v3 = ptr_80AA28[v34]->prolly_head; - if ( v3 ) - { - v4 = v3->pParent; - if ( v4 ) - { - v5 = v4->pTexture; - if ( v5 ) - { - if ( v3->field_8 >= (signed int)pViewport->uViewportTL_X || v3->field_C != pViewport->uViewportTL_X ) - { - LOBYTE(v4->field_32) |= 2u; - v14 = *(int *)&v4->flags; - if ( v14 & 0x10 && v4->field_59 != 5 ) - { - dword_80AA20 = (v4->terrain_grid_z - 64) << 25; - dword_80AA1C = dword_80AA20 + 0x1FF0000; - dword_80AA14 = (v4->terrain_grid_x << 25) + 0x7FFF0000; - dword_80AA18 = dword_80AA14 - 0x1FF0000; - byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo( - v4->terrain_grid_z, - v4->terrain_grid_x - 1) >> 9) & 1; - if ( *(int *)&v4->flags & 2 || (v15 = *(int *)&v4->flags, BYTE1(v15) & 1) ) - { - if ( *(int *)&v4->flags & 2 ) - { - while ( 1 ) - { - if ( pOutdoorCamera->outdoor_no_wavy_water ) - sr_sub_48408A_prolly_odm_water_no_waves(v3); - else - sr_sub_485407_prolly_odm_water_wavy(v3); - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - } - else - { - while ( 1 ) - { - v16 = v4->pTexture; - v4->pTexture = pBitmaps_LOD->LoadTexturePtr("wtrtyl"); - if ( pOutdoorCamera->outdoor_no_wavy_water ) - sr_sub_48408A_prolly_odm_water_no_waves(v3); - else - sr_sub_485407_prolly_odm_water_wavy(v3); - v18 = v4->terrain_grid_z - 64; - v4->pTexture = v16; - dword_80AA20 = v18 << 25; - dword_80AA1C = (v18 << 25) + 0x1FF0000; - dword_80AA14 = (v4->terrain_grid_x << 25) + 0x7FFF0000; - dword_80AA18 = dword_80AA14 - 0x1FF0000; - byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo( - v4->terrain_grid_z, - v4->terrain_grid_x - 1) >> 9) & 1; - sr_sub_484442(v3); - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - } - } - else - { - while ( sr_sub_48408A_prolly_odm_water_no_waves(v3) ) - { - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - } - } - else - { - v19 = v4->field_59; - if ( v19 != 5 ) - { - if ( v14 & 2 ) - { - while ( 1 ) - { - v28 = pBitmaps_LOD->LoadTexture("wtrtyla"); - v4->pTexture = (Texture *)(v28 != -1 ? &pBitmaps_LOD->pTextures[v28] : 0); - if ( !sr_sub_4847EB(v3) ) - break; - v4->pTexture = v5; - if ( !sr_sub_484442(v3) ) - break; - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - v5 = v4->pTexture; - } - } - else - { - if ( v19 == 1 ) - { - dword_80AA20 = (v4->terrain_grid_z - 64) << 25; - dword_80AA1C = dword_80AA20 + 33488896; - dword_80AA14 = (v4->terrain_grid_x << 25) + 0x7FFF0000; - dword_80AA18 = dword_80AA14 - 33488896; - byte_80AA10 = ((unsigned int)pOutdoor->ActuallyGetSomeOtherTileInfo( - v4->terrain_grid_z, - v4->terrain_grid_x - 1) >> 9) & 1; - while ( 1 ) - { - if ( !sr_sub_4847EB(v3) ) - sr_sub_48585C_mb_DrawSpan(v3, &pRenderer->pTargetSurface[v3->field_8 + 640 * v3->field_A], 0); - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - } - } - goto LABEL_14; - } - v4->ptr_38 = (stru149 *)&v41; - v4->_479295(); - v20 = GetTickCount(); - v21 = *(int *)&v4->flags; - v22 = v20 >> 3; - if ( BYTE1(v21) & 4 ) - { - v4->sTextureDeltaV -= v22 & v4->pTexture->uHeightMinus1; - } - else - { - if ( BYTE1(v21) & 8 ) - v4->sTextureDeltaV += v22 & v4->pTexture->uHeightMinus1; - } - if ( BYTE1(v21) & 0x10 ) - { - v4->sTextureDeltaU -= v22 & v4->pTexture->uWidthMinus1; - } - else - { - if ( BYTE1(v21) & 0x20 ) - v4->sTextureDeltaU += v22 & v4->pTexture->uWidthMinus1; - } - v23 = v4->ptr_38; - v4->field_52 = 32; - v4->field_5A = 5; - if ( (double)abs(v23->field_C) > 52428.8 ) - { - v4->field_52 = 8; - v4->field_5A = 3; - } - v24 = *(int *)&v4->flags; - if ( !(v24 & 0x10000) ) - { - if ( !(v24 & 2) ) - { - v25 = v4->pODMFace; - if ( v25->uPolygonType == 1 ) - { - v26 = v25->pTextureUIDs[0]; - dword_80AA1C = v26; - dword_80AA20 = v26; - v27 = v25->pTextureVIDs[0]; - dword_80AA14 = v27; - dword_80AA18 = v27; - v35 = 1; - if ( v25->uNumVertices > 1u ) - { - v33 = (int)&v25->pTextureVIDs[1]; - do - { - if ( dword_80AA20 > *(short *)(v33 - 40) ) - dword_80AA20 = *(short *)(v33 - 40); - if ( v26 < *(short *)(v33 - 40) ) - { - v26 = *(short *)(v33 - 40); - dword_80AA1C = *(short *)(v33 - 40); - } - if ( dword_80AA18 > *(short *)v33 ) - dword_80AA18 = *(short *)v33; - if ( v27 < *(short *)v33 ) - { - v27 = *(short *)v33; - dword_80AA14 = *(short *)v33; - } - ++v35; - v33 += 2; - } - while ( v35 < v25->uNumVertices ); - v0 = a1; - } - dword_80AA20 = (dword_80AA20 + v4->sTextureDeltaU) << 16; - dword_80AA1C = ((v26 + v4->sTextureDeltaU) << 16) - 65536; - dword_80AA18 = (dword_80AA18 + v4->sTextureDeltaV) << 16; - dword_80AA14 = ((v27 + v4->sTextureDeltaV) << 16) - 65536; - } - while ( 1 ) - { - if ( !sr_sub_482E07(v3, v0) ) - sr_sub_48585C_mb_DrawSpan(v3, &v0[v3->field_8 + 640 * v3->field_A], 0); - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - goto LABEL_14; - } - while ( 1 ) - { -LABEL_74: - if ( !sr_sub_4839BD(v3, v0) ) - sr_sub_48585C_mb_DrawSpan(v3, &v0[v3->field_8 + 640 * v3->field_A], 0); - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - goto LABEL_14; - } - if ( v24 & 2 ) - goto LABEL_74; - while ( 1 ) - { - if ( !sr_sub_482A94(v3) ) - sr_sub_48585C_mb_DrawSpan(v3, &v0[v3->field_8 + 640 * v3->field_A], 0); - v3->field_E = LOWORD(unnamed_6BE060[1]); - if ( v4->prolly_tail == v3 ) - break; - v3 = v3->pNext; - } - } - } - else - { - v3->field_E = LOWORD(unnamed_6BE060[1]); - } - } - } - } -LABEL_14: - ++v34; - LOWORD(v2) = v34; - v36 += 67; - } - while ( v34 < (signed int)v37 ); - } - if ( pParty->uFlags & 2 ) - { - v6 = pOutdoorCamera->numStru148s; - v7 = 0; - uNumElementsIn80AA28 = 0; - if ( pOutdoorCamera->numStru148s > 0 ) - { - v8 = (char *)&array_77EC08[0].flags; - do - { - v2 = *(stru148 **)v8; - if ( (unsigned int)v2 & 0x20000 ) - { - ++v7; - *(int *)v8 = (unsigned int)v2 & 0xFFFDFFFF; - LOWORD(v2) = (short)v8 - 48; - *(&uNumElementsIn80AA28 + v7) = (unsigned int)(v8 - 48); - } - v8 += 268; - --v6; - } - while ( v6 ); - uNumElementsIn80AA28 = v7; - } - } - v9 = pOutdoorCamera->uNumSpans; - unnamed_6BE060[0] = pOutdoorCamera->uNumSpans; - if (pOutdoorCamera->numStru148s >= 1999) - return; - - array_77EC08[1999]._48607B(&stru_8019C8); - array_77EC08[1999].ptr_38->sky_48694B(); - - if (pOutdoor->uMainTile_BitmapID == -1) - { - array_77EC08[1999].pTexture = nullptr; - return; - } - else - array_77EC08[1999].pTexture = pBitmaps_LOD->GetTexture(pOutdoor->uMainTile_BitmapID); - array_77EC08[1999].dimming_level = 23 - (-20 * pOutdoor->vSunlight.z >> 16); - if ( array_77EC08[1999].dimming_level > 20 ) - array_77EC08[1999].dimming_level = 20; - v10 = stru_5C6E00->Sin(pIndoorCamera->sRotationX); - array_77EC08[1999].v_18.y = 0; - array_77EC08[1999].v_18.x = v10; - array_77EC08[1999].v_18.z = stru_5C6E00->Cos(pIndoorCamera->sRotationX); - array_77EC08[1999].field_24 = 2048 - (pIndoorCamera->pos.z << 16); - a1a = (signed __int64)((double)(pIndoorCamera->pos.z * pOutdoorCamera->int_fov_rad) - / ((double)pOutdoorCamera->int_fov_rad + 8192.0) - + (double)pViewport->uScreenCenterY); - cos((double)pIndoorCamera->sRotationX * 0.0030664064); - sin((double)pIndoorCamera->sRotationX * 0.0030664064); - array_77EC08[1999]._48607B(&stru_8019C8); - array_77EC08[1999].ptr_38->sky_48694B(); - - if (pOutdoor->uSky_TextureID == -1) - { - array_77EC08[1999].pTexture = nullptr; - return; - } - else - array_77EC08[1999].pTexture = pBitmaps_LOD->GetTexture(pOutdoor->uSky_TextureID); - array_77EC08[1999].dimming_level = 0; - v11 = stru_5C6E00->Sin(pIndoorCamera->sRotationX + 16); - array_77EC08[1999].v_18.y = 0; - array_77EC08[1999].v_18.x = -v11; - array_77EC08[1999].v_18.z = -stru_5C6E00->Cos(pIndoorCamera->sRotationX + 16); - LOWORD(v2) = 224 * LOWORD(pMiscTimer->uTotalGameTimeElapsed); - array_77EC08[1999].field_24 = 0x2000000u; - array_77EC08[1999].sTextureDeltaU = 224 * pMiscTimer->uTotalGameTimeElapsed; - array_77EC08[1999].sTextureDeltaV = 224 * pMiscTimer->uTotalGameTimeElapsed; - if ( day_attrib & DAY_ATTRIB_FOG - && (LOWORD(v2) = LOWORD(pParty->uCurrentHour), pParty->uCurrentHour >= 5) - && pParty->uCurrentHour < 0x15 - || bUnderwater ) - { - v2 = (stru148 *)*(short *)PaletteManager::Get_Mist_or_Red_LUT(array_77EC08[1999].pTexture->palette_id2, 31, 1); - a1b = (unsigned int)v2; - if ( (signed int)v9 <= 0 ) - return; - v29 = v9; - while ( 1 ) - { - v30 = &pSpans[v29 - 1]; - v2 = (stru148 *)v30->field_E; - if ( v2 != (stru148 *)unnamed_6BE060[1] ) - { - LOWORD(v2) = LOWORD(pViewport->uViewportTL_X); - if ( v30->field_8 >= (signed int)pViewport->uViewportTL_X ) - goto LABEL_124; - if ( v30->field_C == pViewport->uViewportTL_X ) - { - v30->field_E = LOWORD(unnamed_6BE060[1]); - } - else - { - v30->field_8 = LOWORD(pViewport->uViewportTL_X); - v30->field_C -= LOWORD(pViewport->uViewportTL_X); - if ( v30->field_C >= 0 ) - { -LABEL_124: - v31 = v30->field_C; - v30->pParent = &array_77EC08[1999]; - fill_pixels_fast( - a1b, - &pRenderer->pTargetSurface[v30->field_8 + pRenderer->uTargetSurfacePitch * v30->field_A], - v31); - j_memset32(-65536, &pRenderer->pActiveZBuffer[v30->field_8 + 640 * v30->field_A], v30->field_C); - goto LABEL_125; - } - LOWORD(v2) = LOWORD(unnamed_6BE060[1]); - v30->field_E = LOWORD(unnamed_6BE060[1]); - } - } -LABEL_125: - --v29; - --v9; - if ( !v9 ) - return; - } - } - if ( (signed int)v9 > 0 ) - { - v12 = v9; - do - { - v13 = &pSpans[v12 - 1]; - v2 = (stru148 *)v13->field_E; - if ( v2 != (stru148 *)unnamed_6BE060[1] ) - { - LOWORD(v2) = LOWORD(pViewport->uViewportTL_X); - if ( v13->field_8 >= (signed int)pViewport->uViewportTL_X ) - goto LABEL_109; - if ( v13->field_C != pViewport->uViewportTL_X ) - { - v13->field_8 = LOWORD(pViewport->uViewportTL_X); - v13->field_C -= LOWORD(pViewport->uViewportTL_X); - if ( v13->field_C >= 0 ) - { -LABEL_109: - if ( pOutdoorCamera->bNoSky ) - { - const_1_0(); - } - else - { - v13->pParent = &array_77EC08[1999]; - if ( !Render::DrawSkySW(v13, &array_77EC08[1999], a1a) ) - j_memset32(-65536, &pRenderer->pActiveZBuffer[v13->field_8 + 640 * v13->field_A], v13->field_C); - } - } - LOWORD(v2) = LOWORD(unnamed_6BE060[1]); - v13->field_E = LOWORD(unnamed_6BE060[1]); - goto LABEL_114; - } - v13->field_E = LOWORD(unnamed_6BE060[1]); - } -LABEL_114: - --v12; - --v9; - } - while ( v9 ); - } -} - -//----- (00485044) -------------------------------------------------------- -int Render::DrawSkySW(Span *a1, stru148 *a2, int a3) -{ - stru148 *v3; // esi@1 - Span *v4; // edi@1 - float v5; // ST2C_4@1 - signed int result; // eax@2 - int v7; // ST40_4@3 - stru149 *v8; // eax@3 - int v9; // ebx@3 - int v10; // ecx@3 - int v11; // edx@3 - int v12; // eax@3 - int v13; // ST28_4@5 - int v14; // eax@5 - signed __int64 v15; // qtt@11 - int v16; // ST28_4@11 - int v17; // eax@11 - signed int v18; // ecx@11 - int v19; // ST40_4@11 - int v20; // ST3C_4@11 - int v21; // ST30_4@11 - void *v22; // eax@11 - Texture *v23; // esi@11 - int v24; // ecx@11 - unsigned int v25; // esi@11 - int v26; // edi@11 - unsigned __int16 *v27; // eax@11 - int *v28; // ebx@12 - int v29; // edx@13 - unsigned __int16 v30; // cx@13 - int v31; // edx@14 - unsigned __int16 v32; // cx@14 - unsigned __int8 v33; // sf@15 - unsigned __int8 v34; // of@15 - double v35; // [sp+14h] [bp-38h]@1 - int v36; // [sp+18h] [bp-34h]@3 - signed int v37; // [sp+18h] [bp-34h]@11 - int v38; // [sp+1Ch] [bp-30h]@3 - signed int v39; // [sp+1Ch] [bp-30h]@11 - int v40; // [sp+20h] [bp-2Ch]@3 - void *v41; // [sp+20h] [bp-2Ch]@11 - int v42; // [sp+24h] [bp-28h]@3 - unsigned __int8 *v43; // [sp+24h] [bp-28h]@11 - int v44; // [sp+28h] [bp-24h]@11 - int v45; // [sp+2Ch] [bp-20h]@3 - signed int v46; // [sp+30h] [bp-1Ch]@3 - __int16 v47; // [sp+30h] [bp-1Ch]@11 - signed int v48; // [sp+34h] [bp-18h]@3 - int v49; // [sp+34h] [bp-18h]@11 - int v50; // [sp+38h] [bp-14h]@3 - unsigned __int16 *v51; // [sp+38h] [bp-14h]@11 - int v52; // [sp+3Ch] [bp-10h]@4 - int a1a; // [sp+40h] [bp-Ch]@3 - int v54; // [sp+44h] [bp-8h]@3 - int v55; // [sp+48h] [bp-4h]@3 - int v56; // [sp+54h] [bp+8h]@11 - int *v57; // [sp+54h] [bp+8h]@11 - - v3 = a2; - v4 = a1; - v5 = (double)(pViewport->uViewportBR_X - pViewport->uViewportTL_X) * 0.5 / tan(0.6457717418670654) + 0.5; - v35 = v5 + 6.7553994e15; - if ( LODWORD(v35) ) - { - v55 = 65536 / SLODWORD(v35); - v7 = 65536 / SLODWORD(v35) * (a3 - v4->field_A); - v8 = v3->ptr_38; - v42 = ((unsigned __int64)(v3->ptr_38->field_14 * (signed __int64)v7) >> 16) + v8->field_C; - v40 = ((unsigned __int64)(v8->field_20 * (signed __int64)v7) >> 16) + v3->ptr_38->field_18; - v38 = pOutdoorCamera->camera_rotation_y_int_sine; - HIDWORD(v35) = pOutdoorCamera->camera_rotation_y_int_cosine; - v45 = v4->field_C; - v9 = ((unsigned __int64)(v3->v_18.z * (signed __int64)v7) >> 16) + v3->v_18.x; - v10 = 65536 / SLODWORD(v35) * (pViewport->uScreenCenterX - v4->field_8); - v48 = 0; - v50 = 65536 / SLODWORD(v35) * (pViewport->uScreenCenterX - v4->field_8); - v46 = -v3->field_24; - v11 = v4->field_A - 1; - v54 = v11; - v12 = 65536 / SLODWORD(v35) * (a3 - v11); - a1a = 65536 / SLODWORD(v35) * (a3 - v11); - while ( 1 ) - { - v52 = v9; - if ( v9 ) - { - v13 = abs(v46 >> 14); - v14 = abs(v9); - v11 = v54; - v10 = v50; - if ( v13 <= v14 ) - break; - v12 = a1a; - } - if ( v11 <= (signed int)pViewport->uViewportTL_Y ) - break; - v9 = ((unsigned __int64)(v3->v_18.z * (signed __int64)v12) >> 16) + v3->v_18.x; - --v54; - a1a += v55; - v12 = a1a; - v11 = v54; - v48 = 1; - } - if ( v48 ) - v52 = ((unsigned __int64)(v3->v_18.z * (signed __int64)(v55 * (a3 + (signed int)v4->field_A - 2 * v11))) >> 16) - + v3->v_18.x; - LODWORD(v15) = v46 << 16; - HIDWORD(v15) = v46 >> 16; - v16 = v42 + ((unsigned __int64)(v3->ptr_38->field_10 * (signed __int64)v10) >> 16); - v17 = v40 + ((unsigned __int64)(v3->ptr_38->field_1C * (signed __int64)v10) >> 16); - v18 = v15 / v52; - v43 = v3->pTexture->pLevelOfDetail0_prolly_alpha_mask; - v19 = v3->sTextureDeltaU + ((signed int)((unsigned __int64)(v16 * v15 / v52) >> 16) >> 3); - v56 = v15 / v52; - v20 = v3->sTextureDeltaV + ((signed int)((unsigned __int64)(v17 * v15 / v52) >> 16) >> 3); - v21 = (unsigned __int64)(v55 * (signed __int64)v56) >> 16; - v39 = (signed int)((unsigned __int64)(v21 * (signed __int64)v38) >> 16) >> 3; - v37 = (signed int)((unsigned __int64)(v21 * (signed __int64)v36) >> 16) >> 3; - v22 = sr_sub_47C178(v18, v3, 0, 1); - v23 = v3->pTexture; - v41 = v22; - v47 = 16 - v23->uWidthLn2; - v44 = v23->uTextureWidth - 1; - v49 = (v23->uTextureHeight << 16) - 65536; - v24 = v4->field_8; - v51 = &pRenderer->pTargetSurface[v24 + pRenderer->uTargetSurfacePitch * v4->field_A]; - v57 = &pRenderer->pActiveZBuffer[v24 + 640 * v4->field_A]; - v25 = v19; - v26 = v20; - v27 = v51; - if ( !(v45 & 1) ) - goto LABEL_15; - --v45; - v27 = v51 - 1; - v28 = v57; - ++v57; - while ( 1 ) - { - *v28 = -65536; - v31 = v44 & (v25 >> 16); - v27 += 2; - v25 += v39; - v32 = *((short *)v41 + *(&v43[v31] + ((v49 & (unsigned int)v26) >> v47))); - v26 += v37; - *(v27 - 1) = v32; -LABEL_15: - v34 = __OFSUB__(v45, 2); - v33 = v45 - 2 < 0; - v45 -= 2; - if ( v33 ^ v34 ) - break; - v29 = v44 & (v25 >> 16); - v25 += v39; - v30 = *((short *)v41 + *(&v43[v29] + ((v49 & (unsigned int)v26) >> v47))); - v26 += v37; - v28 = v57; - *v27 = v30; - v57 += 2; - v28[1] = -65536; - } - result = 1; - } - else - { - result = 0; - } - return result; -} - -//----- (0047F5C6) -------------------------------------------------------- -float Render::DrawBezierTerrain() -{ - //__debugbreak();Ritor1: it's temporarily - //return 0; - - unsigned int pDirectionIndicator1; // ebx@1 - unsigned int pDirectionIndicator2; // edi@1 - unsigned int v2; // eax@1 - int v3; // eax@3 - int v4; // edi@3 - int v5; // ebx@3 - int v6; // esi@3 - unsigned int v7; // eax@3 - int v8; // eax@4 - unsigned int v9; // eax@6 - int v10; // eax@7 - //int v11; // ebx@9 - //int v12; // edi@9 - int v13; // eax@21 - int v14; // eax@31 - int v15; // edi@33 - int v16; // eax@34 - int v17; // edx@34 - int v18; // ebx@34 - int v19; // eax@36 - int v20; // eax@39 - int v21; // ecx@43 - //char v22; // zf@44 - int v23; // ecx@47 - //int v24; // edi@52 - int v25; // eax@54 - int v26; // ecx@54 - int v27; // eax@56 - int v28; // edx@60 - int v29; // ecx@61 - int v30; // ecx@64 - int v31; // ecx@68 - int v32; // eax@70 - //int v33; // ecx@71 - int v34; // eax@73 - int v35; // ecx@77 - int v36; // ecx@81 - int v37; // ecx@86 - int v38; // eax@88 - int v39; // ecx@88 - int v40; // eax@90 - int v41; // edx@94 - //int v42; // ecx@95 - int v43; // ecx@98 - int v44; // ecx@102 - int v45; // eax@104 - int v46; // eax@107 - int v47; // ecx@111 - int v48; // ecx@115 - int v49; // edi@120 - int v50; // eax@122 - int v51; // ecx@122 - int v52; // eax@124 - int v53; // edx@128 - int v54; // ecx@129 - int v55; // ecx@132 - int v56; // eax@139 - int v57; // ecx@140 - int v58; // eax@142 - int v59; // ecx@146 - //int v60; // ecx@147 - int v61; // ecx@150 - int v62; // ecx@155 - int v63; // eax@157 - int v64; // ecx@157 - int v65; // eax@159 - int v66; // edx@163 - int v67; // ecx@164 - int v68; // ecx@167 - //int v69; // eax@173 - int v70; // edi@178 - //int v71; // eax@178 - //int v72; // ecx@178 - //int x; // ebx@180 - //int v74; // eax@182 - //int v75; // eax@184 - IndoorCameraD3D *pIndoorCameraD3D_3; // ecx@184 - int uStartZ; // ecx@184 - int v79; // ebx@185 - int v127; // esi@185 - int v86; // edi@196 - //int v87; // eax@196 - //int v88; // ecx@196 - //int v89; // eax@198 - //int v90; // ecx@200 - int v92; // ebx@203 - //int v93; // ST08_4@204 - int v97; // ST08_4@204 - float result; // eax@212 - //struct - //{ - int v106; // [sp+Ch] [bp-68h]@191 - int v103; // [sp+10h] [bp-64h]@190 - int v104; // [sp+12h] [bp-62h]@190 - //} v102; - int v105; // [sp+1Ch] [bp-58h]@1 - int v107; // [sp+20h] [bp-54h]@3 - int uEndZ; // [sp+24h] [bp-50h]@3 - int v108; // [sp+28h] [bp-4Ch]@9 - int v109; // [sp+2Ch] [bp-48h]@9 - int v110; // [sp+30h] [bp-44h]@9 - int v111; // [sp+34h] [bp-40h]@3 - int v112; // [sp+38h] [bp-3Ch]@6 - IndoorCameraD3D *pIndoorCameraD3D_4; // [sp+3Ch] [bp-38h]@9 - int v114; // [sp+40h] [bp-34h]@9 - int v115; // [sp+44h] [bp-30h]@9 - int v116; // [sp+48h] [bp-2Ch]@9 - //int v117; // [sp+4Ch] [bp-28h]@9 - int v118; // [sp+50h] [bp-24h]@9 - int v119; // [sp+54h] [bp-20h]@1 - int v120; // [sp+58h] [bp-1Ch]@1 - int i; // [sp+5Ch] [bp-18h]@1 - int v122; // [sp+60h] [bp-14h]@1 - int v123; // [sp+64h] [bp-10h]@1 - int v124; // [sp+68h] [bp-Ch]@1 - int v125; // [sp+6Ch] [bp-8h]@9 - int v126; // [sp+70h] [bp-4h]@9 - - v105 = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2);//2 - pDirectionIndicator1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY);//1536 - pDirectionIndicator2 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + pDirectionIndicator1);//512 - v124 = ((pIndoorCamera->uMapGridCellX << 16) + 3 * stru_5C6E00->Cos(stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + pDirectionIndicator1))) >> 16;//88 - v123 = ((pIndoorCamera->uMapGridCellZ << 16) + 3 * stru_5C6E00->Sin(pDirectionIndicator2)) >> 16;// 66 - v120 = pOutdoorCamera->outdoor_grid_band_3 + v124;//+- range X - v119 = pOutdoorCamera->outdoor_grid_band_3 + v123; - v2 = pOutdoorCamera->uCameraFovInDegrees + 15;//90 - i = v124 - pOutdoorCamera->outdoor_grid_band_3; - v122 = v123 - pOutdoorCamera->outdoor_grid_band_3; - - if ( v2 > 90 ) - v2 = 90; - v3 = (v2 << 11) / 720; - v4 = stru_5C6E00->uDoublePiMask & (pDirectionIndicator1 - v3); - v5 = stru_5C6E00->uDoublePiMask & (v3 + pDirectionIndicator1); - - v106 = stru_5C6E00->Cos(v4); - uEndZ = stru_5C6E00->Sin(v4); - - v111 = stru_5C6E00->Cos(v5); - v6 = stru_5C6E00->Sin(v5); - - v7 = v4 & stru_5C6E00->uPiMask; - if ( (v4 & stru_5C6E00->uPiMask) >= stru_5C6E00->uIntegerHalfPi ) - v8 = -stru_5C6E00->pTanTable[stru_5C6E00->uIntegerPi - v7]; - else - v8 = stru_5C6E00->pTanTable[v7]; - v112 = abs(v8); - - v9 = v5 & stru_5C6E00->uPiMask; - if ( (v5 & stru_5C6E00->uPiMask) >= stru_5C6E00->uIntegerHalfPi ) - v10 = -stru_5C6E00->pTanTable[stru_5C6E00->uIntegerPi - v9]; - else - v10 = stru_5C6E00->pTanTable[v9]; - v108 = abs(v10); - - //v11 = v124; - //v12 = v123; - v114 = 0; - v115 = 0; - pIndoorCameraD3D_4 = 0; - v125 = 0; - v126 = v124; - v118 = v123; - - v110 = (v106 >= 0 ? 1: -1);//2 * (v106 >= 0) - 1; - v109 = (uEndZ >= 0 ? 1: -1);//2 * (v107 >= 0) - 1; - uEndZ = (v111 >= 0 ? 1: -1);//2 * (v111 >= 0) - 1; - v106 = (v6 >= 0 ? 1: -1);//2 * (v6 >= 0) - 1; - - uint _i = 1; - uint j = 1; - - terrain_76DDC8[0] = -1; - terrain_76DFC8[0] = -1; - terrain_76E1C8[0] = -1; - terrain_76E3C8[0] = -1; - - for( uint _i = 1; _i < 128; _i++) - { - if ( v112 >= 0x10000 ) - { - int v1, v2; - /*v111 = 4294967296i64 / v112; - v114 += v111; - if ( v114 >= 65536 ) - { - v11 += v110; - v114 = (unsigned __int16)v114; - } - v12 += v109;*/ - } - else - { - v124 += v110; - v115 += v112; - if ( v112 + v115 >= 65536 ) - { - v123 += v109; - v115 = (unsigned __int16)v115; - } - } - if ( v124 < _i || v124 > v120 || v123 < v122 || v123 > v119 ) - break; - //v13 = v116++; - terrain_76E3C8[_i] = v124; - terrain_76E1C8[_i] = v123; - } - - for( j = 1; j < 128; j++ ) - { - if ( v108 >= 65536 ) - { - v111 = 4294967296i64 / v108; - v114 += v111;// - if ( v111 + v114 >= 65536 ) - { - v126 += uEndZ; - v114 = (unsigned __int16)v114;// - } - v118 += v106; - } - else - { - v125 += v108; - v126 += uEndZ; - if ( v125 >= 65536 ) - { - v118 += v106; - v125 = (unsigned __int16)v125; - } - } - //if ( v117 >= 128 ) - //break; - if ( v126 < _i ) - break; - if ( v126 > v120 ) - break; - v14 = v118; - if ( v118 < v122 ) - break; - if ( v118 > v119 ) - break; - terrain_76DFC8[j] = v126; - terrain_76DDC8[j] = v14; - } - v16 = 0; - v126 = 0; - v17 = j - 1; - v18 = _i - 1; - - switch ( v105 ) - { - case 0: - case 7: - { - //v116 = terrain_76DFC8[v17]; - if ( v120 > terrain_76DFC8[v17] ) - { - v125 = v120; - memset32(terrain_76D9C8.data(), v119 + 1, 4 * (v120 - terrain_76DFC8[v17] + 1)); - v19 = v120; - do - terrain_76DBC8[v126++] = v19--; - while ( v19 >= terrain_76DFC8[v17] ); - if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 + 127] ) - { - do - v20 = terrain_76DDC8[v17-- -1]; - while ( v20 == terrain_76DDC8[v17 -1] ); - } - v16 = v126; - --v17; - } - if ( v17 < 0 ) - v17 = 0; - v21 = terrain_76DFC8[v17]; - while ( 1 ) - { - v125 = terrain_76DFC8[v17]; - if ( v21 < v124 ) - break; - terrain_76DBC8[v16] = v21; - //v22 = terrain_76DDC8[v17] == 65535; - terrain_76D9C8[v16] = terrain_76DDC8[v17] + 1; - if ( terrain_76DDC8[v17] == 65535 ) - { - terrain_76D9C8[v16] = v123 + 1; - break; - } - if ( !v17 ) - break; - if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 - 1] ) - { - do - v23 = terrain_76DDC8[v17-- -1]; - while ( v23 == terrain_76DDC8[v17 -1] ); - } - --v17; - v21 = v125 - 1; - ++v16; - } - v16 = 0; - //v24 = terrain_76E3C8[v18]; - v126 = 0; - if ( v120 > terrain_76E3C8[v18] ) - { - v125 = v120; - memset32(terrain_76D5C8.data(), v122, 4 * (v120 - terrain_76E3C8[v18] + 1)); - do - { - v25 = v126; - v26 = v125--; - ++v126; - terrain_76D7C8[v25] = v26; - } - while ( v125 >= terrain_76E3C8[v18] ); - if ( terrain_76E3C8[v18] == terrain_76E1C8[v18 -1] ) - { - do - v27 = terrain_76E1C8[v18-- -1]; - while ( v27 == terrain_76E1C8[v18 -1] ); - } - v16 = v126; - --v18; - } - if ( v18 < 0 ) - v18 = 0; - v28 = terrain_76E3C8[v18]; - while ( v28 >= v124 ) - { - v29 = terrain_76E1C8[v18]; - terrain_76D7C8[v16] = v28; - terrain_76D5C8[v16] = v29; - if ( v29 == 65535 ) - { - v31 = v123; - terrain_76D5C8[v16] = v31; - break; - } - if ( !v18 ) - break; - if ( terrain_76E3C8[v18] == terrain_76E1C8[v18 -1] ) - { - do - v30 = terrain_76E1C8[v18-- -1]; - while ( v30 == terrain_76E1C8[v18 -1] ); - } - --v18; - --v28; - ++v16; - } - break; - } - case 1: - case 2: - { - //v116 = terrain_76DDC8[v17]; - if ( v122 < terrain_76DDC8[v17] ) - { - v106 = v122; - memset32(terrain_76DBC8.data(), v120 + 1, 4 * (terrain_76DDC8[v17] - v122 + 1)); - for ( v32 = v122; v32 <= terrain_76DDC8[v17]; v32++) - terrain_76D9C8[v126++] = v32; - if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] ) - { - do - v34 = terrain_76DBC8[v17-- -1]; - while ( v34 == terrain_76DBC8[v17 -1] ); - } - v16 = v126; - --v17; - } - if ( v17 < 0 ) - v17 = 0; - v35 = terrain_76DDC8[v17]; - v125 = terrain_76DDC8[v17]; - while ( v35 <= v123 ) - { - //v22 = terrain_76DFC8[v17] == 65535; - terrain_76DBC8[v16] = terrain_76DFC8[v17] + 1; - terrain_76D9C8[v16] = v125; - if ( terrain_76DFC8[v17] == 65535 ) - { - terrain_76DBC8[v16] = v124 + 1; - break; - } - if ( !v17 ) - break; - if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] ) - { - do - v36 = terrain_76DBC8[v17-- -1]; - while ( v36 == terrain_76DBC8[v17 -1] ); - } - --v17; - ++v125; - v35 = v125; - ++v16; - } - v16 = 0; - v126 = 0; - v37 = terrain_76E1C8[v18]; - if ( v122 < v37 ) - { - v114 = v122; - memset32(terrain_76D7C8.data(), i, 4 * (v37 - v122 + 1)); - do - { - v38 = v126; - v39 = v114; - ++v126; - ++v114; - terrain_76D5C8[v38] = v39; - } - while ( v114 <= terrain_76E1C8[v18] ); - if ( terrain_76E1C8[v18] == terrain_76DFC8[v18 -1] ) - { - do - v40 = terrain_76DFC8[v18-- -1]; - while ( v40 == terrain_76DFC8[v18 -1] ); - } - v16 = v126; - --v18; - } - if ( v18 < 0 ) - v18 = 0; - v41 = terrain_76E1C8[v18]; - while ( v41 <= v123 ) - { - terrain_76D5C8[v16] = v41; - terrain_76D7C8[v16] = terrain_76E3C8[v18]; - if ( terrain_76E3C8[v18] == 65535 ) - { - terrain_76D7C8[v16] = v124; - break; - } - if ( !v18 ) - break; - if ( terrain_76E1C8[v18] == terrain_76DFC8[v18 -1] ) - { - do - v43 = terrain_76DFC8[v18-- -1]; - while ( v43 == terrain_76DFC8[v18 -1] ); - } - --v18; - ++v41; - ++v16; - } - break; - } - case 5: - case 6: - { - //v116 = terrain_76DDC8[v17]; - if ( v119 > terrain_76DDC8[v17] ) - { - v106 = v119; - memset32(terrain_76DBC8.data(), i, 4 * (v119 - terrain_76DDC8[v17] + 1)); - for ( v45 = v119; v45 >= terrain_76DDC8[v17]; v45--) - terrain_76D9C8[v126++] = v45; - if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] ) - { - do - v46 = terrain_76DBC8[v17-- -1]; - while ( v46 == terrain_76DBC8[v17 -1] ); - } - v16 = v126; - --v17; - } - if ( v17 < 0 ) - v17 = 0; - v47 = terrain_76DDC8[v17]; - v125 = terrain_76DDC8[v17]; - while ( v47 >= v123 ) - { - //v22 = terrain_76DFC8[v17] == 65535; - terrain_76DBC8[v16] = terrain_76DFC8[v17]; - terrain_76D9C8[v16] = v125; - if ( terrain_76DFC8[v17] == 65535 ) - { - terrain_76DBC8[v16] = v124; - break; - } - if ( !v17 ) - break; - if ( terrain_76DDC8[v17] == terrain_76DBC8[v17 -1] ) - { - do - v48 = terrain_76DBC8[v17-- -1]; - while ( v48 == terrain_76DBC8[v17 -1] ); - } - --v17; - --v125; - v47 = v125; - ++v16; - } - v16 = 0; - v49 = terrain_76E1C8[v18]; - v126 = 0; - if ( v119 > v49 ) - { - v125 = v119; - memset32(terrain_76D7C8.data(), v120 + 1, 4 * (v119 - v49 + 1)); - do - { - v50 = v126; - v51 = v125--; - ++v126; - terrain_76D5C8[v50] = v51; - } - while ( v125 >= terrain_76E1C8[v18] ); - if ( terrain_76E1C8[v18] == terrain_76DFC8[v18 -1] ) - { - do - v52 = terrain_76DFC8[v18-- -1]; - while ( v52 == terrain_76DFC8[v18 -1] ); - } - v16 = v126; - --v18; - } - if ( v18 < 0 ) - v18 = 0; - v53 = terrain_76E1C8[v18]; - while ( v53 >= v123 ) - { - v54 = terrain_76E3C8[v18]; - terrain_76D5C8[v16] = v53; - terrain_76D7C8[v16] = v54 + 1; - if ( v54 == 65535 ) - { - terrain_76D7C8[v16] = v124 + 1; - break; - } - if ( !v18 ) - break; - if ( terrain_76E1C8[v18] == terrain_76DFC8[v18 -1] ) - { - do - v55 = terrain_76DFC8[v18-- -1]; - while ( v55 == terrain_76DFC8[v18 -1] ); - } - --v18; - --v53; - ++v16; - } - break; - } - case 3: - case 4: - { - //v116 = terrain_76DFC8[v17]; - if ( i < terrain_76DFC8[v17] ) - { - v106 = i; - memset32(terrain_76D9C8.data(), v122, 4 * (terrain_76DFC8[v17] - i + 1)); - v56 = i; - do - { - v57 = v126++; - terrain_76DBC8[v57] = v56++; - } - while ( v56 <= terrain_76DFC8[v17] ); - if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 -1] ) - { - do - v58 = terrain_76DDC8[v17-- -1]; - while ( v58 == terrain_76DDC8[v17 -1] ); - } - v16 = v126; - --v17; - } - if ( v17 < 0 ) - v17 = 0; - v59 = terrain_76DFC8[v17]; - while ( 1 ) - { - v125 = v59; - if ( v59 > v124 ) - break; - terrain_76DBC8[v16] = v59; - //v60 = terrain_76DDC8[v17]; - terrain_76D9C8[v16] = terrain_76DDC8[v17]; - if ( terrain_76DDC8[v17] == 65535 ) - { - terrain_76D9C8[v16] = v123; - break; - } - if ( !v17 ) - break; - if ( terrain_76DFC8[v17] == terrain_76DDC8[v17 -1] ) - { - do - v61 = terrain_76DDC8[v17-- -1]; - while ( v61 == terrain_76DDC8[v17 -1] ); - } - --v17; - v59 = v125 + 1; - ++v16; - } - v16 = 0; - v126 = 0; - v62 = terrain_76E3C8[v18]; - if ( i < v62 ) - { - v114 = i; - memset32(terrain_76D5C8.data(), v119 + 1, 4 * (v62 - i + 1)); - do - { - v63 = v126; - v64 = v114; - ++v126; - ++v114; - terrain_76D7C8[v63] = v64; - } - while ( v114 <= terrain_76E3C8[v18] ); - if ( terrain_76E3C8[v18] == terrain_76E1C8[v18 -1] ) - { - do - v65 = terrain_76E1C8[v18-- -1]; - while ( v65 == terrain_76E1C8[v18 -1] ); - } - v16 = v126; - --v18; - } - if ( v18 < 0 ) - v18 = 0; - v66 = terrain_76E3C8[v18]; - while ( v66 <= v124 ) - { - v67 = terrain_76E1C8[v18]; - terrain_76D7C8[v16] = v66; - terrain_76D5C8[v16] = v67 + 1; - if ( terrain_76E1C8[v18] == 65535 ) - { - v31 = v123 + 1; - terrain_76D5C8[v16] = v31; - break; - } - if ( !v18 ) - break; - if ( terrain_76E3C8[v18] == terrain_76E1C8[v18 -1] ) - { - do - v68 = terrain_76E1C8[v18-- -1]; - while ( v68 == terrain_76E1C8[v18 -1] ); - } - --v18; - ++v66; - ++v16; - } - break; - } - default: - break; - } - //v69 = v16 - 1; - ptr_801A08 = pVerticesSR_806210; - ptr_801A04 = pVerticesSR_801A10; - //v126 = v69; - - if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 )//áëîê - { - for ( i = v16 - 1; i >= 1; --i ) - { - //v70 = i; - //v71 = terrain_76D7C8[i];//88 - //v72 = terrain_76DBC8[i];//0 - if ( terrain_76D7C8[i] < terrain_76DBC8[i] )//swap - { - terrain_76DBC8[i] = terrain_76D7C8[i]; - terrain_76D7C8[i] = terrain_76DBC8[i]; - } - //x = terrain_76DBC8[i];//0 - v111 = 0; - if ( terrain_76DBC8[i] <= 0 ) - terrain_76DBC8[i] = -terrain_76DBC8[i]; - //v74 = terrain_76D7C8[i]; - if ( terrain_76D7C8[i] <= 0 ) - terrain_76D7C8[i] = -terrain_76D7C8[i]; - uEndZ = terrain_76D7C8[i] + 2; - //pIndoorCameraD3D_3 = pGame->pIndoorCameraD3D; - //uEndZ = v75; - //pIndoorCameraD3D_4 = pIndoorCameraD3D_3; - uStartZ = terrain_76DBC8[i] - 2; - if ( terrain_76DBC8[i] - 2 < uEndZ ) - { - v127 = 0; - //v79 = (v73 - 66) << 9; - //v116 = v77; - //pHeight = v79; - v111 = uEndZ - uStartZ; - for (int z = uStartZ; z < uEndZ; ++z) - { - ptr_801A08[v127].vWorldPosition.x = (-64 + terrain_76DBC8[i]) * 512;//pTerrainVertices[z * 128 + x].vWorldPosition.x = (-64 + (signed)x) * 512; - ptr_801A08[v127].vWorldPosition.y = (64 - terrain_76D9C8[i]) * 512; - ptr_801A08[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i]); - - ptr_801A04[v127].vWorldPosition.x = (-64 + terrain_76DBC8[i]) * 512; - ptr_801A04[v127].vWorldPosition.y = (63 - terrain_76D9C8[i]) * 512; - ptr_801A04[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i] + 1); - - if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) - { - pIndoorCameraD3D_4->ViewTransform(&ptr_801A08[v127], 1); - pIndoorCameraD3D_4->ViewTransform(&ptr_801A04[v127], 1); - - pIndoorCameraD3D_4->Project(&ptr_801A08[v127], 1, 0); - pIndoorCameraD3D_4->Project(&ptr_801A04[v127], 1, 0); - } - //v79 += 512; - v127 ++; - //++v116; - //pHeight = v79; - } - //while ( v116 < v107 ); - } - v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[i]); - v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[i]); - if ( pRenderer->pRenderD3D )//Ritor1: do comment to test - Render::DrawTerrainD3D(v111, 0, v103, v104); - //Render::RenderTerrainD3D(); - else - Render::DrawTerrainSW(v111, 0, v103, v104); - } - } - else - { - for ( i = v16 - 1; i >= 1; --i ) - { - //v86 = i; - //v87 = terrain_76D5C8[i]; - //v88 = terrain_76D9C8[i]; - if ( terrain_76D5C8[i] < terrain_76D9C8[i] ) - { - terrain_76D9C8[i] = terrain_76D5C8[i]; - terrain_76D5C8[i] = terrain_76D9C8[i]; - } - //v89 = terrain_76D9C8[i]; - v111 = 0; - if ( terrain_76D9C8[i] <= 0 ) - terrain_76D9C8[i] = -terrain_76D9C8[i]; - //v90 = terrain_76D5C8[i]; - if ( terrain_76D5C8[i] <= 0 ) - terrain_76D5C8[i] = -terrain_76D5C8[i]; - pIndoorCameraD3D_4 = pGame->pIndoorCameraD3D; - v107 = terrain_76D5C8[i] + 2; - if ( terrain_76D9C8[i] - 2 < terrain_76D5C8[i] + 2 ) - { - v86 = 0; - //v116 = terrain_76D9C8[i] - 2; - v92 = (66 - terrain_76D9C8[i]) << 9; - //pHeight = (66 - terrain_76D9C8[i]) << 9; - v111 = terrain_76D5C8[i] + 2 - (terrain_76D9C8[i] - 2); - //do - for ( v116 = terrain_76D9C8[i] - 2; v116 < v107; ++v116 ) - { - ptr_801A08[v86].vWorldPosition.x = (terrain_76DBC8[v86] - 64) << 9; - ptr_801A08[v86].vWorldPosition.y = v92; - ptr_801A08[v86].vWorldPosition.z = pOutdoor->GetHeightOnTerrain(terrain_76DBC8[v86], v116); - - ptr_801A04[v86].vWorldPosition.x = (terrain_76DBC8[v86] - 63) << 9; - ptr_801A04[v86].vWorldPosition.y = v92; - ptr_801A04[v86].vWorldPosition.z = pOutdoor->GetHeightOnTerrain(terrain_76DBC8[v86] + 1, v116); - if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) - { - pIndoorCameraD3D_4->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1); - pIndoorCameraD3D_4->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1); - pIndoorCameraD3D_4->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0); - pIndoorCameraD3D_4->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0); - } - v92 -= 512; - v86 += 48; - //++v116; - //pHeight = v92; - } - //while ( v116 < v107 ); - } - v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]); - v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]); - if ( pRenderer->pRenderD3D ) - Render::DrawTerrainD3D(v111, 1, v103, v104); - else - Render::DrawTerrainSW(v111, 1, v103, v104); - } - } - result = v126; - pOutdoorCamera->field_40 = v126; - return result; -} -// 47FFC4: inconsistent fpu stack -// 4D864C: using guessed type char byte_4D864C; - void Render::RenderTerrainD3D() // New function { char result; // al@3 int v6; // ecx@8 - struct stru148 *pTile; // ebx@8 - struct stru148 *v16; + struct Polygon *pTile; // ebx@8 + struct Polygon *v16; unsigned int v18; // edi@22 int v35; // edi@63 int v37; // eax@73 @@ -1731,7 +283,7 @@ { for (unsigned int x = 0; x < 127; ++x) { - pTile = &array_77EC08[pOutdoorCamera->numStru148s]; + pTile = &array_77EC08[pOutdoorCamera->uNumPolygons]; pTile->flags = 0; pTile->field_32 = 0; pTile->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z); @@ -1785,9 +337,9 @@ pTile->dimming_level = 20.0 - floorf(20.0 * _f + 0.5f); //----------------------------------------------------------------------------------------------- - ++pOutdoorCamera->numStru148s; + ++pOutdoorCamera->uNumPolygons; ++pOutdoorCamera->field_44; - assert(pOutdoorCamera->numStru148s < 20000); + assert(pOutdoorCamera->uNumPolygons < 20000); pTile->uBModelID = 0; pTile->uBModelFaceID = 0; @@ -1826,7 +378,7 @@ //pTile->DrawBorderTiles(); //-------------------------------------------------------------------------------------------------------------------------------- - --pOutdoorCamera->numStru148s; + --pOutdoorCamera->uNumPolygons; --pOutdoorCamera->field_44; } } @@ -1848,7 +400,7 @@ double v13; // ST2C_8@6 int v14; // eax@6 double v15; // st7@6 - stru148 *pTile; // ebx@12 + struct Polygon *pTile; // ebx@12 unsigned __int16 v17; // ax@12 int v18; // eax@13 signed int v22; // eax@13 @@ -1868,9 +420,9 @@ char v35; // zf@47 unsigned int v36; // eax@50 int v37; // eax@54 - //stru148 *v38; // ecx@55 + //Polygon *v38; // ecx@55 unsigned int v39; // eax@59 - stru148 *v40; // ebx@62 + struct Polygon *v40; // ebx@62 unsigned __int16 pTileBitmapsID; // ax@62 int v42; // eax@63 LightmapBuilder *v43; // ecx@63 @@ -1889,7 +441,7 @@ unsigned int v56; // eax@101 int v57; // eax@105 unsigned int v58; // eax@109 - stru148 *v59; // esi@112 + struct Polygon *v59; // esi@112 unsigned __int16 v60; // ax@112 int v61; // eax@113 signed int v62; // eax@113 @@ -1901,7 +453,7 @@ double v68; // st5@120 double v69; // st7@133 int v70; // edi@138 - stru148 *v71; // esi@147 + struct Polygon *v71; // esi@147 unsigned int v72; // ecx@147 unsigned int v73; // eax@150 int v74; // eax@154 @@ -2012,7 +564,7 @@ if ( v8->vWorldPosition.y != pVertices->vWorldPosition.y || pVertices->vWorldPosition.y != pVertices2->vWorldPosition.y || pVertices2->vWorldPosition.y != v101->vWorldPosition.y ) break;*/ - pTile = &array_77EC08[pOutdoorCamera->numStru148s]; + pTile = &array_77EC08[pOutdoorCamera->uNumPolygons]; pTile->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY); if ( pTile->uTileBitmapID != -1 ) { @@ -2031,16 +583,16 @@ (((float)pOutdoor->vSunlight.y / 65536.0) * norm->y) - (((float)pOutdoor->vSunlight.z / 65536.0) * norm->z)) * 20.0; //v25 = thisf + 6.7553994e15; - //v27 = pOutdoorCamera->numStru148s > 1999; - //v26 = pOutdoorCamera->numStru148s - 1999 < 0; + //v27 = pOutdoorCamera->uNumPolygons > 1999; + //v26 = pOutdoorCamera->uNumPolygons - 1999 < 0; pTile->dimming_level = floorf(thisf + 0.5f); - if ( pOutdoorCamera->numStru148s >= 1999 ) + if ( pOutdoorCamera->uNumPolygons >= 1999 ) return; - ++pOutdoorCamera->numStru148s; + ++pOutdoorCamera->uNumPolygons; //if ( !sub_481FC9(v8, pVertices, v101, v16) )//Ritor1: It's temporary //goto LABEL_126; //{ - //--pOutdoorCamera->numStru148s; + //--pOutdoorCamera->uNumPolygons; //goto LABEL_162; //} memcpy(&array_50AC10[0], v102, 0x30u); @@ -2145,7 +697,7 @@ if ( ++v88 >= v84 ) return; } - /* v40 = &array_77EC08[pOutdoorCamera->numStru148s]; + /* v40 = &array_77EC08[pOutdoorCamera->uNumPolygons]; v40->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY); if ( v40->uTileBitmapID == -1 ) goto LABEL_162; @@ -2173,13 +725,13 @@ v40->dimming_level = LOBYTE(v50); if ( LOBYTE(v50) < 0 ) v40->dimming_level = 0; - if ( pOutdoorCamera->numStru148s >= 1999 ) + if ( pOutdoorCamera->uNumPolygons >= 1999 ) return; - ++pOutdoorCamera->numStru148s; + ++pOutdoorCamera->uNumPolygons; /*if ( !sub_481FC9(pVertices, pVertices2, v8, v40) ) // Ritor1: It's temporary //goto LABEL_77; { - --pOutdoorCamera->numStru148s; + --pOutdoorCamera->uNumPolygons; goto LABEL_112; }*/ /*memcpy(&array_50AC10[0], v102, 0x30u); @@ -2204,7 +756,7 @@ /*if ( !(byte_76D5C0 & 2) ) { byte_76D5C0 |= 2; - stru148(stru_76D590); + Polygon(stru_76D590); atexit(loc_48118F); }*/ /*v96 = pGame->pLightmapBuilder; @@ -2217,7 +769,7 @@ if ( pGame->pIndoorCameraD3D->_4371C3(array_50AC10, &uNumVertices, 0) == 1 && !uNumVertices ) { //LABEL_77: - --pOutdoorCamera->numStru148s; + --pOutdoorCamera->uNumPolygons; goto LABEL_112; } thisb->ViewTransform(array_50AC10, uNumVertices); @@ -2280,8 +832,8 @@ pRenderer->DrawTerrainPolygon(v40->uNumVertices, v40, pBitmaps_LOD->pHardwareTextures[v58], 0, v81); } LABEL_112: - v59 = &array_77EC08[pOutdoorCamera->numStru148s]; - //a8 = (RenderVertexSoft *)&array_77EC08[pOutdoorCamera->numStru148s]; + v59 = &array_77EC08[pOutdoorCamera->uNumPolygons]; + //a8 = (RenderVertexSoft *)&array_77EC08[pOutdoorCamera->uNumPolygons]; v59->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY); if ( v59->uTileBitmapID == -1 ) goto LABEL_162; @@ -2302,13 +854,13 @@ v59->dimming_level = floorf(thish + 0.5f); if ( v59->dimming_level < 0 ) v59->dimming_level = 0; - if ( pOutdoorCamera->numStru148s >= 1999 ) + if ( pOutdoorCamera->uNumPolygons >= 1999 ) return; - ++pOutdoorCamera->numStru148s; + ++pOutdoorCamera->uNumPolygons; if ( !sub_481FC9(v101, v102, pVertices2, v59) ) { //LABEL_126: - --pOutdoorCamera->numStru148s; + --pOutdoorCamera->uNumPolygons; goto LABEL_162; } memcpy(&array_50AC10[0], v102, 0x30u); @@ -2340,7 +892,7 @@ if ( pGame->pIndoorCameraD3D->_4371C3(array_50AC10, (unsigned int *)&v100, 0) == 1 && !v100 ) //goto LABEL_126; { - --pOutdoorCamera->numStru148s; + --pOutdoorCamera->uNumPolygons; goto LABEL_162; } thisc->ViewTransform(array_50AC10, v100); @@ -2398,10 +950,10 @@ //v77 = (int)v71; //v76 = v71->uNumVertices; //goto LABEL_161; - pRenderer->DrawTerrainPolygon(v71->uNumVertices, (stru148 *)v71, v78, 0, v80); + pRenderer->DrawTerrainPolygon(v71->uNumVertices, (Polygon *)v71, v78, 0, v80); goto LABEL_162; } - v38 = (stru148 *)v71; + v38 = (Polygon *)v71; goto LABEL_56; } v73 = sr_424EE0_MakeFanFromTriangle(v72); @@ -2411,508 +963,7 @@ goto LABEL_154; } }*/ -// 47F44B: using guessed type int __stdcall WorldPosToGridCellX(int); -// 47F458: using guessed type int __stdcall WorldPosToGridCellZ(int); -// 4D864C: using guessed type char byte_4D864C; -// 76D5C0: using guessed type char static_sub_0048034E_byte_76D5C0__init_flag; - -//----- (00481212) -------------------------------------------------------- -void Render::DrawTerrainSW(int a1, int a2, int a3, int a4) -{ - int v3; // esi@1 - int v4; // ecx@1 - int v5; // ST10_4@1 - int v6; // edi@1 - int v7; // ebx@2 - int v8; // eax@2 - int v9; // eax@3 - RenderVertexSoft *v10; // edi@3 - RenderVertexSoft *v11; // ebx@4 - RenderVertexSoft *v12; // ecx@4 - float v13; // eax@6 - int v14; // eax@6 - double v15; // st7@6 - double v16; // st7@6 - stru148 *v17; // ebx@12 - unsigned __int16 v18; // ax@12 - int v19; // eax@13 - float v20; // ecx@13 - stru220 *v21; // eax@13 - int v22; // eax@13 - signed int v23; // eax@13 - Vec3_float_ *v24; // eax@15 - double v25; // st7@18 - double v26; // st5@24 - double v27; // st5@24 - double v28; // st5@24 - double v29; // st5@24 - Game *v30; // eax@25 - RenderVertexSoft *v31; // edi@29 - double v32; // st7@31 - int v33; // esi@35 - RenderVertexSoft *v34; // edx@36 - RenderVertexSoft *v35; // ecx@36 - signed int v36; // eax@39 - signed int v37; // esi@40 - stru148 *v38; // ebx@43 - unsigned __int16 v39; // ax@43 - int v40; // eax@44 - float v41; // ecx@44 - stru220 *v42; // eax@44 - int v43; // eax@44 - int v44; // eax@44 - signed int v45; // eax@44 - Vec3_float_ *v46; // eax@46 - double v47; // st7@49 - double v48; // st5@57 - double v49; // st5@57 - double v50; // st5@57 - Game *v51; // eax@58 - RenderVertexSoft *v52; // edi@62 - double v53; // st7@63 - int v54; // esi@66 - signed int v55; // eax@69 - signed int v56; // esi@71 - unsigned __int16 v57; // ax@75 - stru220 *v58; // eax@76 - signed int v59; // eax@76 - Vec3_float_ *v60; // eax@77 - double v61; // st7@80 - double v62; // st5@88 - double v63; // st5@88 - double v64; // st5@88 - Game *v65; // eax@89 - double v66; // st7@94 - RenderVertexSoft *v67; // [sp-Ch] [bp-C4h]@36 - stru148 *v68; // [sp-8h] [bp-C0h]@36 - int v69; // [sp-4h] [bp-BCh]@36 - float v70; // [sp+Ch] [bp-ACh]@88 - double v71; // [sp+10h] [bp-A8h]@6 - double v72; // [sp+18h] [bp-A0h]@82 - double v73; // [sp+20h] [bp-98h]@6 - double v74; // [sp+28h] [bp-90h]@51 - double v75; // [sp+30h] [bp-88h]@6 - double v76; // [sp+38h] [bp-80h]@20 - double v77; // [sp+40h] [bp-78h]@6 - float v78; // [sp+48h] [bp-70h]@57 - float v79; // [sp+4Ch] [bp-6Ch]@6 - float v80; // [sp+50h] [bp-68h]@6 - int v81; // [sp+54h] [bp-64h]@1 - int v82; // [sp+58h] [bp-60h]@6 - int v83; // [sp+5Ch] [bp-5Ch]@82 - int v84; // [sp+60h] [bp-58h]@20 - int v85; // [sp+64h] [bp-54h]@1 - int v86; // [sp+68h] [bp-50h]@1 - int v87; // [sp+6Ch] [bp-4Ch]@51 - float v88; // [sp+70h] [bp-48h]@51 - int v89; // [sp+74h] [bp-44h]@6 - int v90; // [sp+78h] [bp-40h]@1 - float a3a; // [sp+7Ch] [bp-3Ch]@24 - stru220 *v92; // [sp+80h] [bp-38h]@2 - float v93; // [sp+84h] [bp-34h]@44 - int v94; // [sp+88h] [bp-30h]@6 - float v95; // [sp+8Ch] [bp-2Ch]@1 - float v96; // [sp+90h] [bp-28h]@1 - float v97; // [sp+94h] [bp-24h]@1 - int X; // [sp+98h] [bp-20h]@1 - float v99; // [sp+9Ch] [bp-1Ch]@6 - int v100; // [sp+A0h] [bp-18h]@6 - unsigned __int64 v101; // [sp+A4h] [bp-14h]@6 - RenderVertexSoft *v102; // [sp+ACh] [bp-Ch]@6 - RenderVertexSoft *v103; // [sp+B0h] [bp-8h]@6 - RenderVertexSoft *v104; // [sp+B4h] [bp-4h]@3 - float pNormalc; // [sp+C0h] [bp+8h]@6 - float pNormald; // [sp+C0h] [bp+8h]@6 - Vec3_float_ *pNormal; // [sp+C0h] [bp+8h]@17 - Vec3_float_ *pNormala; // [sp+C0h] [bp+8h]@48 - Vec3_float_ *pNormalb; // [sp+C0h] [bp+8h]@77 - - v3 = a1; - //v4 = *(short *)(a3 + 4); - //v5 = *(short *)(a3 + 6); - v85 = a2; - v86 = a3; //v4; - X = abs(a4); //v5 - v6 = 0; - v90 = 0; - v81 = v3 - 1; - v95 = (double)pOutdoor->vSunlight.x / 65536.0; - v96 = (double)pOutdoor->vSunlight.y / 65536.0; - v97 = (double)pOutdoor->vSunlight.z / 65536.0; - if ( v3 - 1 > 0 ) - { - while ( 1 ) - { - v7 = abs(X); - v8 = abs(v86); - --X; - v92 = &stru_76E5C8[(v7 << 7) + v8]; - if ( !v92->field_0 - || ((v9 = v6, v10 = &pVerticesSR_806210[v6], v104 = v10, !v85) ? (v11 = &pVerticesSR_801A10[v9], - v12 = &pVerticesSR_806210[v9 + 1]) : (v11 = &pVerticesSR_806210[v9 + 1], v12 = &pVerticesSR_801A10[v9]), - ((v103 = &pVerticesSR_801A10[v9 + 1], - v13 = v10->vWorldPosition.x, - v102 = v12, - v80 = v13, - v73 = v13 + 6.7553994e15, - v101 = __PAIR__((unsigned int)v11, LODWORD(v73)), - v79 = v10->vWorldPosition.y, - v75 = v79 + 6.7553994e15, - v100 = LODWORD(v75), - pNormalc = (v12->vWorldPosition.x + v10->vWorldPosition.x) * 0.5, - v71 = pNormalc + 6.7553994e15, - v89 = LODWORD(v71), - v14 = WorldPosToGridCellX(COERCE_UNSIGNED_INT64(pNormalc + 6.7553994e15)), - v15 = v11->vWorldPosition.y + v10->vWorldPosition.y, - v94 = v14, - pNormald = v15 * 0.5, - v16 = pNormald + 6.7553994e15, - v77 = v16, - v82 = LODWORD(v77), - LODWORD(v99) = WorldPosToGridCellZ(LODWORD(v16)), - WorldPosToGridCellX(v101), - WorldPosToGridCellZ(v100), - !byte_4D864C) - || !(pGame->uFlags & 0x80)) - && !sub_481EFA(v10, v11, v102, v103, 1)) ) - goto LABEL_105; - if ( v10->vWorldPosition.z != v11->vWorldPosition.z - || v11->vWorldPosition.z != v103->vWorldPosition.z - || v103->vWorldPosition.z != v102->vWorldPosition.z ) - break; - v17 = &array_77EC08[pOutdoorCamera->numStru148s]; - v18 = pOutdoor->GetTileTexture(v101, v100); - v17->uTileBitmapID = v18; - if ( v18 != -1 ) - { - v19 = pOutdoor->GetSomeOtherTileInfo(v101, v100); - LOWORD(v19) = v19 | 0x8010; - v20 = v99; - *(int *)&v17->flags = v19; - v21 = v92; - v17->field_59 = 1; - v17->terrain_grid_x = LOBYTE(v20); - v17->field_34 = v21->distance; - v22 = v94; - v17->terrain_grid_z = v94; - v23 = pTerrainNormalIndices[2 * (LODWORD(v20) + (v22 << 7)) + 1]; - if ( v23 < 0 || v23 > (signed int)(uNumTerrainNormals - 1) ) - v24 = 0; - else - v24 = &pTerrainNormals[v23]; - pNormal = v24; - if ( v24 ) - { - v25 = -(v97 * v24->z + v96 * v24->y + v95 * v24->x); - if ( v25 < 0.0 ) - v25 = 0.0; - v99 = v25 * 31.0; - v76 = v99 + 6.7553994e15; - v84 = LODWORD(v76); - v17->dimming_level = 31 - LOBYTE(v76); - } - else - { - v17->dimming_level = 0; - } - if ( pOutdoorCamera->numStru148s >= 1999 ) - return; - ++pOutdoorCamera->numStru148s; - if ( !sub_481FC9(v10, (RenderVertexSoft *)HIDWORD(v101), v102, v17) ) - goto LABEL_104; - v26 = 1.0 / (v104->vWorldViewPosition.x + 0.0000001); - memcpy(array_50AC10, v104, 0x30u); - array_50AC10[0]._rhw = v26; - array_50AC10[0].u = 0.0; - array_50AC10[0].v = 0.0; - v27 = *(float *)(HIDWORD(v101) + 12) + 0.0000001; - memcpy(&array_50AC10[1], (void *)HIDWORD(v101), sizeof(array_50AC10[1])); - array_50AC10[1]._rhw = 1.0 / v27; - array_50AC10[1].u = 0.0; - array_50AC10[1].v = 1.0; - v28 = v103->vWorldViewPosition.x + 0.0000001; - memcpy(&array_50AC10[2], v103, sizeof(array_50AC10[2])); - array_50AC10[2]._rhw = 1.0 / v28; - array_50AC10[2].u = 1.0; - array_50AC10[2].v = 1.0; - v29 = v102->vWorldViewPosition.x + 0.0000001; - memcpy(&array_50AC10[3], v102, sizeof(array_50AC10[3])); - array_50AC10[3]._rhw = 1.0 / v29; - array_50AC10[3].u = 1.0; - array_50AC10[3].v = 0.0; - pGame->pLightmapBuilder->StackLights_TerrainFace(pNormal, &a3a, array_50AC10, 4u, 1); - if ( stru_F8AD28.uNumLightsApplied <= 0 ) - { - v17->field_108 = 0; - } - else - { - v30 = pGame; - v17->field_108 = 1; - pGame->pLightmapBuilder->_45CA88(&stru_F8AD28, array_50AC10, 4, pNormal); - } - if ( v104->vWorldViewPosition.x < 8.0 - || *(float *)(HIDWORD(v101) + 12) < 8.0 - || (v31 = v102, v102->vWorldViewPosition.x < 8.0) - || v103->vWorldViewPosition.x < 8.0 ) - { - v36 = sr_4250FE(4u); - } - else - { - v32 = (double)pOutdoorCamera->shading_dist_mist; - if ( v32 >= v104->vWorldViewPosition.x - && v32 >= *(float *)(HIDWORD(v101) + 12) - && v32 >= v102->vWorldViewPosition.x - && v32 >= v103->vWorldViewPosition.x ) - { - v33 = sr_4254D2(4); - v17->uNumVertices = v33; - if ( !v33 ) - goto LABEL_104; - v34 = (RenderVertexSoft *)HIDWORD(v101); - v35 = v104; - v69 = 0; - v68 = v17; - v67 = v31; - goto LABEL_37; - } - v36 = sr_4252E8(4u); - } - v37 = v36; - if ( !v36 ) - goto LABEL_104; -LABEL_41: - OutdoorCamera::Project(v37); -LABEL_102: - v33 = sr_4254D2(v37); - v17->uNumVertices = v33; - if ( !v33 ) - goto LABEL_104; - v17->_48276F_sr(); - goto LABEL_38; - } -LABEL_105: - v6 = v90++ + 1; - if ( v90 >= v81 ) - return; - } - v38 = &array_77EC08[pOutdoorCamera->numStru148s]; - v39 = pOutdoor->GetTileTexture(v101, v100); - v38->uTileBitmapID = v39; - if ( v39 == -1 ) - goto LABEL_105; - v40 = pOutdoor->GetSomeOtherTileInfo(v101, v100); - BYTE1(v40) |= 0x80u; - v41 = v99; - *(int *)&v38->flags = v40; - v42 = v92; - v38->field_59 = 1; - v38->terrain_grid_x = LOBYTE(v41); - v38->field_34 = v42->distance; - v43 = v94; - v38->terrain_grid_z = v94; - v44 = 2 * (LODWORD(v41) + (v43 << 7)); - LODWORD(v93) = v44 * 2; - v45 = pTerrainNormalIndices[v44 + 1]; - if ( v45 < 0 || v45 > (signed int)(uNumTerrainNormals - 1) ) - v46 = 0; - else - v46 = &pTerrainNormals[v45]; - pNormala = v46; - if ( v46 ) - { - v47 = -(v97 * v46->z + v96 * v46->y + v95 * v46->x); - if ( v47 < 0.0 ) - v47 = 0.0; - v88 = v47 * 31.0; - v74 = v88 + 6.7553994e15; - v87 = LODWORD(v74); - v38->dimming_level = 31 - LOBYTE(v74); - } - else - { - v38->dimming_level = 0; - } - if ( v38->dimming_level < 0 ) - v38->dimming_level = 0; - if ( pOutdoorCamera->numStru148s >= 1999 ) - return; - ++pOutdoorCamera->numStru148s; - if ( !sub_481FC9((RenderVertexSoft *)HIDWORD(v101), v103, v104, v38) ) - goto LABEL_74; - v48 = 1.0 / (v104->vWorldViewPosition.x + 0.0000001); - memcpy(array_50AC10, v104, 0x30u); - array_50AC10[0]._rhw = v48; - array_50AC10[0].u = 0.0; - array_50AC10[0].v = 0.0; - v49 = *(float *)(HIDWORD(v101) + 12) + 0.0000001; - memcpy(&array_50AC10[1], (void *)HIDWORD(v101), sizeof(array_50AC10[1])); - array_50AC10[1]._rhw = 1.0 / v49; - array_50AC10[1].u = 0.0; - array_50AC10[1].v = 1.0; - v50 = v103->vWorldViewPosition.x + 0.0000001; - memcpy(&array_50AC10[2], v103, sizeof(array_50AC10[2])); - array_50AC10[2]._rhw = 1.0 / v50; - array_50AC10[2].u = 1.0; - array_50AC10[2].v = 1.0; - pGame->pLightmapBuilder->StackLights_TerrainFace(pNormala, &v78, array_50AC10, 3u, 0); - if ( stru_F8AD28.uNumLightsApplied <= 0 ) - { - v38->field_108 = 0; - } - else - { - v51 = pGame; - v38->field_108 = 1; - pGame->pLightmapBuilder->_45CA88(&stru_F8AD28, array_50AC10, 3, pNormala); - } - if ( v104->vWorldViewPosition.x < 8.0 - || *(float *)(HIDWORD(v101) + 12) < 8.0 - || (v52 = v103, v103->vWorldViewPosition.x < 8.0) ) - { - v55 = sr_4250FE(3u); - } - else - { - v53 = (double)pOutdoorCamera->shading_dist_mist; - if ( v53 >= v104->vWorldViewPosition.x - && v53 >= *(float *)(HIDWORD(v101) + 12) - && v53 >= v103->vWorldViewPosition.x ) - { - v54 = sr_4254D2(3); - v38->uNumVertices = v54; - if ( v54 ) - { - sr_sub_4829B9((RenderVertexSoft *)HIDWORD(v101), v52, v104, v38, 0); -LABEL_68: - sr_sub_481DB2(array_508690, v54, v38); -LABEL_75: - v17 = &array_77EC08[pOutdoorCamera->numStru148s]; - v57 = pOutdoor->GetTileTexture(v101, v100); - v17->uTileBitmapID = v57; - if ( v57 == -1 ) - goto LABEL_105; - *(int *)&v17->flags = pOutdoor->GetSomeOtherTileInfo(v101, v100); - v58 = v92; - v17->field_59 = 1; - v17->field_34 = v58->distance; - v17->terrain_grid_z = v94; - v17->terrain_grid_x = LOBYTE(v99); - v59 = *(unsigned __int16 *)((char *)pTerrainNormalIndices.data() + LODWORD(v93)); - if ( v59 > (signed int)(uNumTerrainNormals - 1) ) - { - pNormalb = 0; - v60 = 0; - } - else - { - v60 = &pTerrainNormals[v59]; - pNormalb = v60; - } - if ( v60 ) - { - v61 = -(v97 * v60->z + v96 * v60->y + v95 * v60->x); - if ( v61 < 0.0 ) - v61 = 0.0; - v93 = v61 * 31.0; - v72 = v93 + 6.7553994e15; - v83 = LODWORD(v72); - v17->dimming_level = 31 - LOBYTE(v72); - } - else - { - v17->dimming_level = 0; - } - if ( v17->dimming_level < 0 ) - v17->dimming_level = 0; - if ( pOutdoorCamera->numStru148s >= 1999 ) - return; - ++pOutdoorCamera->numStru148s; - if ( !sub_481FC9(v102, v104, v103, v17) ) - { -LABEL_104: - --pOutdoorCamera->numStru148s; - goto LABEL_105; - } - v62 = 1.0 / (v104->vWorldViewPosition.x + 0.0000001); - memcpy(array_50AC10, v104, 0x30u); - array_50AC10[0]._rhw = v62; - array_50AC10[0].u = 0.0; - array_50AC10[0].v = 0.0; - v63 = v103->vWorldViewPosition.x + 0.0000001; - memcpy(&array_50AC10[1], v103, sizeof(array_50AC10[1])); - array_50AC10[1]._rhw = 1.0 / v63; - array_50AC10[1].u = 1.0; - array_50AC10[1].v = 1.0; - v64 = v102->vWorldViewPosition.x + 0.0000001; - memcpy(&array_50AC10[2], v102, sizeof(array_50AC10[2])); - array_50AC10[2]._rhw = 1.0 / v64; - array_50AC10[2].u = 1.0; - array_50AC10[2].v = 0.0; - pGame->pLightmapBuilder->StackLights_TerrainFace(pNormalb, &v70, array_50AC10, 3u, 1); - if ( stru_F8AD28.uNumLightsApplied <= 0 ) - { - v17->field_108 = 0; - } - else - { - v65 = pGame; - v17->field_108 = 1; - pGame->pLightmapBuilder->_45CA88(&stru_F8AD28, array_50AC10, 3, pNormalb); - } - if ( v104->vWorldViewPosition.x < 8.0 || v103->vWorldViewPosition.x < 8.0 || v102->vWorldViewPosition.x < 8.0 ) - { - v37 = sr_4250FE(3u); - OutdoorCamera::Project(v37); - if ( !v37 ) - goto LABEL_104; - goto LABEL_102; - } - v66 = (double)pOutdoorCamera->shading_dist_mist; - if ( v66 < v104->vWorldViewPosition.x || v66 < v103->vWorldViewPosition.x || v66 < v102->vWorldViewPosition.x ) - { - v37 = sr_4252E8(3u); - if ( !v37 ) - goto LABEL_105; - goto LABEL_41; - } - v33 = sr_4254D2(3); - v17->uNumVertices = v33; - if ( !v33 ) - goto LABEL_104; - v34 = v104; - v35 = v102; - v69 = 0; - v68 = v17; - v67 = v103; -LABEL_37: - sr_sub_4829B9(v35, v34, v67, v68, v69); -LABEL_38: - sr_sub_481DB2(array_508690, v33, v17); - goto LABEL_105; - } - goto LABEL_74; - } - v55 = sr_4252E8(3u); - } - v56 = v55; - if ( v55 ) - { - OutdoorCamera::Project(v55); - v54 = sr_4254D2(v56); - v38->uNumVertices = v54; - if ( v54 ) - { - v38->_48276F_sr(); - goto LABEL_68; - } - } -LABEL_74: - --pOutdoorCamera->numStru148s; - goto LABEL_75; - } -} + //----- (0047BACF) -------------------------------------------------------- void Render::TransformBillboardsAndSetPalettesODM() @@ -4355,7 +2406,7 @@ } //----- (004A2050) -------------------------------------------------------- -void Render::DrawPolygon(unsigned int uNumVertices, stru148 *a3, ODMFace *a4, IDirect3DTexture2 *pTexture) +void Render::DrawPolygon(unsigned int uNumVertices, struct Polygon *a3, ODMFace *a4, IDirect3DTexture2 *pTexture) { Render *v5; // edi@1 unsigned int v6; // ebx@1 @@ -7134,7 +5185,7 @@ return ::GetActorTintColor(tint, a4, a2, a5, a6); } -/*void Render::DrawTerrainPolygon_new(stru148 *a3, IDirect3DTexture2 *pTexture)//new function +/*void Render::DrawTerrainPolygon_new(Polygon *a3, IDirect3DTexture2 *pTexture)//new function { int v5; // ebx@1 int v6; // edi@1 @@ -7249,7 +5300,7 @@ }*/ //----- (004A26BC) -------------------------------------------------------- -void Render::DrawTerrainPolygon(unsigned int uNumVertices, stru148 *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders) +void Render::DrawTerrainPolygon(unsigned int uNumVertices, struct Polygon *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders) { //RenderVertexSoft *pVertices; // esi@0 //int v7; // edi@1 @@ -7481,7 +5532,7 @@ // 4D864C: using guessed type char byte_4D864C; //----- (004A2DA3) -------------------------------------------------------- -void Render::DrawSkyPolygon(unsigned int uNumVertices, stru148 *a3, IDirect3DTexture2 *pTexture) +void Render::DrawSkyPolygon(unsigned int uNumVertices, struct Polygon *a3, IDirect3DTexture2 *pTexture) { int v7; // eax@7 float v13; // ST3C_4@8 @@ -7523,7 +5574,7 @@ } //----- (004A2ED5) -------------------------------------------------------- -void Render::_4A2ED5(signed int a2, stru148 *a3, IDirect3DTexture2 *pHwTex) +void Render::_4A2ED5(signed int a2, struct Polygon *a3, IDirect3DTexture2 *pHwTex) { signed int v4; // edi@2 int v5; // eax@3 @@ -7628,9 +5679,9 @@ int v57; // ST10_4@55 Texture *v58; // eax@55 signed int v59; // [sp-4h] [bp-178h]@17 - stru148 *v60; // [sp+0h] [bp-174h]@17 + struct Polygon *v60; // [sp+0h] [bp-174h]@17 IDirect3DTexture2 *v61; // [sp+4h] [bp-170h]@17 - stru148 v62; // [sp+14h] [bp-160h]@6 + struct Polygon v62; // [sp+14h] [bp-160h]@6 unsigned int v63; // [sp+120h] [bp-54h]@7 double v64; // [sp+124h] [bp-50h]@7 unsigned int v65; // [sp+128h] [bp-4Ch]@1 @@ -9253,6 +7304,8 @@ double v39; // [sp+94h] [bp-Ch]@6 float v40; // [sp+9Ch] [bp-4h]@6 + __debugbreak(); + auto ecx0 = this; v3 = 0; if ( ecx0->pRenderD3D )