changeset 1922:e60d9df73428

DrawIndoorPolygonSky
author Ritor1
date Wed, 23 Oct 2013 17:13:23 +0600
parents f04c2f93dacb
children f92e0bab7c78
files Indoor.cpp Indoor.h Render.cpp Render.h
diffstat 4 files changed, 72 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/Indoor.cpp	Wed Oct 23 15:27:25 2013 +0600
+++ b/Indoor.cpp	Wed Oct 23 17:13:23 2013 +0600
@@ -561,7 +561,7 @@
           stru_F7B60C.face_plane.dist = pFace->pFacePlane.dist;
         }
 
-        if (stru_F8AD28.uNumLightsApplied > 0 && !(pFace->uAttributes & FACE_DO_NOT_LIGHT))
+        if (stru_F8AD28.uNumLightsApplied > 0 && !(pFace->uAttributes & FACE_INDOOR_SKY))
           pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &stru_F7B60C, uNumVerticesa, array_507D30, pVertices, 0);
 
         if (pDecalBuilder->uNumDecals > 0)
@@ -601,8 +601,8 @@
           v27 = pBitmaps_LOD->pHardwareTextures[v23];
         }
 
-        if (pFace->uAttributes & FACE_DO_NOT_LIGHT)
-          pRenderer->DrawIndoorPolygonNoLight(uNumVerticesa, uFaceID);
+        if (pFace->uAttributes & FACE_INDOOR_SKY)
+          pRenderer->DrawIndoorPolygonSky(uNumVerticesa, uFaceID);
         else
           pRenderer->DrawIndoorPolygon(uNumVerticesa, pFace, v27, v28, PID(OBJECT_BModel, uFaceID), v17, 0);
         return;
--- a/Indoor.h	Wed Oct 23 15:27:25 2013 +0600
+++ b/Indoor.h	Wed Oct 23 17:13:23 2013 +0600
@@ -235,7 +235,7 @@
 #define FACE_TEXTURE_FRAME      0x00004000 // Texture ID is a frameset from TextureFrameTable, otherwise BitmapID
 #define FACE_OUTLINED           0x00010000 // outline face edges
 #define FACE_TEXTURE_FLOW       0x00040000 // The texture moves slowly. For horizontal facets only.
-#define FACE_DO_NOT_LIGHT       0x00400000
+#define FACE_INDOOR_SKY       0x00400000
 #define FACE_CLICKABLE          0x02000000 // Event can be triggered by clicking on the facet.
 #define FACE_PRESSURE_PLATE     0x04000000 // Event can be triggered by stepping on the facet.
 #define FACE_ETHEREAL           0x20000000 // Untouchable. You can pass through it.
--- a/Render.cpp	Wed Oct 23 15:27:25 2013 +0600
+++ b/Render.cpp	Wed Oct 23 17:13:23 2013 +0600
@@ -5007,7 +5007,7 @@
 
 
 //----- (00479A53) --------------------------------------------------------
-void Render::DrawIndoorPolygonNoLight(unsigned int uNumVertices, unsigned int uFaceID)
+void Render::DrawIndoorPolygonSky(unsigned int uNumVertices, unsigned int uFaceID)
 {
   BLVFace *pFace; // esi@1
   //unsigned int v3; // edi@1
@@ -5034,7 +5034,7 @@
   double v24; // st7@16
   unsigned __int8 v25; // sf@16
   unsigned __int8 v26; // of@16
-  Render *v27; // ecx@17
+  //Render *v27; // ecx@17
   double v28; // st7@20
   char *v29; // ebx@20
   char *v30; // edx@20
@@ -5069,7 +5069,7 @@
   signed int v59; // [sp-4h] [bp-178h]@17
   struct Polygon *v60; // [sp+0h] [bp-174h]@17
   IDirect3DTexture2 *v61; // [sp+4h] [bp-170h]@17
-  struct Polygon v62; // [sp+14h] [bp-160h]@6
+  struct Polygon pSkyPoligon; // [sp+14h] [bp-160h]@6
   unsigned int v63; // [sp+120h] [bp-54h]@7
   //double v64; // [sp+124h] [bp-50h]@7
   unsigned int v65; // [sp+128h] [bp-4Ch]@1
@@ -5104,55 +5104,55 @@
     return;
   }
 
