comparison Render.cpp @ 2274:90f56da08d76

small cleaning
author Ritor1
date Fri, 14 Mar 2014 09:32:25 +0600
parents 2e02c384c62b
children 8193a64c7461
comparison
equal deleted inserted replaced
2257:8878fba164fd 2274:90f56da08d76
320 Vec3_float_* norm = &pTerrainNormals[norm_idx]; 320 Vec3_float_* norm = &pTerrainNormals[norm_idx];
321 float _f = ((norm->x * (float)pOutdoor->vSunlight.x / 65536.0) - 321 float _f = ((norm->x * (float)pOutdoor->vSunlight.x / 65536.0) -
322 (norm->y * (float)pOutdoor->vSunlight.y / 65536.0) - 322 (norm->y * (float)pOutdoor->vSunlight.y / 65536.0) -
323 (norm->z * (float)pOutdoor->vSunlight.z / 65536.0)); 323 (norm->z * (float)pOutdoor->vSunlight.z / 65536.0));
324 pTilePolygon->dimming_level = 20.0 - floorf(20.0 * _f + 0.5f); 324 pTilePolygon->dimming_level = 20.0 - floorf(20.0 * _f + 0.5f);
325 //if ( norm_idx < 0 || norm_idx > uNumTerrainNormals - 1 ) 325 if ( norm_idx < 0 || norm_idx > uNumTerrainNormals - 1 )
326 //norm = 0; 326 norm = 0;
327 //else 327 else
328 //norm = &pTerrainNormals[norm_idx]; 328 norm = &pTerrainNormals[norm_idx];
329 //pGame->pLightmapBuilder->StackLights_TerrainFace(norm, &a3a, array_50AC10, 4, 1); 329 //pGame->pLightmapBuilder->StackLights_TerrainFace(norm, &a3a, array_50AC10, 4, 1);//Ritor1: slows
330 //pDecalBuilder->_49BE8A(pTilePolygon, norm, &a3a, array_50AC10, 4, 1); 330 //pDecalBuilder->_49BE8A(pTilePolygon, norm, &a3a, array_50AC10, 4, 1);
331 //----------------------------------------------------------------------------------------------- 331 //-----------------------------------------------------------------------------------------------
332 332
333 ++pODMRenderParams->uNumPolygons; 333 ++pODMRenderParams->uNumPolygons;
334 ++pODMRenderParams->field_44; 334 ++pODMRenderParams->field_44;
869 int v42; // [sp+98h] [bp-Ch]@9 869 int v42; // [sp+98h] [bp-Ch]@9
870 int b; // [sp+A0h] [bp-4h]@22 870 int b; // [sp+A0h] [bp-4h]@22
871 871
872 for (int i = 0; i < uNumLevelDecorations; ++i) 872 for (int i = 0; i < uNumLevelDecorations; ++i)
873 { 873 {
874 LevelDecoration* decor = &pLevelDecorations[i]; 874 //LevelDecoration* decor = &pLevelDecorations[i];
875 if ((!(decor->uFlags & LEVEL_DECORATION_OBELISK_CHEST) || decor->IsObeliskChestActive()) && !(decor->uFlags & LEVEL_DECORATION_INVISIBLE)) 875 if ((!(pLevelDecorations[i].uFlags & LEVEL_DECORATION_OBELISK_CHEST)
876 { 876 || pLevelDecorations[i].IsObeliskChestActive()) && !(pLevelDecorations[i].uFlags & LEVEL_DECORATION_INVISIBLE))
877 DecorationDesc* decor_desc = pDecorationList->pDecorations + decor->uDecorationDescID; 877 {
878 DecorationDesc* decor_desc = &pDecorationList->pDecorations[pLevelDecorations[i].uDecorationDescID];
878 if ( (char)decor_desc->uFlags >= 0 ) 879 if ( (char)decor_desc->uFlags >= 0 )
879 { 880 {
880 if ( !(decor_desc->uFlags & 0x22) ) 881 if ( !(decor_desc->uFlags & 0x22) )
881 { 882 {
882 v6 = pMiscTimer->uTotalGameTimeElapsed; 883 v6 = pMiscTimer->uTotalGameTimeElapsed;
883 v7 = abs(decor->vPosition.x + decor->vPosition.y); 884 v7 = abs(pLevelDecorations[i].vPosition.x + pLevelDecorations[i].vPosition.y);
884 885
885 #pragma region "New: seasons change" 886 #pragma region "New: seasons change"
886 extern bool change_seasons; 887 extern bool change_seasons;
887 if (change_seasons) 888 if (change_seasons)
888 switch (pParty->uCurrentMonth) 889 switch (pParty->uCurrentMonth)
947 else 948 else
948 v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7); 949 v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
949 #pragma endregion 950 #pragma endregion
950 //v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7); 951 //v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
951 952
952 v10 = (unsigned __int16 *)stru_5C6E00->Atan2(decor->vPosition.x - pGame->pIndoorCameraD3D->vPartyPos.x, 953 v10 = (unsigned __int16 *)stru_5C6E00->Atan2(pLevelDecorations[i].vPosition.x - pGame->pIndoorCameraD3D->vPartyPos.x,
953 decor->vPosition.y - pGame->pIndoorCameraD3D->vPartyPos.y); 954 pLevelDecorations[i].vPosition.y - pGame->pIndoorCameraD3D->vPartyPos.y);
954 v38 = 0; 955 v38 = 0;
955 v13 = ((signed int)(stru_5C6E00->uIntegerPi + ((signed int)stru_5C6E00->uIntegerPi >> 3) + decor->field_10_y_rot - (signed int)v10) >> 8) & 7; 956 v13 = ((signed int)(stru_5C6E00->uIntegerPi + ((signed int)stru_5C6E00->uIntegerPi >> 3) + pLevelDecorations[i].field_10_y_rot - (signed int)v10) >> 8) & 7;
956 v37 = (unsigned __int16 *)v13; 957 v37 = (unsigned __int16 *)v13;
957 if ( v8->uFlags & 2 ) 958 if ( v8->uFlags & 2 )
958 v38 = 2; 959 v38 = 2;
959 if ( (256 << v13) & v8->uFlags ) 960 if ( (256 << v13) & v8->uFlags )
960 v38 |= 4; 961 v38 |= 4;
974 { 975 {
975 v16 = 255; 976 v16 = 255;
976 v14 = 255; 977 v14 = 255;
977 v15 = 255; 978 v15 = 255;
978 } 979 }
979 pStationaryLightsStack->AddLight(decor->vPosition.x, decor->vPosition.y, decor->vPosition.z + decor_desc->uDecorationHeight / 2, 980 pStationaryLightsStack->AddLight(pLevelDecorations[i].vPosition.x, pLevelDecorations[i].vPosition.y, pLevelDecorations[i].vPosition.z + decor_desc->uDecorationHeight / 2,
980 v8->uGlowRadius, v14, v15, v16, _4E94D0_light_type); 981 v8->uGlowRadius, v14, v15, v16, _4E94D0_light_type);
981 } 982 }
982 v17 = (decor->vPosition.x - pGame->pIndoorCameraD3D->vPartyPos.x) << 16; 983 v17 = (pLevelDecorations[i].vPosition.x - pGame->pIndoorCameraD3D->vPartyPos.x) << 16;
983 if (pGame->pIndoorCameraD3D->sRotationX) 984 if (pGame->pIndoorCameraD3D->sRotationX)
984 { 985 {
985 v40 = (decor->vPosition.y - pGame->pIndoorCameraD3D->vPartyPos.y) << 16; 986 v40 = (pLevelDecorations[i].vPosition.y - pGame->pIndoorCameraD3D->vPartyPos.y) << 16;
986 v18 = fixpoint_mul(v17, pGame->pIndoorCameraD3D->int_cosine_y) + fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_sine_y); 987 v18 = fixpoint_mul(v17, pGame->pIndoorCameraD3D->int_cosine_y) + fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_sine_y);
987 v41 = fixpoint_mul((decor->vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16, pGame->pIndoorCameraD3D->int_sine_x); 988 v41 = fixpoint_mul((pLevelDecorations[i].vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16, pGame->pIndoorCameraD3D->int_sine_x);
988 v19 = fixpoint_mul(v18, pGame->pIndoorCameraD3D->int_cosine_x); 989 v19 = fixpoint_mul(v18, pGame->pIndoorCameraD3D->int_cosine_x);
989 v20 = v19 + fixpoint_mul((decor->vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16, pGame->pIndoorCameraD3D->int_sine_x); 990 v20 = v19 + fixpoint_mul((pLevelDecorations[i].vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16, pGame->pIndoorCameraD3D->int_sine_x);
990 if ( v20 >= 0x40000 && v20 <= pODMRenderParams->shading_dist_mist << 16 ) 991 if ( v20 >= 0x40000 && v20 <= pODMRenderParams->shading_dist_mist << 16 )
991 { 992 {
992 v21 = fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_cosine_y) - fixpoint_mul(v17, pGame->pIndoorCameraD3D->int_sine_y); 993 v21 = fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_cosine_y) - fixpoint_mul(v17, pGame->pIndoorCameraD3D->int_sine_y);
993 v22 = fixpoint_mul((decor->vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16, pGame->pIndoorCameraD3D->int_cosine_x) - fixpoint_mul(v18, pGame->pIndoorCameraD3D->int_sine_x); 994 v22 = fixpoint_mul((pLevelDecorations[i].vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16, pGame->pIndoorCameraD3D->int_cosine_x) - fixpoint_mul(v18, pGame->pIndoorCameraD3D->int_sine_x);
994 if ( 2 * abs(v20) >= abs(v21) ) 995 if ( 2 * abs(v20) >= abs(v21) )
995 { 996 {
996 LODWORD(v24) = 0; 997 LODWORD(v24) = 0;
997 HIDWORD(v24) = SLOWORD(pODMRenderParams->int_fov_rad); 998 HIDWORD(v24) = SLOWORD(pODMRenderParams->int_fov_rad);
998 v25 = pViewport->uScreenCenterX - ((signed int)(fixpoint_mul(v24 / v20, v21) + 0x8000) >> 16); 999 v25 = pViewport->uScreenCenterX - ((signed int)(fixpoint_mul(v24 / v20, v21) + 0x8000) >> 16);
1012 v29 = v38; 1013 v29 = v38;
1013 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceX = v25; 1014 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceX = v25;
1014 HIBYTE(v29) |= 2; 1015 HIBYTE(v29) |= 2;
1015 pBillboardRenderList[::uNumBillboardsToDraw].uPalette = v8->uPaletteIndex; 1016 pBillboardRenderList[::uNumBillboardsToDraw].uPalette = v8->uPaletteIndex;
1016 pBillboardRenderList[::uNumBillboardsToDraw].field_1E = v29; 1017 pBillboardRenderList[::uNumBillboardsToDraw].field_1E = v29;
1017 pBillboardRenderList[::uNumBillboardsToDraw].world_x = decor->vPosition.x; 1018 pBillboardRenderList[::uNumBillboardsToDraw].world_x = pLevelDecorations[i].vPosition.x;
1018 pBillboardRenderList[::uNumBillboardsToDraw].world_y = decor->vPosition.y; 1019 pBillboardRenderList[::uNumBillboardsToDraw].world_y = pLevelDecorations[i].vPosition.y;
1019 pBillboardRenderList[::uNumBillboardsToDraw].world_z = decor->vPosition.z; 1020 pBillboardRenderList[::uNumBillboardsToDraw].world_z = pLevelDecorations[i].vPosition.z;
1020 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceY = v40; 1021 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceY = v40;
1021 HIWORD(v30) = HIWORD(v20); 1022 HIWORD(v30) = HIWORD(v20);
1022 v31 = PID(OBJECT_Decoration,i); 1023 v31 = PID(OBJECT_Decoration,i);
1023 LOWORD(v30) = 0; 1024 LOWORD(v30) = 0;
1024 pBillboardRenderList[::uNumBillboardsToDraw].uIndoorSectorID = 0; 1025 pBillboardRenderList[::uNumBillboardsToDraw].uIndoorSectorID = 0;
1033 continue; 1034 continue;
1034 } 1035 }
1035 } 1036 }
1036 else 1037 else
1037 { 1038 {
1038 v42 = (decor->vPosition.x - pGame->pIndoorCameraD3D->vPartyPos.x) << 16; 1039 v42 = (pLevelDecorations[i].vPosition.x - pGame->pIndoorCameraD3D->vPartyPos.x) << 16;
1039 v40 = (decor->vPosition.y - pGame->pIndoorCameraD3D->vPartyPos.y) << 16; 1040 v40 = (pLevelDecorations[i].vPosition.y - pGame->pIndoorCameraD3D->vPartyPos.y) << 16;
1040 v20 = fixpoint_mul(v17, pGame->pIndoorCameraD3D->int_cosine_y) + fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_sine_y); 1041 v20 = fixpoint_mul(v17, pGame->pIndoorCameraD3D->int_cosine_y) + fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_sine_y);
1041 if ( v20 >= 0x40000 && v20 <= pODMRenderParams->shading_dist_mist << 16 ) 1042 if ( v20 >= 0x40000 && v20 <= pODMRenderParams->shading_dist_mist << 16 )
1042 { 1043 {
1043 v21 = fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_cosine_y) - fixpoint_mul(v42, pGame->pIndoorCameraD3D->int_sine_y); 1044 v21 = fixpoint_mul(v40, pGame->pIndoorCameraD3D->int_cosine_y) - fixpoint_mul(v42, pGame->pIndoorCameraD3D->int_sine_y);
1044 v22 = (decor->vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16; 1045 v22 = (pLevelDecorations[i].vPosition.z - pGame->pIndoorCameraD3D->vPartyPos.z) << 16;
1045 v42 = v22; 1046 v42 = v22;
1046 if ( 2 * abs(v20) >= abs(v21) ) 1047 if ( 2 * abs(v20) >= abs(v21) )
1047 { 1048 {
1048 LODWORD(v24) = 0; 1049 LODWORD(v24) = 0;
1049 HIDWORD(v24) = SLOWORD(pODMRenderParams->int_fov_rad); 1050 HIDWORD(v24) = SLOWORD(pODMRenderParams->int_fov_rad);
1064 v29 = v38; 1065 v29 = v38;
1065 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceX = v25; 1066 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceX = v25;
1066 HIBYTE(v29) |= 2; 1067 HIBYTE(v29) |= 2;
1067 pBillboardRenderList[::uNumBillboardsToDraw].uPalette = v8->uPaletteIndex; 1068 pBillboardRenderList[::uNumBillboardsToDraw].uPalette = v8->uPaletteIndex;
1068 pBillboardRenderList[::uNumBillboardsToDraw].field_1E = v29; 1069 pBillboardRenderList[::uNumBillboardsToDraw].field_1E = v29;
1069 pBillboardRenderList[::uNumBillboardsToDraw].world_x = decor->vPosition.x; 1070 pBillboardRenderList[::uNumBillboardsToDraw].world_x = pLevelDecorations[i].vPosition.x;
1070 pBillboardRenderList[::uNumBillboardsToDraw].world_y = decor->vPosition.y; 1071 pBillboardRenderList[::uNumBillboardsToDraw].world_y = pLevelDecorations[i].vPosition.y;
1071 pBillboardRenderList[::uNumBillboardsToDraw].world_z = decor->vPosition.z; 1072 pBillboardRenderList[::uNumBillboardsToDraw].world_z = pLevelDecorations[i].vPosition.z;
1072 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceY = v40; 1073 pBillboardRenderList[::uNumBillboardsToDraw].uScreenSpaceY = v40;
1073 HIWORD(v30) = HIWORD(v20); 1074 HIWORD(v30) = HIWORD(v20);
1074 v31 = PID(OBJECT_Decoration,i); 1075 v31 = PID(OBJECT_Decoration,i);
1075 LOWORD(v30) = 0; 1076 LOWORD(v30) = 0;
1076 pBillboardRenderList[::uNumBillboardsToDraw].uIndoorSectorID = 0; 1077 pBillboardRenderList[::uNumBillboardsToDraw].uIndoorSectorID = 0;
1090 else 1091 else
1091 { 1092 {
1092 memset(&local_0, 0, 0x68); 1093 memset(&local_0, 0, 0x68);
1093 local_0.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8; 1094 local_0.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8;
1094 local_0.uDiffuse = 0xFF3C1E; 1095 local_0.uDiffuse = 0xFF3C1E;
1095 local_0.x = (double)decor->vPosition.x; 1096 local_0.x = (double)pLevelDecorations[i].vPosition.x;
1096 local_0.y = (double)decor->vPosition.y; 1097 local_0.y = (double)pLevelDecorations[i].vPosition.y;
1097 local_0.z = (double)decor->vPosition.z; 1098 local_0.z = (double)pLevelDecorations[i].vPosition.z;
1098 local_0.r = 0.0; 1099 local_0.r = 0.0;
1099 local_0.g = 0.0; 1100 local_0.g = 0.0;
1100 local_0.b = 0.0; 1101 local_0.b = 0.0;
1101 local_0.flt_28 = 1.0; 1102 local_0.flt_28 = 1.0;
1102 local_0.timeToLive = (rand() & 0x80) + 128; 1103 local_0.timeToLive = (rand() & 0x80) + 128;