diff Render.cpp @ 1178:f7ad7bd0a806

Слияние
author Ritor1
date Tue, 04 Jun 2013 09:44:53 +0600
parents dac817fbf85a 29a8defbad9e
children fa30ea497e94
line wrap: on
line diff
--- a/Render.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Render.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <assert.h>
 
 #include "VideoPlayer.h"
@@ -1830,7 +1834,7 @@
       assert(v6 < 1000); // many random crashes here
 
       // for all shore tiles - draw a tile water under them since they're half-empty
-      if (!strnicmp(pBitmaps_LOD->pTextures[v8->uTileBitmapID].pName, "wtrdr", 5))  // all shore tile filenames are wtrdrXXX
+      if (!_strnicmp(pBitmaps_LOD->pTextures[v8->uTileBitmapID].pName, "wtrdr", 5))  // all shore tile filenames are wtrdrXXX
       {
         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
         pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[pRenderer->pHDWaterBitmapIDs[pRenderer->hd_water_current_frame]], false, true);
@@ -6517,7 +6521,7 @@
 bool Render::LockSurface_DDraw2(IDirectDrawSurface2 *pSurface, DDSURFACEDESC *pDesc, unsigned int uLockFlags)
 {
   IDirectDrawSurface2 *v4; // esi@1
-  bool v5; // eax@1
+  HRESULT v5; // eax@1
   HRESULT v6; // eax@2
   int v7; // [sp-8h] [bp-10h]@8
   unsigned int v8; // [sp-4h] [bp-Ch]@8
@@ -8436,116 +8440,83 @@
 //----- (004A49D0) --------------------------------------------------------
 void Render::DrawProjectile(float srcX, float srcY, float a3, float a4, float dstX, float dstY, float a7, float a8, IDirect3DTexture2 *a9)
 {
-  int v10; // eax@1
-  unsigned int v11; // ebx@1
-  unsigned int v12; // ecx@1
-  int v13; // edx@2
-  int v14; // edx@4
-  unsigned int v15; // edx@6
+  int absXDifference; // eax@1
+  int absYDifference; // eax@1
+  unsigned int smallerabsdiff; // ebx@1
+  unsigned int largerabsdiff;
   double v16; // st7@7
   double v17; // st7@7
   double v18; // st6@7
-  double v19; // st4@7
   double v20; // st4@8
   double v21; // st4@10
   double v22; // st4@10
   double v23; // st4@10
-  double v24; // st4@10
   double v25; // st4@11
   double v26; // st4@13
-  double v27; // st5@13
   double v28; // st4@13
   RenderVertexD3D3 v29[4]; // [sp+0h] [bp-94h]@7
-  double v30; // [sp+80h] [bp-14h]@1
-  int v31; // [sp+88h] [bp-Ch]@1
+  int xDifference; // [sp+88h] [bp-Ch]@1
   signed int v32; // [sp+8Ch] [bp-8h]@1
-  int X; // [sp+90h] [bp-4h]@1
-  float a3a; // [sp+A4h] [bp+10h]@10
-  float a4a; // [sp+A8h] [bp+14h]@10
-
-  *(float *)&X = dstX - srcX;
-  v30 = *(float *)&X + 6.7553994e15;
-  v31 = LODWORD(v30);
-  *(float *)&v32 = dstY - srcY;
-  v30 = *(float *)&v32 + 6.7553994e15;
-  X = LODWORD(v30);
-  HIDWORD(v30) = abs(COERCE_UNSIGNED_INT64(*(float *)&v32 + 6.7553994e15));
-  v10 = abs(v31);
-  v32 = v10;
-  v11 = HIDWORD(v30);
-  v12 = 0;
-  if ( v10 < SHIDWORD(v30) )
-  {
-    v13 = v10;
-    v10 = HIDWORD(v30);
-    v11 = v13;
-  }
-  if ( v10 < 0 )
-  {
-    v14 = v10;
-    v10 = 0;
-    v12 = v14;
-  }
-  if ( (signed int)v11 < (signed int)v12 )
-  {
-    v15 = v12;
-    v12 = v11;
-    v11 = v15;
-  }
-  v32 = (11 * v11 >> 5) + (v12 >> 2) + v10;
+  int yDifference; // [sp+90h] [bp-4h]@1
+
+  xDifference = bankersRounding(dstX - srcX);
+  yDifference = bankersRounding(dstY - srcY);
+  absYDifference = abs(yDifference);
+  absXDifference = abs(xDifference);
+  smallerabsdiff = min(absXDifference, absYDifference);
+  largerabsdiff = max(absXDifference, absYDifference);
+  v32 = (11 * smallerabsdiff >> 5) + largerabsdiff;
   v16 = 1.0 / (double)v32;
-  *(float *)&v31 = (double)v31 * v16;
-  *(float *)&X = (double)X * v16;
-  v17 = *(float *)&X * a4;
+  v17 = (double)yDifference * v16 * a4;
+  v18 = (double)xDifference * v16 * a4;
+  if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
+  {
+    v20 = a3 * 1000.0 / (double)pOutdoorCamera->shading_dist_mist;
+    v25 = a7 * 1000.0 / (double)pOutdoorCamera->shading_dist_mist;
+  }
+  else
+  {
+    v20 = a3 * 0.061758894;
+    v25 = a7 * 0.061758894;
+  }
+  v21 = 1.0 / a3;
+  v22 = (double)yDifference * v16 * a8;
+  v23 = (double)xDifference * v16 * a8;
+  v26 = 1.0 - 1.0 / v25;
+  v28 = 1.0 / a7;
   v29[0].pos.x = srcX + v17;
-  v18 = *(float *)&v31 * a4;
   v29[0].pos.y = srcY - v18;
-  v19 = a3;
-  if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
-    v20 = v19 * 1000.0 / (double)pOutdoorCamera->shading_dist_mist;
-  else
-    v20 = v19 * 0.061758894;
+  v29[0].pos.z = 1.0 - 1.0 / v20;
+  v29[0].rhw = v21;
   v29[0].diffuse = -1;
   v29[0].specular = 0;
-  v29[0].pos.z = 1.0 - 1.0 / v20;
-  v21 = 1.0 / a3;
-  *((float *)&v30 + 1) = v21;
-  v29[0].rhw = v21;
   v29[0].texcoord.x = 1.0;
   v29[0].texcoord.y = 0.0;
-  v22 = *(float *)&X * a8;
-  a3a = v22;
+
   v29[1].pos.x = v22 + dstX;
-  v23 = *(float *)&v31 * a8;
-  a4a = v23;
   v29[1].pos.y = dstY - v23;
-  v24 = a7;
-  if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
-    v25 = v24 * 1000.0 / (double)pOutdoorCamera->shading_dist_mist;
-  else
-    v25 = v24 * 0.061758894;
-  v29[2].diffuse = -1;
-  v29[3].diffuse = -1;
-  *(_QWORD *)&v29[3].pos.z = __PAIR__(HIDWORD(v30), LODWORD(v29[0].pos.z));
+  v29[1].pos.z = v26;
+  v29[1].rhw = v28;
   v29[1].diffuse = -16711936;
   v29[1].specular = 0;
-  v29[2].specular = 0;
-  v29[3].specular = 0;
-  v26 = 1.0 - 1.0 / v25;
-  v29[1].pos.z = v26;
-  v27 = v26;
-  v28 = 1.0 / a7;
-  v29[1].rhw = v28;
   v29[1].texcoord.x = 1.0;
   v29[1].texcoord.y = 1.0;
-  v29[2].pos.x = dstX - a3a;
-  v29[2].pos.y = a4a + dstY;
-  v29[2].pos.z = v27;
+
+  v29[2].pos.x = dstX - v22;
+  v29[2].pos.y = v23 + dstY;
+  v29[2].pos.z = v26;
   v29[2].rhw = v28;
+  v29[2].diffuse = -1;
+  v29[2].specular = 0;
   v29[2].texcoord.x = 0.0;
   v29[2].texcoord.y = 1.0;
+
   v29[3].pos.x = srcX - v17;
   v29[3].pos.y = v18 + srcY;
+  v29[3].pos.z = v29[0].pos.z;
+  v29[3].rhw = v21;
+  v29[3].diffuse = -1;
+  v29[3].specular = 0;
   v29[3].texcoord.x = 0.0;
   v29[3].texcoord.y = 0.0;
   ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE));