-  *(float *)&v74 = (double)pBLVRenderParams->uViewportCenterY;
+  //*(float *)&v74 = (double)pBLVRenderParams->uViewportCenterY;
   v70 = (signed __int64)((double)(pBLVRenderParams->fov_rad_fixpoint * pGame->pIndoorCameraD3D->vPartyPos.z)
                        / (((double)pBLVRenderParams->fov_rad_fixpoint + 16192.0)
                         * 65536.0)
-                       + *(float *)&v74);
+                       + (double)pBLVRenderParams->uViewportCenterY);
   v5 = (double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064;
-  *(float *)&v75 = v5;
-  v6 = (signed __int64)(*(float *)&v74
+  //*(float *)&v75 = v5;
+  v6 = (signed __int64)((double)pBLVRenderParams->uViewportCenterY
                       - (double)pBLVRenderParams->fov_rad_fixpoint
                       / ((cos(v5) * 16192.0 + 0.0000001)
                        * 65535.0)
-                      * (sin(*(float *)&v75) * -16192.0 - (double)pGame->pIndoorCameraD3D->vPartyPos.z));
+                      * (sin(v5) * -16192.0 - (double)pGame->pIndoorCameraD3D->vPartyPos.z));
 
 
   stru_8019C8._48653D_frustum_blv(65536, 0, 0, 0, 65536, 0);
-  v62.Create_48607B(&stru_8019C8);
-  v62.uTileBitmapID = pFace->uBitmapID;
-
-  v62.pTexture = pBitmaps_LOD->GetTexture(v62.uTileBitmapID);
-  if ( !v62.pTexture )
+  pSkyPoligon.Create_48607B(&stru_8019C8);
+  pSkyPoligon.uTileBitmapID = pFace->uBitmapID;
+
+  pSkyPoligon.pTexture = pBitmaps_LOD->GetTexture(pSkyPoligon.uTileBitmapID);
+  if ( !pSkyPoligon.pTexture )
     return;
 
-  v62.dimming_level = 0;
-  v62.uNumVertices = uNumVertices;
-  v62.v_18.y = 0;
-  v62.v_18.x = -stru_5C6E00->Sin(pGame->pIndoorCameraD3D->sRotationX + 16);
-  v62.v_18.z = -stru_5C6E00->Cos(pGame->pIndoorCameraD3D->sRotationX + 16);
+  pSkyPoligon.dimming_level = 0;
+  pSkyPoligon.uNumVertices = uNumVertices;
+  pSkyPoligon.v_18.y = 0;
+  pSkyPoligon.v_18.x = -stru_5C6E00->Sin(pGame->pIndoorCameraD3D->sRotationX + 16);
+  pSkyPoligon.v_18.z = -stru_5C6E00->Cos(pGame->pIndoorCameraD3D->sRotationX + 16);
   memcpy(&array_507D30[uNumVertices], array_507D30, sizeof(array_507D30[uNumVertices]));
-  v62.field_24 = 0x2000000;
+  pSkyPoligon.field_24 = 0x2000000;
 
   extern float _calc_fov(int viewport_width, int angle_degree);
   //v64 = (double)(signed int)(pBLVRenderParams->uViewportZ - pBLVRenderParams->uViewportX) * 0.5;
   //v72 = 65536 / (signed int)(signed __int64)(v64 / tan(0.6457717418670654) + 0.5);
   v72 = 65536.0f / _calc_fov(pBLVRenderParams->uViewportZ - pBLVRenderParams->uViewportX, 74);
-  v12 = v62.pTexture->uWidthMinus1;
-  v13 = v62.pTexture->uHeightMinus1;
-  v67 = 1.0 / (double)v62.pTexture->uTextureWidth;
+  v12 = pSkyPoligon.pTexture->uWidthMinus1;
+  v13 = pSkyPoligon.pTexture->uHeightMinus1;
+  v67 = 1.0 / (double)pSkyPoligon.pTexture->uTextureWidth;
   v63 = 224 * pMiscTimer->uTotalGameTimeElapsed & v13;
   v66 = 224 * pMiscTimer->uTotalGameTimeElapsed & v12;
   v78 = 0;
   v81 = 0;
-  float v68 = 1.0 / (double)v62.pTexture->uTextureHeight;
-  if ( (signed int)v62.uNumVertices <= 0 )
+  float v68 = 1.0 / (double)pSkyPoligon.pTexture->uTextureHeight;
+  if ( (signed int)pSkyPoligon.uNumVertices <= 0 )
   {
 LABEL_17:
-    v61 = pBitmaps_LOD->pHardwareTextures[(signed __int16)v62.uTileBitmapID];
-    v27 = pRenderer;
-    v60 = &v62;
-    v59 = v62.uNumVertices;
+    v61 = pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPoligon.uTileBitmapID];
+    //v27 = pRenderer;
+    v60 = &pSkyPoligon;
+    v59 = pSkyPoligon.uNumVertices;
     goto LABEL_18;
   }
 
