comparison Render.cpp @ 190:9b77686e2239

Merge
author Gloval
date Sat, 16 Feb 2013 00:44:38 +0400
parents 038a4d09406f d65528fc3bda
children 96bc024a5fed
comparison
equal deleted inserted replaced
189:038a4d09406f 190:9b77686e2239
51 RenderVertexSoft array_50A2B0[50]; 51 RenderVertexSoft array_50A2B0[50];
52 RenderVertexSoft array_50AC10[50]; 52 RenderVertexSoft array_50AC10[50];
53 53
54 RenderVertexSoft array_73D150[20]; 54 RenderVertexSoft array_73D150[20];
55 55
56 RenderVertexD3D3 arary_77E5C8[50]; 56 RenderVertexD3D3 d3d_vertex_buffer[50];
57 57
58 RenderVertexSoft *ptr_801A04; 58 RenderVertexSoft *ptr_801A04;
59 RenderVertexSoft *ptr_801A08; 59 RenderVertexSoft *ptr_801A08;
60 60
61 RenderVertexSoft pVerticesSR_801A10[384]; 61 RenderVertexSoft pVerticesSR_801A10[384];
134 v0 = false; 134 v0 = false;
135 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface1, &pTexture1, true, false, 32u); 135 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface1, &pTexture1, true, false, 32u);
136 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface2, &pTexture2, true, false, 32u); 136 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface2, &pTexture2, true, false, 32u);
137 137
138 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture1)); 138 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture1));
139 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 139 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
140 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLOROP, 2u)); 140 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLOROP, 2u));
141 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2u)); 141 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2u));
142 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, 2u)); 142 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, 2u));
143 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MINFILTER, 2u)); 143 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MINFILTER, 2u));
144 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, 1u)); 144 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, 1u));
145 145
146 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture2)); 146 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture2));
147 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_ADDRESS, 3u)); 147 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP));
148 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1u)); 148 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1u));
149 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLOROP, 7u)); 149 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLOROP, 7u));
150 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, 2u)); 150 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, 2u));
151 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG2, 1u)); 151 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG2, 1u));
152 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_MAGFILTER, 2u)); 152 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_MAGFILTER, 2u));
1742 int v64; // [sp+57h] [bp-1h]@2 1742 int v64; // [sp+57h] [bp-1h]@2
1743 int v62; 1743 int v62;
1744 //struct IndoorCameraD3D *pIndoorCameraD3D; 1744 //struct IndoorCameraD3D *pIndoorCameraD3D;
1745 //RenderVertexSoft *pVertices; // [sp+C4h] [bp-Ch]@6 1745 //RenderVertexSoft *pVertices; // [sp+C4h] [bp-Ch]@6
1746 1746
1747
1748 //warning: the game uses CW culling by default, ccw is incosistent
1749 pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CCW);
1750
1751
1747 v63 = 0; 1752 v63 = 0;
1748 // basic optimizations 1753 // basic optimizations
1749 unsigned int uStartX, uEndX, 1754 unsigned int uStartX, uEndX,
1750 uStartZ, uEndZ; 1755 uStartZ, uEndZ;
1751 if (pIndoorCamera->sRotationY >= 0 && pIndoorCamera->sRotationY <= 1024) 1756 if (pIndoorCamera->sRotationY >= 0 && pIndoorCamera->sRotationY <= 1024)
1781 //pIndoorCameraD3D = pGame->pIndoorCameraD3D; 1786 //pIndoorCameraD3D = pGame->pIndoorCameraD3D;
1782 pGame->pIndoorCameraD3D->ViewTransform(&pTerrainVertices[z * 128 + x], 1); 1787 pGame->pIndoorCameraD3D->ViewTransform(&pTerrainVertices[z * 128 + x], 1);
1783 pGame->pIndoorCameraD3D->Project(&pTerrainVertices[z * 128 + x], 1, 0); 1788 pGame->pIndoorCameraD3D->Project(&pTerrainVertices[z * 128 + x], 1, 0);
1784 } 1789 }
1785 } 1790 }
1791
1786 for (unsigned int z = uStartZ; z < uEndZ - 1; ++z) 1792 for (unsigned int z = uStartZ; z < uEndZ - 1; ++z)
1787 { 1793 {
1788 for (unsigned int x = uStartX; x < uEndX - 1; ++x) 1794 for (unsigned int x = uStartX; x < uEndX - 1; ++x)
1789 { 1795 {
1790 v8 = &array_77EC08[pOutdoorCamera->numStru148s]; 1796 v8 = &array_77EC08[pOutdoorCamera->numStru148s];
1795 v8->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z); 1801 v8->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z);
1796 //v6 = v8->uTileBitmapID; 1802 //v6 = v8->uTileBitmapID;
1797 v8->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v8->uTileBitmapID]; 1803 v8->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v8->uTileBitmapID];
1798 if (v8->uTileBitmapID == 0xFFFF) 1804 if (v8->uTileBitmapID == 0xFFFF)
1799 continue; 1805 continue;
1806
1800 v8->flags = 0x8010 |pOutdoor->GetSomeOtherTileInfo(x, z); 1807 v8->flags = 0x8010 |pOutdoor->GetSomeOtherTileInfo(x, z);
1801 v8->field_32 = 0; 1808 v8->field_32 = 0;
1802 v8->field_59 = 1; 1809 v8->field_59 = 1;
1803 //v8->field_5D = (char)WorldPosToGridCellZ(floorf((pVertices->vWorldPosition.z + v8a->vWorldPosition.z) / 2 + 0.5f)); 1810 //v8->field_5D = (char)WorldPosToGridCellZ(floorf((pVertices->vWorldPosition.z + v8a->vWorldPosition.z) / 2 + 0.5f));
1804 //v8->field_5C = WorldPosToGridCellX(floorf((v101->vWorldPosition.x + v8->vWorldPosition.x) / 2 + 0.5f));; 1811 //v8->field_5C = WorldPosToGridCellX(floorf((v101->vWorldPosition.x + v8->vWorldPosition.x) / 2 + 0.5f));;
1835 { 1842 {
1836 memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft)); 1843 memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft));
1837 array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097); 1844 array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097);
1838 } 1845 }
1839 1846
1847 bool transparent = false;
1840 if ( v8->flags & 2 && v8->uTileBitmapID == pRenderer->field_1036AC_bitmapid ) 1848 if ( v8->flags & 2 && v8->uTileBitmapID == pRenderer->field_1036AC_bitmapid )
1841 { 1849 {
1842 //v80 = false; 1850 //v80 = false;
1843 v6 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid]; 1851 v6 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
1844 } 1852 }
1845 else 1853 else
1846 { 1854 {
1847 v6 = v8->uTileBitmapID; 1855 v6 = v8->uTileBitmapID;
1848 //v80 = true; 1856 transparent = true;
1849 } 1857 }
1850 1858
1851 assert(v6 < 1000); // many random crashes here 1859 assert(v6 < 1000); // many random crashes here
1852 pRenderer->DrawTerrainPolygon(v8, pBitmaps_LOD->pHardwareTextures[v6]); 1860
1861 // for all shore tiles - draw a tile water under them since they're half-empty
1862 if (!strnicmp(pBitmaps_LOD->pTextures[v8->uTileBitmapID].pName, "wtrdr", 5)) // all shore tile filenames are wtrdrXXX
1863 {
1864 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE); // no Z writing: the shore tile will be draw in the same place, so taking care about z-fighting
1865 pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid]], false, true);
1866 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE);
1867
1868 }
1869
1870 pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[v6], transparent, true);
1871
1872
1853 --pOutdoorCamera->numStru148s; 1873 --pOutdoorCamera->numStru148s;
1854 --pOutdoorCamera->field_44; 1874 --pOutdoorCamera->field_44;
1855 } 1875 }
1856 } 1876 }
1857 } 1877 }
1995 while ( 1 ) 2015 while ( 1 )
1996 { 2016 {
1997 v5 = abs(X);//v5 = 13108 2017 v5 = abs(X);//v5 = 13108
1998 v6 = abs(v83);//v6 = 13108 2018 v6 = abs(v83);//v6 = 13108
1999 --X; 2019 --X;
2020 __debugbreak(); // uncoment & refactor following large if
2000 v93 = (int)&stru_76E5C8[(v5 << 7) + v6]; 2021 v93 = (int)&stru_76E5C8[(v5 << 7) + v6];
2001 /*if ( !v93->field_0 || ((v7 = 48 * v4, v8 = &pVerticesSR_806210[v4], a2 = v8, !v82) ? (v9 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7), 2022 /*if ( !v93->field_0 || ((v7 = 48 * v4, v8 = &pVerticesSR_806210[v4], a2 = v8, !v82) ? (v9 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7),
2002 v10 = &pVerticesSR_806210[1] + v7) : (v9 = &pVerticesSR_806210[1] + v7, v10 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7)), 2023 v10 = &pVerticesSR_806210[1] + v7) : (v9 = &pVerticesSR_806210[1] + v7, v10 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7)),
2003 ((a8 = v9, 2024 ((a8 = v9,
2004 pVertices = &pVerticesSR_801A10[1] + v7, 2025 pVertices = &pVerticesSR_801A10[1] + v7,
2167 //v78 = pBitmaps_LOD->pHardwareTextures[v39]; 2188 //v78 = pBitmaps_LOD->pHardwareTextures[v39];
2168 v16->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v39];// Ritor1: It's temporary 2189 v16->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v39];// Ritor1: It's temporary
2169 v77 = (int)v16; 2190 v77 = (int)v16;
2170 //v76 = v16->uNumVertices; 2191 //v76 = v16->uNumVertices;
2171 //LABEL_161: 2192 //LABEL_161:
2172 pRenderer->DrawTerrainPolygon(v16, pBitmaps_LOD->pHardwareTextures[v39]);//pRenderer->DrawTerrainPolygon(v16->uNumVertices, v16, pBitmaps_LOD->pHardwareTextures[v39], false, v80); 2193 pRenderer->DrawTerrainPolygon(v16->uNumVertices, v16, pBitmaps_LOD->pHardwareTextures[v39], false, v80);
2173 goto LABEL_162; 2194 goto LABEL_162;
2174 } 2195 }
2175 v38 = v16; 2196 v38 = v16;
2176 LABEL_56: 2197 LABEL_56:
2177 v38->_4811A3(); 2198 v38->_4811A3();
2311 else 2332 else
2312 { 2333 {
2313 v58 = v40->uTileBitmapID; 2334 v58 = v40->uTileBitmapID;
2314 v81 = 1; 2335 v81 = 1;
2315 } 2336 }
2316 pRenderer->DrawTerrainPolygon(v40, pBitmaps_LOD->pHardwareTextures[v58]); 2337 pRenderer->DrawTerrainPolygon(v40->uNumVertices, v40, pBitmaps_LOD->pHardwareTextures[v58], 0, v81);
2317 } 2338 }
2318 LABEL_112: 2339 LABEL_112:
2319 v59 = &array_77EC08[pOutdoorCamera->numStru148s]; 2340 v59 = &array_77EC08[pOutdoorCamera->numStru148s];
2320 //a8 = (RenderVertexSoft *)&array_77EC08[pOutdoorCamera->numStru148s]; 2341 //a8 = (RenderVertexSoft *)&array_77EC08[pOutdoorCamera->numStru148s];
2321 v59->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY); 2342 v59->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY);
2432 //v78 = pBitmaps_LOD->pHardwareTextures[v75]; 2453 //v78 = pBitmaps_LOD->pHardwareTextures[v75];
2433 v71->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v75];// Ritor1: It's temporary 2454 v71->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v75];// Ritor1: It's temporary
2434 //v77 = (int)v71; 2455 //v77 = (int)v71;
2435 //v76 = v71->uNumVertices; 2456 //v76 = v71->uNumVertices;
2436 //goto LABEL_161; 2457 //goto LABEL_161;
2437 pRenderer->DrawTerrainPolygon(v71, pBitmaps_LOD->pHardwareTextures[v75]);//pRenderer->DrawTerrainPolygon(v76, (stru148 *)v71, v78, v79, v80); 2458 pRenderer->DrawTerrainPolygon(v76, (stru148 *)v71, v78, v79, v80);
2438 goto LABEL_162; 2459 goto LABEL_162;
2439 } 2460 }
2440 v38 = (stru148 *)v71; 2461 v38 = (stru148 *)v71;
2441 goto LABEL_56; 2462 goto LABEL_56;
2442 } 2463 }
4412 } 4433 }
4413 else 4434 else
4414 { 4435 {
4415 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) 4436 if ( !v54 || byte_4D864C && pGame->uFlags & 2 )
4416 { 4437 {
4417 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u));//Режимы визуализации точечных спрайтов 4438 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));//Режимы визуализации точечных спрайтов
4418 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); 4439 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW));
4419 if (bUsingSpecular) 4440 if (bUsingSpecular)
4420 { 4441 {
4421 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); 4442 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
4422 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 4443 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
4423 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1)); 4444 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
4424 } 4445 }
4425 if ( (signed int)uNumVertices > 0 ) 4446 if ( (signed int)uNumVertices > 0 )
4426 { 4447 {
4427 v45 = (char *)&array_50AC10[0].vWorldViewPosition; 4448 v45 = (char *)&array_50AC10[0].vWorldViewPosition;
4428 v57 = (int)&arary_77E5C8[0].pos.y; 4449 v57 = (int)&d3d_vertex_buffer[0].pos.y;
4429 v55 = uNumVertices; 4450 v55 = uNumVertices;
4430 do 4451 do
4431 { 4452 {
4432 a2 = GetActorTintColor(a3->field_58, 0, *(float *)v45, 0, 0); 4453 a2 = GetActorTintColor(a3->field_58, 0, *(float *)v45, 0, 0);
4433 pGame->_44EE30(a4, (int)&a2); 4454 pGame->_44EE30(a4, (int)&a2);
4457 while ( !v18 ); 4478 while ( !v18 );
4458 } 4479 }
4459 pRenderD3D->pDevice->SetTexture(0, pTexture); 4480 pRenderD3D->pDevice->SetTexture(0, pTexture);
4460 pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4481 pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
4461 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 4482 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
4462 arary_77E5C8, 4483 d3d_vertex_buffer,
4463 uNumVertices, 4484 uNumVertices,
4464 D3DDP_DONOTLIGHT); 4485 D3DDP_DONOTLIGHT);
4465 } 4486 }
4466 else 4487 else
4467 { 4488 {
4468 if ( (signed int)uNumVertices > 0 ) 4489 if ( (signed int)uNumVertices > 0 )
4469 { 4490 {
4470 v9 = (ODMFace *)&arary_77E5C8[0].pos.y; 4491 v9 = (ODMFace *)&d3d_vertex_buffer[0].pos.y;
4471 v10 = (char *)&array_50AC10[0].vWorldViewPosition; 4492 v10 = (char *)&array_50AC10[0].vWorldViewPosition;
4472 a4 = (ODMFace *)&arary_77E5C8[0].pos.y; 4493 a4 = (ODMFace *)&d3d_vertex_buffer[0].pos.y;
4473 v56 = uNumVertices; 4494 v56 = uNumVertices;
4474 while ( 1 ) 4495 while ( 1 )
4475 { 4496 {
4476 v11 = *(float *)v10 * 1000.0; 4497 v11 = *(float *)v10 * 1000.0;
4477 *((int *)v9 - 1) = *((int *)v10 + 3); 4498 *((int *)v9 - 1) = *((int *)v10 + 3);
4502 if ( v18 ) 4523 if ( v18 )
4503 break; 4524 break;
4504 v9 = a4; 4525 v9 = a4;
4505 } 4526 }
4506 } 4527 }
4507 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); 4528 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
4508 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 4529 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
4509 if (bUsingSpecular) 4530 if (bUsingSpecular)
4510 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); 4531 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE));
4511 4532
4512 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); 4533 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
4513 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4534 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
4514 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, 4535 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR,
4515 arary_77E5C8, 4536 d3d_vertex_buffer,
4516 uNumVertices, 4537 uNumVertices,
4517 D3DDP_DONOTLIGHT)); 4538 D3DDP_DONOTLIGHT));
4518 //v50 = (const char *)v5->pRenderD3D->pDevice; 4539 //v50 = (const char *)v5->pRenderD3D->pDevice;
4519 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); 4540 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
4520 //(*(void (**)(void))(*(int *)v50 + 88))(); 4541 //(*(void (**)(void))(*(int *)v50 + 88))();
4521 v53->_45D74F_MessWithLight(-1, 0); 4542 v53->_45D74F_MessWithLight(-1, 0);
4522 v23 = uNumVertices; 4543 v23 = uNumVertices;
4523 if ( (signed int)uNumVertices > 0 ) 4544 if ( (signed int)uNumVertices > 0 )
4524 { 4545 {
4525 v24 = (char *)&arary_77E5C8[0].diffuse; 4546 v24 = (char *)&d3d_vertex_buffer[0].diffuse;
4526 do 4547 do
4527 { 4548 {
4528 *(int *)v24 = a2; 4549 *(int *)v24 = a2;
4529 v24 += 32; 4550 v24 += 32;
4530 --v23; 4551 --v23;
4531 } 4552 }
4532 while ( v23 ); 4553 while ( v23 );
4533 } 4554 }
4534 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pTexture)); 4555 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pTexture));
4535 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 4556 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
4536 if ( !pRenderer->bUsingSpecular ) 4557 if ( !pRenderer->bUsingSpecular )
4537 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, true)); 4558 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
4538 4559
4539 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); 4560 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
4540 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 1)); 4561 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO));
4541 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3)); 4562 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR));
4542 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4563 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
4543 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, 4564 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR,
4544 arary_77E5C8, 4565 d3d_vertex_buffer,
4545 uNumVertices, 4566 uNumVertices,
4546 D3DDP_DONOTLIGHT)); 4567 D3DDP_DONOTLIGHT));
4547 if (bUsingSpecular) 4568 if (bUsingSpecular)
4548 { 4569 {
4549 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, true)); 4570 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
4550 4571
4551 v33 = uNumVertices; 4572 v33 = uNumVertices;
4552 if ( (signed int)uNumVertices > 0 ) 4573 if ( (signed int)uNumVertices > 0 )
4553 { 4574 {
4554 v34 = (char *)&arary_77E5C8[0].specular; 4575 v34 = (char *)&d3d_vertex_buffer[0].specular;
4555 do 4576 do
4556 { 4577 {
4557 v35 = *(int *)v34; 4578 v35 = *(int *)v34;
4558 *(int *)v34 = 0; 4579 *(int *)v34 = 0;
4559 v34 += 32; 4580 v34 += 32;
4561 *((int *)v34 - 9) = pRenderer->uFogColor | v35 & 0xFF000000; 4582 *((int *)v34 - 9) = pRenderer->uFogColor | v35 & 0xFF000000;
4562 } 4583 }
4563 while ( v33 ); 4584 while ( v33 );
4564 } 4585 }
4565 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); 4586 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
4566 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 6)); 4587 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_INVSRCALPHA));
4567 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 5)); 4588 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCALPHA));
4568 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4589 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
4569 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, 4590 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR,
4570 arary_77E5C8, 4591 d3d_vertex_buffer,
4571 uNumVertices, 4592 uNumVertices,
4572 D3DDP_DONOTLIGHT)); 4593 D3DDP_DONOTLIGHT));
4573 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, true)); 4594 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
4574 //v40 = pRenderer->pRenderD3D->pDevice->lpVtbl; 4595 //v40 = pRenderer->pRenderD3D->pDevice->lpVtbl;
4575 v41 = GetLevelFogColor(); 4596 v41 = GetLevelFogColor();
4576 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF); 4597 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF);
4577 v6 = 0; 4598 v6 = 0;
4578 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0); 4599 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0);
4579 } 4600 }
4580 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 4601 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
4581 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1)); 4602 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
4582 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v6)); 4603 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v6));
4583 } 4604 }
4584 } 4605 }
4585 } 4606 }
4586 } 4607 }
7206 unsigned int Render::GetActorTintColor(float a2, int a3, int a4, int a5, RenderBillboard *a6) 7227 unsigned int Render::GetActorTintColor(float a2, int a3, int a4, int a5, RenderBillboard *a6)
7207 { 7228 {
7208 return ::GetActorTintColor(a3, a4, a2, a5, a6); 7229 return ::GetActorTintColor(a3, a4, a2, a5, a6);
7209 } 7230 }
7210 7231
7211 void Render::DrawTerrainPolygon(stru148 *a3, IDirect3DTexture2 *pTexture)//new function 7232 /*void Render::DrawTerrainPolygon_new(stru148 *a3, IDirect3DTexture2 *pTexture)//new function
7212 { 7233 {
7213 int v5; // ebx@1 7234 int v5; // ebx@1
7214 int v6; // edi@1 7235 int v6; // edi@1
7215 int v8; // eax@7 7236 int v8; // eax@7
7216 float v9; // eax@12 7237 float v9; // eax@12
7266 return; 7287 return;
7267 7288
7268 7289
7269 7290
7270 7291
7271 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1); 7292 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);
7272 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE); 7293 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE);
7273 if (this->bUsingSpecular) 7294 if (this->bUsingSpecular)
7274 { 7295 {
7275 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); 7296 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);
7276 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); 7297 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
7277 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); 7298 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
7278 } 7299 }
7279 7300
7280 pVertices[0].pos.x = array_50AC10[0].vWorldViewProjX; 7301 pVertices[0].pos.x = array_50AC10[0].vWorldViewProjX;
7281 pVertices[0].pos.y = array_50AC10[0].vWorldViewProjY; 7302 pVertices[0].pos.y = array_50AC10[0].vWorldViewProjY;
7282 pVertices[0].pos.z = 1.0 - 1.0 / (1000 * array_50AC10[0].vWorldViewPosition.x / (double)pOutdoorCamera->shading_dist_mist); 7303 pVertices[0].pos.z = 1.0 - 1.0 / (1000 * array_50AC10[0].vWorldViewPosition.x / (double)pOutdoorCamera->shading_dist_mist);
7318 7339
7319 7340
7320 this->pRenderD3D->pDevice->SetTexture(0, pTexture); 7341 this->pRenderD3D->pDevice->SetTexture(0, pTexture);
7321 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, pVertices, 6, D3DDP_DONOTLIGHT); 7342 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, pVertices, 6, D3DDP_DONOTLIGHT);
7322 7343
7323 } 7344 }*/
7345
7324 //----- (004A26BC) -------------------------------------------------------- 7346 //----- (004A26BC) --------------------------------------------------------
7325 void Render::DrawTerrainPolygon(unsigned int uNumVertices, stru148 *a4, IDirect3DTexture2 *a5, int a6, int a7) 7347 void Render::DrawTerrainPolygon(unsigned int uNumVertices, stru148 *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders)
7326 { 7348 {
7327 RenderVertexSoft *pVertices; // esi@0 7349 //RenderVertexSoft *pVertices; // esi@0
7328 int v7; // edi@1 7350 //int v7; // edi@1
7329 unsigned int v8; // ebx@1 7351 unsigned int v8; // ebx@1
7330 LightmapBuilder *v9; // esi@3 7352 LightmapBuilder *v9; // esi@3
7331 unsigned int v10; // edx@3 7353 unsigned int v10; // edx@3
7332 int v11; // eax@5 7354 int v11; // eax@5
7333 int v12; // eax@11 7355 int v12; // eax@11
7365 //IDirect3DDevice3Vtbl *v44; // ebx@28 7387 //IDirect3DDevice3Vtbl *v44; // ebx@28
7366 unsigned int v45; // eax@28 7388 unsigned int v45; // eax@28
7367 HRESULT v46; // eax@29 7389 HRESULT v46; // eax@29
7368 HRESULT v47; // eax@29 7390 HRESULT v47; // eax@29
7369 HRESULT v48; // eax@29 7391 HRESULT v48; // eax@29
7370 IDirect3DDevice3 *v49; // eax@35 7392 //IDirect3DDevice3 *v49; // eax@35
7371 //IDirect3DDevice3Vtbl *v50; // ecx@35 7393 //IDirect3DDevice3Vtbl *v50; // ecx@35
7372 int v51; // eax@40 7394 int v51; // eax@40
7373 char *v52; // esi@40 7395 char *v52; // esi@40
7374 double v53; // st7@42 7396 double v53; // st7@42
7375 double v54; // st7@42 7397 double v54; // st7@42
7376 signed int v55; // eax@42 7398 signed int v55; // eax@42
7377 int v56; // ecx@42 7399 int v56; // ecx@42
7378 double v57; // st7@42 7400 double v57; // st7@42
7379 float v58; // ST7C_4@43 7401 float v58; // ST7C_4@43
7380 int v59; // eax@43 7402 int v59; // eax@43
7381 signed int v60; // [sp+78h] [bp-14h]@31 7403 //signed int v60; // [sp+78h] [bp-14h]@31
7382 RenderVertexSoft *v61; // [sp+7Ch] [bp-10h]@3 7404 //RenderVertexSoft *v61; // [sp+7Ch] [bp-10h]@3
7383 const char *v62; // [sp+80h] [bp-Ch]@0 7405 const char *v62; // [sp+80h] [bp-Ch]@0
7384 const char *v63; // [sp+80h] [bp-Ch]@19 7406 const char *v63; // [sp+80h] [bp-Ch]@19
7385 int v64; // [sp+84h] [bp-8h]@0 7407 int v64; // [sp+84h] [bp-8h]@0
7386 LightmapBuilder *v65; // [sp+88h] [bp-4h]@3 7408 LightmapBuilder *v65; // [sp+88h] [bp-4h]@3
7387 unsigned int v66; // [sp+88h] [bp-4h]@40 7409 unsigned int v66; // [sp+88h] [bp-4h]@40
7388 unsigned int a6a; // [sp+A0h] [bp+14h]@11 7410 unsigned int a6a; // [sp+A0h] [bp+14h]@11
7389 7411 int a7;
7390 v7 = (int)this; 7412
7413 //v7 = (int)this;
7391 v8 = 0; 7414 v8 = 0;
7392 if ( !this->uNumD3DSceneBegins ) 7415 if (!this->uNumD3DSceneBegins)
7393 return; 7416 return;
7394 if ( uNumVertices < 3) 7417 if ( uNumVertices < 3)
7395 return; 7418 return;
7396 7419
7397 v61 = pVertices; 7420 //v61 = pVertices;
7421
7398 /* v9 = pGame->pLightmapBuilder; 7422 /* v9 = pGame->pLightmapBuilder;
7399 v65 = v9; 7423 v65 = v9;
7400 v10 = v9->std__vector_000004_size;*/ 7424 v10 = v9->std__vector_000004_size;*/
7401 if ( byte_4D864C && pGame->uFlags & 1 ) 7425 if ( byte_4D864C && pGame->uFlags & 1 )
7402 { 7426 {
7403 v11 = GetActorTintColor(a4->field_58, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0); 7427 v11 = GetActorTintColor(a4->field_58, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0);
7404 pGame->pLightmapBuilder->_45D74F_MessWithLight(v11, 0); 7428 pGame->pLightmapBuilder->_45D74F_MessWithLight(v11, 0);
7405 } 7429 }
7406 else 7430 else
7407 { 7431 {
7408 if ( a6 || !pGame->pLightmapBuilder->std__vector_000004_size || 7432 if (transparent || !pGame->pLightmapBuilder->std__vector_000004_size ||
7409 byte_4D864C && pGame->uFlags & 2 ) 7433 byte_4D864C && pGame->uFlags & 2 )
7410 { 7434 {
7411 if ( (_BYTE)a7 ) 7435 if (clampAtTextureBorders)
7412 v60 = 3; 7436 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
7413 else 7437 else
7414 v60 = 1; 7438 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);
7415 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, v60); 7439
7416 if ( a6 || this->bUsingSpecular ) 7440 if (transparent || this->bUsingSpecular)
7417 { 7441 {
7418 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); 7442 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);
7419 v49 = this->pRenderD3D->pDevice; 7443 if (transparent)
7420 //v50 = v49->lpVtbl;
7421 if ( a6 )
7422 { 7444 {
7423 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5); 7445 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA);
7424 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6); 7446 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);
7447 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO);
7448 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE);
7425 } 7449 }
7426 else 7450 else
7427 { 7451 {
7428 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); 7452 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
7429 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); 7453 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
7430 __debugbreak;//it's error
7431 } 7454 }
7432 7455 }
7433 } 7456 if (uNumVertices > 0)
7434 if ( (signed int)uNumVertices > 0 ) 7457 {
7435 { 7458 v51 = (int)&d3d_vertex_buffer[0].pos.y;
7436 v51 = (int)&arary_77E5C8[0].pos.y;
7437 v52 = (char *)&array_50AC10[0].vWorldViewPosition; 7459 v52 = (char *)&array_50AC10[0].vWorldViewPosition;
7438 a7 = (int)&arary_77E5C8[0].pos.y; 7460 a7 = (int)&d3d_vertex_buffer[0].pos.y;
7439 v66 = uNumVertices; 7461 v66 = uNumVertices;
7440 while ( 1 ) 7462 while ( 1 )
7441 { 7463 {
7442 v53 = *(float *)v52 * 1000.0; 7464 v53 = *(float *)v52 * 1000.0;
7443 *(int *)(v51 - 4) = *((int *)v52 + 3); 7465 *(int *)(v51 - 4) = *((int *)v52 + 3);
7469 break; 7491 break;
7470 v51 = a7; 7492 v51 = a7;
7471 } 7493 }
7472 } 7494 }
7473 this->pRenderD3D->pDevice->SetTexture(0, a5); 7495 this->pRenderD3D->pDevice->SetTexture(0, a5);
7474 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7496 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, d3d_vertex_buffer, uNumVertices, 16);
7475 arary_77E5C8, uNumVertices, 16); 7497 if (transparent)
7476 if ( a6 ) 7498 {
7477 { 7499 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
7478 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); 7500 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
7479 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); 7501 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
7480 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
7481 } 7502 }
7482 } 7503 }
7483 else 7504 else
7484 { 7505 {
7485 if ( (signed int)uNumVertices > 0 ) 7506 if ( (signed int)uNumVertices > 0 )
7486 { 7507 {
7487 v12 = (int)&arary_77E5C8[0].pos.y; 7508 v12 = (int)&d3d_vertex_buffer[0].pos.y;
7488 v13 = (char *)&array_50AC10[0].vWorldViewPosition; 7509 v13 = (char *)&array_50AC10[0].vWorldViewPosition;
7489 a7 = (int)&arary_77E5C8[0].pos.y; 7510 a7 = (int)&d3d_vertex_buffer[0].pos.y;
7490 a6a = uNumVertices; 7511 a6a = uNumVertices;
7491 while ( 1 ) 7512 while ( 1 )
7492 { 7513 {
7493 v14 = *(float *)v13 * 1000.0; 7514 v14 = *(float *)v13 * 1000.0;
7494 *(int *)(v12 - 4) = *((int *)v13 + 3); 7515 *(int *)(v12 - 4) = *((int *)v13 + 3);
7519 if ( v21 ) 7540 if ( v21 )
7520 break; 7541 break;
7521 v12 = a7; 7542 v12 = a7;
7522 } 7543 }
7523 } 7544 }
7524 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); 7545 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
7525 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 7546 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7526 if ( pRenderer->bUsingSpecular ) 7547 if (pRenderer->bUsingSpecular)
7527 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); 7548 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE));
7528 7549
7529 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); 7550 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
7530 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7551 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7531 D3DPT_TRIANGLEFAN,
7532 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7552 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7533 arary_77E5C8, 7553 d3d_vertex_buffer,
7534 uNumVertices, 7554 uNumVertices,
7535 16)); 7555 16));
7536 //v63 = (const char *)v7->pRenderD3D->pDevice; 7556 //v63 = (const char *)v7->pRenderD3D->pDevice;
7537 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1)); 7557 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
7538 //(*(void (**)(void))(*(int *)v63 + 88))(); 7558 //(*(void (**)(void))(*(int *)v63 + 88))();
7539 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); 7559 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0);
7540 v26 = uNumVertices; 7560 v26 = uNumVertices;
7541 if ( (signed int)uNumVertices > 0 ) 7561 if ( (signed int)uNumVertices > 0 )
7542 { 7562 {
7543 v27 = (char *)&arary_77E5C8[0].diffuse; 7563 v27 = (char *)&d3d_vertex_buffer[0].diffuse;
7544 do 7564 do
7545 { 7565 {
7546 *(int *)v27 = -1; 7566 *(int *)v27 = -1;
7547 v27 += 32; 7567 v27 += 32;
7548 --v26; 7568 --v26;
7549 } 7569 }
7550 while ( v26 ); 7570 while ( v26 );
7551 } 7571 }
7552 ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5)); 7572 ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5));
7553 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 7573 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7554 if ( !pRenderer->bUsingSpecular ) 7574 if ( !pRenderer->bUsingSpecular )
7555 { 7575 {
7556 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); 7576 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
7557 } 7577 }
7558 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); 7578 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
7559 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 1u)); 7579 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO));
7560 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3u)); 7580 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR));
7561 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7581 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7562 D3DPT_TRIANGLEFAN,
7563 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7582 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7564 arary_77E5C8, 7583 d3d_vertex_buffer,
7565 uNumVertices, 7584 uNumVertices,
7566 16)); 7585 16));
7567 if ( pRenderer->bUsingSpecular ) 7586 if ( pRenderer->bUsingSpecular )
7568 { 7587 {
7569 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); 7588 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
7570 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); 7589 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
7571 v37 = uNumVertices; 7590 v37 = uNumVertices;
7572 if ( (signed int)uNumVertices > 0 ) 7591 if ( (signed int)uNumVertices > 0 )
7573 { 7592 {
7574 v38 = (char *)&arary_77E5C8[0].specular; 7593 v38 = (char *)&d3d_vertex_buffer[0].specular;
7575 do 7594 do
7576 { 7595 {
7577 v39 = *(int *)v38; 7596 v39 = *(int *)v38;
7578 *(int *)v38 = 0; 7597 *(int *)v38 = 0;
7579 v38 += 32; 7598 v38 += 32;
7581 *((int *)v38 - 9) = pRenderer->uFogColor | v39 & 0xFF000000; 7600 *((int *)v38 - 9) = pRenderer->uFogColor | v39 & 0xFF000000;
7582 } 7601 }
7583 while ( v37 ); 7602 while ( v37 );
7584 } 7603 }
7585 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));//problem 7604 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));//problem
7586 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 6u)); 7605 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_INVSRCALPHA));
7587 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 5u)); 7606 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCALPHA));
7588 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7607 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7589 D3DPT_TRIANGLEFAN,
7590 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7608 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7591 arary_77E5C8, 7609 d3d_vertex_buffer,
7592 uNumVertices, 7610 uNumVertices,
7593 16)); 7611 16));
7594 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1)); 7612 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
7595 //v44 = pRenderer->pRenderD3D->pDevice; 7613 //v44 = pRenderer->pRenderD3D->pDevice;
7596 v45 = GetLevelFogColor(); 7614 v45 = GetLevelFogColor();
7597 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF)); 7615 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF));
7598 v8 = 0; 7616 v8 = 0;
7599 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); 7617 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
7600 } 7618 }
7601 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 7619 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
7602 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); 7620 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
7603 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v8)); 7621 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v8));
7604 } 7622 }
7605 } 7623 }
7606 if ( pIndoorCamera->field_4C & 2 || pBLVRenderParams->uFlags & 2 ) 7624
7607 pGame->pIndoorCameraD3D->debug_outline_d3d(arary_77E5C8, uNumVertices, 0xFFFFFFu, 0.0); 7625 if (pIndoorCamera->flags & INDOOR_CAMERA_DRAW_D3D_OUTLINES ||
7626 pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_D3D_OUTLINES )
7627 pGame->pIndoorCameraD3D->debug_outline_d3d(d3d_vertex_buffer, uNumVertices, 0x00FFFFFF, 0.0);
7608 } 7628 }
7609 7629
7610 // 4A26BC: could not find valid save-restore pair for esi 7630 // 4A26BC: could not find valid save-restore pair for esi
7611 // 4D864C: using guessed type char byte_4D864C; 7631 // 4D864C: using guessed type char byte_4D864C;
7612 7632
7622 if (!this->uNumD3DSceneBegins) 7642 if (!this->uNumD3DSceneBegins)
7623 return; 7643 return;
7624 7644
7625 if (uNumVertices >= 3) 7645 if (uNumVertices >= 3)
7626 { 7646 {
7627 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1); 7647 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);
7628 if (this->bUsingSpecular) 7648 if (this->bUsingSpecular)
7629 { 7649 {
7630 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); 7650 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);
7631 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); 7651 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
7632 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); 7652 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
7633 } 7653 }
7634 7654
7635 for (i = 0; i < uNumVertices; ++i) 7655 for (i = 0; i < uNumVertices; ++i)
7636 { 7656 {
7637 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; 7657 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX;
7665 v4 = (int)this; 7685 v4 = (int)this;
7666 if ( !this->uNumD3DSceneBegins ) 7686 if ( !this->uNumD3DSceneBegins )
7667 return; 7687 return;
7668 if ( uNumVertices >= 3 ) 7688 if ( uNumVertices >= 3 )
7669 { 7689 {
7670 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1); 7690 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);
7671 if ( this->bUsingSpecular ) 7691 if ( this->bUsingSpecular )
7672 { 7692 {
7673 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); 7693 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);
7674 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); 7694 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
7675 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); 7695 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
7676 } 7696 }
7677 for (i = 0; i < uNumVertices; ++i) 7697 for (i = 0; i < uNumVertices; ++i)
7678 { 7698 {
7679 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; 7699 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX;
7680 pVertices[i].pos.y = array_50AC10[i].vWorldViewProjY; 7700 pVertices[i].pos.y = array_50AC10[i].vWorldViewProjY;
7714 if ( this->uNumD3DSceneBegins ) 7734 if ( this->uNumD3DSceneBegins )
7715 { 7735 {
7716 v4 = a2; 7736 v4 = a2;
7717 if ( a2 >= 3 ) 7737 if ( a2 >= 3 )
7718 { 7738 {
7719 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 7739 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7720 v5 = 31 - (a3->field_58 & 0x1F); 7740 v5 = 31 - (a3->field_58 & 0x1F);
7721 if ( v5 < pOutdoor->field_CBC_terrain_triangles_shade_type ) 7741 if ( v5 < pOutdoor->field_CBC_terrain_triangles_shade_type )
7722 v5 = pOutdoor->field_CBC_terrain_triangles_shade_type; 7742 v5 = pOutdoor->field_CBC_terrain_triangles_shade_type;
7723 v6 = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); 7743 v6 = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8);
7724 if ( a2 > 0 ) 7744 if ( a2 > 0 )
7725 { 7745 {
7726 v7 = (char *)&arary_77E5C8[0].pos.y; 7746 v7 = (char *)&d3d_vertex_buffer[0].pos.y;
7727 v8 = (char *)&array_507D30[0].vWorldViewProjY; 7747 v8 = (char *)&array_507D30[0].vWorldViewProjY;
7728 do 7748 do
7729 { 7749 {
7730 v9 = *((float *)v8 - 4) * 0.061758894; 7750 v9 = *((float *)v8 - 4) * 0.061758894;
7731 v10 = *((int *)v8 - 1); 7751 v10 = *((int *)v8 - 1);
7743 *((float *)v7 - 7) = 1.0 - 1.0 / v9; 7763 *((float *)v7 - 7) = 1.0 - 1.0 / v9;
7744 } 7764 }
7745 while ( v4 ); 7765 while ( v4 );
7746 } 7766 }
7747 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); 7767 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex));
7748 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7768 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7749 D3DPT_TRIANGLEFAN,
7750 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7769 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7751 arary_77E5C8, 7770 d3d_vertex_buffer,
7752 a2, 7771 a2,
7753 28)); 7772 28));
7754 } 7773 }
7755 } 7774 }
7756 } 7775 }
7809 7828
7810 if (byte_4D864C && pGame->uFlags & 1) 7829 if (byte_4D864C && pGame->uFlags & 1)
7811 { 7830 {
7812 __debugbreak(); 7831 __debugbreak();
7813 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); 7832 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false));
7814 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); 7833 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7815 if ( (signed int)uNumVertices > 0 ) 7834 if ( (signed int)uNumVertices > 0 )
7816 { 7835 {
7817 v12 = (char *)&array_507D30[0].vWorldViewPosition; 7836 v12 = (char *)&array_507D30[0].vWorldViewPosition;
7818 v13 = (char *)&arary_77E5C8[0].pos.y; 7837 v13 = (char *)&d3d_vertex_buffer[0].pos.y;
7819 auto a7 = uNumVertices; 7838 auto a7 = uNumVertices;
7820 uint v18; 7839 uint v18;
7821 do 7840 do
7822 { 7841 {
7823 v14 = *(float *)v12 * 0.061758894; 7842 v14 = *(float *)v12 * 0.061758894;
7839 pHwTex = (IDirect3DTexture2 *)v19->uTextureHeight; 7858 pHwTex = (IDirect3DTexture2 *)v19->uTextureHeight;
7840 *((float *)v13 - 2) = *((float *)v12 - 5) / (double)(signed int)pHwTex; 7859 *((float *)v13 - 2) = *((float *)v12 - 5) / (double)(signed int)pHwTex;
7841 } 7860 }
7842 while ( !v18 ); 7861 while ( !v18 );
7843 } 7862 }
7844 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); 7863 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7845 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); 7864 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
7846 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7865 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
7847 D3DPT_TRIANGLEFAN, 7866 D3DPT_TRIANGLEFAN,
7848 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7867 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7849 arary_77E5C8, 7868 d3d_vertex_buffer,
7850 uNumVertices, 7869 uNumVertices,
7851 28)); 7870 28));
7852 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); 7871 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0);
7853 } 7872 }
7854 else 7873 else
7856 if (!pGame->pLightmapBuilder->std__vector_000004_size || 7875 if (!pGame->pLightmapBuilder->std__vector_000004_size ||
7857 byte_4D864C && pGame->uFlags & 2) 7876 byte_4D864C && pGame->uFlags & 2)
7858 { 7877 {
7859 for (uint i = 0; i < uNumVertices; ++i) 7878 for (uint i = 0; i < uNumVertices; ++i)
7860 { 7879 {
7861 arary_77E5C8[i].pos.x = array_507D30[i].vWorldViewProjX; 7880 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX;
7862 arary_77E5C8[i].pos.y = array_507D30[i].vWorldViewProjY; 7881 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY;
7863 arary_77E5C8[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894); 7882 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894);
7864 arary_77E5C8[i].rhw = 1.0 / array_507D30[i].vWorldViewPosition.x; 7883 d3d_vertex_buffer[i].rhw = 1.0 / array_507D30[i].vWorldViewPosition.x;
7865 arary_77E5C8[i].diffuse = uCorrectedColor; 7884 d3d_vertex_buffer[i].diffuse = uCorrectedColor;
7866 arary_77E5C8[i].specular = 0; 7885 d3d_vertex_buffer[i].specular = 0;
7867 arary_77E5C8[i].texcoord.x = array_507D30[i].u / (double)pTex->uTextureWidth; 7886 d3d_vertex_buffer[i].texcoord.x = array_507D30[i].u / (double)pTex->uTextureWidth;
7868 arary_77E5C8[i].texcoord.y = array_507D30[i].v / (double)pTex->uTextureHeight; 7887 d3d_vertex_buffer[i].texcoord.y = array_507D30[i].v / (double)pTex->uTextureHeight;
7869 } 7888 }
7870 7889
7871 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); 7890 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7872 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); 7891 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex));
7873 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 7892 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7874 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7893 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7875 arary_77E5C8, 7894 d3d_vertex_buffer,
7876 uNumVertices, 7895 uNumVertices,
7877 28)); 7896 28));
7878 } 7897 }
7879 else 7898 else
7880 { 7899 {
7881 __debugbreak(); 7900 __debugbreak();
7882 if ( (signed int)uNumVertices > 0 ) 7901 if ( (signed int)uNumVertices > 0 )
7883 { 7902 {
7884 v23 = pTex; 7903 v23 = pTex;
7885 v24 = (char *)&array_507D30[0].vWorldViewPosition; 7904 v24 = (char *)&array_507D30[0].vWorldViewPosition;
7886 v25 = (char *)&arary_77E5C8[0].pos.y; 7905 v25 = (char *)&d3d_vertex_buffer[0].pos.y;
7887 pTex = (Texture *)uNumVertices; 7906 pTex = (Texture *)uNumVertices;
7888 uint v18; 7907 uint v18;
7889 do 7908 do
7890 { 7909 {
7891 v26 = *(float *)v24 * 0.061758894; 7910 v26 = *(float *)v24 * 0.061758894;
7907 *((float *)v25 - 2) = *((float *)v24 - 5) / (double)(signed int)v23->uTextureHeight; 7926 *((float *)v25 - 2) = *((float *)v24 - 5) / (double)(signed int)v23->uTextureHeight;
7908 } 7927 }
7909 while ( !v18 ); 7928 while ( !v18 );
7910 } 7929 }
7911 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); 7930 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false));
7912 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); 7931 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7913 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); 7932 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
7914 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7933 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7915 D3DPT_TRIANGLEFAN,
7916 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7934 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7917 arary_77E5C8, 7935 d3d_vertex_buffer,
7918 uNumVertices, 7936 uNumVertices,
7919 28)); 7937 28));
7920 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1)); 7938 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1));
7921 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); 7939 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0);
7922 v33 = uNumVertices; 7940 v33 = uNumVertices;
7923 if ( (signed int)uNumVertices > 0 ) 7941 if ( (signed int)uNumVertices > 0 )
7924 { 7942 {
7925 v34 = (char *)&arary_77E5C8[0].diffuse; 7943 v34 = (char *)&d3d_vertex_buffer[0].diffuse;
7926 do 7944 do
7927 { 7945 {
7928 *(int *)v34 = uCorrectedColor; 7946 *(int *)v34 = uCorrectedColor;
7929 v34 += 32; 7947 v34 += 32;
7930 --v33; 7948 --v33;
7931 } 7949 }
7932 while ( v33 ); 7950 while ( v33 );
7933 } 7951 }
7934 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); 7952 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex));
7935 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); 7953 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
7936 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); 7954 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
7937 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); 7955 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
7938 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 1)); 7956 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO));
7939 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3)); 7957 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR));
7940 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 7958 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
7941 D3DPT_TRIANGLEFAN,
7942 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 7959 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
7943 arary_77E5C8, 7960 d3d_vertex_buffer,
7944 uNumVertices, 7961 uNumVertices,
7945 28)); 7962 28));
7946 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 7963 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
7947 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1)); 7964 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
7948 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false)); 7965 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
7949 } 7966 }
7950 } 7967 }
7951 } 7968 }
7952 // 4D864C: using guessed type char byte_4D864C; 7969 // 4D864C: using guessed type char byte_4D864C;
7953 7970
8707 v29[2].texcoord.y = 1.0; 8724 v29[2].texcoord.y = 1.0;
8708 v29[3].pos.x = srcX - v17; 8725 v29[3].pos.x = srcX - v17;
8709 v29[3].pos.y = v18 + srcY; 8726 v29[3].pos.y = v18 + srcY;
8710 v29[3].texcoord.x = 0.0; 8727 v29[3].texcoord.x = 0.0;
8711 v29[3].texcoord.y = 0.0; 8728 v29[3].texcoord.y = 0.0;
8712 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); 8729 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
8713 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); 8730 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
8714 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u)); 8731 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE));
8715 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0)); 8732 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE));
8716 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); 8733 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
8717 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u)); 8734 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
8718 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, a9)); 8735 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, a9));
8719 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive( 8736 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(
8720 D3DPT_TRIANGLEFAN, 8737 D3DPT_TRIANGLEFAN,
8721 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 8738 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
8722 v29, 8739 v29,
8723 4, 8740 4,
8724 24)); 8741 24));
8725 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); 8742 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
8726 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); 8743 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
8727 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); 8744 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
8728 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u)); 8745 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE));
8729 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); 8746 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
8730 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2u)); 8747 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW));
8731 } 8748 }
8732 8749
8733 8750
8734 //----- (004A4CC9) -------------------------------------------------------- 8751 //----- (004A4CC9) --------------------------------------------------------
8735 void Render::_4A4CC9(stru6_stru1_indoor_sw_billboard *a1, int a2) 8752 void Render::_4A4CC9(stru6_stru1_indoor_sw_billboard *a1, int a2)
9185 v36[3].pos.z = 0.0; 9202 v36[3].pos.z = 0.0;
9186 v36[3].rhw = 1.0; 9203 v36[3].rhw = 1.0;
9187 v36[3].texcoord.x = 0.0; 9204 v36[3].texcoord.x = 0.0;
9188 v36[3].texcoord.y = 0.0; 9205 v36[3].texcoord.y = 0.0;
9189 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); 9206 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
9190 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); 9207 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE));
9191 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); 9208 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
9192 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); 9209 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
9193 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5u)); 9210 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA));
9194 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6u)); 9211 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA));
9195 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0)); 9212 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE));
9196 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 8u)); 9213 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS));
9197 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( 9214 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
9198 D3DPT_TRIANGLEFAN, 9215 D3DPT_TRIANGLEFAN,
9199 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 9216 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
9200 v36, 9217 v36,
9201 4, 9218 4,
9202 28)); 9219 28));
9203 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 9220 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
9204 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); 9221 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
9205 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); 9222 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
9206 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); 9223 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
9207 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u)); 9224 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE));
9208 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 2u)); 9225 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_LESS));
9209 } 9226 }
9210 else 9227 else
9211 { 9228 {
9212 v40 = (1.0 - a3) * 65536.0; 9229 v40 = (1.0 - a3) * 65536.0;
9213 v39 = v40 + 6.7553994e15; 9230 v39 = v40 + 6.7553994e15;
11294 11311
11295 11312
11296 //----- (004A1C1E) -------------------------------------------------------- 11313 //----- (004A1C1E) --------------------------------------------------------
11297 void DoRenderBillboards_D3D() 11314 void DoRenderBillboards_D3D()
11298 { 11315 {
11299 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3u)); 11316 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP));
11300 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); 11317 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
11301 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); 11318 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
11302 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); 11319 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
11303 11320
11304 /*if (pRenderer->uNumBillboardsToDraw) 11321 /*if (pRenderer->uNumBillboardsToDraw)
11305 { 11322 {
11306 auto p = &pRenderer->pBillboardRenderListD3D[0]; 11323 auto p = &pRenderer->pBillboardRenderListD3D[0];
11347 } 11364 }
11348 11365
11349 if (pRenderer->bFogEnabled) 11366 if (pRenderer->bFogEnabled)
11350 { 11367 {
11351 pRenderer->bFogEnabled = false; 11368 pRenderer->bFogEnabled = false;
11352 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1)); 11369 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
11353 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF)); 11370 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF));
11354 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); 11371 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
11355 } 11372 }
11356 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2)); 11373 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW));
11357 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1)); 11374 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
11358 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); 11375 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
11359 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); 11376 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
11360 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); 11377 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
11361 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u)); 11378 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE));
11362 } 11379 }
11363 11380
11364 11381
11365 11382
11366 11383
11373 case RenderBillboardD3D::Transparent: 11390 case RenderBillboardD3D::Transparent:
11374 { 11391 {
11375 if (pRenderer->bFogEnabled) 11392 if (pRenderer->bFogEnabled)
11376 { 11393 {
11377 pRenderer->bFogEnabled = false; 11394 pRenderer->bFogEnabled = false;
11378 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u)); 11395 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
11379 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF)); 11396 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF));
11380 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); 11397 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
11381 } 11398 }
11382 11399
11383 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5)); 11400 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA));
11384 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6u)); 11401 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA));
11385 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1)); 11402 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE));
11386 } 11403 }
11387 break; 11404 break;
11388 11405
11389 case RenderBillboardD3D::Opaque_1: 11406 case RenderBillboardD3D::Opaque_1:
11390 case RenderBillboardD3D::Opaque_2: 11407 case RenderBillboardD3D::Opaque_2:
11393 if (pRenderer->bUsingSpecular) 11410 if (pRenderer->bUsingSpecular)
11394 { 11411 {
11395 if (!pRenderer->bFogEnabled) 11412 if (!pRenderer->bFogEnabled)
11396 { 11413 {
11397 pRenderer->bFogEnabled = true; 11414 pRenderer->bFogEnabled = true;
11398 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); 11415 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE));
11399 } 11416 }
11400 } 11417 }
11401 11418
11402 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 11419 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
11403 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u)); 11420 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE));
11404 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0)); 11421 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE));
11405 } 11422 }
11406 break; 11423 break;
11407 11424
11408 default: 11425 default:
11409 Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1); 11426 Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1);