@@ -10587,27 +10558,19 @@
 void Render::ChangeBetweenWinFullscreenModes()
 {
   float v0; // ST14_4@17
-  bool v1; // edx@24
-  signed int v2; // ecx@24
-  int v3; // esi@25
   int v4; // edx@26
   ObjectDesc *v5; // eax@26
   RGBTexture *v6; // esi@33
-  const char *v7; // eax@34
   const char *v8; // [sp-4h] [bp-28h]@33
-  int v9; // [sp+0h] [bp-24h]@33
   struct tagRECT Rect; // [sp+14h] [bp-10h]@15
 
-  if ( pRenderer->bWindowMode )
-    goto LABEL_52;
-  if ( dword_6BE364_game_settings_1 & 2 )
+  if ( !pRenderer->bWindowMode && (dword_6BE364_game_settings_1 & 2) )
   {
     ModalWindow(pGlobalTXT_LocalizationStrings[62], 0);// "Might and Magic VII requires your desktop to be in 16bit (32k or 65k) Color mode in order to operate in a window."
     return;
   }
-  if ( !pRenderer->pRenderD3D || pRenderer->pRenderD3D->pAvailableDevices->bIsDeviceCompatible )
-  {
-LABEL_52:
+  if ( pRenderer->bWindowMode || !pRenderer->pRenderD3D || pRenderer->pRenderD3D->pAvailableDevices->bIsDeviceCompatible )
+  {
     if ( pEventTimer->bPaused )
       BYTE1(dword_6BE364_game_settings_1) |= 8u;
     else
@@ -10650,59 +10613,49 @@
       pBitmaps_LOD->_410423_move_textures_to_device();
       pSprites_LOD->MoveSpritesToVideoMemory();
     }
-    if ( pPaletteManager->uNumTargetBBits == pRenderer->uTargetBBits
+    if (!( pPaletteManager->uNumTargetBBits == pRenderer->uTargetBBits
       && pPaletteManager->uNumTargetGBits == pRenderer->uTargetGBits
-      && pPaletteManager->uNumTargetRBits == pRenderer->uTargetRBits )
-      goto LABEL_38;
-    pPaletteManager->SetColorChannelInfo(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits);
-    pPaletteManager->RecalculateAll();
-    pBitmaps_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits);
-    pIcons_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits);
-    v2 = 0;
-    if ( (signed int)pObjectList->uNumObjects > 0 )
-    {
-      v3 = 0;
-      do
+      && pPaletteManager->uNumTargetRBits == pRenderer->uTargetRBits ))
+    {
+      pPaletteManager->SetColorChannelInfo(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits);
+      pPaletteManager->RecalculateAll();
+      pBitmaps_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits);
+      pIcons_LOD->SetupPalettes(pRenderer->uTargetRBits, pRenderer->uTargetGBits, pRenderer->uTargetBBits);
+      for (int i = 0; i < pObjectList->uNumObjects; i++)
       {
         BYTE3(v4) = 0;
-        v5 = &pObjectList->pObjects[v3];
-        ++v3;
+        v5 = &pObjectList->pObjects[i];
         *(short *)((char *)&v4 + 1) = v5->uParticleTrailColorR;
         LOBYTE(v4) = v5->uParticleTrailColorG;
         v5->uParticleTrailColor = v5->uParticleTrailColorB | (v4 << 8);
-        ++v2;
-      }
-      while ( v2 < (signed int)pObjectList->uNumObjects );
-    }
-    LOBYTE(v1) = 1;
-    SetUserInterface(pParty->alignment, v1);
-    if ( pVideoPlayer->pVideoFrame.pPixels )
-      pVideoPlayer->pVideoFrame.Load(pVideoPlayer->pVideoFrameTextureFilename, 1);
-    if ( uCurrentMenuID )
-    {
+      }
+      SetUserInterface(pParty->alignment, true);
+      if ( pVideoPlayer->pVideoFrame.pPixels )
+        pVideoPlayer->pVideoFrame.Load(pVideoPlayer->pVideoFrameTextureFilename, 1);
       if ( uCurrentMenuID != 6 )
       {
         if ( uCurrentMenuID == 8 )
-          dword_A74C88 = 1;
-        goto LABEL_38;
-      }
-      v6 = &pTexture_PCX;
-      pTexture_PCX.Release();
-      v9 = 0;
-      v8 = "makeme.pcx";
-    }
-    else
-    {
-      v6 = &pTexture_PCX;
-      pTexture_PCX.Release();
-      v7 = "title.pcx";
-      if ( uCurrentMenuID )
-        v7 = "lsave640.pcx";
-      v9 = 0;
-      v8 = v7;
-    }
-    v6->Load(v8, v9);
-LABEL_38:
+          dword_A74C88 = 1; 
+      }
+      else
+      {
+        if ( uCurrentMenuID )
+        {
+          v6 = &pTexture_PCX;
+          pTexture_PCX.Release();
+          v8 = "makeme.pcx";
+        }
+        else
+        {
+          v6 = &pTexture_PCX;
+          pTexture_PCX.Release();
+          v8 = "title.pcx";
+          if ( uCurrentMenuID )
+            v8 = "lsave640.pcx";
+        }
+        v6->Load(v8, 0);
+      }
+    }
     viewparams->bRedrawGameUI = 1;
     viewparams->InitGrayPalette();
     pMouse->SetCurrentCursorBitmap();