@@ -5161,18 +5161,18 @@
   while ( 2 )
   {
     v15 = (void *)(v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY));
-    v77 = (unsigned __int64)(v62.ptr_38->viewing_angle_from_west_east * (signed __int64)(signed int)v15) >> 16;
-    v74 = v77 + v62.ptr_38->angle_from_north;
+    v77 = (unsigned __int64)(pSkyPoligon.ptr_38->viewing_angle_from_west_east * (signed __int64)(signed int)v15) >> 16;
+    v74 = v77 + pSkyPoligon.ptr_38->angle_from_north;
     v77 = (int)v15;
-    v77 = (unsigned __int64)(v62.ptr_38->viewing_angle_from_north_south * (signed __int64)(signed int)v15) >> 16;
+    v77 = (unsigned __int64)(pSkyPoligon.ptr_38->viewing_angle_from_north_south * (signed __int64)(signed int)v15) >> 16;
     v79 = v15;
-    v75 = (RenderVertexSoft *)(v77 + v62.ptr_38->angle_from_east);
-    v79 = (void *)((unsigned __int64)(v62.v_18.z * (signed __int64)(signed int)v15) >> 16);
+    v75 = (RenderVertexSoft *)(v77 + pSkyPoligon.ptr_38->angle_from_east);
+    v79 = (void *)((unsigned __int64)(pSkyPoligon.v_18.z * (signed __int64)(signed int)v15) >> 16);
     v17 = v72 * (pBLVRenderParams->uViewportCenterX - (int)array_507D30[_507D30_idx].vWorldViewProjX);
     v18 = array_507D30[_507D30_idx].vWorldViewProjY - 1.0;
-    v19 = -v62.field_24;
-    v77 = -v62.field_24;
-    X = (int)((char *)v79 + v62.v_18.x);
+    v19 = -pSkyPoligon.field_24;
+    v77 = -pSkyPoligon.field_24;
+    X = (int)((char *)v79 + pSkyPoligon.v_18.x);
     LODWORD(v76) = (signed __int64)v18;
     v20 = (void *)(v72 * (v70 - LODWORD(v76)));
     while ( 1 )
@@ -5188,11 +5188,11 @@
       v19 = v77;
       v20 = v79;
 LABEL_14:
-      v79 = (void *)((unsigned __int64)(v62.v_18.z * (signed __int64)(signed int)v20) >> 16);
-      v22 = (unsigned __int64)(v62.v_18.z * (signed __int64)(signed int)v20) >> 16;
+      v79 = (void *)((unsigned __int64)(pSkyPoligon.v_18.z * (signed __int64)(signed int)v20) >> 16);
+      v22 = (unsigned __int64)(pSkyPoligon.v_18.z * (signed __int64)(signed int)v20) >> 16;
       --LODWORD(v76);
       v20 = (char *)v20 + v72;
-      X = v22 + v62.v_18.x;
+      X = v22 + pSkyPoligon.v_18.x;
       v78 = 1;
     }
     if ( !v78 )
@@ -5202,8 +5202,8 @@
       v79 = (void *)(v23 / X);
       v77 = v17;
       v77 = v17;
-      LODWORD(v76) = v74 + ((unsigned __int64)(v62.ptr_38->angle_from_west * (signed __int64)v17) >> 16);
-      v75 = (RenderVertexSoft *)((char *)v75 + ((unsigned __int64)(v62.ptr_38->angle_from_south * (signed __int64)v17) >> 16));
+      LODWORD(v76) = v74 + ((unsigned __int64)(pSkyPoligon.ptr_38->angle_from_west * (signed __int64)v17) >> 16);
+      v75 = (RenderVertexSoft *)((char *)v75 + ((unsigned __int64)(pSkyPoligon.ptr_38->angle_from_south * (signed __int64)v17) >> 16));
       v77 = (unsigned __int64)(SLODWORD(v76) * v23 / X) >> 16;
       LODWORD(v73) = (unsigned __int64)((signed int)v75 * v23 / X) >> 16;
       //v14 += 48;
@@ -5211,8 +5211,8 @@
       v81 = (char *)v81 + 1;
       v24 = (double)SLODWORD(v80) * 0.000015259022;
       LODWORD(v80) = v63 + ((signed int)((unsigned __int64)((signed int)v75 * v23 / X) >> 16) >> 4);
