changeset 1178:f7ad7bd0a806

Слияние
author Ritor1
date Tue, 04 Jun 2013 09:44:53 +0600
parents ce5ff6d32200 (current diff) 29a8defbad9e (diff)
children 883eaee77094
files Render.cpp
diffstat 55 files changed, 586 insertions(+), 571 deletions(-) [+]
line wrap: on
line diff
--- a/Actor.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Actor.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>
 
 
--- a/Allocator.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Allocator.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <string.h>
 #include <stdio.h>
 #include "OSAPI.h"
--- a/Arcomage.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Arcomage.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <string>
 #include <assert.h>
 
--- a/AudioPlayer.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/AudioPlayer.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <string>
 #include <assert.h>
 
--- a/Chest.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Chest.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdio.h>
 #include <assert.h>
 
--- a/Events.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Events.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 <stdlib.h>
 
--- a/GUIFont.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/GUIFont.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <string>
 #include <assert.h>
 
@@ -27,38 +31,42 @@
 
 char pTmpBuf3[10000];
 
+void DrawCharToBuff(unsigned short* uXpos,unsigned char* pCharPixels, int uCharWidth, int uCharHeight, unsigned __int16* pFontPalette, __int16 draw_color, int line_width);
+
+
 //----- (0044C448) --------------------------------------------------------
 GUIFont *LoadFont(const char *pFontFile, const char *pFontPalette, ...)
-{
-	
-	int pallete_index; // eax@3
-	GUIFont *pFont;
-	unsigned int palletes_count =0;
-	va_list palettes_ptr;
+{	
+    int pallete_index; // eax@3
+    GUIFont *pFont;
+    unsigned int palletes_count =0;
+    va_list palettes_ptr;
 
-	pFont = (GUIFont *)pIcons_LOD->LoadRaw(pFontFile, 0);
-	va_start(palettes_ptr, pFontFile);
+    pFont = (GUIFont *)pIcons_LOD->LoadRaw(pFontFile, 0);
+    va_start(palettes_ptr, pFontFile);
 
-	while  (NULL!=(pFontPalette=va_arg(palettes_ptr, const char *)))
-		{
-		pallete_index =pIcons_LOD->LoadTexture(pFontPalette, TEXTURE_16BIT_PALETTE);
-		if (pallete_index == -1)
-			{
-			wsprintfA(pTmpBuf, "Unable to open %s", pFontPalette);
-			Abortf(pTmpBuf);
-			}	
-		pFont->pFontPalettes[palletes_count] = pIcons_LOD->pTextures[pallete_index].pPalette16;
-		++palletes_count;
-		}
-	va_end(palettes_ptr);
-	pFont->palletes_count = palletes_count;
-	return pFont;
-	}
+    while  (NULL!=(pFontPalette=va_arg(palettes_ptr, const char *)))
+        {
+        pallete_index =pIcons_LOD->LoadTexture(pFontPalette, TEXTURE_16BIT_PALETTE);
+        if (pallete_index == -1)
+            {
+            wsprintfA(pTmpBuf, "Unable to open %s", pFontPalette);
+            Abortf(pTmpBuf);
+            }	
+        pFont->pFontPalettes[palletes_count] = pIcons_LOD->pTextures[pallete_index].pPalette16;
+        ++palletes_count;
+        }
+    va_end(palettes_ptr);
+    pFont->palletes_count = palletes_count;
+    return pFont;
+}
 
 
 
 //----- (0044D2FD) --------------------------------------------------------