@@ -10737,28 +10690,14 @@
 //----- (0040DBD3) --------------------------------------------------------
 void __fastcall Render::SetPixel(Vec2_int_ *pTargetXY, unsigned __int16 uColor)
 {
-  Vec2_int_ *pTargetXY_; // esi@1
-  unsigned __int16 v3; // di@1
-  signed int v4; // ecx@2
-  signed int v5; // eax@4
-
-  pTargetXY_ = pTargetXY;
-  v3 = uColor;
   pRenderer->BeginScene();
   if ( pRenderer->uNumSceneBegins )
   {
-    v4 = pTargetXY_->x;
-    if ( pTargetXY_->x >= 0 )
-    {
-      if ( v4 <= 639 )
-      {
-        v5 = pTargetXY_->y;
-        if ( v5 >= 0 )
-        {
-          if ( v5 <= 479 )
-            pRenderer->pTargetSurface[v4 + pRenderer->uTargetSurfacePitch * v5] = v3;
-        }
-      }
+    int xVal = pTargetXY->x;
+    int yVal = pTargetXY->y;
+    if ( xVal >= 0 && xVal <= 639 && yVal >= 0 && yVal <= 479)
+    {
+      pRenderer->pTargetSurface[xVal + pRenderer->uTargetSurfacePitch * yVal] = uColor;
     }
     pRenderer->EndScene();
   }
@@ -10799,7 +10738,7 @@
   {
     auto i = idx1 + (idx2 - idx1) / 2;
 
-    auto res = strcmpi(pName, pSpriteNames[i]);
+    auto res = _stricmp(pName, pSpriteNames[i]);
     if (!res)
     {
       fseek(pFile, pSpriteOffsets[i], SEEK_SET);
@@ -10842,7 +10781,7 @@
     else
       fread(pTex->pPixels, 2, pTex->uWidth * pTex->uHeight, pFile);
 
-    if ( field_61A94_scale_hwls_to_half )
+    if ( field_61A94_scale_hwls_to_half )     //is it even possible to ever get here? field_61A94_scale_hwls_to_half is only set to zero
     {
       v11 = pTex->uHeight / 2;
       v12 = pTex->uWidth / 2;
@@ -10899,59 +10838,34 @@
 //----- (0045271F) --------------------------------------------------------
 bool RenderHWLContainer::Release()
 {
-  RenderHWLContainer *v1; // esi@1
-  int v2; // ebx@1
-  void **v3; // edi@3
   __int32 v4; // eax@6
   FILE *v5; // ST24_4@6
-  size_t *v6; // edi@6
-  int v7; // ebx@7
-  signed int v9; // [sp+0h] [bp-8h]@6
   FILE *File; // [sp+4h] [bp-4h]@6
 
-  v1 = this;
-  v2 = 0;
-  if ( this->bDumpDebug )
+  if ( this->bDumpDebug)
   {
     File = fopen("logd3d.txt", "w");
-    v4 = ftell(v1->pFile);
-    v5 = v1->pFile;
-    v6 = &v1->uNumItems;
-    v1->uDataOffset = v4;
-    fwrite(&v1->uNumItems, 4u, 1u, v5);
-    v9 = 0;
-    if ( (signed int)v1->uNumItems > 0 )
-    {
-      v7 = (int)v1->pSpriteNames;
-      do
-      {
-        fwrite(*(const void **)v7, 1u, 0x14u, v1->pFile);
-        fprintf(File, "D3D texture name:  %s\t\toffset: %x\n", *(unsigned int *)v7, *(unsigned int *)(v7 + 200000));
-        ++v9;
-        v7 += 4;
-      }
-      while ( v9 < (signed int)*v6 );
-      v2 = 0;
-    }
-    fwrite(v1->pSpriteOffsets, 4u, *v6, v1->pFile);
-    fseek(v1->pFile, 4, v2);
-    fwrite(&v1->uDataOffset, 4u, 1u, v1->pFile);
-    fclose(v1->pFile);
+    v4 = ftell(this->pFile);
+    v5 = this->pFile;
+    this->uDataOffset = v4;
+    fwrite(&this->uNumItems, 4u, 1u, v5);
+    for (int i = 0; i < this->uNumItems; i++)
+    {
+      fwrite(this->pSpriteNames[i], 1u, 0x14u, this->pFile);
+      fprintf(File, "D3D texture name:  %s\t\toffset: %x\n", this->pSpriteNames[i], *(unsigned int *)(&(this->pSpriteNames[i]) + 200000/sizeof(char*)));
+    }
+    fwrite(this->pSpriteOffsets, 4u, this->uNumItems, this->pFile);
+    fseek(this->pFile, 4, 0);
+    fwrite(&this->uDataOffset, 4u, 1u, this->pFile);
+    fclose(this->pFile);
     fclose(File);
   }
   else
   {
     fclose(this->pFile);
-    if ( (signed int)v1->uNumItems > 0 )
-    {
-      v3 = (void **)v1->pSpriteNames;
-      do
-      {
-        free(*v3);
-        ++v2;
-        ++v3;
-      }
-      while ( v2 < (signed int)v1->uNumItems );
+    for (int i = 0; i < this->uNumItems; i++)
+    {
+      free(this->pSpriteNames[i]);
     }
   }
   return true;
@@ -10961,15 +10875,12 @@
 RenderHWLContainer::RenderHWLContainer():
   bDumpDebug(false)
 {
-  RenderHWLContainer *v1; // esi@1
-
-  v1 = this;
   this->pFile = 0;
   uSignature = 0;
-  v1->uDataOffset = 0;
-  memset(&v1->uNumItems, 0, 0x61A84u);
-  v1->uNumItems = 0;
-  v1->field_61A94_scale_hwls_to_half = 0;
+  this->uDataOffset = 0;
+  memset(&this->uNumItems, 0, 0x61A84u);
+  this->uNumItems = 0;
+  this->field_61A94_scale_hwls_to_half = 0;
 }
 
 //----- (0045237F) --------------------------------------------------------