Mercurial > mm7
comparison Render.cpp @ 62:80484cf3a683
23.01.13 DrawParticles_ODM
author | Ritor1 |
---|---|
date | Wed, 23 Jan 2013 00:50:28 +0600 |
parents | 6c2cefdaea3e |
children | f6e7d7110512 |
comparison
equal
deleted
inserted
replaced
61:6c2cefdaea3e | 62:80484cf3a683 |
---|---|
999 int v97; // ST08_4@204 | 999 int v97; // ST08_4@204 |
1000 float result; // eax@212 | 1000 float result; // eax@212 |
1001 char v102; // [sp+Ch] [bp-68h]@191 | 1001 char v102; // [sp+Ch] [bp-68h]@191 |
1002 __int16 v103; // [sp+10h] [bp-64h]@190 | 1002 __int16 v103; // [sp+10h] [bp-64h]@190 |
1003 __int16 v104; // [sp+12h] [bp-62h]@190 | 1003 __int16 v104; // [sp+12h] [bp-62h]@190 |
1004 int v105; // [sp+1Ch] [bp-58h]@1 | 1004 int pHeight; // [sp+1Ch] [bp-58h]@1 |
1005 int v106; // [sp+20h] [bp-54h]@3 | 1005 int v106; // [sp+20h] [bp-54h]@3 |
1006 int v107; // [sp+24h] [bp-50h]@3 | 1006 int v107; // [sp+24h] [bp-50h]@3 |
1007 int v108; // [sp+28h] [bp-4Ch]@9 | 1007 int v108; // [sp+28h] [bp-4Ch]@9 |
1008 int v109; // [sp+2Ch] [bp-48h]@9 | 1008 int v109; // [sp+2Ch] [bp-48h]@9 |
1009 int v110; // [sp+30h] [bp-44h]@9 | 1009 int v110; // [sp+30h] [bp-44h]@9 |
1023 float v124; // [sp+68h] [bp-Ch]@1 | 1023 float v124; // [sp+68h] [bp-Ch]@1 |
1024 int v125; // [sp+6Ch] [bp-8h]@9 | 1024 int v125; // [sp+6Ch] [bp-8h]@9 |
1025 float v126; // [sp+70h] [bp-4h]@9 | 1025 float v126; // [sp+70h] [bp-4h]@9 |
1026 | 1026 |
1027 memset(&v102, 0, sizeof(v102)); | 1027 memset(&v102, 0, sizeof(v102)); |
1028 v105 = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2); | 1028 pHeight = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2); |
1029 v0 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY); | 1029 v0 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY); |
1030 v1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + v0); | 1030 v1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + v0); |
1031 LODWORD(v124) = (signed int)((pIndoorCamera->uMapGridCellX << 16) | 1031 LODWORD(v124) = (signed int)((pIndoorCamera->uMapGridCellX << 16) |
1032 + 3 | 1032 + 3 |
1033 * stru_5C6E00->SinCos( | 1033 * stru_5C6E00->SinCos( |
1147 } | 1147 } |
1148 LODWORD(v16) = 0; | 1148 LODWORD(v16) = 0; |
1149 LODWORD(v126) = 0; | 1149 LODWORD(v126) = 0; |
1150 v17 = v117 - 1; | 1150 v17 = v117 - 1; |
1151 v18 = v116 - 1; | 1151 v18 = v116 - 1; |
1152 switch ( v105 ) | 1152 switch ( pHeight ) |
1153 { | 1153 { |
1154 case 0: | 1154 case 0: |
1155 case 7: | 1155 case 7: |
1156 v116 = terrain_76DFC8[v17]; | 1156 v116 = terrain_76DFC8[v17]; |
1157 if ( v120 > v116 ) | 1157 if ( v120 > v116 ) |
1559 LABEL_173: | 1559 LABEL_173: |
1560 v69 = LODWORD(v16) - 1; | 1560 v69 = LODWORD(v16) - 1; |
1561 ptr_801A08 = pVerticesSR_806210; | 1561 ptr_801A08 = pVerticesSR_806210; |
1562 ptr_801A04 = pVerticesSR_801A10; | 1562 ptr_801A04 = pVerticesSR_801A10; |
1563 LODWORD(v126) = v69; | 1563 LODWORD(v126) = v69; |
1564 if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 ) | 1564 if ( pHeight && pHeight != 7 && pHeight != 3 && pHeight != 4 ) |
1565 { | 1565 { |
1566 for ( i = v69; i >= 1; --i ) | 1566 for ( i = v69; i >= 1; --i ) |
1567 { | 1567 { |
1568 v70 = i; | 1568 v70 = i; |
1569 v71 = terrain_76D7C8[i]; | 1569 v71 = terrain_76D7C8[i]; |
1588 if ( v73 - 2 < v75 ) | 1588 if ( v73 - 2 < v75 ) |
1589 { | 1589 { |
1590 v127 = 0; | 1590 v127 = 0; |
1591 v79 = (v73 - 66) << 9; | 1591 v79 = (v73 - 66) << 9; |
1592 v116 = v77; | 1592 v116 = v77; |
1593 v105 = v79; | 1593 pHeight = v79; |
1594 v111 = v75 - v77; | 1594 v111 = v75 - v77; |
1595 do | 1595 do |
1596 {// âûñîòà ÷åòûðåõ âåðøèí ÿ÷åéêè | 1596 {// âûñîòà ÷åòûðåõ âåðøèí ÿ÷åéêè |
1597 *(float *)&v106 = (double)v105; | 1597 *(float *)&v106 = (double)pHeight; |
1598 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v127) = *(float *)&v106;//x | 1598 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v127) = *(float *)&v106;//x |
1599 v105 = (64 - *(int *)((char *)terrain_76D9C8 + v70)) << 9; | 1599 pHeight = (64 - *(int *)((char *)terrain_76D9C8 + v70)) << 9; |
1600 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v127) = (double)v105;//y | 1600 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v127) = (double)pHeight;//y |
1601 v105 = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70)); | 1601 pHeight = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70)); |
1602 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v127) = (double)v105;//z | 1602 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v127) = (double)pHeight;//z |
1603 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v127) = *(float *)&v106;//x | 1603 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v127) = *(float *)&v106;//x |
1604 v105 = (63 - *(int *)((char *)terrain_76D9C8 + v70)) << 9; | 1604 pHeight = (63 - *(int *)((char *)terrain_76D9C8 + v70)) << 9; |
1605 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v127) = (double)v105;//y | 1605 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v127) = (double)pHeight;//y |
1606 v105 = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70) + 1); | 1606 pHeight = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70) + 1); |
1607 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v127) = (double)v105;//z | 1607 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v127) = (double)pHeight;//z |
1608 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) | 1608 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) |
1609 { | 1609 { |
1610 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1); | 1610 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1); |
1611 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1); | 1611 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1); |
1612 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1, 0); | 1612 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1, 0); |
1613 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1, 0); | 1613 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1, 0); |
1614 } | 1614 } |
1615 v79 += 512; | 1615 v79 += 512; |
1616 v127 += 48; | 1616 v127 += 48; |
1617 ++v116; | 1617 ++v116; |
1618 v105 = v79; | 1618 pHeight = v79; |
1619 } | 1619 } |
1620 while ( v116 < v107 ); | 1620 while ( v116 < v107 ); |
1621 } | 1621 } |
1622 v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v70]); | 1622 v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v70]); |
1623 v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v70]); | 1623 v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v70]); |
1624 if ( pRenderer->pRenderD3D ) | 1624 if ( pRenderer->pRenderD3D )//Ritor1: do comment to test |
1625 Render::DrawTerrainD3D(v111, 0, (int)&v102); | 1625 Render::DrawTerrainD3D(v111, 0, (int)&v102); |
1626 else | 1626 else |
1627 Render::DrawTerrainSW(v111, 0, (int)&v102); | 1627 Render::DrawTerrainSW(v111, 0, (int)&v102); |
1628 } | 1628 } |
1629 } | 1629 } |
1651 if ( v89 - 2 < v90 + 2 ) | 1651 if ( v89 - 2 < v90 + 2 ) |
1652 { | 1652 { |
1653 v86 = 0; | 1653 v86 = 0; |
1654 v116 = v89 - 2; | 1654 v116 = v89 - 2; |
1655 v92 = (66 - v89) << 9; | 1655 v92 = (66 - v89) << 9; |
1656 v105 = (66 - v89) << 9; | 1656 pHeight = (66 - v89) << 9; |
1657 v111 = v90 + 2 - (v89 - 2); | 1657 v111 = v90 + 2 - (v89 - 2); |
1658 do | 1658 do |
1659 { | 1659 { |
1660 v93 = v116; | 1660 v93 = v116; |
1661 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 64) << 9; | 1661 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 64) << 9; |
1662 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v86) = (double)v106; | 1662 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v86) = (double)v106; |
1663 *(float *)&v105 = (double)v105; | 1663 *(float *)&pHeight = (double)pHeight; |
1664 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v86) = *(float *)&v105; | 1664 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v86) = *(float *)&pHeight; |
1665 v106 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86), v93); | 1665 v106 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86), v93); |
1666 v97 = v116; | 1666 v97 = v116; |
1667 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v86) = (double)v106; | 1667 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v86) = (double)v106; |
1668 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 63) << 9; | 1668 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 63) << 9; |
1669 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v86) = (double)v106; | 1669 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v86) = (double)v106; |
1670 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v86) = *(float *)&v105; | 1670 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v86) = *(float *)&pHeight; |
1671 v105 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86) + 1, v97); | 1671 pHeight = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86) + 1, v97); |
1672 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v86) = (double)v105; | 1672 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v86) = (double)pHeight; |
1673 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) | 1673 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) |
1674 { | 1674 { |
1675 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1); | 1675 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1); |
1676 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1); | 1676 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1); |
1677 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0); | 1677 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0); |
1678 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0); | 1678 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0); |
1679 } | 1679 } |
1680 v92 -= 512; | 1680 v92 -= 512; |
1681 v86 += 48; | 1681 v86 += 48; |
1682 ++v116; | 1682 ++v116; |
1683 v105 = v92; | 1683 pHeight = v92; |
1684 } | 1684 } |
1685 while ( v116 < v107 ); | 1685 while ( v116 < v107 ); |
1686 } | 1686 } |
1687 v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]); | 1687 v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]); |
1688 v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]); | 1688 v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]); |
1849 v12 = v11 + 6.755399441055744e15, | 1849 v12 = v11 + 6.755399441055744e15, |
1850 sX = LODWORD(v12), | 1850 sX = LODWORD(v12), |
1851 v13 = v8->vWorldPosition.y + 6.755399441055744e15, | 1851 v13 = v8->vWorldPosition.y + 6.755399441055744e15, |
1852 sY = LODWORD(v13), | 1852 sY = LODWORD(v13), |
1853 thisd = (v10->vWorldPosition.x + v8->vWorldPosition.x) * 0.5, | 1853 thisd = (v10->vWorldPosition.x + v8->vWorldPosition.x) * 0.5, |
1854 v14 = WorldPosToGridCellX(floorf(thisd + 0.5f)), | 1854 v14 = WorldPosToGridCellX(floorf(thisd + 0.5f)),//maybe current camera position X |
1855 v15 = v9->vWorldPosition.y + v8->vWorldPosition.y, | 1855 v15 = v9->vWorldPosition.y + v8->vWorldPosition.y, |
1856 v89 = v14, | 1856 v89 = v14, |
1857 thise = v15 * 0.5, | 1857 thise = v15 * 0.5, |
1858 _this = (LightmapBuilder *)WorldPosToGridCellZ(floorf(thisd + 0.5f)), | 1858 _this = (LightmapBuilder *)WorldPosToGridCellZ(floorf(thisd + 0.5f)),//maybe current camera position Z |
1859 WorldPosToGridCellX(sX), | 1859 WorldPosToGridCellX(sX), |
1860 WorldPosToGridCellZ(sY), | 1860 WorldPosToGridCellZ(sY), |
1861 !byte_4D864C) | 1861 !byte_4D864C) |
1862 || !(pGame->uFlags & 0x80)) | 1862 || !(pGame->uFlags & 0x80)) |
1863 && !sub_481EFA(v8, v9, v101, pVertices, 1)) ) | 1863 && !sub_481EFA(v8, v9, v101, pVertices, 1)) ) |
2108 if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 ) | 2108 if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 ) |
2109 { | 2109 { |
2110 a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0); | 2110 a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0); |
2111 static_sub_0048034E_stru_76D590._49B0C9(v99, *(float *)&a4); | 2111 static_sub_0048034E_stru_76D590._49B0C9(v99, *(float *)&a4); |
2112 if ( pDecalBuilder->uNumDecals > 0 ) | 2112 if ( pDecalBuilder->uNumDecals > 0 ) |
2113 pDecalBuilder->ApplyDecals( | 2113 pDecalBuilder->ApplyDecals(31 - v40->field_58, 4, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)a8, -1); |
2114 31 - v40->field_58, | |
2115 4, | |
2116 &static_sub_0048034E_stru_76D590, | |
2117 uNumVertices, | |
2118 array_50AC10, | |
2119 0, | |
2120 (char)a8, | |
2121 -1); | |
2122 } | 2114 } |
2123 if ( stru_F8AD28.uNumLightsApplied > 0 ) | 2115 if ( stru_F8AD28.uNumLightsApplied > 0 ) |
2124 v96->ApplyLights( | 2116 v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)a8); |
2125 &stru_F8AD28, | |
2126 &static_sub_0048034E_stru_76D590, | |
2127 uNumVertices, | |
2128 array_50AC10, | |
2129 0, | |
2130 (char)a8); | |
2131 v55 = uNumVertices; | 2117 v55 = uNumVertices; |
2132 v35 = byte_4D864C == 0; | 2118 v35 = byte_4D864C == 0; |
2133 v40->uNumVertices = uNumVertices; | 2119 v40->uNumVertices = uNumVertices; |
2134 if ( v35 || !(pGame->uFlags & 0x80) ) | 2120 if ( v35 || !(pGame->uFlags & 0x80) ) |
2135 { | 2121 { |
4287 } | 4273 } |
4288 else | 4274 else |
4289 { | 4275 { |
4290 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) | 4276 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) |
4291 { | 4277 { |
4292 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 4278 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u));//Ðåæèìû âèçóàëèçàöèè òî÷å÷íûõ ñïðàéòîâ |
4293 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); | 4279 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); |
4294 if (bUsingSpecular) | 4280 if (bUsingSpecular) |
4295 { | 4281 { |
4296 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); | 4282 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); |
4297 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 4283 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); |
7077 return; | 7063 return; |
7078 | 7064 |
7079 if (pRenderD3D) | 7065 if (pRenderD3D) |
7080 { | 7066 { |
7081 pGame->draw_debug_outlines(); | 7067 pGame->draw_debug_outlines(); |
7082 DoRenderBillboards_D3D(); //Ritor1: it's temporarily | 7068 //DoRenderBillboards_D3D(); //Ritor1: it's temporarily |
7083 pGame->pStru6Instance->RenderSpecialEffects(); | 7069 pGame->pStru6Instance->RenderSpecialEffects(); |
7084 pRenderD3D->pDevice->EndScene(); | 7070 pRenderD3D->pDevice->EndScene(); |
7085 } | 7071 } |
7086 else | 7072 else |
7087 pGame->pStru6Instance->RenderSpecialEffects(); | 7073 pGame->pStru6Instance->RenderSpecialEffects(); |