-      v26 = __OFSUB__((int)v81, v62.uNumVertices);
-      v25 = (signed int)((char *)v81 - v62.uNumVertices) < 0;
+      v26 = __OFSUB__((int)v81, pSkyPoligon.uNumVertices);
+      v25 = (signed int)((char *)v81 - pSkyPoligon.uNumVertices) < 0;
       array_507D30[_507D30_idx].u = v24 * v67;
       array_507D30[_507D30_idx].v = (double)SLODWORD(v80) * 0.000015259022 * v68;
       array_507D30[_507D30_idx]._rhw = 65536.0 / (double)(signed int)v79;
@@ -5225,7 +5225,7 @@
   }
   LODWORD(v73) = 0;
   v80 = v76;
-  if ( (signed int)v62.uNumVertices > 0 )
+  if ( (signed int)pSkyPoligon.uNumVertices > 0 )
   {
     v28 = (double)SLODWORD(v76);
     LODWORD(v76) = (int)(char *)array_50AC10 + 28;
@@ -5233,7 +5233,7 @@
     v30 = (char *)&array_507D30[1].vWorldViewProjY;
     v79 = array_50AC10;
     v81 = array_507D30;
-    v78 = v62.uNumVertices;
+    v78 = pSkyPoligon.uNumVertices;
     do
     {
       v31 = v28 < *((float *)v30 - 12);
@@ -5276,17 +5276,17 @@
   do
   {
     v35 = (const void *)(v72 * (v70 - (unsigned __int64)(signed __int64)*(float *)v34));
-    v78 = v62.ptr_38->viewing_angle_from_west_east;
+    v78 = pSkyPoligon.ptr_38->viewing_angle_from_west_east;
     v81 = (const void *)((unsigned __int64)(v78 * (signed __int64)(signed int)v35) >> 16);
-    v36 = (int)((char *)v81 + v62.ptr_38->angle_from_north);
+    v36 = (int)((char *)v81 + pSkyPoligon.ptr_38->angle_from_north);
     v81 = v35;
     v74 = v36;
-    v78 = v62.ptr_38->viewing_angle_from_north_south;
+    v78 = pSkyPoligon.ptr_38->viewing_angle_from_north_south;
     v81 = (const void *)((unsigned __int64)(v78 * (signed __int64)(signed int)v35) >> 16);
     v78 = (int)v35;
-    v75 = (RenderVertexSoft *)((char *)v81 + v62.ptr_38->angle_from_east);
-    v81 = (const void *)v62.v_18.z;
-    v78 = (unsigned __int64)(v62.v_18.z * (signed __int64)(signed int)v35) >> 16;
+    v75 = (RenderVertexSoft *)((char *)v81 + pSkyPoligon.ptr_38->angle_from_east);
+    v81 = (const void *)pSkyPoligon.v_18.z;
+    v78 = (unsigned __int64)(pSkyPoligon.v_18.z * (signed __int64)(signed int)v35) >> 16;
     v37 = (const void *)(v72
                        * (pBLVRenderParams->uViewportCenterX - (unsigned __int64)(signed __int64)*((float *)v34 - 1)));
     v38 = (signed __int64)(*(float *)v34 - 1.0);
@@ -5305,34 +5305,34 @@
         break;
       v39 = v78;
 LABEL_36:
-      v78 = v62.v_18.z;
-      v41 = (unsigned __int64)(v62.v_18.z * (signed __int64)v39) >> 16;
+      v78 = pSkyPoligon.v_18.z;
+      v41 = (unsigned __int64)(pSkyPoligon.v_18.z * (signed __int64)v39) >> 16;
       --LODWORD(v76);
       v39 += v72;
-      X = v41 + v62.v_18.x;
+      X = v41 + pSkyPoligon.v_18.x;
       v81 = (const void *)1;
     }
     if ( v81 )
     {
-      v79 = (void *)v62.v_18.z;
+      v79 = (void *)pSkyPoligon.v_18.z;
       v78 = 2 * LODWORD(v76);
-      v81 = (const void *)((unsigned __int64)(v62.v_18.z
+      v81 = (const void *)((unsigned __int64)(pSkyPoligon.v_18.z
                                             * (signed __int64)(signed int)(signed __int64)(((double)v70
                                                                                           - ((double)(2 * LODWORD(v76))
                                                                                            - *(float *)v34))
                                                                                          * (double)v72)) >> 16);
-      X = (int)((char *)v81 + v62.v_18.x);
+      X = (int)((char *)v81 + pSkyPoligon.v_18.x);
     }
     LODWORD(v42) = v77 << 16;
     HIDWORD(v42) = v77 >> 16;
     v79 = (void *)(v42 / X);
     v81 = v37;
-    v78 = v62.ptr_38->angle_from_west;
+    v78 = pSkyPoligon.ptr_38->angle_from_west;
     v81 = (const void *)((unsigned __int64)(v78 * (signed __int64)(signed int)v37) >> 16);
     v43 = v74 + ((unsigned __int64)(v78 * (signed __int64)(signed int)v37) >> 16);
     v74 = (unsigned int)v37;
     LODWORD(v76) = v43;
-    v78 = v62.ptr_38->angle_from_south;
+    v78 = pSkyPoligon.ptr_38->angle_from_south;
     v75 = (RenderVertexSoft *)((char *)v75 + ((unsigned __int64)(v78 * (signed __int64)(signed int)v37) >> 16));
     v74 = (unsigned __int64)(v43 * v42 / X) >> 16;
     v81 = (const void *)((unsigned __int64)((signed int)v75 * v42 / X) >> 16);
@@ -5370,8 +5370,8 @@
     }
     while ( HIDWORD(v69) );
   }
-  v62.uNumVertices = v47;
-  pRenderer->_4A2ED5(v47, &v62, pBitmaps_LOD->pHardwareTextures[(signed __int16)v62.uTileBitmapID]);
+  pSkyPoligon.uNumVertices = v47;
+  pRenderer->_4A2ED5(v47, &pSkyPoligon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPoligon.uTileBitmapID]);
   *(float *)&v74 = 0.0;
   if ( SLODWORD(v73) > 0 )
   {
@@ -5393,13 +5393,13 @@
     }
     while ( v80 != 0.0 );
   }