-void GUIFont::_44D2FD_prolly_draw_credits_entry(GUIFont *pFont, int Str, int a4, unsigned int w, unsigned int h, unsigned __int16 a7, unsigned __int16 a8, const char *pString, unsigned __int16 *pPixels, unsigned int uPixelsWidth)
+void GUIFont::_44D2FD_prolly_draw_credits_entry(GUIFont *pFont, int Str, int a4, unsigned int w, unsigned int h, 
+                                                unsigned __int16 a7, unsigned __int16 a8, const char *pString, 
+                                                unsigned __int16 *pPixels, unsigned int uPixelsWidth)
 {
   int v11; // ebx@1
   int v12; // edi@1
@@ -114,7 +122,7 @@
       v18 = (signed int)(w - v16->GetLineWidth(&v14[v17])) >> 1;
       if ( v18 < 0 )
         v18 = 0;
-      v16->_44D0B5(a4a, a8, (int)&v15[v18 + a7a], Stra, uPixelsWidth);
+      v16->DrawTextLineToBuff(a4a, a8, &v15[v18 + a7a], Stra, uPixelsWidth);
       v15 += uPixelsWidth * (LOBYTE(v16->uFontHeight) - 3);
       Stra = strtok(0, "\n");
       if ( !Stra )
@@ -127,176 +135,151 @@
 
 
 //----- (0044D1E7) --------------------------------------------------------
-void GUIFont::DrawTextLine(unsigned int uDefaultColor, signed int uX, signed int uY, const char *Str, int a6)
+void GUIFont::DrawTextLine( unsigned int uDefaultColor, signed int uX, signed int uY, 
+                            const char *text, int max_len_pix )
 {
-  size_t v6; // ebx@1
-  GUIFont *pFont; // esi@1
-  signed int v8; // edi@3
-  unsigned __int8 v9; // cl@4
-  int v10; // eax@5
-  int v11; // ecx@5
-  int v12; // ecx@6
-  int v13; // ecx@7
-  int v14; // ecx@9
-  unsigned int v15; // edx@9
-  unsigned __int16 v16; // cx@12
-  unsigned __int8 *v17; // eax@12
-  char Dest[20]; // [sp+Ch] [bp-1Ch]@16
-  //char v19; // [sp+11h] [bp-17h]@16
-  size_t v20; // [sp+20h] [bp-8h]@2
-  int v21; // [sp+24h] [bp-4h]@1
-  int uXa; // [sp+30h] [bp+8h]@9
+    signed int uX_pos; // edi@3
+    unsigned char c; // cl@4
+    unsigned __int16 draw_color; // cx@12
+    unsigned __int8 *pCharPixels; // eax@12
+    char color_code[20]; // [sp+Ch] [bp-1Ch]@16
+    int text_length; // [sp+20h] [bp-8h]@2
+    int text_color; // [sp+24h] [bp-4h]@1
+    int uCharWidth; // [sp+30h] [bp+8h]@9
 
-  v6 = 0;
-  v21 = uDefaultColor;
-  pFont = this;
-  if ( Str )
-  {
-    v21 = ui_current_text_color;
-    v20 = strlen(Str);
-    if ( (signed int)v20 > 0 )
-    {
-      v8 = uX;
-      do
-      {
-        if ( pFont->IsCharValid(v9 = Str[v6]) )
+    if ( !text )
+        return;
+    text_color = ui_current_text_color;
+    text_length = strlen(text);
+    uX_pos=uX;
+    for (int i=0; i<text_length; ++i )
         {
-          v10 = v9;
-          v11 = v9 - 9;
-          if ( v11 )
-          {
-            v12 = v11 - 1;
-            if ( !v12 )
-              return;
-            v13 = v12 - 2;
-            if ( v13 )
+        c = text[i];
+        if ( IsCharValid(c) )
             {
-              if ( v13 != 1 )
-              {
-                v14 = 3 * v10 + 9;
-                v15 = *((int *)&pFont->cFirstChar + v14);
-                uXa = *((int *)&pFont->cFirstChar + v14);
-                if ( v15 )
+            switch (c)
                 {
-                  if ( (signed int)v6 > 0 )
-                    v8 += pFont->pMetrics[v10].uLeftSpacing;
-                  v16 = v21;
-                  v17 = (unsigned __int8 *)((char *)&pFont[1] + pFont->field_C20[v10]);
-                  if ( !v21 )
-                    v16 = -1;
-                  pRenderer->DrawText(v8, uY, v17, v15, pFont->uFontHeight, pFont->pFontPalettes[0], v16, 0);
-                  v8 += uXa;
-                  if ( (signed int)v6 < (signed int)v20 )
-                    v8 += pFont->pMetrics[(unsigned __int8)Str[v6]].uRightSpacing;
+            case '\n':	//Line Feed 0A 10:
+                return;
+                break;
+            case '\f':  //Form Feed, page eject  0C 12 
+                strncpy(color_code, &text[i + 1], 5);
+                color_code[5] = 0;
+                text_color = atoi(color_code);
+                ui_current_text_color = text_color;
+                i += 5;	  
+                break;
+            case '\t':	// Horizontal tab 09
+            case '\r':   //Carriage Return 0D 13                 
+                break;
+            default:
+                uCharWidth = pMetrics[c].uWidth;
+                if ( uCharWidth )
+                    {
+                    if ( i > 0 )
+                        uX_pos += pMetrics[c].uLeftSpacing;
+                    draw_color = text_color;
+                    pCharPixels = &pFontData[font_pixels_offset[c]];
+                    if ( !text_color )
+                        draw_color = -1;
+                    pRenderer->DrawText(uX_pos, uY, pCharPixels, uCharWidth, uFontHeight, pFontPalettes[0], draw_color, 0);
+                    uX_pos += uCharWidth;
+                    if ( i < text_length )
+                        uX_pos += pMetrics[c].uRightSpacing;
+                    }
                 }
-              }
             }
-            else
+        }
+    
+}
+
+//----- (0040F845) --------------------------------------------------------
+void DrawCharToBuff( unsigned short* uXpos,unsigned char* pCharPixels, int uCharWidth, int uCharHeight, 
+                            unsigned __int16* pFontPalette, __int16 draw_color, int line_width )
+    {
+    unsigned __int16* draw_buff; // edi@1
+    unsigned char* pPixels; // esi@1
+    unsigned char char_pxl; // eax@3
+
+    draw_buff = uXpos;
+    pPixels = pCharPixels;
+    for(int i=0; i<uCharHeight; ++i)
+        {
+        for(int j=0; j<uCharWidth; ++j)
             {
-              strncpy(Dest, &Str[v6 + 1], 5u);
-              Dest[5] = 0;
-              v21 = atoi(Dest);
-              ui_current_text_color = v21;
-              v6 += 5;
+            char_pxl = *pPixels++;
+            if ( char_pxl )
+                {
+                if ( char_pxl == 1 )
+                    *draw_buff = pFontPalette[1];         
+                else         
+                    *draw_buff = draw_color;         
+                }
+            ++draw_buff;
             }
-          }
+        draw_buff+=line_width-uCharWidth;
         }
-        ++v6;
-      }
-      while ( (signed int)v6 < (signed int)v20 );
-    }
-  }
+
 }
-// 5C6DB4: using guessed type int ui_current_text_color;
-
 
 //----- (0044D0B5) --------------------------------------------------------
-void GUIFont::_44D0B5(int a2, int a3, int a4, const char *pString, int a6)
-{
-  int v6; // ebx@1
-  GUIFont *v7; // esi@1
-  int v8; // edi@3
-  unsigned __int8 v9; // cl@4
-  int v10; // eax@5
-  int v11; // ecx@5
-  int v12; // ecx@6
-  int v13; // ecx@7
-  int v14; // ecx@8
-  int v15; // ebx@10
-  int v16; // edx@13
-  __int16 v17; // ax@13
-  char Dest; // [sp+Ch] [bp-20h]@17
-  char v19; // [sp+11h] [bp-1Bh]@17
-  size_t v20; // [sp+20h] [bp-Ch]@2
-  int v21; // [sp+24h] [bp-8h]@1
-  int v22; // [sp+28h] [bp-4h]@2
-  const char *v23; // [sp+38h] [bp+Ch]@4
+void GUIFont::DrawTextLineToBuff( int uColor, int a3, unsigned short* uX_buff_pos, const char *text, int line_width )
+    {
+  
+  unsigned short* uX_pos; // edi@3
+  unsigned char c; // cl@4
+  unsigned __int16 draw_color; // cx@12
+  unsigned __int8 *pCharPixels; // eax@12
+  char color_code[20]; // [sp+Ch] [bp-1Ch]@16
+  int text_length; // [sp+20h] [bp-8h]@2
+  int text_color; // [sp+24h] [bp-4h]@1
+  int uCharWidth; // [sp+30h] [bp+8h]@9
 
-  v6 = 0;
-  v21 = a2;
-  v7 = this;
-  if ( pString )
-  {
-    v21 = ui_current_text_color;
-    v20 = strlen(pString);
-    v22 = 0;
-    if ( (signed int)v20 > 0 )
-    {
-      v8 = a4;
-      do
+  if ( !text )
+      return;
+  text_color = ui_current_text_color;
+  text_length = strlen(text);
+  uX_pos=uX_buff_pos;
+  for (int i=0; i<text_length; ++i )
       {
-        v23 = &pString[v6];
-        if ( v7->IsCharValid(v9 = pString[v6]) )
-        {
-          v10 = v9;
-          v11 = v9 - 9;
-          if ( v11 )
+      c = text[i];
+      if ( IsCharValid(c) )
           {
-            v12 = v11 - 1;
-            if ( !v12 )
+          switch (c)
+              {
+          case '\n':	//Line Feed 0A 10:
               return;
-            v13 = v12 - 2;
-            if ( v13 )
-            {
-              v14 = v13 - 1;
-              if ( v14 )
-              {
-                if ( v14 != 82 )
-                {
-                  v15 = *((int *)&v7->cFirstChar + 3 * v10 + 9);
-                  if ( v15 )
+              break;
+          case '\f':  //Form Feed, page eject  0C 12 
+              strncpy(color_code, &text[i + 1], 5);
+              color_code[5] = 0;
+              text_color = atoi(color_code);
+              ui_current_text_color = text_color;
+              i += 5;	  
+              break;
+          case '\t':	// Horizontal tab 09
+          case '\r':   //Carriage Return 0D 13                 
+              break;
+          default:
+              uCharWidth = pMetrics[c].uWidth;
+              if ( uCharWidth )
                   {
-                    if ( v22 > 0 )
-                      v8 += 2 * v7->pMetrics[v10].uLeftSpacing;
-                    v16 = (int)((char *)&v7[1] + v7->field_C20[v10]);
-                    v17 = v21;
-                    if ( !v21 )
-                      v17 = -1;
-                    sub_40F845(v8, v16, v15, LOBYTE(v7->uFontHeight), (int)v7->pFontPalettes[0], v17, 2 * a6);
-                    v8 += 2 * v15;
-                    if ( v22 < (signed int)v20 )
-                      v8 += 2 * v7->pMetrics[(unsigned __int8)*v23].uRightSpacing;
+                  if ( i > 0 )
+                      uX_pos += pMetrics[c].uLeftSpacing;
+                  draw_color = text_color;
+                  pCharPixels = &pFontData[font_pixels_offset[c]];
+                  if ( !text_color )
+                      draw_color = -1;
+                  DrawCharToBuff(uX_pos, pCharPixels, uCharWidth, uFontHeight, pFontPalettes[0], draw_color, line_width);
+                  uX_pos += uCharWidth;
+                  if ( i < text_length )
+                      uX_pos += pMetrics[c].uRightSpacing;
                   }
-                }
               }
-            }
-            else
-            {
-              strncpy(&Dest, &pString[v6 + 1], 5u);
-              v19 = 0;
-              v21 = atoi(&Dest);
-              ui_current_text_color = v21;
-              v22 = v6 + 5;
-            }
           }
-        }
-        v6 = v22++ + 1;
       }
-      while ( v22 < (signed int)v20 );
-    }
-  }
 }
-// 5C6DB4: using guessed type int ui_current_text_color;
+
 
 
 //----- (0044C933) --------------------------------------------------------
@@ -490,71 +473,46 @@
 
 
 //----- (0044C6C2) --------------------------------------------------------
-int GUIFont::_44C6C2(const char *pInString, GUIWindow *pWindow, unsigned int uX, int a5)
-{
-  const char *v5; // esi@1
-  int v6; // edi@1
-  unsigned __int8 *v8; // ebx@3
-  size_t v9; // eax@3
-  signed int v10; // esi@3
-  int v11; // edx@4
-  unsigned int v12; // cl@4
-  GUIFont *v13; // [sp+Ch] [bp-4h]@1
-  size_t uXa; // [sp+1Ch] [bp+Ch]@3
+char* GUIFont::_44C6C2( const char *pInString, GUIWindow *pWindow, unsigned int uX, int a5 )
+    {
+  int text_height; // edi@1
+  char *text_str; // ebx@3
+  int i;
+  unsigned char c; // cl@4
+  int text_length; 
 
-  auto pFont = this;
-  v5 = pInString;
-  v6 = 0;
-  v13 = pFont;
+  text_height = 0;
+
   if ( !pInString )
     return 0;
-  v8 = (unsigned __int8 *)FitTextInAWindow(pInString, pFont, pWindow, uX, 0);
-  v9 = strlen(v5);
-  v10 = 0;
-  uXa = v9;
-  if ( (signed int)v9 > 0 )
-  {
-    while ( v10 < (signed int)uXa )
-    {
-	  if(IsCharValid(*v8))
-	  {
-		v12=(unsigned int)v8;
-		if ( v12 != 9 )
-		{
-		  if ( v12 == 10 )
-		  {
-			v6 = v6 + *(char *)(v11 + 5) - 3;
-			if ( v6 >= (signed int)(a5 * pWindow->uFrameHeight) )
-			  return (int)(v8 + 1);
-			if ( v6 >= (signed int)(a5 * pWindow->uFrameHeight) )
-			  return (int)v8;
-		  }
-		  else if ( v12 == 12 )
-		  {
-			v8 += 5;
-			v10 += 5;
-			if ( v6 >= (signed int)(a5 * pWindow->uFrameHeight) )
-			  return (int)v8;
-		  }
-		  else if ( v12 != 13 )
-		  {
-			if ( v6 >= (signed int)(a5 * pWindow->uFrameHeight) )
-			  return (int)v8; 
-		  }
-		}
-		if(v12 == 13 || v12 == 9)
-		{
-			v8 += 3;
-			v10 += 3;
-		}
-		if ( v6 >= (signed int)(a5 * pWindow->uFrameHeight) )
-		  return (int)v8;
-	  }
-      ++v10;
-      ++v8;
-    }
-  }
-  return (int)v8;
+  text_str = FitTextInAWindow(pInString, this, pWindow, uX, 0);
+  text_length = strlen(text_str);
+  //uX_pos=uX_buff_pos;
+  for (i=0; i<text_length; ++i )
+      {
+      c = text_str[i];
+      if ( IsCharValid(c) )
+          {
+          switch (c)
+              {
+          case '\n':	//Line Feed 0A 10:
+              text_height = text_height + uFontHeight - 3;
+              if ( text_height >= (signed int)(a5 * pWindow->uFrameHeight) )
+                  return &text_str[i+1];
+              break;
+          case '\f':  //Form Feed, page eject  0C 12       
+              i += 5;	  
+              break;
+          case '\t':	// Horizontal tab 09
+          case '\r':   //Carriage Return 0D 13 
+              i += 3;
+              break;    
+              }
+          if ( text_height >= (signed int)(a5 * pWindow->uFrameHeight) )
+              return &text_str[i];
+          }
+      }
+  return &text_str[i];
 }
 
 
@@ -611,11 +569,11 @@
 }
 
 //----- (0044C59D) --------------------------------------------------------
-int GUIFont::CalcTextHeight(const char *pString, GUIWindow *pWindow, int uXOffset, int a5)
-	{ 
+int GUIFont::CalcTextHeight( const char *pString, struct GUIWindow *pWindow, int uXOffset, int a5 )
+    { 
 	int uAllHeght; 
-	unsigned int uStringLen; 
-	char c; 
+	int uStringLen; 
+	unsigned char c; 
 	char *test_string; 
 
 	if (!pString)
@@ -651,7 +609,7 @@
 //----- (0044C51E) --------------------------------------------------------
 int GUIFont::GetLineWidth(const char *pString)
 	{
-	unsigned int str_len; // ebp@3
+	int str_len; // ebp@3
 	int string_line_width; // esi@3
 	unsigned char c;
 
@@ -703,7 +661,7 @@
 char * FitTextInAWindow( const char *pInString, GUIFont *pFont, GUIWindow *pWindow, signed int uX, int a5 )
     {
 	unsigned char c;
-	unsigned int uInStrLen;
+	int uInStrLen;
 	char digits[4];
 	int possible_transition_point;
 	int string_pixel_Width;
--- a/GUIFont.h	Tue Jun 04 09:35:16 2013 +0600
+++ b/GUIFont.h	Tue Jun 04 09:44:53 2013 +0600
@@ -20,26 +20,27 @@
   bool IsCharValid(unsigned char c) {	return (c >= cFirstChar) && (c <= cLastChar) || (c == '\f') || (c == '\r') || (c == '\t') || (c == '\n');}
   int AlignText_Center(unsigned int uCenterX, const char *pString);
   int GetLineWidth(const char *pString);
-  int CalcTextHeight(const char *pString, struct GUIWindow *pWindow, int a4, int a5);
+  int CalcTextHeight(const  char *pString, struct GUIWindow *pWindow, int uXOffset, int a5);
   int GetStringHeight2(GUIFont *a2, const char *Str, int a4, int a5, int a6);
-  int _44C6C2(const char *pInString, GUIWindow *pWindow, unsigned int uX, int a5);
-  void _44D0B5(int a2, int a3, int a4, const char *pString, int a6);
-  void DrawTextLine(unsigned int uDefaultColor, signed int uX, signed int uY, const char *Str, int a6);
+  char* _44C6C2(const char *pInString, GUIWindow *pWindow, unsigned int uX, int a5);
+  void DrawTextLineToBuff(int uColor, int a3, unsigned short* uX_buff_pos, const char *text, int line_width);
+  void DrawTextLine(unsigned int uDefaultColor, signed int uX, signed int uY, const char *text, int max_len_pix);
   void _44D2FD_prolly_draw_credits_entry(GUIFont *pFont, int Str, int a4, unsigned int w, unsigned int h, unsigned __int16 a7, unsigned __int16 a8, const char *pString, unsigned __int16 *pPixels, unsigned int uPixelsWidth);
 
   static char * _44C933(const char *pString, GUIFont *pFont, GUIFont *a3, int a4, int a5, int a6);
 
-  unsigned char cFirstChar;
-  unsigned char cLastChar;
+  unsigned char cFirstChar;  //0
+  unsigned char cLastChar;  //1
   char field_2;
   char field_3;
   char field_4;
-  __int16 uFontHeight;
+  __int16 uFontHeight;  //5-6
   char field_7;
   int palletes_count;
   unsigned __int16 *pFontPalettes[5];
   GUICharMetric pMetrics[256];
-  int field_C20[256];
+  int font_pixels_offset[256];
+  unsigned char pFontData[0]; //array of font pixels
 };
 #pragma pack(pop)
 
--- a/GUIProgressBar.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/GUIProgressBar.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 "GUIProgressBar.h"
--- a/GUIWindow.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/GUIWindow.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "GUIWindow.h"
 #include "GUIFont.h"
 #include "Party.h"
@@ -1379,7 +1383,7 @@
                 v28 = *((int *)&v10->cFirstChar + 3 * v15 + 9);
                 if ( v14 > 0 )
                   v12 += v10->pMetrics[v15].uLeftSpacing;
-                v17 = (int)((char *)&v10[1] + v10->field_C20[v15]);
+                v17 = (int)((char *)&v10[1] + v10->font_pixels_offset[v15]);
                 if ( (short)uFontColor )
                   pRenderer->DrawText(
                     v12,
@@ -1546,7 +1550,7 @@
                 v34 = *((int *)&pFont->cFirstChar + 3 * v16 + 9);
                 if ( (signed int)Str1b > 0 )
                   v13 += pFont->pMetrics[v16].uLeftSpacing;
-                v21 = (int)((char *)&pFont[1] + pFont->field_C20[v16]);
+                v21 = (int)((char *)&pFont[1] + pFont->font_pixels_offset[v16]);
                 if ( (short)uColor )
                   pRenderer->DrawText(v13, v14, (unsigned __int8 *)v21, v20, LOBYTE(pFont->uFontHeight), pFont->pFontPalettes[0], uColor, 0);
                 else
--- a/Game.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Game.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 "Vis.h"
--- a/Indoor.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Indoor.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 "LightmapBuilder.h"
@@ -1722,7 +1726,7 @@
   signed int v2; // esi@1
 
   for (uint i = 0; i < 11; ++i)
-    if (!strcmpi(Str1, _4E6BDC_loc_names[i]))
+    if (!_stricmp(Str1, _4E6BDC_loc_names[i]))
       return i + 1;
   return 0;
 }
@@ -2781,7 +2785,7 @@
   if (dword_6BE364_game_settings_1 & 0x2000 )
     _i = 29030400;
   bool _a = false;
-  if ( a3 - dlv.uLastRepawnDay >= _i && strcmpi(pCurrentMapName, "d29.dlv") )
+  if ( a3 - dlv.uLastRepawnDay >= _i && _stricmp(pCurrentMapName, "d29.dlv") )
     _a = true;
 
   //v154 = 875;
--- a/Items.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Items.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdlib.h>
 #include <assert.h>
 
@@ -790,7 +794,7 @@
 						{
 						for(int ii=0; ii<24; ++ii)
 							{
-							if (stricmp(test_string,pEnchantments[ii].pBonusStat))
+							if (_stricmp(test_string,pEnchantments[ii].pBonusStat))
 								{
 								pItems[item_counter]._bonus_type=ii+1;
 								break;
@@ -800,7 +804,7 @@
 							{
 							for(int ii=0; ii<72; ++ii)
 								{
-								if (stricmp(test_string,pSpecialEnchantments[ii].pBonusStatement))
+								if (_stricmp(test_string,pSpecialEnchantments[ii].pBonusStatement))
 									{
 									pItems[item_counter]._additional_value=ii+1;
 									}
--- a/Keyboard.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Keyboard.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "OSAPI.h"
 
 #include "Keyboard.h"
--- a/LOD.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/LOD.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "LOD.h"
 #include "Render.h"
 #include "Allocator.h"
@@ -2015,7 +2019,7 @@
   if (bLinearSearch)
   {
     for (uint i = 0; i < uNumSubDirs; ++i)
-      if (!strcmpi(pContainer_Name, pSubIndices[i].pFilename))
+      if (!_stricmp(pContainer_Name, pSubIndices[i].pFilename))
       {
         v4 = pSubIndices[i].uOfsetFromSubindicesStart;
         fseek(pFile, uOffsetToSubIndex + v4, SEEK_SET);
@@ -2640,9 +2644,9 @@
       ptr_011BB4 = new char[1000];
       memset(ptr_011BB4, 0, 1000);
     }
-    if (strnicmp(pContainer, "wtrdr", 5))//*v4 != 'w' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'd' || v4[4] != 'r' )
+    if (_strnicmp(pContainer, "wtrdr", 5))//*v4 != 'w' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'd' || v4[4] != 'r' )
     {
-      if (strnicmp(pContainer, "WtrTyl", 6))//if ( *v4 != 'W' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'T' || v4[4] != 'y' || v4[5] != 'l' )
+      if (_strnicmp(pContainer, "WtrTyl", 6))//if ( *v4 != 'W' || v4[1] != 't' || v4[2] != 'r' || v4[3] != 'T' || v4[4] != 'y' || v4[5] != 'l' )
       {
         v14 = uNumLoadedFiles;
       }
@@ -2899,7 +2903,7 @@
   areWeLoadingTexture = 1;
 
   for (uint i = 0; i < uNumLoadedFiles; ++i)
-    if (!strcmpi(pContainer, pTextures[i].pName))
+    if (!_stricmp(pContainer, pTextures[i].pName))
       return i;
 
 //  if (!uNumLoadedFiles)
--- a/MM7.h	Tue Jun 04 09:35:16 2013 +0600
+++ b/MM7.h	Tue Jun 04 09:44:53 2013 +0600
@@ -5,20 +5,6 @@
 #include <string>
 
 typedef unsigned int uint;
-#define LOWORD(a) (*((unsigned short *)&a))
-#define HIWORD(a) (*((unsigned short *)&a + 1))
-#define SHIWORD(a) (*((short *)&a + 1))
-
-#define LODWORD(a) (*((unsigned int *)&a))
-#define HIDWORD(a) (*((unsigned int *)&a + 1))
-#define SLODWORD(a) (*((int *)&a))
-#define SHIDWORD(a) (*((int *)&a + 1))
-
-#define LOBYTE(a) (*((unsigned char *)&a))
-#define HIBYTE(a) (*((unsigned char *)&a + sizeof(a) - 1))
-#define BYTE1(a) (*((unsigned char *)&a + 1))
-#define BYTE2(a) (*((unsigned char *)&a + 2))
-#define BYTE3(a) (*((unsigned char *)&a + 3))
 
 #define PID(type, id) (unsigned int)((((8 * (id))) | (type)) & 0xFFFF)  // packed id
 #define PID_TYPE(pid) (unsigned int)((pid) & 7)                         // extract type
--- a/Monsters.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Monsters.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
--- a/Mouse.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Mouse.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "OSAPI.h"
 
 #include "VideoPlayer.h"
@@ -31,7 +35,7 @@
 void Mouse::RemoveHoldingItem()
 {
   pParty->pPickedItem.Reset();
-  if (strcmpi(pCurrentCursorName, "MICON2"))
+  if (_stricmp(pCurrentCursorName, "MICON2"))
     SetCursorBitmap("MICON1");
 }
 
--- a/NPC.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/NPC.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,4 +1,6 @@
-
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
 
 #include "Allocator.h"
 #include "texts.h"
--- a/Outdoor.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Outdoor.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 "stru6.h"
--- a/Overlays.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Overlays.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdlib.h>
 
 #include "Overlays.h"
--- a/PaletteManager.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/PaletteManager.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 "PaletteManager.h"
--- a/Party.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Party.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 "Party.h"
--- a/Player.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Player.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 "stru6.h"
--- a/Player.h	Tue Jun 04 09:35:16 2013 +0600
+++ b/Player.h	Tue Jun 04 09:44:53 2013 +0600
@@ -201,7 +201,7 @@
 };
 
 /*  328 */
-enum PLAYER_SKILL_TYPE: __int8
+enum PLAYER_SKILL_TYPE: signed __int8
 {
   PLAYER_SKILL_STAFF = 0,
   PLAYER_SKILL_SWORD = 1,
@@ -591,31 +591,31 @@
   bool Recover(signed int a2);
   bool CanCastSpell(unsigned int uRequiredMana);
 
-  inline bool Weak()       {return pConditions[Condition::Condition_Weak] != 0;}
-  inline bool Dead()       {return pConditions[Condition::Condition_Dead] != 0;}
-  inline bool Eradicated() {return pConditions[Condition::Condition_Eradicated] != 0;}
-  inline bool Zombie()     {return pConditions[Condition::Condition_Zombie] != 0;}
-  inline bool Cursed()     {return pConditions[Condition::Condition_Cursed] != 0;}
-  inline bool Pertified()  {return pConditions[Condition::Condition_Pertified] != 0;}
+  inline bool Weak()       {return pConditions[Condition_Weak] != 0;}
+  inline bool Dead()       {return pConditions[Condition_Dead] != 0;}
+  inline bool Eradicated() {return pConditions[Condition_Eradicated] != 0;}
+  inline bool Zombie()     {return pConditions[Condition_Zombie] != 0;}
+  inline bool Cursed()     {return pConditions[Condition_Cursed] != 0;}
+  inline bool Pertified()  {return pConditions[Condition_Pertified] != 0;}
 
-  inline void SetCursed(bool state)      {pConditions[Condition::Condition_Cursed] = state;}
-  inline void SetWeak(bool state)        {pConditions[Condition::Condition_Weak] = state;}
-  inline void SetAsleep(bool state)      {pConditions[Condition::Condition_Sleep] = state;}
-  inline void SetAfraid(bool state)      {pConditions[Condition::Condition_Fear] = state;}
-  inline void SetDrunk(bool state)       {pConditions[Condition::Condition_Drunk] = state;}
-  inline void SetInsane(bool state)      {pConditions[Condition::Condition_Insane] = state;}
-  inline void SetPoison1(bool state)     {pConditions[Condition::Condition_Poison1] = state;}
-  inline void SetDisease1(bool state)    {pConditions[Condition::Condition_Disease1] = state;}
-  inline void SetPoison2(bool state)     {pConditions[Condition::Condition_Poison2] = state;}
-  inline void SetDisease2(bool state)    {pConditions[Condition::Condition_Disease2] = state;}
-  inline void SetPoison3(bool state)     {pConditions[Condition::Condition_Poison3] = state;}
-  inline void SetDisease3(bool state)    {pConditions[Condition::Condition_Disease3] = state;}
-  inline void SetParalyzed(bool state)   {pConditions[Condition::Condition_Paralyzed] = state;}
-  inline void SetUnconcious(bool state)  {pConditions[Condition::Condition_Unconcious] = state;}
-  inline void SetDead(bool state)        {pConditions[Condition::Condition_Dead] = state;}
-  inline void SetPertified(bool state)   {pConditions[Condition::Condition_Pertified] = state;}
-  inline void SetEradicated(bool state)  {pConditions[Condition::Condition_Eradicated] = state;}
-  inline void SetZombie(bool state)      {pConditions[Condition::Condition_Zombie] = state;}
+  inline void SetCursed(bool state)      {pConditions[Condition_Cursed] = state;}
+  inline void SetWeak(bool state)        {pConditions[Condition_Weak] = state;}
+  inline void SetAsleep(bool state)      {pConditions[Condition_Sleep] = state;}
+  inline void SetAfraid(bool state)      {pConditions[Condition_Fear] = state;}
+  inline void SetDrunk(bool state)       {pConditions[Condition_Drunk] = state;}
+  inline void SetInsane(bool state)      {pConditions[Condition_Insane] = state;}
+  inline void SetPoison1(bool state)     {pConditions[Condition_Poison1] = state;}
+  inline void SetDisease1(bool state)    {pConditions[Condition_Disease1] = state;}
+  inline void SetPoison2(bool state)     {pConditions[Condition_Poison2] = state;}
+  inline void SetDisease2(bool state)    {pConditions[Condition_Disease2] = state;}
+  inline void SetPoison3(bool state)     {pConditions[Condition_Poison3] = state;}
+  inline void SetDisease3(bool state)    {pConditions[Condition_Disease3] = state;}
+  inline void SetParalyzed(bool state)   {pConditions[Condition_Paralyzed] = state;}
+  inline void SetUnconcious(bool state)  {pConditions[Condition_Unconcious] = state;}
+  inline void SetDead(bool state)        {pConditions[Condition_Dead] = state;}
+  inline void SetPertified(bool state)   {pConditions[Condition_Pertified] = state;}
+  inline void SetEradicated(bool state)  {pConditions[Condition_Eradicated] = state;}
+  inline void SetZombie(bool state)      {pConditions[Condition_Zombie] = state;}
 
 
 
--- 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) --------------------------------------------------------
--- a/SaveLoad.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/SaveLoad.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <io.h>
 #include <direct.h>
 #include <assert.h>
--- a/Spells.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Spells.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdlib.h>
 
 #include "Spells.h"
--- a/Sprites.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Sprites.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <string.h>
 #include <algorithm>
 
--- a/StorylineTextTable.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/StorylineTextTable.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
--- a/Texture.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/Texture.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <stdlib.h>
 
 #include "Texture.h"
--- a/TileTable.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/TileTable.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 <stdio.h>
 #include <stdlib.h>
--- a/UIBooks.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIBooks.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 "MM7.h"
@@ -478,7 +482,7 @@
   int v6; // eax@21
   int v7; // esi@21
   char *v8; // eax@21
-  int v9; // eax@22
+  char* v9; // eax@22
   unsigned int v11; // [sp-8h] [bp-64h]@3
   unsigned int v12; // [sp-8h] [bp-64h]@7
   Texture *v13; // [sp-4h] [bp-60h]@3
--- a/UICharacter.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UICharacter.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 <algorithm> 
--- a/UIHouses.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIHouses.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "UIHouses.h"
 #include "Party.h"
 #include "Player.h"
--- a/UIHouses.h	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIHouses.h	Tue Jun 04 09:44:53 2013 +0600
@@ -1,6 +1,6 @@
 #pragma once
 
-enum HOUSE_DIALOGUE_MENU: unsigned __int32
+enum HOUSE_DIALOGUE_MENU: __int32
 {
   HOUSE_DIALOGUE_NULL = 0,
   HOUSE_DIALOGUE_MAIN = 1,
--- a/UIMainMenu.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIMainMenu.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 "MM7.h"
--- a/UIPartyCreation.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIPartyCreation.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 "MM7.h"
--- a/UIPopup.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIPopup.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 "MM7.h"
--- a/UIRest.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UIRest.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 "MM7.h"
--- a/UISaveLoad.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UISaveLoad.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 <io.h>
 #include "MM7.h"
--- a/UITransition.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UITransition.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 <io.h>
 
--- a/UiGame.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/UiGame.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 "MM7.h"
--- a/VectorTypes.h	Tue Jun 04 09:35:16 2013 +0600
+++ b/VectorTypes.h	Tue Jun 04 09:44:53 2013 +0600
@@ -1,5 +1,6 @@
 #pragma once
 
+
 typedef unsigned __int32 uint;
 
 #pragma pack(push, 1)
--- a/VideoPlayer.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/VideoPlayer.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "OSAPI.h"
 
 #include "Bink_Smacker.h"
@@ -115,7 +119,7 @@
       v11.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
 
       auto hr = pRenderer->pDirectDraw4->CreateSurface(&v11, &v15, 0);
-      ErrD3D(hr, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Video.cpp:1476");
+      ErrD3D(hr);
     }
     v5->uWidth = v11.dwWidth;
     v5->uHeight = v11.dwHeight;
@@ -158,7 +162,7 @@
       Dst.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
 
       auto hr = pRenderer->pDirectDraw2->CreateSurface(&Dst, (LPDIRECTDRAWSURFACE *)&a2, 0);
-      ErrD3D(hr, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Video.cpp:1426");
+      ErrD3D(hr);
     }
     v5->uWidth = Dst.dwWidth;
     v5->uHeight = Dst.dwHeight;
@@ -868,7 +872,7 @@
   unsigned int v9; // [sp-4h] [bp-14h]@10
 
   for (uint i = 0; i < uNumMightVideoHeaders; ++i)
-    if (!strcmpi(pName, pMightVideoHeaders[i].pVideoName))
+    if (!_stricmp(pName, pMightVideoHeaders[i].pVideoName))
     {
       SetFilePointer(hMightVid, pMightVideoHeaders[i].uFileOffset, 0, FILE_BEGIN);
 
@@ -879,7 +883,7 @@
     }
 
   for (uint i = 0; i < uNumMagicVideoHeaders; ++i)
-    if (!strcmpi(pName, pMagicVideoHeaders[i].pVideoName))
+    if (!_stricmp(pName, pMagicVideoHeaders[i].pVideoName))
     {
       SetFilePointer(hMagicVid, pMagicVideoHeaders[i].uFileOffset, 0, FILE_BEGIN);
 
--- a/mm7_1.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_1.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 /* This file has been generated by the Hex-Rays decompiler.
    Copyright (c) 2007-2011 Hex-Rays <info@hex-rays.com>
 
--- a/mm7_2.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_2.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <io.h>
 #include <direct.h>
 #include <assert.h>
@@ -4257,7 +4261,7 @@
   assert(uNumMaps >= 2);
 
   for (uint i = 1; i < uNumMaps; ++i)
-    if (!strcmpi(pInfos[i].pFilename, Str2))
+    if (!_stricmp(pInfos[i].pFilename, Str2))
       return (MAP_TYPE)i;
 
   assert(false && "Map not found!");
@@ -5670,7 +5674,7 @@
   struct tagPAINTSTRUCT Paint; // [sp+24h] [bp-48h]@13
   int pXY[2]; // [sp+64h] [bp-8h]@261
   int a2; // [sp+7Ch] [bp+10h]@50
-
+  
   switch (Msg)
   {
     case WM_SETTEXT: return DefWindowProcW(hWnd, Msg, wParam, lParam);
@@ -7099,7 +7103,7 @@
 
 
   wchar_t pMagicPath[1024];
-  swprintf(pMagicPath, L"%C:\\anims\\magic7.vid", c);
+  swprintf(pMagicPath, wcslen(L"%C:\\anims\\magic7.vid"), L"%C:\\anims\\magic7.vid", c);
   if (GetFileAttributesW(pMagicPath) == -1)
     return false;
 
--- a/mm7_3.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_3.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>
 
 
@@ -5584,9 +5588,9 @@
   wchar_t xn_filename[1024], xp_filename[1024],
           yn_filename[1024], yp_filename[1024],
           zn_filename[1024], zp_filename[1024];
-  swprintf(xn_filename, L"%s_xn.tga", skybox_name); swprintf(xp_filename, L"%s_xp.tga", skybox_name);
-  swprintf(yn_filename, L"%s_yn.tga", skybox_name); swprintf(yp_filename, L"%s_yp.tga", skybox_name);
-  swprintf(zn_filename, L"%s_zn.tga", skybox_name); swprintf(zp_filename, L"%s_zp.tga", skybox_name);
+  swprintf(xn_filename, wcslen(L"%s_xn.tga"), L"%s_xn.tga", skybox_name); swprintf(xp_filename, wcslen(L"%s_xp.tga"), L"%s_xp.tga", skybox_name);
+  swprintf(yn_filename, wcslen(L"%s_yn.tga"), L"%s_yn.tga", skybox_name); swprintf(yp_filename, wcslen(L"%s_yp.tga"), L"%s_yp.tga", skybox_name);
+  swprintf(zn_filename, wcslen(L"%s_zn.tga"), L"%s_zn.tga", skybox_name); swprintf(zp_filename, wcslen(L"%s_zp.tga"), L"%s_zp.tga", skybox_name);
 
   int xn_width, xn_height;
   skybox_xn = LoadTgaTexture(xn_filename, &xn_width, &xn_height);
@@ -13893,8 +13897,8 @@
 }
 
 //----- (0044C175) --------------------------------------------------------
-void __fastcall ShowStatusBarString(const char *pString, unsigned int uNumSeconds)
-{
+void ShowStatusBarString( const char *pString, unsigned int uNumSeconds )
+    {
   unsigned int v2; // esi@1
   int i; // eax@1
 
--- a/mm7_4.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_4.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"
--- a/mm7_5.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_5.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"
@@ -9308,45 +9312,7 @@
   ZBuffer_DoFill(pZBuffer, pIcons_LOD->GetTexture(uTextureId), iZValue);
 }
 
-//----- (0040F845) --------------------------------------------------------
-__int16 __fastcall sub_40F845(int a1, int a2, int a3, int a4, int a5, __int16 a6, int a7)
-{
-  int v7; // edi@1
-  int v8; // esi@1
-  int v9; // ecx@2
-  int v10; // eax@3
-
-  v7 = a1;
-  v8 = a2;
-  do
-  {
-    v9 = a3;
-    do
-    {
-      v10 = *(char *)v8++;
-      if ( (char)v10 )
-      {
-        if ( (char)v10 == 1 )
-        {
-          LOWORD(v10) = *(short *)(a5 + 2 * v10);
-          *(short *)v7 = v10;
-        }
-        else
-        {
-          LOWORD(v10) = a6;
-          *(short *)v7 = a6;
-        }
-      }
-      v7 += 2;
-      --v9;
-    }
-    while ( v9 );
-    v7 = a7 + v7 - a3 - a3;
-    --a4;
-  }
-  while ( a4 );
-  return v10;
-}
+
 
 //----- (0040F89C) --------------------------------------------------------
 void __fastcall ZBuffer_DoFill(int *pZBuffer, Texture *pTex, int uZValue)
--- a/mm7_6.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_6.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "MM7.h"
 
 
@@ -2599,7 +2603,7 @@
   AwardType *v607; // ecx@1100
   __int16 v608; // ax@1102
   signed int v609; // eax@1104
-  //int v610; // edi@1106
+  int v610; // edi@1106
   unsigned int v611; // eax@1106
   Player *v612; // edi@1106
   DDM_DLV_Header *v613; // eax@1108
@@ -6207,8 +6211,7 @@
 			}
 			v608 = pCastSpell->uPlayerID_2;
 			if ( v608 != 4 && v608 != 5
-				//|| (v609 = (signed int)*(&pFontCChar + v608 + (unsigned __int8)pParty->field_709), v609 <= 0)
-				|| (v609 = achieved_awards[v608 + (unsigned __int8)pParty->field_709 - 4], v609 <= 0)
+				|| (v609 = (signed int)*(&pFontCChar + v608 + (unsigned __int8)pParty->field_709), v609 <= 0)
 				|| v609 >= 3 )
 			{
 				ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2); // Spell failed
@@ -6216,7 +6219,7 @@
 				pCastSpell->spellnum = 0;
 				continue;
 			}
-			//v610 = 76 * v609;
+			v610 = 76 * v609;
 			//*((int *)&pParty->pPlayers[3].pInstalledBeacons[4].uBeaconTime + 19 * v609) = 0;
 			pParty->pHirelings[v609-1].evt_B = 0;
 			v611 = pIconsFrameTable->FindIcon("spell96");
@@ -6480,7 +6483,7 @@
 
 const wchar_t *UIMessage2String(UIMessageType msg)
 {
-  #define CASE(xxx) case xxx: _swprintf(b, L"%03X/%s", msg, L#xxx); return b;
+  #define CASE(xxx) case xxx: swprintf(b, wcslen(L"%03X/%s"), L"%03X/%s", msg, L#xxx); return b;
   static wchar_t b[256]; // bad for threads
   switch (msg)
   {
@@ -6571,7 +6574,7 @@
     CASE(UIMSG_ToggleColoredLights)
     CASE(UIMSG_ToggleTint)
     default:
-      _swprintf(b, L"UIMSG_%03X", msg); return b;
+      swprintf(b, wcslen(L"UIMSG_%03X") , L"UIMSG_%03X", msg); return b;
   };
   #undef CASE
 }
--- a/mm7_data.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_data.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include "mm7_data.h"
 
 #include "GUIWindow.h"
@@ -492,7 +496,7 @@
 unsigned int pHealthBarPos[4] = {22, 137, 251, 366};
 unsigned int pManaBarPos[4] = {102, 217, 331, 447};
 char _4E2B21_buff_spell_tooltip_colors[80];
-char monster_popup_y_offsets[88] =
+unsigned char monster_popup_y_offsets[88] =
 {
   236,  20,   0, 216,   0,   0,   0,   0,   0,   0, 206,
    20,   0, 246, 246, 236,  10, 246,   0,   0,   0, 236,
@@ -1166,7 +1170,7 @@
 char pFinalMessage[4096]; // idb
 char pTmpBuf[2000];
 char pTmpBuf2[2000];
-char byte_5C6D50[777]; // weak
+char byte_5C6D50[100]; // weak
 int ui_current_text_color; // weak
 __int64 qword_5C6DF0; // weak
 int dword_5C6DF8; // weak
--- a/mm7_data.h	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7_data.h	Tue Jun 04 09:44:53 2013 +0600
@@ -88,6 +88,19 @@
 
 // Some convenience macros to make partial accesses nicer
 // first unsigned macros:
+#ifdef HIBYTE
+#undef HIBYTE
+#endif // HIBYTE
+#ifdef HIWORD
+#undef HIWORD
+#endif // HIWORD
+#ifdef LOBYTE
+#undef LOBYTE
+#endif // LOBYTE
+#ifdef LOWORD
+#undef LOWORD
+#endif // LOWORD
+
 #define LOBYTE(x)   (*((_BYTE*)&(x)))   // low byte
 #define LOWORD(x)   (*((_WORD*)&(x)))   // low word
 #define LODWORD(x)  (*((_DWORD*)&(x)))  // low dword
@@ -153,7 +166,6 @@
 
 
 
-
 // Generate a reference to pair of operands
 template<class T>  int16 __PAIR__( int8  high, T low) { return ((( int16)high) << sizeof(high)*8) | uint8(low); }
 template<class T>  int32 __PAIR__( int16 high, T low) { return ((( int32)high) << sizeof(high)*8) | uint16(low); }
@@ -433,7 +445,7 @@
 extern unsigned int pHealthBarPos[4];
 extern unsigned int pManaBarPos[4];
 extern char _4E2B21_buff_spell_tooltip_colors[80];
-extern char monster_popup_y_offsets[]; // weak
+extern unsigned char monster_popup_y_offsets[]; // weak
 extern unsigned char hourglass_icon_idx; // weak
 
 
@@ -1206,7 +1218,7 @@
 int __stdcall retzero_sub_40DFA7(int); // weak
 int loc_40E4FC(); // weak
 void __fastcall ZBuffer_Fill(int *pZBuffer, int uTextureId, int iZValue);
-__int16 __fastcall sub_40F845(int a1, int a2, int a3, int a4, int a5, __int16 a6, int a7);
+
 void __fastcall ZBuffer_DoFill(int *pZBuffer, Texture *pTex, int uZValue);
 void __fastcall sub_40F92A(int *pZBuffer, struct Texture *a2, int a3); // idb
 void __cdecl SetMoonPhaseNames();
@@ -1364,7 +1376,7 @@
 __int16 __fastcall sub_449A49_door_switch_animation(unsigned int uDoorID, int a2); // idb
 bool _449B57_test_bit(unsigned __int8 *a1, __int16 a2);
 void _449B7E_toggle_bit(unsigned char *pArray, __int16 a2, unsigned __int16 bToggle); // idb
-void __fastcall ShowStatusBarString(const char *pString, unsigned int uNumSeconds);
+void ShowStatusBarString(const char *pString, unsigned int uNumSeconds);
 void __cdecl ShowNothingHereStatus();
 signed int __cdecl const_2();
 bool __cdecl sub_44C28F_open_nwc_dungeon();
--- a/mm7text_ru.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/mm7text_ru.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,7 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
--- a/texts.cpp	Tue Jun 04 09:35:16 2013 +0600
+++ b/texts.cpp	Tue Jun 04 09:44:53 2013 +0600
@@ -1,3 +1,6 @@
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
 
 #include <string.h>
 #include "Allocator.h"