-  v62.uNumVertices = v74;
-  v61 = pBitmaps_LOD->pHardwareTextures[(signed __int16)v62.uTileBitmapID];
-  v60 = &v62;
+  pSkyPoligon.uNumVertices = v74;
+  v61 = pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPoligon.uTileBitmapID];
+  v60 = &pSkyPoligon;
   v59 = v74;
-  v27 = pRenderer;
+  //v27 = pRenderer;
 LABEL_18:
-  v27->_4A2ED5(v59, v60, v61);
+  pRenderer->_4A2ED5(v59, v60, v61);
 }
 
 
@@ -8885,7 +8885,7 @@
             array_77EC08[pODMRenderParams->uNumPolygons].pTexture = pFaceTexture;
             if (pOutdoor->pBModels[model_id].pFaces[face_id].uAttributes & FACE_FLUID)
               array_77EC08[pODMRenderParams->uNumPolygons].flags |= 2;
-            if (pOutdoor->pBModels[model_id].pFaces[face_id].uAttributes & FACE_DO_NOT_LIGHT )
+            if (pOutdoor->pBModels[model_id].pFaces[face_id].uAttributes & FACE_INDOOR_SKY )
               HIBYTE(array_77EC08[pODMRenderParams->uNumPolygons].flags) |= 4;
             if ( pOutdoor->pBModels[model_id].pFaces[face_id].uAttributes & 4 )
               HIBYTE(array_77EC08[pODMRenderParams->uNumPolygons].flags) |= 4;
--- a/Render.h	Wed Oct 23 15:27:25 2013 +0600
+++ b/Render.h	Wed Oct 23 17:13:23 2013 +0600
@@ -323,7 +323,7 @@
   void DrawSkyPolygon(unsigned int uNumVertices, struct Polygon *pSkyPolygon, IDirect3DTexture2 *pTexture);
   void _4A2ED5(signed int a2, struct Polygon *a3, IDirect3DTexture2 *pHwTex);
   void DrawIndoorPolygon(unsigned int uNumVertices, struct BLVFace *a3, IDirect3DTexture2 *pHwTex, struct Texture *pTex, int uPackedID, unsigned int uColor, int a8);
-  void DrawIndoorPolygonNoLight(unsigned int uNumVertices, unsigned int uFaceID);
+  void DrawIndoorPolygonSky(unsigned int uNumVertices, unsigned int uFaceID);
   void MakeParticleBillboardAndPush_BLV(RenderBillboardTransform_local0 *a2, IDirect3DTexture2 *a3, unsigned int uDiffuse, int angle);
   void MakeParticleBillboardAndPush_ODM(RenderBillboardTransform_local0 *a2, IDirect3DTexture2 *a3, unsigned int uDiffuse, int angle);
   void TransformBillboard(RenderBillboardTransform_local0 *a2, Sprite *pSprite, int dimming_level, RenderBillboard *pBillboard);