changeset 109:62772029b56d

Слияние
author Ritor1
date Tue, 06 Nov 2012 10:07:35 +0600
parents d543bd89a31e (current diff) 142de719a3ea (diff)
children 430786d916d6
files LOD.h Outdoor.cpp Outdoor.h mm7_2.cpp mm7_3.cpp mm7_4.cpp
diffstat 20 files changed, 358 insertions(+), 1931 deletions(-) [+]
line wrap: on
line diff
--- a/Game.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/Game.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -449,7 +449,7 @@
         dword_5B65C0 = 1;
         PrepareWorld(1u);
       }
-      UpdateActors();
+      InitializeActors();
       v11 = 0;
       do
       {
--- a/Indoor.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/Indoor.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -4493,8 +4493,8 @@
     Abortf("Out of memory loading indoor level");
   if ( !(dword_6BE364_game_settings_1 & 0x2000) )
   {
-    UpdateActors();
-    UpdateLayingItems();
+    InitializeActors();
+    InitializeLayingItems();
   }
   BYTE1(dword_6BE364_game_settings_1) &= 0xDFu;
   if ( !v39 )
@@ -4653,8 +4653,8 @@
           if ( v35 < 124 )
           {
             v21 = v35 + 1;
-            pDecortaion->field_1C = v35 + 75;
-            v22 = stru_5E4C90.field_0[v21 + 74];
+            pDecortaion->_idx_in_stru123 = v35 + 75;
+            v22 = stru_5E4C90._decor_events[v21 + 74 - 75];
             v35 = v21;
             if ( !v22 )
               pDecortaion->field_2 |= 0x20;
--- a/Indoor.h	Tue Nov 06 10:06:45 2012 +0600
+++ b/Indoor.h	Tue Nov 06 10:07:35 2012 +0600
@@ -36,7 +36,7 @@
   __int16 field_16_event_id;
   __int16 field_18;
   __int16 field_1A;
-  __int16 field_1C;
+  __int16 _idx_in_stru123;
   __int16 field_1E;
 };
 #pragma pack(pop)
--- a/LOD.h	Tue Nov 06 10:06:45 2012 +0600
+++ b/LOD.h	Tue Nov 06 10:07:35 2012 +0600
@@ -20,6 +20,12 @@
   #pragma pack(push, 1)
   struct FileHeader
   {
+    inline FileHeader()
+    {
+      memset(array_0000B0, 0, 28);
+      memset(array_0000CC, 0, 52);
+    }
+
     void Reset();
 
     unsigned __int8 pSignature[4];
--- a/LayingItem.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/LayingItem.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -114,6 +114,8 @@
   unsigned __int16 *pAttributes; // ecx@2
   unsigned __int16 v3; // ax@2
 
+  __debugbreak(); // find out what's going on
+
   v1 = uLayingItemID;
   pLayingItems[v1].uObjectDescID = 0;
   if ( pParty->bTurnBasedModeOn == 1 )
--- a/Monsters.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/Monsters.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -1432,7 +1432,7 @@
                                                 }
                                                 else
                                                 {
-                                                  if ( strstr((const char *)v2, off_4E8910) )
+                                                  if ( strstr((const char *)v2, "age") )
                                                   {
                                                     v44->uSpecialAttack = 21;
                                                   }
--- a/Outdoor.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/Outdoor.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -1281,8 +1281,8 @@
   int v108; // [sp+0h] [bp-B80h]@10
   char Src[968]; // [sp+10h] [bp-B70h]@110
   char Dst[968]; // [sp+3D8h] [bp-7A8h]@50
-  /*char Str[256]; // [sp+7A0h] [bp-3E0h]@50
-  char DstBuf; // [sp+8A0h] [bp-2E0h]@10
+  char Str[256]; // [sp+7A0h] [bp-3E0h]@50
+  /*char DstBuf; // [sp+8A0h] [bp-2E0h]@10
   __int32 Offset; // [sp+8A4h] [bp-2DCh]@10
   __int32 v114; // [sp+8B0h] [bp-2D0h]@10
   __int32 v115; // [sp+8BCh] [bp-2C4h]@10
@@ -2666,11 +2666,9 @@
 }
 
 //----- (0047F138) --------------------------------------------------------
-int OutdoorLocation::PrepareDecorations()
+bool OutdoorLocation::PrepareDecorations()
 {
   signed int v1; // ebx@1
-  signed int v2; // edi@3
-  LevelDecoration *v3; // esi@4
   __int16 v4; // ax@5
   int v5; // eax@7
   __int16 v6; // ax@14
@@ -2680,42 +2678,38 @@
   v8 = 0;
   if ( !_strcmpi(pCurrentMapName, "out09.odm") )
     v8 = 1;
-  v2 = 0;
-  if ( (signed int)uNumLevelDecorations > 0 )
+
+  for (uint i = 0; i < uNumLevelDecorations; ++i)
   {
-    v3 = pLevelDecorations;
-    do
-    {
-      pDecorationList->InitializeDecorationSprite(v3->uDecorationDescID);
-      v4 = pDecorationList->pDecorations[v3->uDecorationDescID].uSoundID;
+    auto decor = pLevelDecorations + i;
+
+      pDecorationList->InitializeDecorationSprite(decor->uDecorationDescID);
+      v4 = pDecorationList->pDecorations[decor->uDecorationDescID].uSoundID;
       if ( v4 && _6807E0_num_decorations_with_sounds_6807B8 < 9 )
       {
         pSoundList->_4A9A67(v4, 0);
         v5 = _6807E0_num_decorations_with_sounds_6807B8++;
-        _6807B8_level_decorations_ids[v5] = v2;
+        _6807B8_level_decorations_ids[v5] = i;
       }
-      if ( v8 && v3->uCog == 20 )
-        LOBYTE(v3->field_2) |= 0x40u;
-      if ( !v3->field_16_event_id )
+      if ( v8 && decor->uCog == 20 )
+        LOBYTE(decor->field_2) |= 0x40u;
+      if ( !decor->field_16_event_id )
       {
-        if ( v3->IsInteractive() )
+        if ( decor->IsInteractive() )
         {
           if ( v1 < 124 )
           {
-            v6 = v1++ + 75;
-            v3->field_1C = v6;
-            if ( !stru_5E4C90.field_0[v1 + 74] )
-              LOBYTE(v3->field_2) |= 0x20u;
+            v6 = v1 + 75;
+            decor->_idx_in_stru123 = v6;
+            if ( !stru_5E4C90._decor_events[v1++] )
+              LOBYTE(decor->field_2) |= 0x20u;
           }
         }
       }
-      ++v2;
-      ++v3;
-    }
-    while ( v2 < (signed int)uNumLevelDecorations );
   }
+
   pGameLoadingUI_ProgressBar->Progress();
-  return 1;
+  return true;
 }
 // 6807E0: using guessed type int _6807E0_num_decorations_6807B8;
 
--- a/Outdoor.h	Tue Nov 06 10:06:45 2012 +0600
+++ b/Outdoor.h	Tue Nov 06 10:07:35 2012 +0600
@@ -154,7 +154,7 @@
   bool _47F04C(signed int a2, signed int a3);
   bool _47F097(signed int a2, signed int a3);
   bool _47F0E2();
-  int PrepareDecorations();
+  bool PrepareDecorations();
   int _47F223_LooksLikeGenerateMonsterLoot();
   bool InitalizeActors(int a1);
   bool _47F3EA();
--- a/Player.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/Player.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -3183,7 +3183,7 @@
   else
   {
     v5 = player__getrangeddamagestring_static_buff;
-    strcpy(player__getrangeddamagestring_static_buff, off_4EE75C);
+    strcpy(player__getrangeddamagestring_static_buff, "N/A");
   }
   v8 = v1->pEquipment.uMainHand;
   if ( v8 )
--- a/Spells.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/Spells.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -50,7 +50,7 @@
   this->uFlags = 0;
   if ( v2 )
   {
-    ((OtherOverlay *)&stru_5E4C90.field_4B[20 * v2 + 105])->Reset();
+    ((OtherOverlay *)&stru_5E4C90._decor_events[20 * v2 + 105])->Reset();
     pOtherOverlayList->field_3EC = 1;
     v1->uOverlayID = 0;
   }
@@ -99,7 +99,7 @@
       v8 = (unsigned __int16)v8;
       if ( (unsigned __int16)v8 != a5 )
       {
-        ((OtherOverlay *)&stru_5E4C90.field_4B[20 * v8 + 105])->Reset();
+        ((OtherOverlay *)&stru_5E4C90._decor_events[20 * v8 + 105])->Reset();
         pOtherOverlayList->field_3EC = 1;
         v6->uOverlayID = 0;
       }
--- a/mm7_1.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_1.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -5080,7 +5080,7 @@
           if ( !v25 )
           {
             if ( v23->IsInteractive() )
-              v26 = pNPCTopics[stru_5E4C90.field_0[v24->field_1C] + 379].pTopic;
+              v26 = pNPCTopics[stru_5E4C90._decor_events[v24->_idx_in_stru123 - 75] + 379].pTopic;
             else
               v26 = pDecorationList->pDecorations[v24->uDecorationDescID].field_20;
             goto LABEL_87;
@@ -5876,7 +5876,7 @@
       {
         if ( pLevelDecorations[(signed int)(unsigned __int16)v0 >> 3].IsInteractive() )
         {
-          v15 = stru_5E4C90.field_0[v13->field_1C] + 380;
+          v15 = stru_5E4C90._decor_events[v13->_idx_in_stru123 - 75] + 380;
           _5C3420_pDecoration = &pLevelDecorations[(signed int)(unsigned __int16)v0 >> 3];
           EventProcessor(v15, 0, 1);
           _5C3420_pDecoration = 0;
--- a/mm7_2.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_2.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -1,5 +1,6 @@
 #include <io.h>
 #include <direct.h>
+#include <assert.h>
 
 #include "MapInfo.h"
 #include "Game.h"
@@ -145,7 +146,7 @@
   _this.uFrameZ = 334;
   v28 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
   v30 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[605], pParty->uFine);
+  sprintfex(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[605], pParty->uFine);
   _this.DrawText2(pFontArrus, 0, 0x104u, v30, pTmpBuf, 3u);
   if ( dword_F8B19C == 1 )
   {
@@ -206,7 +207,7 @@
       v0 = ptr_507BC0;
       if ( ptr_507BC0->field_40 == 1 )
       {
-        sprintf(pTmpBuf, "%s\n%s", pGlobalTXT_LocalizationStrings[606], pGlobalTXT_LocalizationStrings[112]);
+        sprintfex(pTmpBuf, "%s\n%s", pGlobalTXT_LocalizationStrings[606], pGlobalTXT_LocalizationStrings[112]);
         _this.DrawText2(pFontArrus, 0, 0x92u, v30, pTmpBuf, 3u);
         _this.DrawText2(pFontArrus, 0, 0xBAu, v28, (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
         v3 = pFontArrus;
@@ -257,8 +258,8 @@
     v6 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
     v7 = v5->pName;
     v8 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-    sprintf(pTmpBuf, &byte_4F0F98, v8, v7, v6);
-    sprintf(pTmpBuf2, dword_F8B1A4, pTmpBuf, 100 * v5->uLevel);
+    sprintfex(pTmpBuf, &byte_4F0F98, v8, v7, v6);
+    sprintfex(pTmpBuf2, dword_F8B1A4, pTmpBuf, 100 * v5->uLevel);
     ptr_F8B1E8 = pTmpBuf2;
     memcpy(&a1, pDialogueWindow, sizeof(a1));
     w.uFrameWidth = 458;
@@ -310,7 +311,7 @@
   _this.uFrameZ = 334;
   *(int *)v13 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
   *(int *)v14 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[25], pParty->uNumGoldInBank);
+  sprintfex(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[25], pParty->uNumGoldInBank);
   _this.DrawText2(pFontArrus, 0, 0xDCu, v14[0], pTmpBuf, 3u);
   if ( dword_F8B19C != 1 )
   {
@@ -394,7 +395,7 @@
       v11 = pGlobalTXT_LocalizationStrings[112];
       v10 = pGlobalTXT_LocalizationStrings[244];
     }
-    sprintf(pTmpBuf, "%s\n%s", v10, v11);
+    sprintfex(pTmpBuf, "%s\n%s", v10, v11);
     _this.DrawText2(pFontArrus, 0, 0x92u, v14[0], pTmpBuf, 3u);
     _this.DrawText2(pFontArrus, 0, 0xBAu, v13[0], (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
     v4 = pFontArrus;
@@ -681,7 +682,7 @@
             while ( (signed int)v10 < v8->pStartingPosActiveItem + v8->pNumPresenceButton );
             if ( v86 )
             {
-              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pOutString);
+              sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pOutString);
               v79.DrawText2(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
               pOutString = (GUIFont *)((149 - v89) / v86);
               if ( (149 - v89) / v86 > 32 )
@@ -731,7 +732,7 @@
             }
           }
           v26 = pTmpBuf;
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v85->pName, pClassNames[v85->uClass]);
+          sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v85->pName, pClassNames[v85->uClass]);
           strcat(pTmpBuf, "\n \n");
           strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
           goto LABEL_97;
@@ -770,16 +771,16 @@
     v28 = *(int *)v84;
     if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
       v28 = v81;
-    sprintf(&Dest, format_4E2DC8, v28);
-    sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[178], pOutString);
+    sprintfex(&Dest, format_4E2DC8, v28);
+    sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[178], pOutString);
     strcat(&Dest, pTmpBuf2);
     v90 = pFontArrus->CalcTextHeight(&Dest, &v79, 0, 0);
     strcat(&Dest, "\n \n");
     v29 = *(int *)v84;
     if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
       v29 = v81;
-    sprintf(&a1, format_4E2DC8, v29);
-    sprintf(pTmpBuf2,
+    sprintfex(&a1, format_4E2DC8, v29);
+    sprintfex(pTmpBuf2,
       pGlobalTXT_LocalizationStrings[86],
       //(signed __int64)p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C],
       (signed __int64)p2DEvents[(unsigned int)ptr_507BC0->ptr_1C - 1].fPriceMultiplier,
@@ -790,7 +791,7 @@
     v30 = *(int *)v84;
     if ( pDialogueWindow->pCurrentPosActiveItem != 4 )
       v30 = v81;
-    sprintf(&v77, format_4E2DC8, v30);
+    sprintfex(&v77, format_4E2DC8, v30);
     strcat(&v77, pGlobalTXT_LocalizationStrings[160]);
     v82 = pFontArrus->CalcTextHeight(&v77, &v79, 0, 0);
     strcat(&v77, "\n \n");
@@ -802,7 +803,7 @@
       v32 = *(int *)v84;
       if ( pDialogueWindow->pCurrentPosActiveItem != 5 )
         v32 = v81;
-      sprintf(&v75, format_4E2DC8, v32);
+      sprintfex(&v75, format_4E2DC8, v32);
       strcat(&v75, pGlobalTXT_LocalizationStrings[611]);
       v87 = pFontArrus->CalcTextHeight(&v75, &v79, 0, 0);
     }
@@ -816,7 +817,7 @@
     if ( !(v37 ^ __OFSUB__(v34, v35)) )
     {
 LABEL_75:
-      sprintf(pTmpBuf, "%s%s%s%s", &Dest, &a1, &v77, &v75);
+      sprintfex(pTmpBuf, "%s%s%s%s", &Dest, &a1, &v77, &v75);
       v71 = 3;
       v69 = pTmpBuf;
       v67 = 0;
@@ -952,7 +953,9 @@
         v7 = v6 + 2 * v2 - 30;
         v2 = (signed int)v0->ptr_1C;
         v4 = word_4F0498[5 * v7];
-        v5 = *(short *)&aTooManyStation[2 * (5 * (v6 + 2 * v2) + rand() % 4) + 10];
+        __debugbreak();
+        //things happen around word_4F0400 actually
+        //v5 = *(short *)&aTooManyStation[2 * (5 * (v6 + 2 * v2) + rand() % 4) + 10];
         goto LABEL_13;
       }
       if ( v2 <= 41 )
@@ -1215,7 +1218,7 @@
           if ( !v109 )
           {
 LABEL_105:
-            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->uClass]);
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->uClass]);
             strcat(pTmpBuf, "\n \n");
             strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
             v7 = pTmpBuf;
@@ -1227,7 +1230,7 @@
             v77 = &v101;
             goto LABEL_15;
           }
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v108);
+          sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v108);
           v101.DrawText2(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
           v108 = (149 - v106.y) / (signed int)v109;
           if ( (149 - v106.y) / (signed int)v109 > 32 )
@@ -1954,7 +1957,7 @@
           while ( (signed int)v6 < v2->pNumPresenceButton + v2->pStartingPosActiveItem );
           if ( v114 )
           {
-            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v111);
+            sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v111);
             v104.DrawText2(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
             v111 = (const char **)((signed int)(149 - v112) / v114);
             if ( (signed int)(149 - v112) / v114 > 32 )
@@ -2004,7 +2007,7 @@
             return result;
           }
         }
-        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->uClass]);
+        sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->uClass]);
         strcat(pTmpBuf, "\n \n");
         strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
         v21 = pTmpBuf;
@@ -2548,7 +2551,7 @@
         while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem );
         if ( v153 )
         {
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this);
+          sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this);
           v144.DrawText2(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
           _this = (Player *)((149 - v152) / v153);
           if ( (149 - v152) / v153 > 32 )
@@ -2597,7 +2600,7 @@
           return;
         }
       }
-      sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->uClass]);
+      sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->uClass]);
       strcat(pTmpBuf, "\n \n");
       strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
       v11 = 0;
@@ -3838,7 +3841,7 @@
   dword_F8B19C = v55;
   if ( v3 < 19 )
   {
-    v9 = pIcons_LOD->LoadTexture((&off_4F03B8)[4 * v3], TEXTURE_16BIT_PALETTE);
+    v9 = pIcons_LOD->LoadTexture(off_4F03B8[v3], TEXTURE_16BIT_PALETTE);
     v3 = dword_F8B198;
     dword_F8B164 = &pIcons_LOD->pTextures[v9];
 LABEL_13:
@@ -5154,7 +5157,7 @@
   {
     v4 = pClassNames[(unsigned __int8)v3[17]];
     v5 = ((Player *)(v3 - 168))->GetBaseLevel();
-    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[129], i, v5, v4);
+    sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[129], i, v5, v4);
     pWindow.DrawText2(
       pFont,
       1u,
@@ -5181,10 +5184,10 @@
   v9 = pGlobalTXT_LocalizationStrings[245];
   if ( v14 != 1 )
     v9 = pGlobalTXT_LocalizationStrings[132];
-  sprintf(pTmpBuf2, " %lu %s, %lu %s, %lu %s ", v14, v9, v18, v8, v17, v7);
+  sprintfex(pTmpBuf2, " %lu %s, %lu %s, %lu %s ", v14, v9, v18, v8, v17, v7);
   strcat(pTmpBuf, pTmpBuf2);
   pWindow.DrawText2(pFont, 1u, pWindow.uFrameHeight - 2 * LOBYTE(pFont->uFontHeight) - 5, 1u, pTmpBuf, 3u);
-  sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[94], v23);
+  sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[94], v23);
   pWindow.DrawText2(pFont, 1u, pWindow.uFrameHeight, 1u, pTmpBuf, 3u);
   BYTE1(dword_6BE364_game_settings_1) |= 0x40u;
   pRenderer->EndScene();
@@ -7501,11 +7504,11 @@
 
 
 //----- (0044F57C) --------------------------------------------------------
-void *__fastcall SpawnEncounter(MapInfo *pMapInfo, SpawnPointMM7 *a2, int a3, int a4, int a5)
-{
-  MapInfo *v5; // esi@1
-  SpawnPointMM7 *v6; // ebx@1
-  void *result; // eax@2
+void SpawnEncounter(MapInfo *pMapInfo, SpawnPointMM7 *spawn, int a3, int a4, int a5)
+{
+  //MapInfo *v5; // esi@1
+  //SpawnPointMM7 *v6; // ebx@1
+  int v7; // eax@2
   char v8; // zf@5
   int v9; // edi@9
   int v10; // eax@9
@@ -7540,123 +7543,139 @@
   int v39; // edi@52
   std::string v40; // [sp-18h] [bp-100h]@60
   void *v41; // [sp-14h] [bp-FCh]@50
-  void *v42; // [sp-10h] [bp-F8h]@50
-  size_t v43; // [sp-Ch] [bp-F4h]@50
+  //void *v42; // [sp-10h] [bp-F8h]@50
+  //size_t v43; // [sp-Ch] [bp-F4h]@50
   const char *v44; // [sp-8h] [bp-F0h]@13
   char *v45; // [sp-4h] [bp-ECh]@9
-  char Str; // [sp+Ch] [bp-DCh]@60
-  char Str2; // [sp+2Ch] [bp-BCh]@29
+  char Str[32]; // [sp+Ch] [bp-DCh]@60
+  char Str2[120]; // [sp+2Ch] [bp-BCh]@29
   unsigned int uFaceID; // [sp+A4h] [bp-44h]@52
-  void *Src; // [sp+A8h] [bp-40h]@50
+  MonsterInfo *Src; // [sp+A8h] [bp-40h]@50
   int v50; // [sp+ACh] [bp-3Ch]@47
-  char Source; // [sp+B0h] [bp-38h]@20
+  char Source[32]; // [sp+B0h] [bp-38h]@20
   int v52; // [sp+D0h] [bp-18h]@34
-  void *v53; // [sp+D4h] [bp-14h]@34
+  int v53; // [sp+D4h] [bp-14h]@34
   int v54; // [sp+D8h] [bp-10h]@32
   int v55; // [sp+DCh] [bp-Ch]@32
   int v56; // [sp+E0h] [bp-8h]@8
   int v57; // [sp+E4h] [bp-4h]@1
 
+  //auto a2 = spawn;
+
   v57 = 0;
-  v5 = pMapInfo;
-  v6 = a2;
+  //v5 = pMapInfo;
+  //v6 = spawn;
   if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
-    result = (void *)pOutdoor->ddm.field_C_alert;
-  else
-    result = (void *)(uCurrentlyLoadedLevelType == LEVEL_Outdoor ? pIndoor->dlv.field_C_alert : 0);
-  if ( result )
-  {
-    v8 = (a2->uAttributes & 1) == 0;
-  }
-  else
-  {
-    result = (void *)(a2->uAttributes & 1);
-    v8 = (char)result == 1;
-  }
-  if ( !v8 )
-  {
-    result = (void *)(a2->uIndex - 1);
-    v56 = 1;
-    switch ( (int)result )
-    {
-      case 0u:
+    v7 = pOutdoor->ddm.field_C_alert;
+  else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor)
+    v7 = pIndoor->dlv.field_C_alert;
+  else
+    v7 = 0;
+
+  if (v7)
+    v8 = (spawn->uAttributes & 1) == 0;
+  else
+    v8 = (spawn->uAttributes & 1) == 1;
+
+  if (v8)
+    return;
+
+    //result = (void *)(spawn->uIndex - 1);
+  v56 = 1;
+  switch (spawn->uIndex - 1)
+  {
+    case 0u:
         v9 = pMapInfo->uEncounterMonster1AtLeast;
         v10 = rand();
-        v11 = v5->uEncounterMonster1AtMost;
-        v45 = v5->pEncounterMonster1Texture;
-        v12 = v10 % (v11 - v9 + 1);
-        v13 = v5->field_34;
-        goto LABEL_20;
-      case 3u:
+        v11 = pMapInfo->uEncounterMonster1AtMost;
         v45 = pMapInfo->pEncounterMonster1Texture;
-        goto LABEL_13;
-      case 4u:
-        v45 = pMapInfo->pEncounterMonster2Texture;
-        goto LABEL_13;
-      case 5u:
-        v45 = pMapInfo->pEncounterMonster3Texture;
-LABEL_13:
+        v12 = v10 % (v11 - v9 + 1);
+        v13 = pMapInfo->field_34;
+        goto LABEL_20;
+
+    case 3u:
+        v45 = pMapInfo->pEncounterMonster1Texture;
         v44 = "%s A";
         goto LABEL_25;
-      case 1u:
+
+    case 4u:
+        v45 = pMapInfo->pEncounterMonster2Texture;
+        v44 = "%s A";
+        goto LABEL_25;
+
+    case 5u:
+        v45 = pMapInfo->pEncounterMonster3Texture;
+        v44 = "%s A";
+        goto LABEL_25;
+
+    case 1u:
         v9 = pMapInfo->uEncounterMonster2AtLeast;
         v14 = rand();
-        v15 = v5->uEncounterMonster2AtMost;
-        v45 = v5->pEncounterMonster2Texture;
+        v15 = pMapInfo->uEncounterMonster2AtMost;
+        v45 = pMapInfo->pEncounterMonster2Texture;
         v12 = v14 % (v15 - v9 + 1);
-        v13 = v5->field_37;
+        v13 = pMapInfo->field_37;
         goto LABEL_20;
-      case 6u:
+
+    case 6u:
         v45 = pMapInfo->pEncounterMonster1Texture;
-        goto LABEL_18;
-      case 7u:
-        v45 = pMapInfo->pEncounterMonster2Texture;
-        goto LABEL_18;
-      case 8u:
-        v45 = pMapInfo->pEncounterMonster3Texture;
-LABEL_18:
         v44 = "%s B";
         goto LABEL_25;
-      case 2u:
+
+    case 7u:
+        v45 = pMapInfo->pEncounterMonster2Texture;
+        v44 = "%s B";
+        goto LABEL_25;
+
+    case 8u:
+        v45 = pMapInfo->pEncounterMonster3Texture;
+        v44 = "%s B";
+        goto LABEL_25;
+
+    case 2u:
         v9 = pMapInfo->uEncounterMonster3AtLeast;
         v16 = rand();
-        v17 = v5->uEncounterMonster3AtMost;
-        v45 = v5->pEncounterMonster3Texture;
+        v17 = pMapInfo->uEncounterMonster3AtMost;
+        v45 = pMapInfo->pEncounterMonster3Texture;
         v12 = v16 % (v17 - v9 + 1);
-        v13 = v5->field_3A;
+        v13 = pMapInfo->field_3A;
 LABEL_20:
         v57 = v13;
         v56 = v9 + v12;
-        result = strcpy(&Source, v45);
+        strcpy(Source, v45);
         goto LABEL_26;
-      case 9u:
+
+    case 9u:
         v45 = pMapInfo->pEncounterMonster1Texture;
-        goto LABEL_24;
-      case 0xAu:
+        v44 = "%s C";
+        goto LABEL_25;
+
+    case 0xAu:
         v45 = pMapInfo->pEncounterMonster2Texture;
-        goto LABEL_24;
-      case 0xBu:
+        v44 = "%s C";
+        goto LABEL_25;
+
+    case 0xBu:
         v45 = pMapInfo->pEncounterMonster3Texture;
-LABEL_24:
         v44 = "%s C";
 LABEL_25:
-        result = (void *)sprintf(&Source, v44, v45);
+        sprintf(Source, v44, v45);
 LABEL_26:
-        if ( Source == 48 )
-          return result;
+        if (Source[0] == '0')
+          return;
+
         v57 += a3;
         if ( v57 > 4 )
           v57 = 4;
-        strcpy(&Str2, &Source);
+        strcpy(Str2, Source);
         if ( a4 )
           v56 = a4;
         v18 = v56;
-        result = (void *)(v56 + uNumActors);
         if ( (signed int)(v56 + uNumActors) >= 500 )
-          return result;
-        v19 = v6->vPosition.x;
-        v20 = v6->vPosition.y;
-        v21 = v6->vPosition.z;
+          return;
+        v19 = spawn->vPosition.x;
+        v20 = spawn->vPosition.y;
+        v21 = spawn->vPosition.z;
         v54 = 0;
         v55 = v19;
         a4 = v20;
@@ -7664,16 +7683,16 @@
         if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
           v54 = pIndoor->GetSector(v19, v20, v21);
         v53 = 0;
-        result = (void *)((((uCurrentlyLoadedLevelType != LEVEL_Outdoor) - 1) & 0x40) + 64);
         v52 = (((uCurrentlyLoadedLevelType != LEVEL_Outdoor) - 1) & 0x40) + 64;
         if ( v18 <= 0 )
-          return result;
+          return;
         break;
       default:
-        return result;
-    }
-    do
-    {
+        return;
+  }
+
+  for (uint i = v53; i < v56; ++i)
+  {
       v22 = &pActors[uNumActors];
       pActors[uNumActors].Reset();
       if ( v57 )
@@ -7692,47 +7711,48 @@
         }
         if ( v24 == 1 )
         {
-          v45 = &Source;
+          v45 = Source;
           v44 = "%s A";
         }
         else
         {
           if ( v24 == 2 )
           {
-            v45 = &Source;
+            v45 = Source;
             v44 = "%s B";
           }
           else
           {
             if ( v24 != 3 )
               goto LABEL_58;
-            v45 = &Source;
+            v45 = Source;
             v44 = "%s C";
           }
         }
-        sprintf(&Str2, v44, v45);
-      }
-      v26 = pMonsterList->GetMonsterByName(&Str2);
+        sprintf(Str2, v44, v45);
+      }
+      v26 = pMonsterList->GetMonsterByName(Str2);
       v50 = (signed __int16)v26;
-      v45 = &Str2;
+      v45 = Str2;
       if ( (signed __int16)v26 == -1 )
       {
-        sprintf(&Str, "Can't create random monster: '%s'! See MapStats.txt and Monsters.txt!", v45);
-        MessageBoxA(nullptr, &Str, nullptr, 0);
+        sprintfex(Str, "Can't create random monster: '%s'! See MapStats.txt and Monsters.txt!", v45);
+        MessageBoxA(nullptr, Str, nullptr, 0);
         ExitProcess(0);
       }
       v27 = &pMonsterList->pMonsters[(signed __int16)v26];
       v28 = pMonsterStats->_4563FF(v45);
       if ( !v28 )
         v28 = 1;
-      Src = (char *)&pMonsterStats + 88 * v28;
-      strcpy(v22->pActorName, *(const char **)Src);
-      v43 = 88;
-      v42 = Src;
-      v29 = *((short *)Src + 32);
+      Src = &pMonsterStats->pInfos[v28];
+      strcpy(v22->pActorName, Src->pName);
+      //v43 = 88;
+      //v42 = Src;
+      v29 = Src->uHP;
       v41 = &v22->pMonsterInfo;
       v22->sCurrentHP = v29;
-      memcpy(v41, v42, v43);
+      assert(sizeof(MonsterInfo) == 88);
+      memcpy(v41, Src, sizeof(MonsterInfo));
       v22->word_000086_some_monster_id = v50 + 1;
       v22->uActorRadius = v27->uMonsterRadius;
       v22->uActorHeight = v27->uMonsterHeight;
@@ -7748,7 +7768,7 @@
       v22->vInitialPosition.z = a3;
       v22->vPosition.z = a3;
       v22->uSectorID = v54;
-      v22->uGroup = v6->uGroup;
+      v22->uGroup = spawn->uGroup;
       v22->PrepareSprites((char)v45);
       v22->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly;
       v32 = rand();
@@ -7756,13 +7776,13 @@
       v34 = stru_5C6E00->SinCos(v32 % 2048);
       a4 = v34;
       a3 = (unsigned __int64)(v34 * (signed __int64)v52) >> 16;
-      v55 = a3 + v6->vPosition.x;
+      v55 = a3 + spawn->vPosition.x;
       v35 = stru_5C6E00->SinCos(v33 - stru_5C6E00->uIntegerHalfPi);
       a4 = v35;
       a3 = (unsigned __int64)(v35 * (signed __int64)v52) >> 16;
-      a4 = a3 + v6->vPosition.y;
-      v36 = v6->vPosition.z;
-      a3 = v6->vPosition.z;
+      a4 = a3 + spawn->vPosition.y;
+      v36 = spawn->vPosition.z;
+      a3 = spawn->vPosition.z;
       if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
         goto LABEL_55;
       v37 = pIndoor->GetSector(v55, a4, v36);
@@ -7784,12 +7804,11 @@
         }
       }
 LABEL_58:
-      v53 = (char *)v53 + 1;
-      result = v53;
-    }
-    while ( (signed int)v53 < v56 );
-  }
-  return result;
+      ;
+      //v53 = (char *)v53 + 1;
+      //result = v53;
+    }
+    //while ( (signed int)v53 < v56 );
 }
 
 
@@ -7955,6 +7974,8 @@
   int v33; // [sp+80h] [bp-8h]@1
   int v34; // [sp+84h] [bp-4h]@1
 
+  __debugbreak();
+
   auto a1 = this;
 
   v2 = a1;
@@ -8619,39 +8640,27 @@
 }
 
 //----- (00450AAA) --------------------------------------------------------
-void *__cdecl RespawnGlobalDecorations()
-{
-  signed int v0; // edi@1
-  void *result; // eax@1
-  signed int v2; // ebx@1
-  LevelDecoration *v3; // esi@2
-
-  v0 = 0;
-  result = memset(stru_5E4C90.field_4B, 0, 0x7Du);
-  v2 = 0;
-  if ( (signed int)uNumLevelDecorations > 0 )
-  {
-    v3 = pLevelDecorations;
-    do
-    {
-      if ( !v3->field_16_event_id )
-      {
-        result = (void *)v3->IsInteractive();
-        if ( result )
-        {
-          if ( v0 < 124 )
-          {
-            v3->field_1C = v0 + 75;
-            stru_5E4C90.field_4B[v0++] = v3->GetGlobalEvent();
-          }
-        }
-      }
-      ++v2;
-      ++v3;
-    }
-    while ( v2 < (signed int)uNumLevelDecorations );
-  }
-  return result;
+void RespawnGlobalDecorations()
+{
+  memset(stru_5E4C90._decor_events, 0, 125);
+
+  uint decorEventIdx = 0;
+  for (uint i = 0; i < uNumLevelDecorations; ++i)
+  {
+    auto decor = pLevelDecorations + i;
+
+    if (!decor->field_16_event_id)
+    {
+      if (decor->IsInteractive())
+      {
+        if (decorEventIdx < 124)
+        {
+          decor->_idx_in_stru123 = decorEventIdx + 75;
+          stru_5E4C90._decor_events[decorEventIdx++] = decor->GetGlobalEvent();
+        }
+      }
+    }
+  }
 }
 
 //----- (00450B0A) --------------------------------------------------------
@@ -10288,7 +10297,7 @@
                             v7 = 44;
                             goto LABEL_71;
                           }
-                          if ( !_strcmpi(*(const char **)(v2 + 4), off_4E876C) )
+                          if ( !_strcmpi(*(const char **)(v2 + 4), "Ice") )
                           {
                             v7 = 26;
                             goto LABEL_71;
@@ -10330,7 +10339,7 @@
                                     }
                                     if ( _strcmpi(*(const char **)(v2 + 4), "Hammerhands") )
                                     {
-                                      sprintf(pTmpBuf, "Unknown monster spell %s", *(int *)(v2 + 4));
+                                      sprintfex(pTmpBuf, "Unknown monster spell %s", *(int *)(v2 + 4));
                                       MessageBoxA(nullptr, pTmpBuf, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Itemdata.cpp:1562", 0);
                                       result = 0;
                                       goto LABEL_76;
@@ -10541,7 +10550,7 @@
     {
       if ( _strcmpi(v1, "FIRE") )
       {
-        if ( _strcmpi(v1, off_4E887C) )
+        if ( _strcmpi(v1, "AIR") )
         {
           if ( _strcmpi(v1, "WATER") )
           {
@@ -10933,7 +10942,7 @@
         for ( j = 0; j < v41.field_0; ++j )
         {
           v27 = v41.pProperties[j];
-          if ( _strcmpi(v41.pProperties[j], off_4E8CB8) )
+          if ( _strcmpi(v41.pProperties[j], "NBM") )
           {
             if ( _strcmpi(v27, "Invisible") )
             {
@@ -11717,33 +11726,29 @@
 //----- (0046086A) --------------------------------------------------------
 bool Autosave()
 {
-  int flag; // esi@3
-  //int i; // eax@4
-  //int v2; // edx@5
+  int v0; // esi@3
+  int v1; // eax@4
+  int v2; // edx@5
   FILE *v3; // eax@7
   LOD::FileHeader this_; // [sp+Ch] [bp-16Ch]@3
   LOD::Directory pDir; // [sp+10Ch] [bp-6Ch]@4
   LOD::Directory v7; // [sp+12Ch] [bp-4Ch]@9
   LOD::Directory a3; // [sp+14Ch] [bp-2Ch]@3
-  //unsigned int v9; // [sp+16Ch] [bp-Ch]@5
+  unsigned int v9; // [sp+16Ch] [bp-Ch]@5
   void *pSave; // [sp+170h] [bp-8h]@3
   unsigned int v11; // [sp+174h] [bp-4h]@5
 
   if ( pVideoPlayer->AnyMovieLoaded() )
     pVideoPlayer->Unload();
-  flag = 0;
+  v0 = 0;
   pSave = pAllocator->AllocNamedChunk(0, 0xF4240, 0);
   pNew_LOD->CloseWriteFile();
   remove("data\\new.lod");
   this_.Reset();
-  strcpy(this_.LodVersion, "MMVII");
-  strcpy(this_.LodDescription, "newmaps for MMVII");
+  strcpy(this_.array_000004, "MMVII");
+  strcpy(this_.array_000054, "newmaps for MMVII");
   this_.dword_0000A4 = 100;
   this_.dword_0000A8 = 0;
-  a3.pFilename[0] = 0;
-  a3.uOfsetFromSubindicesStart = 0;
-  a3.uDataSize = 0;
-  a3.uNumSubIndices = 0;
   a3.dword_000018 = 0;
   a3.word_00001E = 0;
   strcpy(a3.pFilename, "current");
@@ -11753,12 +11758,25 @@
     pNew_LOD->CreateTempFile();
     pNew_LOD->uNumSubIndices = 0;
     pDir.Reset();
-	for (int i =  pGames_LOD->uNumSubIndices / 2; i < pGames_LOD->uNumSubIndices; ++i)
-    {
-     memcpy(&pDir, (char *)&pGames_LOD->pSubIndices[i], sizeof(pDir));
-     v3 = pGames_LOD->FindContainer((const char *)&pGames_LOD->pSubIndices[i], 1);
-     fread(pSave, pGames_LOD->pSubIndices[i].uDataSize, 1u, v3);
-     pNew_LOD->AppendDirectory(&pDir, pSave);
+    v1 = (signed int)pGames_LOD->uNumSubIndices / 2;
+    if ( (signed int)pGames_LOD->uNumSubIndices / 2 < (signed int)pGames_LOD->uNumSubIndices )
+    {
+      v2 = 32 * v1;
+      v11 = 32 * v1;
+      v9 = pGames_LOD->uNumSubIndices - v1;
+      while ( 1 )
+      {
+        memcpy(&pDir, (char *)pGames_LOD->pSubIndices + v2, sizeof(pDir));
+        v3 = pGames_LOD->FindContainer((const char *)pGames_LOD->pSubIndices + v2, 1);
+        fread(pSave, pGames_LOD->pSubIndices[v11 / 0x20].uDataSize, 1u, v3);
+        pNew_LOD->AppendDirectory(&pDir, pSave);
+        v11 += 32;
+        --v9;
+        if ( !v9 )
+          break;
+        v2 = v11;
+      }
+      v0 = 0;
     }
     v7.Reset();
     strcpy(pSavegameHeader->pLocationName, "out01.odm");
@@ -11766,22 +11784,22 @@
     v7.uDataSize = 100;
     pNew_LOD->AppendDirectory(&v7, &pSavegameHeader);
     pNew_LOD->Save();
-    pParty->vPrevPosition.y = flag;
+    pParty->vPrevPosition.y = v0;
     pParty->vPrevPosition.x = 12552;
     pParty->vPosition.x = 12552;
-    pParty->vPosition.z = flag;
-    pParty->uFallStartY = flag;
-    pParty->sPrevRotationX = flag;
-    pParty->sRotationX = flag;
+    pParty->vPosition.z = v0;
+    pParty->uFallStartY = v0;
+    pParty->sPrevRotationX = v0;
+    pParty->sRotationX = v0;
     pParty->vPrevPosition.z = 1816;
     pParty->vPosition.y = 1816;
-    flag = 1;
+    v0 = 1;
     pParty->sPrevRotationY = 512;
     pParty->sRotationY = 512;
     SaveGame(1, (__int16 *)1);
   }
   pAllocator->FreeChunk(pSave);
-  return flag;
+  return v0;
 }
 
 
@@ -13520,7 +13538,7 @@
   v4 = hdc * BytesPerSector * SectorsPerCluster;
   if ( (unsigned int)v4 < 0x1E00000 )
   {
-    sprintf(
+    sprintfex(
       pTmpBuf,
       "Due to Window Virtual Memory requirements Might and Magic VII\nrequires 30MB of free hard drive space to operate properly.\n\nAvailable on Current Drive = %luk",
       (unsigned int)v4 / 1024i64);
@@ -14005,7 +14023,7 @@
     v11 = 1;
     do
     {
-      sprintf(pTmpBuf, "data\\lloyd%d%d.pcx", v10, v11);
+      sprintfex(pTmpBuf, "data\\lloyd%d%d.pcx", v10, v11);
       remove(pTmpBuf);
       ++v11;
     }
@@ -14288,7 +14306,7 @@
   unsigned int v9; // [sp+184h] [bp-4h]@28
 
   //_getcwd(v5, 120);
-  //sprintf(pIniFilename, "%s\\mm6.ini", v5);
+  //sprintfex(pIniFilename, "%s\\mm6.ini", v5);
   viewparams = new ViewingParams;
   viewparams->uScreenX = GetPrivateProfileIntW(L"screen", L"vx1", 8, pIniFilename);
   viewparams->uScreenY = GetPrivateProfileIntW(L"screen", L"vy1", 8, pIniFilename);
@@ -14960,7 +14978,7 @@
             }
           }
 LABEL_174:
-          sprintf(&Src, "Unknown DirectDraw/Direct3D error number %X", v4);
+          sprintfex(&Src, "Unknown DirectDraw/Direct3D error number %X", v4);
           v13 = strlen(&Src);
           v12 = &Src;
           goto LABEL_175;
@@ -15153,7 +15171,7 @@
   a1.uFrameW = a1.uFrameHeight + a1.uFrameY - 1;
   v1 = pItemsTable->pItems[(unsigned int)ptr_507BC4->ptr_1C + 700].pName;
   v2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  sprintf(pTmpBuf, format_4E2D80, v2, v1);
+  sprintfex(pTmpBuf, format_4E2D80, v2, v1);
   a1.DrawText2(pFontCreate, 0, 0, 0, pTmpBuf, 3u);
   return a1.DrawText(
            pFontSmallnum,
@@ -15849,7 +15867,7 @@
         if ( pParty->pPickedItem.uItemID )
           return 1;
         v24 = (int)pItemsTable->pItems[v20].pUnidentifiedName;
-        sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[471], v24);
+        sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[471], v24);
         ShowStatusBarString(pTmpBuf2, 2u);
         if ( v19->uItemID == 506 )
           _449B7E_toggle_bit(pParty->_award_bits, 184, 1u);
@@ -15915,9 +15933,9 @@
       {
         if ( !pLevelDecorations[a1 >> 3].IsInteractive() )
           return 1;
-        v10 = v8->field_1C;
+        v10 = v8->_idx_in_stru123;
         v24 = 1;
-        v11 = stru_5E4C90.field_0[v10] + 380;
+        v11 = stru_5E4C90._decor_events[v10 - 75] + 380;
         _5C3420_pDecoration = v8;
         EventProcessor(v11, 0, 1);
         _5C3420_pDecoration = 0;
@@ -16387,7 +16405,7 @@
     goto LABEL_36;
   }
   if ( v25->IsInteractive() )
-    v24 = pNPCTopics[stru_5E4C90.field_0[v26->field_1C] + 379].pTopic;
+    v24 = pNPCTopics[stru_5E4C90._decor_events[v26->_idx_in_stru123 - 75] + 379].pTopic;
   else
     v24 = pDecorationList->pDecorations[v26->uDecorationDescID].field_20;
 LABEL_51:
--- a/mm7_3.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_3.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -2443,7 +2443,7 @@
     pParty->bFlying = 0;
     __debugbreak();
     if (pParty->FlyActive())
-      stru_5E4C90.field_4B[20 * pParty->pPartyBuffs[7].uOverlayID + 119] |= 1u;// 005E4D58 pOtherOverlayList [negindexing]
+      stru_5E4C90._decor_events[20 * pParty->pPartyBuffs[7].uOverlayID + 119] |= 1u;// 005E4D58 pOtherOverlayList [negindexing]
   }
   if ( v80 == -30000 )
   {
@@ -3162,7 +3162,7 @@
   {
     LOBYTE(pParty->uFlags) &= 0x7Fu;
     bWaterWalk = 1;
-    *(short *)&stru_5E4C90.field_4B[20 * pParty->pPartyBuffs[18].uOverlayID + 119] |= 1u;
+    *(short *)&stru_5E4C90._decor_events[20 * pParty->pPartyBuffs[18].uOverlayID + 119] |= 1u;
     if ( !(pParty->pPartyBuffs[18].uFlags & 1)
       && *(int *)&pParty->pArtifactsFound[6972 * pParty->pPartyBuffs[18].uCaster + 10] <= 0 )
       bWaterWalk = 0;
@@ -3553,7 +3553,7 @@
         v123 = v113;
       if ( SHIDWORD(pParty->pPartyBuffs[7].uExpireTime) >= 0
         && (SHIDWORD(pParty->pPartyBuffs[7].uExpireTime) > 0 || LODWORD(pParty->pPartyBuffs[7].uExpireTime)) )
-        stru_5E4C90.field_4B[20 * pParty->pPartyBuffs[7].uOverlayID + 119] &= 0xFEu;
+        stru_5E4C90._decor_events[20 * pParty->pPartyBuffs[7].uOverlayID + 119] &= 0xFEu;
       pParty->uFallStartY = v123;
       goto LABEL_141;
     }
@@ -3568,7 +3568,7 @@
   v113 = v123;
   if ( SHIDWORD(pParty->pPartyBuffs[7].uExpireTime) >= 0
     && (SHIDWORD(pParty->pPartyBuffs[7].uExpireTime) > 0 || LODWORD(pParty->pPartyBuffs[7].uExpireTime)) )
-    stru_5E4C90.field_4B[20 * pParty->pPartyBuffs[7].uOverlayID + 119] |= 1u;
+    stru_5E4C90._decor_events[20 * pParty->pPartyBuffs[7].uOverlayID + 119] |= 1u;
 LABEL_141:
   v32 = 0;
   if ( bJumping && !pParty->bFlying )
@@ -4052,7 +4052,7 @@
     {
       LOBYTE(pParty->uFlags) &= 0x7Fu;
       v79 = 20 * pParty->pPartyBuffs[18].uOverlayID + 6180178;
-      *(short *)&stru_5E4C90.field_4B[20 * pParty->pPartyBuffs[18].uOverlayID + 119] |= 1u;
+      *(short *)&stru_5E4C90._decor_events[20 * pParty->pPartyBuffs[18].uOverlayID + 119] |= 1u;
       if ( !v122 || !v69 )
       {
         if ( !v76 )
@@ -8313,15 +8313,15 @@
   int v2; // ebx@3
   unsigned int v3; // eax@3
   MapInfo *v4; // edi@4
-  int v5; // eax@8
-  SpawnPointMM7 *v6; // edx@14
+  //int v5; // eax@8
+  //SpawnPointMM7 *v6; // edx@14
   size_t v7; // eax@19
   char *v8; // eax@19
   char *v9; // eax@21
   char Source[120]; // [sp+Ch] [bp-84h]@19
   const char *pFilename; // [sp+84h] [bp-Ch]@1
-  unsigned int v12; // [sp+88h] [bp-8h]@12
-  int v13; // [sp+8Ch] [bp-4h]@11
+  //unsigned int v12; // [sp+88h] [bp-8h]@12
+  //int v13; // [sp+8Ch] [bp-4h]@11
 
   pFilename = pLevelFilename;
   thisa->AllocSoftwareDrawBuffers();
@@ -8352,32 +8352,33 @@
     (int)&thisa);
   if ( !(BYTE1(dword_6BE364_game_settings_1) & 0x20) )
   {
-    UpdateActors();
-    UpdateLayingItems();
+    InitializeActors();
+    InitializeLayingItems();
   }
   BYTE1(dword_6BE364_game_settings_1) &= 0xDFu;
-  v5 = 0;
+  //v5 = 0;
   if ( !v2 )
     thisa = 0;
   if ( thisa == (OutdoorCamera *)1 )
   {
-    v13 = 0;
-    if ( (signed int)pOutdoor->uNumSpawnPoints > 0 )
-    {
-      v12 = 0;
-      while ( 1 )
-      {
-        v6 = &pOutdoor->pSpawnPoints[v12 / 0x18];
-        if ( pOutdoor->pSpawnPoints[v12 / 0x18].uKind == 3 )
-          SpawnEncounter(v4, v6, v5, v5, v5);
-        else
-          v4->SpawnRandomTreasure(v6);
-        ++v13;
-        v12 += 24;
-        if ( v13 >= (signed int)pOutdoor->uNumSpawnPoints )
-          break;
-        v5 = 0;
-      }
+    //v13 = 0;
+    for (uint i = 0; i < pOutdoor->uNumSpawnPoints; ++i)
+    {
+      //v12 = 0;
+      //while ( 1 )
+      //{
+      auto spawn = pOutdoor->pSpawnPoints + i;
+        //v6 = &pOutdoor->pSpawnPoints[v12 / 0x18];
+      if (spawn->uKind == 3 )
+        SpawnEncounter(v4, spawn, 0, 0, 0);
+      else
+        v4->SpawnRandomTreasure(spawn);
+        //++v13;
+        //v12 += 24;
+        //if ( v13 >= (signed int)pOutdoor->uNumSpawnPoints )
+        //  break;
+        //v5 = 0;
+      //}
     }
     RespawnGlobalDecorations();
   }
@@ -12906,8 +12907,6 @@
 //----- (0043F9E1) --------------------------------------------------------
 void stru170_stru2::_43F9E1(__int16 x, int y, __int16 z, int w)
 {
-  __debugbreak();
-
   _viewport_space_y = y;
   _viewport_space_w = w;
 
@@ -17271,12 +17270,12 @@
             v25 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8);
             if ( v25 )
             {
-              stru_5E4C90.field_0[_5C3420_pDecoration->field_1C] = _evt->v5 - 124;
+              stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = _evt->v5 - 124;
             }
             else
             {
               v26 = _5C3420_pDecoration;
-              stru_5E4C90.field_0[_5C3420_pDecoration->field_1C] = 0;
+              stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = 0;
               LOBYTE(v26->field_2) |= 0x20u;
             }
             goto LABEL_291;
--- a/mm7_4.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_4.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -3357,7 +3357,7 @@
 
   v1 = uHoursToSleep;
   if ( uHoursToSleep > 240 )
-    UpdateActors();
+    InitializeActors();
   v2 = (double)(7680 * v1) * 0.033333335;
   pParty->uTimePlayed += (signed __int64)v2;
   v3 = &pPlayers[1];
@@ -5387,6 +5387,7 @@
   int uX; // [sp+160h] [bp-10h]@18
   unsigned int v133; // [sp+164h] [bp-Ch]@25
   int v134; // [sp+168h] [bp-8h]@14
+  char *Str; // [sp+16Ch] [bp-4h]@18
   Player *pPlayer;
   const char *pSkillName;
 
@@ -5474,6 +5475,8 @@
   v119 = 6 * v6 + 169;
   do
   {
+    Str = pPlayer->pName;
+
     pGUIWindow_CurrentMenu->DrawText(
       pFontCreate,
       v134 + 73,
--- a/mm7_5.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_5.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -2229,7 +2229,7 @@
                     v66 = stru_4ECBB8[uMessageParam].rot_x;
                     _5B65B4_npcdata_loword_house_or_other = stru_4ECBB8[uMessageParam].rot_y;
                     _5B65B8_npcdata_hiword_house_or_other = v66;
-                    UpdateActors();
+                    InitializeActors();
                   }
                   v67 = pGUIWindow_CurrentMenu->Hint;
                   if ( v67 )
@@ -11721,18 +11721,13 @@
 
 
 //----- (00408768) --------------------------------------------------------
-char __cdecl UpdateActors()
-{
-  unsigned int v0; // edi@1
-  __int16 v1; // ax@7
-  char *v2; // esi@10
-  char v3; // zf@13
+void InitializeActors()
+{
   signed int v5; // [sp+Ch] [bp-10h]@1
   signed int v6; // [sp+10h] [bp-Ch]@1
   signed int v7; // [sp+14h] [bp-8h]@1
   signed int v8; // [sp+18h] [bp-4h]@1
 
-  v0 = 0;
   v8 = 0;
   v6 = 0;
   v7 = 0;
@@ -11741,65 +11736,48 @@
     v8 = 1;
   if ( !_strcmpi(pCurrentMapName, "d26.blv") )
     v6 = 1;
-  if ( (unsigned __int16)_449B57_test_bit(pParty->_award_bits, 99) )
+  if (_449B57_test_bit(pParty->_award_bits, 99))
     v7 = 1;
-  v1 = _449B57_test_bit(pParty->_award_bits, 100);
-  if ( v1 )
+  if (_449B57_test_bit(pParty->_award_bits, 100))
     v5 = 1;
-  if ( (signed int)uNumActors > 0 )
-  {
-    v2 = (char *)&pActors[0].vPosition;
-    do
-    {
-      if ( ((Actor *)(v2 - 142))->CanAct() || *((short *)v2 + 17) == 19 )
-      {
-        v3 = *((short *)v2 + 17) == 19;
-        *(short *)v2 = *((short *)v2 + 10);
-        *((short *)v2 + 1) = *((short *)v2 + 11);
-        *((short *)v2 + 2) = *((short *)v2 + 12);
-        *((short *)v2 - 51) = *((short *)v2 - 17);
-        if ( !v3 )
-          Actor::_403EB6(v0, dword_4F6E08[v0], *(int *)(v2 - 18), 0);
-      }
-      *(v2 - 81) = 0;
-      LOBYTE(v1) = 0;
-      if ( !v8 || v7 )
-      {
-        if ( !v6 || v5 )
-        {
-          LOBYTE(v1) = ((Actor *)(v2 - 142))->_438B9B();
-          if ( (char)v1 )
-            *(v2 - 104) &= 0xF7u;
-        }
-      }
-      *(v2 - 104) &= 0x7Fu;
-      if ( *(v2 - 104) & 0x40 )
-        LOBYTE(v1) = Actor::_4031C1_update_job(v0, pParty->uCurrentHour, 1);
-      ++v0;
-      v2 += 836;
-    }
-    while ( (signed int)v0 < (signed int)uNumActors );
-  }
-  return v1;
+  for (uint i = 0; i < uNumActors; ++i)
+  {
+    auto actor = pActors + i;
+
+    if (actor->CanAct() || actor->uAIState == Disabled)
+    {
+      actor->vPosition.x = actor->vInitialPosition.x;
+      actor->vPosition.y = actor->vInitialPosition.y;
+      actor->vPosition.z = actor->vInitialPosition.z;
+      actor->sCurrentHP = actor->pMonsterInfo.uHP;
+      if (actor->uAIState != Disabled)
+        Actor::_403EB6(i, dword_4F6E08[i], actor->pMonsterInfo.uRecoveryTime, 0);
+    }
+
+    actor->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly;
+
+    if (!v8 || v7)
+      if (!v6 || v5)
+        if (actor->_438B9B())
+          BYTE2(actor->uAttributes) &= 0xF7u;
+
+    BYTE2(actor->uAttributes) &= 0x7Fu;
+    if (BYTE2(actor->uAttributes) & 0x40)
+        Actor::_4031C1_update_job(i, pParty->uCurrentHour, 1);
+  }
 }
 
 //----- (00408896) --------------------------------------------------------
-void UpdateLayingItems()
-{
-  unsigned int v0; // edi@1
-  char *v1; // esi@1
-  char *result; // eax@7
-
-  v0 = 0;
-  v1 = (char *)&pLayingItems[0].uObjectDescID;
-  do
-  {
-    if ( *(short *)v1 && (v1[24] & 8 || pObjectList->pObjects[*(short *)v1].uFlags & 0x10) )
-      LayingItem::_42F933(v0);
-    v1 += 112;
-    ++v0;
-  }
-  while ( (signed int)v1 < (signed int)((char *)&pObjectList->uNumObjects + 2) );
+void InitializeLayingItems()
+{
+  for (uint i = 0; i < uNumLayingItems; ++i)
+  {
+    auto item = pLayingItems + i;
+
+    if (item->uItemType &&
+        (item->uSoundID & 8 || pObjectList->pObjects[item->uItemType].uFlags & 0x10))
+      LayingItem::_42F933(i);
+  }
 
   for (uint i = 0; i < 100; ++i)
     array_5118E8.pElements[i].field_C_time_left = 0;
--- a/mm7_6.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_6.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -6499,7 +6499,7 @@
             if ( v447->IsInteractive() )
             {
               _5C3420_pDecoration = v447;
-              EventProcessor(stru_5E4C90.field_0[v447->field_1C] + 380, 0, 1);
+              EventProcessor(stru_5E4C90._decor_events[v447->_idx_in_stru123 - 75] + 380, 0, 1);
               _5C3420_pDecoration = (LevelDecoration *)v1;
             }
           }
--- a/mm7_data.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_data.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -803,7 +803,7 @@
 char aUndefinedCobje[777]; // idb
 char aEWorkMsdevMm_7[777]; // idb
 char aGammaControlNo[777]; // idb
-__int16 word_4E8152[11];
+__int16 word_4E8152[11] = {0, 0, 0, 90, 8, 2, 70, 20, 10, 50, 30};
 char byte_4E8168[116];
 char aD3dTextureName[777]; // idb
 char aLogd3d_txt[777]; // idb
@@ -821,324 +821,6 @@
 };
 stru355 stru_4E82A4 = {0x20, 0x41, 0, 0x20, 0xFF0000, 0xFF00, 0xFF, 0xFF000000};
 stru355 stru_4EFCBC = {0x20, 0x41, 0, 0x10, 0x7C00, 0x3E0, 0x1F, 0x8000};
-char aGlobal_txt[777]; // idb
-char aMagic[777]; // idb
-char aDark_0[777]; // idb
-char aLight_1[777]; // idb
-char aBody_0[777]; // idb
-char aMind_1[777]; // idb
-char aSpirit_1[777]; // idb
-char aEarth_0[777]; // idb
-char aWater_0[777]; // idb
-char aFire_1[777]; // idb
-char aSpells_txt[777]; // idb
-char aParsingError[777]; // idb
-char aErrorParsingPo[777]; // idb
-char Text[777]; // idb
-char Caption[777]; // idb
-char asc_4E8530[777]; // idb
-char a222[777]; // idb
-char asc_4E8538[777]; // idb
-char aPotion_txt[777]; // idb
-char aErrorParsing_0[777]; // idb
-char aPotnotes_txt[777]; // idb
-char aHistory_txt[777]; // idb
-char aPsychotic[777]; // idb
-char aDizzy[777]; // idb
-char aDrugged[777]; // idb
-char aUnderwater[777]; // idb
-char aSewerpipe[777]; // idb
-char aParkinglot[777]; // idb
-char aPlain[777]; // idb
-char aQuarry[777]; // idb
-char aMountains[777]; // idb
-char aCity[777]; // idb
-char aForest[777]; // idb
-char aAlley[777]; // idb
-char aStonecorridor[777]; // idb
-char aHallway[777]; // idb
-char aCarpetedhallwa[777]; // idb
-char aHangar[777]; // idb
-char aArena[777]; // idb
-char aCave[777]; // idb
-char aConcerthall[777]; // idb
-char aAuditorium[777]; // idb
-char aStoneroom[777]; // idb
-char aLivingroom[777]; // idb
-char aBathroom[777]; // idb
-char aRoom[777]; // idb
-char aPaddedcell[777]; // idb
-char aGeneric[777]; // idb
-char aMapstats_txt[777]; // idb
-char aHostile_txt[777]; // idb
-char aEWorkMsdevMm_9[777]; // idb
-char aUnknownMonster[777]; // idb
-char aHammerhands[777]; // idb
-char aPsychic[777]; // idb
-char aBlades[777]; // idb
-char aMind[777]; // idb
-char aHarm[777]; // idb
-char aFate[777]; // idb
-char aSummon[777]; // idb
-char aReanimate[777]; // idb
-char aDragon[777]; // idb
-char aBless[777]; // idb
-char aAcid[777]; // idb
-char off_4E876C[777]; // idb
-char aMass[777]; // idb
-char aRock[777]; // idb
-char aFire[777]; // idb
-char aIncinerate[777]; // idb
-char aFireball[777]; // idb
-char aParalyze[777]; // idb
-char aShrapmetal[777]; // idb
-char aToxic[777]; // idb
-char aLight[777]; // idb
-char aSparks[777]; // idb
-char aPain[777]; // idb
-char aHeroism[777]; // idb
-char aHaste[777]; // idb
-char aStone[777]; // idb
-char aImplosion[777]; // idb
-char aLightning[777]; // idb
-char aMeteor[777]; // idb
-char aPower[777]; // idb
-char aSpirit[777]; // idb
-char aShield[777]; // idb
-char aHour[777]; // idb
-char aDay[777]; // idb
-char aDispel[777]; // idb
-char aEner[777]; // idb
-char aDark[777]; // idb
-char aLight_0[777]; // idb
-char aBody[777]; // idb
-char aMind_0[777]; // idb
-char aSpirit_0[777]; // idb
-char aEarth[777]; // idb
-char aWater[777]; // idb
-char off_4E887C[777]; // idb
-char aFire_0[777]; // idb
-char aArrowf[777]; // idb
-char aArrow[777]; // idb
-char aPlacemon_txt[777]; // idb
-char aExplode[777]; // idb
-char aGround[777]; // idb
-char aCanTCreateRa_0[777]; // idb
-char asc_4E88E8[777]; // idb
-char aSummon_0[777]; // idb
-char aShot[777]; // idb
-char aG[777]; // idb
-char aM[777]; // idb
-char aE_0[2]; // weak
-char aDrainsp[777]; // idb
-char off_4E8910[777]; // idb
-char aSteal[777]; // idb
-char aBrkweapon[777]; // idb
-char aBrkarmor[777]; // idb
-char aBrkitem[777]; // idb
-char aErrad[777]; // idb
-char aStone_0[777]; // idb
-char aDead[777]; // idb
-char aUncon[777]; // idb
-char aParalyze_0[777]; // idb
-char aDisease3[777]; // idb
-char aDisease2[777]; // idb
-char aDisease1[777]; // idb
-char aPoison3[777]; // idb
-char aPoison2[777]; // idb
-char aPoison1[777]; // idb
-char aInsane[777]; // idb
-char aDrunk[777]; // idb
-char aAfraid[777]; // idb
-char aAsleep[777]; // idb
-char SubStr[777]; // idb
-char aCurse[6]; // weak
-char aN[777]; // idb
-char aGem[777]; // idb
-char aScroll[777]; // idb
-char aWand[777]; // idb
-char aAmulet[777]; // idb
-char aRing[777]; // idb
-char aBoots[777]; // idb
-char aGauntlets[777]; // idb
-char aCape[777]; // idb
-char aBelt[777]; // idb
-char aHelm[777]; // idb
-char aShield_0[777]; // idb
-char aPlate[777]; // idb
-char aChain[777]; // idb
-char aStaff[777]; // idb
-char aClub[777]; // idb
-char aMace[777]; // idb
-char aBow[777]; // idb
-char aSpear[777]; // idb
-char aAxe[777]; // idb
-char aDagger[777]; // idb
-char aSword[777]; // idb
-char aMisc[777]; // idb
-char aArmor[777]; // idb
-char aWeapon[777]; // idb
-char aMonsters_txt[777]; // idb
-char aNewitemgen[777]; // idb
-char aClass_txt[777]; // idb
-char aStats_txt[777]; // idb
-char aSkilldes_txt[777]; // idb
-char aRnditems_txt[777]; // idb
-char aSpecial[777]; // idb
-char aRelic[777]; // idb
-char aArtifact[777]; // idb
-char aClub_0[777]; // idb
-char aPlate_0[777]; // idb
-char aChain_0[777]; // idb
-char aLeather_0[777]; // idb
-char aBlaster[777]; // idb
-char aMace_0[777]; // idb
-char aSpear_0[777]; // idb
-char aAxe_0[777]; // idb
-char aDagger_0[777]; // idb
-char aSword_0[777]; // idb
-char aStaff_0[777]; // idb
-char aGem_0[777]; // idb
-char aGold[777]; // idb
-char aMscroll[777]; // idb
-char aSscroll[777]; // idb
-char aBottle[777]; // idb
-char aReagent[777]; // idb
-char aHerb[777]; // idb
-char aWeaponw[777]; // idb
-char aAmulet_0[777]; // idb
-char aRing_0[777]; // idb
-char aBoots_0[777]; // idb
-char aGauntlets_0[777]; // idb
-char aCloak[777]; // idb
-char aBelt_0[777]; // idb
-char aHelm_0[777]; // idb
-char aShield_1[777]; // idb
-char aArmor_0[777]; // idb
-char aBow_0[777]; // idb
-char aMissile[777]; // idb
-char aWeapon1or2[777]; // idb
-char aWeapon2[777]; // idb
-char aWeapon_0[777]; // idb
-char aItems_txt[777]; // idb
-char aSpcitems_txt[777]; // idb
-char aStditems_txt[777]; // idb
-char aUnableToSaveDd[777]; // idb
-char aDataDdeclist_b[777]; // idb
-char aDecDescrip[777]; // idb
-char aDusk[777]; // idb
-char aDawn[777]; // idb
-char aEmitfire[777]; // idb
-char aLoopslow[777]; // idb
-char aMarker[777]; // idb
-char aFf[777]; // idb
-char aFm[3]; // idb
-char aFs[3]; // idb
-char aInvisible[777]; // idb
-char off_4E8CB8[777]; // idb
-char aDecorationde_0[777]; // idb
-char aDecorationdesc[777]; // idb
-char aUnableToSaveDc[777]; // idb
-char aDataDchest_bin[777]; // idb
-char aChestDescrip[777]; // idb
-char aChestdescrip_0[777]; // idb
-char aChestdescripti[777]; // idb
-char aUnableToSave_0[777]; // idb
-char aDataDoverlay_b[777]; // idb
-char aOvlDes_[777]; // idb
-char aTransparent[777]; // idb
-char aCenter[7]; // weak
-char aOverlaydescrip[777]; // idb
-char aObjectdescript[777]; // idb
-char aUnableToSaveDo[777]; // idb
-char aDataDobjlist_b[777]; // idb
-char aObjDescrip[777]; // idb
-char aLines[777]; // idb
-char aBounce[777]; // idb
-char aFlagonintercep[777]; // idb
-char aNogravity[777]; // idb
-char aNopickup[777]; // idb
-char aFtlifetime[777]; // idb
-char aLifetime[777]; // idb
-char aNodraw[777]; // idb
-char aObjectdescri_0[777]; // idb
-char aBits[777]; // idb
-char aUnableToSaveDm[777]; // idb
-char aDataDmonlist_b[777]; // idb
-char aMonRace[777]; // idb
-char aMonsterracel_0[777]; // idb
-char aMonsterracelis[777]; // idb
-char a__10[777]; // idb
-char aKey_stepright[777]; // idb
-char aKey_stepleft[777]; // idb
-char aKey_alwaysrun[777]; // idb
-char aKey_land[777]; // idb
-char aKey_flydown[777]; // idb
-char aKey_flyup[777]; // idb
-char aKey_zoomout[777]; // idb
-char aKey_zoomin[777]; // idb
-char aKey_centerview[777]; // idb
-char aKey_lookdown[777]; // idb
-char aKey_lookup[777]; // idb
-char aKey_mapbook[777]; // idb
-char aKey_autonotes[777]; // idb
-char aKey_timecal[777]; // idb
-char aKey_rest[777]; // idb
-char aKey_quickref[777]; // idb
-char aKey_quest[777]; // idb
-char aKey_charcycle[777]; // idb
-char aKey_pass[777]; // idb
-char aKey_cast[777]; // idb
-char aKey_eventtrigg[777]; // idb
-char aKey_combat[777]; // idb
-char aKey_jump[777]; // idb
-char aKey_yell[777]; // idb
-char aKey_castready[777]; // idb
-char aKey_attack[777]; // idb
-char aKey_right[777]; // idb
-char aKey_left[777]; // idb
-char aKey_backward[777]; // idb
-char pKeyName[777]; // idb
-char aDefault[777]; // idb
-char aControl[777]; // idb
-char aBackspace[777]; // idb
-char aBackslash[777]; // idb
-char aSquote[777]; // idb
-char aSlash[777]; // idb
-char aPeriod[777]; // idb
-char aSemicolon[777]; // idb
-char aDecimal[777]; // idb
-char aComma[777]; // idb
-char aInsert[777]; // idb
-char aHome[777]; // idb
-char aDelete[777]; // idb
-char aEnd[777]; // idb
-char aAdd[777]; // idb
-char aSubtract[777]; // idb
-char aTab[777]; // idb
-char aPage_up[777]; // idb
-char aPage_down[777]; // idb
-char aSpace[777]; // idb
-char aReturn[777]; // idb
-char aDown[777]; // idb
-char aUp[777]; // idb
-char asc_4E925C[777]; // idb
-char aCouldNotInitia[49]; // weak
-char aInvalidDi_keyb[777]; // idb
-char aEWorkMsdevM_10[45]; // weak
-char aInvalidDi_ke_0[777]; // idb
-char aInvalidDi_ke_1[777]; // idb
-char aUknownKeyDetec[777]; // idb
-char aEffpar03[777]; // idb
-char aErrorFailedToB[777]; // idb
-char aErrorFailedToG[777]; // idb
-char aEWorkMsdevM_11[777]; // idb
-char aLightpolyBuild[777]; // idb
-char aUndefinedClipF[30]; // weak
-char aInvalidLightTy[777]; // idb
-char aInvalidLight_0[777]; // idb
-char aUknownStripTyp[777]; // idb
-char aInvalidLightma[777]; // idb
 char byte_4E94D0 = 5; // weak
 char byte_4E94D1 = 9; // weak
 char _4E94D2_light_type = 6; // weak
@@ -1147,369 +829,7 @@
 unsigned int saveload_dlg_ys[2] = {60, 0};
 unsigned int saveload_dlg_zs[2] = {460, 640};
 unsigned int saveload_dlg_ws[2] = {344, 480};
-char aEWorkMsdevM_12[777]; // idb
-char a___0[777]; // idb
-char aSave03d_mm7[777]; // idb
-char Name[777]; // idb
-char aAr_dn_dn_0[777]; // idb
-char aAr_up_dn_0[777]; // idb
-char aLs_saved[777]; // idb
-char aLs_loadd[777]; // idb
-char aX_d[777]; // idb
-char aImage_pcx[777]; // idb
-char aHeader_bin[777]; // idb
-char aSavesS[777]; // idb
-char aX_u[777]; // idb
-char aLs_saveu[777]; // idb
-char aLs_loadu[777]; // idb
-char aSave_up[777]; // idb
-char aLoad_up[777]; // idb
-char aLoadsave[777]; // idb
-char a1_mm7[6]; // weak
-char aUnableToFindS[777]; // idb
-char aLevelsS[777]; // idb
-char aNpcgroup_bin[777]; // idb
-char aNpcdata_bin[777]; // idb
-char aOverlay_bin[777]; // idb
-char aClock_bin[777]; // idb
-char aParty_bin[777]; // idb
-char ExistingFileName[777]; // idb
-char NewFileName[777]; // idb
-char aSS_2[777]; // idb
-char aSavesSave03d_m[777]; // idb
-char aSD02dSDSD[777]; // idb
-char aLevellod[777]; // idb
-char aLevelsSS[777]; // idb
-char a_lod[5]; // weak
-char aDataGames_lod[777]; // idb
-char Default[777]; // idb
-char aCurrent[777]; // idb
-char aNewmapsForMmvi[777]; // idb
-char aMmvii[777]; // idb
-char aOutOfMemoryLoa[777]; // idb
-char aAttemptToOpenN[777]; // idb
-char aFileSIsNotABlv[777]; // idb
-char aD23_blv[777]; // idb
-char aEventTrigger[777]; // idb
-char aLodapp_tmp[777]; // idb
-char aWb[777]; // idb
-char aLod_tmp[777]; // idb
-char aLodIndex[777]; // idb
-char aLod[777]; // idb
-char aLodCarray[777]; // idb
-char aRb_0[777]; // idb
-char aLodio[777]; // idb
-char aAttemptToRes_0[777]; // idb
-char aLodsub[777]; // idb
-char aAttemptToReset[777]; // idb
-char aMm6[777]; // idb
-char aLodchapterpage[777]; // idb
-char aLODFile[777]; // idb
-char aChapter[777]; // idb
-char aUnableToAppend[777]; // idb
-char aIndoorBlvFiles[26]; // weak
 int dword_4E98BC_bApplicationActive; // weak
-char aBlv[777]; // idb
-char aMightAndMagico[41]; // weak
-char aLevels[7]; // weak
-char aLsave640_pcx[13]; // weak
-char aTitle_exit[777]; // idb
-char aTitle_cred[777]; // idb
-char aTitle_load[777]; // idb
-char aTitle_new[777]; // idb
-char a___1[777]; // idb
-char aRanOnce[777]; // idb
-char aNoanim[777]; // idb
-char aNosound[777]; // idb
-char aWindow[777]; // idb
-char aUsedefs[777]; // idb
-char ClassName[777]; // idb
-char aOut02_odm[10]; // weak
-char aYouMustBeRunni[777]; // idb
-char aDebugFlags[777]; // idb
-char aWindowY[777]; // idb
-char aWindowX[777]; // idb
-char aStartinwindow[777]; // idb
-char aD10_blv[777]; // idb
-char aD11_blv[777]; // idb
-char a1_0[777]; // idb
-char aMightAndMagicV[777]; // idb
-char aNewWorldComput[777]; // idb
-char SubKey[777]; // idb
-char aCloseCd[777]; // idb
-char aInfoCdUpcWait[777]; // idb
-char aOpenCTypeCdaud[777]; // idb
-char aXAnimsMagic7_v[20]; // weak
-char aAbbrechen[777]; // idb
-char aBitteCd2VonMig[777]; // idb
-char aBitteCd2Einleg[777]; // idb
-char aCancelar[9]; // weak
-char aPorFavorInse_0[777]; // idb
-char aPorFavorInsert[777]; // idb
-char aSupprimer[10]; // weak
-char aInssrezMightMa[777]; // idb
-char aInssrezLeCd2[777]; // idb
-char aAnnulla[8]; // weak
-char aInserireIlSe_0[777]; // idb
-char aInserireIlSeco[777]; // idb
-char aOdwolaj[8]; // weak
-char aWlozCdRomNum_0[777]; // idb
-char String[777]; // idb
-char TemplateName[777]; // idb
-char ValueName[777]; // idb
-char a2dacceloff[777]; // idb
-char aDsounds_bin[777]; // idb
-char aDoverlay_bin[777]; // idb
-char aDchest_bin[777]; // idb
-char aDmonlist_bin[777]; // idb
-char aDobjlist_bin[777]; // idb
-char aDdeclist_bin[777]; // idb
-char aDift_bin[777]; // idb
-char aDpft_bin[777]; // idb
-char aDtile_bin[777]; // idb
-char aDtft_bin[777]; // idb
-char aDsft_bin[777]; // idb
-char aUnableToOpenSo[777]; // idb
-char aDataSounds_def[777]; // idb
-char aUnableToOpenOv[777]; // idb
-char aDataOverlay_de[777]; // idb
-char aUnableToOpenCh[777]; // idb
-char aDataChest_def[777]; // idb
-char aUnableToOpenPf[777]; // idb
-char Args[777]; // idb
-char aUnableToOpenTi[777]; // idb
-char aDataTile_def[777]; // idb
-char aUnableToOpenTf[777]; // idb
-char aDataTft_def[777]; // idb
-char aUnableToOpenIf[777]; // idb
-char aDataIft_txt[777]; // idb
-char aUnableToOpenMo[777]; // idb
-char aDataMonlist_tx[777]; // idb
-char aUnableToOpenOb[777]; // idb
-char aDataObjlist_tx[777]; // idb
-char aUnableToOpenDe[777]; // idb
-char aDataDeclist_tx[777]; // idb
-char aUnableToOpenSf[777]; // idb
-char aDataSft_txt[777]; // idb
-char aDataSprites_lo[777]; // idb
-char aDataSpritelo_l[18]; // weak
-char aResolution[777]; // idb
-char aRegistry[777]; // idb
-char aDataBitmaps_lo[777]; // idb
-char aDataEvents_lod[777]; // idb
-char aSomeFilesAreMi[42]; // weak
-char aFilesMissing[14]; // weak
-char pFilename[777]; // idb
-char AppName[777]; // idb
-char KeyName[777]; // idb
-char aUnableToAllo_0[31]; // weak
-char aUnableToAlloca[31]; // weak
-char aMoreRamMemoryR[25]; // weak
-char WindowName[777]; // idb
-char IconName[777]; // idb
-char aMoreHardDriveS[31]; // weak
-char aDueToWindowVir[777]; // idb
-char PathName[777]; // idb
-char aHdwtr03u[777]; // idb
-char aHeight[777]; // idb
-char aEyelevel[777]; // idb
-char aParty[777]; // idb
-char aBuilding_sub_0[777]; // idb
-char aBuilding_subdi[777]; // idb
-char aTerrain_subd_0[777]; // idb
-char aTerrain_subdiv[777]; // idb
-char aTexmapping[777]; // idb
-char aRecmod2[777]; // idb
-char aRecmod1[777]; // idb
-char aDefault_0[777]; // idb
-char aDirt[777]; // idb
-char aTextures[777]; // idb
-char off_4EA208[777]; // idb
-char aPlansky1[777]; // idb
-char aDist_mist[777]; // idb
-char aDist_shademist[777]; // idb
-char aDist_shade[777]; // idb
-char aShading[777]; // idb
-char aBld_mm3[777]; // idb
-char aBld_mm2[777]; // idb
-char aBld_mm1[777]; // idb
-char aTer_mm3[777]; // idb
-char aTer_mm2[777]; // idb
-char aTer_mm1[777]; // idb
-char aMipmapping[777]; // idb
-char aBld_gamma[777]; // idb
-char aTer_gamma[777]; // idb
-char aGridband3[777]; // idb
-char aGridband2[777]; // idb
-char aGridband1[777]; // idb
-char aNowavywater[777]; // idb
-char aRender[777]; // idb
-char aNodecorations[777]; // idb
-char aNosky[777]; // idb
-char aNomist[777]; // idb
-char aRgbnightbott_1[777]; // idb
-char aRgbnightbott_0[777]; // idb
-char aRgbnightbottom[777]; // idb
-char aRgbnighttop_b[777]; // idb
-char aRgbnighttop_g[777]; // idb
-char aRgbnighttop_r[777]; // idb
-char aRgbdaybottom_b[777]; // idb
-char aRgbdaybottom_g[777]; // idb
-char aRgbdaybottom_r[777]; // idb
-char aRgbdaytop_b[777]; // idb
-char aRgbdaytop_g[777]; // idb
-char aRgbdaytop_r[777]; // idb
-char aOutdoor[777]; // idb
-char aFile[777]; // idb
-char aStartmap[777]; // idb
-char aWalkspeed[777]; // idb
-char aNodecoration[777]; // idb
-char aNodamage[777]; // idb
-char aShowfr[777]; // idb
-char aNomonster[777]; // idb
-char aDebug[777]; // idb
-char aNologo[777]; // idb
-char aNowalksound[777]; // idb
-char aNosound_0[777]; // idb
-char aNointro[777]; // idb
-char aMixerchannels[777]; // idb
-char aVy2[777]; // idb
-char aVx2[777]; // idb
-char aVy1[777]; // idb
-char aVx1[777]; // idb
-char aScreen[777]; // idb
-char aMakeme_pcx[11]; // weak
-char aError[777]; // idb
-char aFatalException[777]; // idb
-char aDirectDrawErro[777]; // idb
-char aUnknownDirectd[777]; // idb
-char aDderr_devicedo[29]; // weak
-char aDderr_videonot[21]; // weak
-char aDderr_expired[14]; // weak
-char aDderr_moredata[15]; // weak
-char aDderr_notpagel[20]; // weak
-char aDderr_cantpa_0[21]; // weak
-char aDderr_cantpage[19]; // weak
-char aDderr_nononloc[23]; // weak
-char aDderr_dcalread[23]; // weak
-char aDderr_nofocusw[20]; // weak
-char aDderr_notloade[16]; // weak
-char aDderr_nooptimi[19]; // weak
-char aDderr_invali_3[25]; // weak
-char aDderr_nomipmap[17]; // weak
-char aDderr_unsupp_2[22]; // weak
-char aDderr_notpalet[20]; // weak
-char aDderr_implicit[24]; // weak
-char aDderr_wrongmod[16]; // weak
-char aDderr_nodc[11]; // weak
-char aDderr_cantcrea[19]; // weak
-char aDderr_cantdupl[20]; // weak
-char aDderr_notflipp[19]; // weak
-char aDderr_exclusiv[30]; // weak
-char aDderr_notaover[25]; // weak
-char aDderr_invali_2[22]; // weak
-char aDderr_noover_0[20]; // weak
-char aDderr_overlayn[24]; // weak
-char aDderr_noddrops[17]; // weak
-char aDderr_noblthw[14]; // weak
-char aDderr_bltfastc[22]; // weak
-char aDderr_nopale_0[18]; // weak
-char aDderr_nopalett[24]; // weak
-char aDderr_hwndalre[21]; // weak
-char aDderr_hwndsubc[21]; // weak
-char aDderr_nohwnd[13]; // weak
-char aDderr_noclippe[24]; // weak
-char aDderr_clipperi[25]; // weak
-char aDderr_regionto[21]; // weak
-char aDderr_noemulat[18]; // weak
-char aDderr_primarys[34]; // weak
-char aDderr_nodire_0[21]; // weak
-char aDderr_directdr[31]; // weak
-char aDderr_invalidd[28]; // weak
-char aDderr_xalign[13]; // weak
-char aDderr_wasstill[22]; // weak
-char aDderr_vertical[30]; // weak
-char aDderr_invalids[20]; // weak
-char aDderr_unsupp_1[22]; // weak
-char aDderr_unsupp_0[24]; // weak
-char aDderr_toobigwi[18]; // weak
-char aDderr_toobigsi[17]; // weak
-char aDderr_toobighe[19]; // weak
-char aDderr_surfacen[25]; // weak
-char aDderr_colorkey[21]; // weak
-char aDderr_surfac_0[29]; // weak
-char aDderr_surfacea[30]; // weak
-char aDderr_cantlock[22]; // weak
-char aDderr_surfacei[24]; // weak
-char aDderr_paletteb[18]; // weak
-char aDderr_nozbuffe[18]; // weak
-char aDderr_nozoverl[19]; // weak
-char aDderr_outofcap[16]; // weak
-char aDderr_outofvid[23]; // weak
-char aDderr_overla_0[22]; // weak
-char aDderr_overlayc[35]; // weak
-char aDderr_novsynch[16]; // weak
-char aDderr_norotati[19]; // weak
-char aDderr_nostretc[18]; // weak
-char aDderr_not4bi_0[19]; // weak
-char aDderr_not4bitc[24]; // weak
-char aDderr_not8bitc[19]; // weak
-char aDderr_notextur[18]; // weak
-char aDderr_noraster[19]; // weak
-char aDderr_nofliphw[15]; // weak
-char aDderr_nogdi[12]; // weak
-char aDderr_nomirror[17]; // weak
-char aDderr_notfound[15]; // weak
-char aDderr_nooverla[18]; // weak
-char aDderr_overlapp[23]; // weak
-char aDderr_noexclus[22]; // weak
-char aDderr_noclipli[17]; // weak
-char aDderr_nocolorc[20]; // weak
-char aDderr_nocooper[28]; // weak
-char aDderr_nocolo_0[17]; // weak
-char aDderr_nocolork[19]; // weak
-char aDderr_nodirect[26]; // weak
-char aDderr_noalphah[16]; // weak
-char aDderr_invalidm[18]; // weak
-char aDderr_invalido[20]; // weak
-char aDderr_invali_1[25]; // weak
-char aDderr_lockedsu[21]; // weak
-char aDderr_no3d[11]; // weak
-char aDderr_invali_0[22]; // weak
-char aDderr_cannotde[26]; // weak
-char aDderr_currentl[24]; // weak
-char aDderr_exceptio[16]; // weak
-char aDderr_heightal[18]; // weak
-char aDderr_incompat[26]; // weak
-char aDderr_invalidc[18]; // weak
-char aDderr_cannotat[26]; // weak
-char aDderr_unsuppor[18]; // weak
-char aDderr_generic[14]; // weak
-char aDderr_notiniti[21]; // weak
-char aDderr_outofmem[18]; // weak
-char aDderr_invalidp[20]; // weak
-char Str[777]; // idb
-char aDirectInputErr[777]; // idb
-char aUnknownDirectI[777]; // idb
-char aAtLineNumber[777]; // idb
-char aInFile[777]; // idb
-char aTooManyMobileL[777]; // idb
-char aEWorkMsdevM_13[48]; // weak
-char aUSS[777]; // idb
-char aUS[777]; // idb
-char aMicon3[777]; // idb
-char aTarget[777]; // idb
-char CursorName[777]; // idb
-char aWarningInvalid[777]; // idb
-char aEWorkMsdevM_14[37]; // weak
-char aMicon1_0[777]; // idb
-char aCouldNotInit_0[40]; // weak
-char aEWorkMsdevM_15[777]; // idb
-char aCouldNotLoadAs[777]; // idb
-char aDi_mousePointe[777]; // idb
-char aDi_mousePoin_0[777]; // idb
-char aCouldNotClipCu[777]; // idb
-char aDoorErrorDoorI[777]; // idb
 char *off_4EB080; // idb
 char *pTransitionStrings[464];
 char aAwards_txt[777]; // idb
@@ -1768,122 +1088,20 @@
   47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 60
 };
 
-char aDD[777]; // idb
-char off_4EE75C[777]; // idb
 int dword_4EED78; // weak
 _UNKNOWN unk_4EED80; // weak
 int dword_4EFA80; // weak
 int dword_4EFA84; // weak
-char aDataD3dsprite_[777]; // idb
-char aDataD3dbitmap_[777]; // idb
-char aDetailLevel[777]; // idb
-char aD3dDevice[777]; // idb
-char aUseD3d[777]; // idb
-char aEWorkMsdevM_22[777]; // idb
-char aScreen0_2i_pcx[777]; // idb
-char aZBuf_[777]; // idb
-char aThereArenTAnyD[777]; // idb
-char aDirect3dRend_1[777]; // idb
-char aDirect3dRend_0[777]; // idb
-char aDirect3dRender[777]; // idb
-char aD3drendInitFai[777]; // idb
-char aThereArenTAn_0[777]; // idb
-char aErrorExecuting[777]; // idb
-char aEWorkMsdevM_23[777]; // idb
-char aHiscreen16Load[777]; // idb
 void *off_4EFDB0; // weak
-char aEWorkMsdevM_24[777]; // idb
-char aEffpar02[777]; // idb
-char aSp18h1[7]; // weak
-char aSpell75[777]; // idb
-char aSpell73[777]; // idb
-char aSpell71[777]; // idb
-char aSpell69[777]; // idb
-char aSpell58[777]; // idb
-char aSpell55[777]; // idb
-char aSpell51[777]; // idb
-char aSpell46[777]; // idb
-char aSpell38[777]; // idb
-char aSpell36[777]; // idb
-char aSpell25[777]; // idb
-char aSpell17[777]; // idb
-char aSpell14[777]; // idb
-char aSpell05[777]; // idb
-char aSpell03[777]; // idb
-char aSpheal3[777]; // idb
-char aSpheal2[777]; // idb
-char aSpheal1[777]; // idb
-char aSpboost3[777]; // idb
-char aSpboost2[777]; // idb
-char aSpboost1[777]; // idb
-char aZapp[777]; // idb
-char aSpell84[777]; // idb
-char aEWorkMsdevM_25[777]; // idb
-char aSpell97c[777]; // idb
-char aSpell97[777]; // idb
-char aSpell93[777]; // idb
-char aSpell92[777]; // idb
-char aSpell90[777]; // idb
-char aSpell76[777]; // idb
-char aSpell70[777]; // idb
-char aSpell66[777]; // idb
-char aSpell65[777]; // idb
-char aSpell62[777]; // idb
-char aSpell57c[777]; // idb
-char aSpell41[777]; // idb
-char aSpell39c[777]; // idb
-char aSpell39[777]; // idb
-char aSpell29[777]; // idb
-char aSpell26[777]; // idb
-char aSpell22[777]; // idb
-char aSpell18[777]; // idb
-char aSpell09[777]; // idb
-char aSpell02[777]; // idb
-char aSpell01[777]; // idb
-char aSp57c[777]; // idb
-char aInvalidMovieRe[777]; // idb
-char aEnd_seq1[9]; // weak
-char aLosegame[9]; // weak
-char aIntroPost[11]; // weak
-char aIntro[6]; // weak
-char aJvc[4]; // weak
-char aNewWorldLogo[15]; // weak
-char a3dologo[8]; // weak
-char aNoMovie[777]; // idb
-char aEWorkMsdevM_26[777]; // idb
-char aCanTLoadSoundF[777]; // idb
-char aEWorkMsdevM_27[777]; // idb
-char aSoundSIsSizeIB[777]; // idb
-char aUnableToSave_2[777]; // idb
-char aDataDsounds_bi[777]; // idb
-char aSndDes_[777]; // idb
-char a3d[777]; // idb
-char aLock[777]; // idb
-char aSwap[777]; // idb
-char aSystem[777]; // idb
-char aSoundlistcla_0[777]; // idb
-char aSoundlistclass[777]; // idb
-char aSoundFileError[777]; // idb
-char aCanTOpenFileS[777]; // idb
-char aSoundsAudio_sn[777]; // idb
-char aDisable3dsound[777]; // idb
-char aEaxEnvironment[26]; // weak
-char a3dsoundprovide[777]; // idb
-char aNone[777]; // idb
-char aEmulated[777]; // idb
-char aDevice[777]; // idb
-char aSplashscreen[777]; // idb
-char aSplashaudio[777]; // idb
-char aSoftwareAureal[777]; // idb
-char aEaxDamping[12]; // weak
-char aEaxEffectVolum[18]; // weak
-char aMaximumSupport[26]; // weak
 int dword_4F031C[777]; // weak
-char aSprites08[777]; // idb
-char aHardsprites[777]; // idb
-char aTooManyStation[777]; // idb
-char aEWorkMsdevM_28[52]; // weak
-char *off_4F03B8; // idb
+const char *off_4F03B8[] =
+{
+  "",         "WEPNTABL", "ARMORY",   "MAGSHELF",
+  "MAGSHELF", "MAGSHELF", "MAGSHELF", "MAGSHELF",
+  "MAGSHELF", "MAGSHELF", "MAGSHELF", "MAGSHELF",
+  "MAGSHELF", "MAGSHELF", "MAGSHELF", "MAGSHELF",
+  "MAGSHELF"
+};
 __int16 word_4F03FE[777]; // weak
 __int16 word_4F0400[777]; // weak
 __int16 word_4F0498[777]; // weak
--- a/mm7_data.h	Tue Nov 06 10:06:45 2012 +0600
+++ b/mm7_data.h	Tue Nov 06 10:07:35 2012 +0600
@@ -797,324 +797,6 @@
 #include "Texture.h"
 extern stru355 stru_4E82A4;// = {0x20, 0x41, 0, 0x20, 0xFF0000, 0xFF00, 0xFF, 0xFF000000};
 extern stru355 stru_4EFCBC;// = {0x20, 0x41, 0, 0x10, 0x7C00, 0x3E0, 0x1F, 0x8000};
-extern char aGlobal_txt[]; // idb
-extern char aMagic[]; // idb
-extern char aDark_0[]; // idb
-extern char aLight_1[]; // idb
-extern char aBody_0[]; // idb
-extern char aMind_1[]; // idb
-extern char aSpirit_1[]; // idb
-extern char aEarth_0[]; // idb
-extern char aWater_0[]; // idb
-extern char aFire_1[]; // idb
-extern char aSpells_txt[]; // idb
-extern char aParsingError[]; // idb
-extern char aErrorParsingPo[]; // idb
-extern char Text[]; // idb
-extern char Caption[]; // idb
-extern char asc_4E8530[]; // idb
-extern char a222[]; // idb
-extern char asc_4E8538[]; // idb
-extern char aPotion_txt[]; // idb
-extern char aErrorParsing_0[]; // idb
-extern char aPotnotes_txt[]; // idb
-extern char aHistory_txt[]; // idb
-extern char aPsychotic[]; // idb
-extern char aDizzy[]; // idb
-extern char aDrugged[]; // idb
-extern char aUnderwater[]; // idb
-extern char aSewerpipe[]; // idb
-extern char aParkinglot[]; // idb
-extern char aPlain[]; // idb
-extern char aQuarry[]; // idb
-extern char aMountains[]; // idb
-extern char aCity[]; // idb
-extern char aForest[]; // idb
-extern char aAlley[]; // idb
-extern char aStonecorridor[]; // idb
-extern char aHallway[]; // idb
-extern char aCarpetedhallwa[]; // idb
-extern char aHangar[]; // idb
-extern char aArena[]; // idb
-extern char aCave[]; // idb
-extern char aConcerthall[]; // idb
-extern char aAuditorium[]; // idb
-extern char aStoneroom[]; // idb
-extern char aLivingroom[]; // idb
-extern char aBathroom[]; // idb
-extern char aRoom[]; // idb
-extern char aPaddedcell[]; // idb
-extern char aGeneric[]; // idb
-extern char aMapstats_txt[]; // idb
-extern char aHostile_txt[]; // idb
-extern char aEWorkMsdevMm_9[]; // idb
-extern char aUnknownMonster[]; // idb
-extern char aHammerhands[]; // idb
-extern char aPsychic[]; // idb
-extern char aBlades[]; // idb
-extern char aMind[]; // idb
-extern char aHarm[]; // idb
-extern char aFate[]; // idb
-extern char aSummon[]; // idb
-extern char aReanimate[]; // idb
-extern char aDragon[]; // idb
-extern char aBless[]; // idb
-extern char aAcid[]; // idb
-extern char off_4E876C[]; // idb
-extern char aMass[]; // idb
-extern char aRock[]; // idb
-extern char aFire[]; // idb
-extern char aIncinerate[]; // idb
-extern char aFireball[]; // idb
-extern char aParalyze[]; // idb
-extern char aShrapmetal[]; // idb
-extern char aToxic[]; // idb
-extern char aLight[]; // idb
-extern char aSparks[]; // idb
-extern char aPain[]; // idb
-extern char aHeroism[]; // idb
-extern char aHaste[]; // idb
-extern char aStone[]; // idb
-extern char aImplosion[]; // idb
-extern char aLightning[]; // idb
-extern char aMeteor[]; // idb
-extern char aPower[]; // idb
-extern char aSpirit[]; // idb
-extern char aShield[]; // idb
-extern char aHour[]; // idb
-extern char aDay[]; // idb
-extern char aDispel[]; // idb
-extern char aEner[]; // idb
-extern char aDark[]; // idb
-extern char aLight_0[]; // idb
-extern char aBody[]; // idb
-extern char aMind_0[]; // idb
-extern char aSpirit_0[]; // idb
-extern char aEarth[]; // idb
-extern char aWater[]; // idb
-extern char off_4E887C[]; // idb
-extern char aFire_0[]; // idb
-extern char aArrowf[]; // idb
-extern char aArrow[]; // idb
-extern char aPlacemon_txt[]; // idb
-extern char aExplode[]; // idb
-extern char aGround[]; // idb
-extern char aCanTCreateRa_0[]; // idb
-extern char asc_4E88E8[]; // idb
-extern char aSummon_0[]; // idb
-extern char aShot[]; // idb
-extern char aG[]; // idb
-extern char aM[]; // idb
-extern char aE_0[2]; // weak
-extern char aDrainsp[]; // idb
-extern char off_4E8910[]; // idb
-extern char aSteal[]; // idb
-extern char aBrkweapon[]; // idb
-extern char aBrkarmor[]; // idb
-extern char aBrkitem[]; // idb
-extern char aErrad[]; // idb
-extern char aStone_0[]; // idb
-extern char aDead[]; // idb
-extern char aUncon[]; // idb
-extern char aParalyze_0[]; // idb
-extern char aDisease3[]; // idb
-extern char aDisease2[]; // idb
-extern char aDisease1[]; // idb
-extern char aPoison3[]; // idb
-extern char aPoison2[]; // idb
-extern char aPoison1[]; // idb
-extern char aInsane[]; // idb
-extern char aDrunk[]; // idb
-extern char aAfraid[]; // idb
-extern char aAsleep[]; // idb
-extern char SubStr[]; // idb
-extern char aCurse[6]; // weak
-extern char aN[]; // idb
-extern char aGem[]; // idb
-extern char aScroll[]; // idb
-extern char aWand[]; // idb
-extern char aAmulet[]; // idb
-extern char aRing[]; // idb
-extern char aBoots[]; // idb
-extern char aGauntlets[]; // idb
-extern char aCape[]; // idb
-extern char aBelt[]; // idb
-extern char aHelm[]; // idb
-extern char aShield_0[]; // idb
-extern char aPlate[]; // idb
-extern char aChain[]; // idb
-extern char aStaff[]; // idb
-extern char aClub[]; // idb
-extern char aMace[]; // idb
-extern char aBow[]; // idb
-extern char aSpear[]; // idb
-extern char aAxe[]; // idb
-extern char aDagger[]; // idb
-extern char aSword[]; // idb
-extern char aMisc[]; // idb
-extern char aArmor[]; // idb
-extern char aWeapon[]; // idb
-extern char aMonsters_txt[]; // idb
-extern char aNewitemgen[]; // idb
-extern char aClass_txt[]; // idb
-extern char aStats_txt[]; // idb
-extern char aSkilldes_txt[]; // idb
-extern char aRnditems_txt[]; // idb
-extern char aSpecial[]; // idb
-extern char aRelic[]; // idb
-extern char aArtifact[]; // idb
-extern char aClub_0[]; // idb
-extern char aPlate_0[]; // idb
-extern char aChain_0[]; // idb
-extern char aLeather_0[]; // idb
-extern char aBlaster[]; // idb
-extern char aMace_0[]; // idb
-extern char aSpear_0[]; // idb
-extern char aAxe_0[]; // idb
-extern char aDagger_0[]; // idb
-extern char aSword_0[]; // idb
-extern char aStaff_0[]; // idb
-extern char aGem_0[]; // idb
-extern char aGold[]; // idb
-extern char aMscroll[]; // idb
-extern char aSscroll[]; // idb
-extern char aBottle[]; // idb
-extern char aReagent[]; // idb
-extern char aHerb[]; // idb
-extern char aWeaponw[]; // idb
-extern char aAmulet_0[]; // idb
-extern char aRing_0[]; // idb
-extern char aBoots_0[]; // idb
-extern char aGauntlets_0[]; // idb
-extern char aCloak[]; // idb
-extern char aBelt_0[]; // idb
-extern char aHelm_0[]; // idb
-extern char aShield_1[]; // idb
-extern char aArmor_0[]; // idb
-extern char aBow_0[]; // idb
-extern char aMissile[]; // idb
-extern char aWeapon1or2[]; // idb
-extern char aWeapon2[]; // idb
-extern char aWeapon_0[]; // idb
-extern char aItems_txt[]; // idb
-extern char aSpcitems_txt[]; // idb
-extern char aStditems_txt[]; // idb
-extern char aUnableToSaveDd[]; // idb
-extern char aDataDdeclist_b[]; // idb
-extern char aDecDescrip[]; // idb
-extern char aDusk[]; // idb
-extern char aDawn[]; // idb
-extern char aEmitfire[]; // idb
-extern char aLoopslow[]; // idb
-extern char aMarker[]; // idb
-extern char aFf[]; // idb
-extern char aFm[3]; // idb
-extern char aFs[3]; // idb
-extern char aInvisible[]; // idb
-extern char off_4E8CB8[]; // idb
-extern char aDecorationde_0[]; // idb
-extern char aDecorationdesc[]; // idb
-extern char aUnableToSaveDc[]; // idb
-extern char aDataDchest_bin[]; // idb
-extern char aChestDescrip[]; // idb
-extern char aChestdescrip_0[]; // idb
-extern char aChestdescripti[]; // idb
-extern char aUnableToSave_0[]; // idb
-extern char aDataDoverlay_b[]; // idb
-extern char aOvlDes_[]; // idb
-extern char aTransparent[]; // idb
-extern char aCenter[7]; // weak
-extern char aOverlaydescrip[]; // idb
-extern char aObjectdescript[]; // idb
-extern char aUnableToSaveDo[]; // idb
-extern char aDataDobjlist_b[]; // idb
-extern char aObjDescrip[]; // idb
-extern char aLines[]; // idb
-extern char aBounce[]; // idb
-extern char aFlagonintercep[]; // idb
-extern char aNogravity[]; // idb
-extern char aNopickup[]; // idb
-extern char aFtlifetime[]; // idb
-extern char aLifetime[]; // idb
-extern char aNodraw[]; // idb
-extern char aObjectdescri_0[]; // idb
-extern char aBits[]; // idb
-extern char aUnableToSaveDm[]; // idb
-extern char aDataDmonlist_b[]; // idb
-extern char aMonRace[]; // idb
-extern char aMonsterracel_0[]; // idb
-extern char aMonsterracelis[]; // idb
-extern char a__10[]; // idb
-extern char aKey_stepright[]; // idb
-extern char aKey_stepleft[]; // idb
-extern char aKey_alwaysrun[]; // idb
-extern char aKey_land[]; // idb
-extern char aKey_flydown[]; // idb
-extern char aKey_flyup[]; // idb
-extern char aKey_zoomout[]; // idb
-extern char aKey_zoomin[]; // idb
-extern char aKey_centerview[]; // idb
-extern char aKey_lookdown[]; // idb
-extern char aKey_lookup[]; // idb
-extern char aKey_mapbook[]; // idb
-extern char aKey_autonotes[]; // idb
-extern char aKey_timecal[]; // idb
-extern char aKey_rest[]; // idb
-extern char aKey_quickref[]; // idb
-extern char aKey_quest[]; // idb
-extern char aKey_charcycle[]; // idb
-extern char aKey_pass[]; // idb
-extern char aKey_cast[]; // idb
-extern char aKey_eventtrigg[]; // idb
-extern char aKey_combat[]; // idb
-extern char aKey_jump[]; // idb
-extern char aKey_yell[]; // idb
-extern char aKey_castready[]; // idb
-extern char aKey_attack[]; // idb
-extern char aKey_right[]; // idb
-extern char aKey_left[]; // idb
-extern char aKey_backward[]; // idb
-extern char pKeyName[]; // idb
-extern char aDefault[]; // idb
-extern char aControl[]; // idb
-extern char aBackspace[]; // idb
-extern char aBackslash[]; // idb
-extern char aSquote[]; // idb
-extern char aSlash[]; // idb
-extern char aPeriod[]; // idb
-extern char aSemicolon[]; // idb
-extern char aDecimal[]; // idb
-extern char aComma[]; // idb
-extern char aInsert[]; // idb
-extern char aHome[]; // idb
-extern char aDelete[]; // idb
-extern char aEnd[]; // idb
-extern char aAdd[]; // idb
-extern char aSubtract[]; // idb
-extern char aTab[]; // idb
-extern char aPage_up[]; // idb
-extern char aPage_down[]; // idb
-extern char aSpace[]; // idb
-extern char aReturn[]; // idb
-extern char aDown[]; // idb
-extern char aUp[]; // idb
-extern char asc_4E925C[]; // idb
-extern char aCouldNotInitia[49]; // weak
-extern char aInvalidDi_keyb[]; // idb
-extern char aEWorkMsdevM_10[45]; // weak
-extern char aInvalidDi_ke_0[]; // idb
-extern char aInvalidDi_ke_1[]; // idb
-extern char aUknownKeyDetec[]; // idb
-extern char aEffpar03[]; // idb
-extern char aErrorFailedToB[]; // idb
-extern char aErrorFailedToG[]; // idb
-extern char aEWorkMsdevM_11[]; // idb
-extern char aLightpolyBuild[]; // idb
-extern char aUndefinedClipF[30]; // weak
-extern char aInvalidLightTy[]; // idb
-extern char aInvalidLight_0[]; // idb
-extern char aUknownStripTyp[]; // idb
-extern char aInvalidLightma[]; // idb
 extern char byte_4E94D0; // weak
 extern char _4E94D2_light_type; // weak
 extern char byte_4E94D3; // weak
@@ -1122,369 +804,7 @@
 extern unsigned int saveload_dlg_ys[2];
 extern unsigned int saveload_dlg_zs[2];
 extern unsigned int saveload_dlg_ws[2];
-extern char aEWorkMsdevM_12[]; // idb
-extern char a___0[]; // idb
-extern char aSave03d_mm7[]; // idb
-extern char Name[]; // idb
-extern char aAr_dn_dn_0[]; // idb
-extern char aAr_up_dn_0[]; // idb
-extern char aLs_saved[]; // idb
-extern char aLs_loadd[]; // idb
-extern char aX_d[]; // idb
-extern char aImage_pcx[]; // idb
-extern char aHeader_bin[]; // idb
-extern char aSavesS[]; // idb
-extern char aX_u[]; // idb
-extern char aLs_saveu[]; // idb
-extern char aLs_loadu[]; // idb
-extern char aSave_up[]; // idb
-extern char aLoad_up[]; // idb
-extern char aLoadsave[]; // idb
-extern char a1_mm7[6]; // weak
-extern char aUnableToFindS[]; // idb
-extern char aLevelsS[]; // idb
-extern char aNpcgroup_bin[]; // idb
-extern char aNpcdata_bin[]; // idb
-extern char aOverlay_bin[]; // idb
-extern char aClock_bin[]; // idb
-extern char aParty_bin[]; // idb
-extern char ExistingFileName[]; // idb
-extern char NewFileName[]; // idb
-extern char aSS_2[]; // idb
-extern char aSavesSave03d_m[]; // idb
-extern char aSD02dSDSD[]; // idb
-extern char aLevellod[]; // idb
-extern char aLevelsSS[]; // idb
-extern char a_lod[5]; // weak
-extern char aDataGames_lod[]; // idb
-extern char Default[]; // idb
-extern char aCurrent[]; // idb
-extern char aNewmapsForMmvi[]; // idb
-extern char aMmvii[]; // idb
-extern char aOutOfMemoryLoa[]; // idb
-extern char aAttemptToOpenN[]; // idb
-extern char aFileSIsNotABlv[]; // idb
-extern char aD23_blv[]; // idb
-extern char aEventTrigger[]; // idb
-extern char aLodapp_tmp[]; // idb
-extern char aWb[]; // idb
-extern char aLod_tmp[]; // idb
-extern char aLodIndex[]; // idb
-extern char aLod[]; // idb
-extern char aLodCarray[]; // idb
-extern char aRb_0[]; // idb
-extern char aLodio[]; // idb
-extern char aAttemptToRes_0[]; // idb
-extern char aLodsub[]; // idb
-extern char aAttemptToReset[]; // idb
-extern char aMm6[]; // idb
-extern char aLodchapterpage[]; // idb
-extern char aLODFile[]; // idb
-extern char aChapter[]; // idb
-extern char aUnableToAppend[]; // idb
-extern char aIndoorBlvFiles[26]; // weak
 extern int dword_4E98BC_bApplicationActive; // weak
-extern char aBlv[]; // idb
-extern char aMightAndMagico[41]; // weak
-extern char aLevels[7]; // weak
-extern char aLsave640_pcx[13]; // weak
-extern char aTitle_exit[]; // idb
-extern char aTitle_cred[]; // idb
-extern char aTitle_load[]; // idb
-extern char aTitle_new[]; // idb
-extern char a___1[]; // idb
-extern char aRanOnce[]; // idb
-extern char aNoanim[]; // idb
-extern char aNosound[]; // idb
-extern char aWindow[]; // idb
-extern char aUsedefs[]; // idb
-extern char ClassName[]; // idb
-extern char aOut02_odm[10]; // weak
-extern char aYouMustBeRunni[]; // idb
-extern char aDebugFlags[]; // idb
-extern char aWindowY[]; // idb
-extern char aWindowX[]; // idb
-extern char aStartinwindow[]; // idb
-extern char aD10_blv[]; // idb
-extern char aD11_blv[]; // idb
-extern char a1_0[]; // idb
-extern char aMightAndMagicV[]; // idb
-extern char aNewWorldComput[]; // idb
-extern char SubKey[]; // idb
-extern char aCloseCd[]; // idb
-extern char aInfoCdUpcWait[]; // idb
-extern char aOpenCTypeCdaud[]; // idb
-extern char aXAnimsMagic7_v[20]; // weak
-extern char aAbbrechen[]; // idb
-extern char aBitteCd2VonMig[]; // idb
-extern char aBitteCd2Einleg[]; // idb
-extern char aCancelar[9]; // weak
-extern char aPorFavorInse_0[]; // idb
-extern char aPorFavorInsert[]; // idb
-extern char aSupprimer[10]; // weak
-extern char aInssrezMightMa[]; // idb
-extern char aInssrezLeCd2[]; // idb
-extern char aAnnulla[8]; // weak
-extern char aInserireIlSe_0[]; // idb
-extern char aInserireIlSeco[]; // idb
-extern char aOdwolaj[8]; // weak
-extern char aWlozCdRomNum_0[]; // idb
-extern char String[]; // idb
-extern char TemplateName[]; // idb
-extern char ValueName[]; // idb
-extern char a2dacceloff[]; // idb
-extern char aDsounds_bin[]; // idb
-extern char aDoverlay_bin[]; // idb
-extern char aDchest_bin[]; // idb
-extern char aDmonlist_bin[]; // idb
-extern char aDobjlist_bin[]; // idb
-extern char aDdeclist_bin[]; // idb
-extern char aDift_bin[]; // idb
-extern char aDpft_bin[]; // idb
-extern char aDtile_bin[]; // idb
-extern char aDtft_bin[]; // idb
-extern char aDsft_bin[]; // idb
-extern char aUnableToOpenSo[]; // idb
-extern char aDataSounds_def[]; // idb
-extern char aUnableToOpenOv[]; // idb
-extern char aDataOverlay_de[]; // idb
-extern char aUnableToOpenCh[]; // idb
-extern char aDataChest_def[]; // idb
-extern char aUnableToOpenPf[]; // idb
-extern char Args[]; // idb
-extern char aUnableToOpenTi[]; // idb
-extern char aDataTile_def[]; // idb
-extern char aUnableToOpenTf[]; // idb
-extern char aDataTft_def[]; // idb
-extern char aUnableToOpenIf[]; // idb
-extern char aDataIft_txt[]; // idb
-extern char aUnableToOpenMo[]; // idb
-extern char aDataMonlist_tx[]; // idb
-extern char aUnableToOpenOb[]; // idb
-extern char aDataObjlist_tx[]; // idb
-extern char aUnableToOpenDe[]; // idb
-extern char aDataDeclist_tx[]; // idb
-extern char aUnableToOpenSf[]; // idb
-extern char aDataSft_txt[]; // idb
-extern char aDataSprites_lo[]; // idb
-extern char aDataSpritelo_l[18]; // weak
-extern char aResolution[]; // idb
-extern char aRegistry[]; // idb
-extern char aDataBitmaps_lo[]; // idb
-extern char aDataEvents_lod[]; // idb
-extern char aSomeFilesAreMi[42]; // weak
-extern char aFilesMissing[14]; // weak
-extern char pFilename[]; // idb
-extern char AppName[]; // idb
-extern char KeyName[]; // idb
-extern char aUnableToAllo_0[31]; // weak
-extern char aUnableToAlloca[31]; // weak
-extern char aMoreRamMemoryR[25]; // weak
-extern char WindowName[]; // idb
-extern char IconName[]; // idb
-extern char aMoreHardDriveS[31]; // weak
-extern char aDueToWindowVir[]; // idb
-extern char PathName[]; // idb
-extern char aHdwtr03u[]; // idb
-extern char aHeight[]; // idb
-extern char aEyelevel[]; // idb
-extern char aParty[]; // idb
-extern char aBuilding_sub_0[]; // idb
-extern char aBuilding_subdi[]; // idb
-extern char aTerrain_subd_0[]; // idb
-extern char aTerrain_subdiv[]; // idb
-extern char aTexmapping[]; // idb
-extern char aRecmod2[]; // idb
-extern char aRecmod1[]; // idb
-extern char aDefault_0[]; // idb
-extern char aDirt[]; // idb
-extern char aTextures[]; // idb
-extern char off_4EA208[]; // idb
-extern char aPlansky1[]; // idb
-extern char aDist_mist[]; // idb
-extern char aDist_shademist[]; // idb
-extern char aDist_shade[]; // idb
-extern char aShading[]; // idb
-extern char aBld_mm3[]; // idb
-extern char aBld_mm2[]; // idb
-extern char aBld_mm1[]; // idb
-extern char aTer_mm3[]; // idb
-extern char aTer_mm2[]; // idb
-extern char aTer_mm1[]; // idb
-extern char aMipmapping[]; // idb
-extern char aBld_gamma[]; // idb
-extern char aTer_gamma[]; // idb
-extern char aGridband3[]; // idb
-extern char aGridband2[]; // idb
-extern char aGridband1[]; // idb
-extern char aNowavywater[]; // idb
-extern char aRender[]; // idb
-extern char aNodecorations[]; // idb
-extern char aNosky[]; // idb
-extern char aNomist[]; // idb
-extern char aRgbnightbott_1[]; // idb
-extern char aRgbnightbott_0[]; // idb
-extern char aRgbnightbottom[]; // idb
-extern char aRgbnighttop_b[]; // idb
-extern char aRgbnighttop_g[]; // idb
-extern char aRgbnighttop_r[]; // idb
-extern char aRgbdaybottom_b[]; // idb
-extern char aRgbdaybottom_g[]; // idb
-extern char aRgbdaybottom_r[]; // idb
-extern char aRgbdaytop_b[]; // idb
-extern char aRgbdaytop_g[]; // idb
-extern char aRgbdaytop_r[]; // idb
-extern char aOutdoor[]; // idb
-extern char aFile[]; // idb
-extern char aStartmap[]; // idb
-extern char aWalkspeed[]; // idb
-extern char aNodecoration[]; // idb
-extern char aNodamage[]; // idb
-extern char aShowfr[]; // idb
-extern char aNomonster[]; // idb
-extern char aDebug[]; // idb
-extern char aNologo[]; // idb
-extern char aNowalksound[]; // idb
-extern char aNosound_0[]; // idb
-extern char aNointro[]; // idb
-extern char aMixerchannels[]; // idb
-extern char aVy2[]; // idb
-extern char aVx2[]; // idb
-extern char aVy1[]; // idb
-extern char aVx1[]; // idb
-extern char aScreen[]; // idb
-extern char aMakeme_pcx[11]; // weak
-extern char aError[]; // idb
-extern char aFatalException[]; // idb
-extern char aDirectDrawErro[]; // idb
-extern char aUnknownDirectd[]; // idb
-extern char aDderr_devicedo[29]; // weak
-extern char aDderr_videonot[21]; // weak
-extern char aDderr_expired[14]; // weak
-extern char aDderr_moredata[15]; // weak
-extern char aDderr_notpagel[20]; // weak
-extern char aDderr_cantpa_0[21]; // weak
-extern char aDderr_cantpage[19]; // weak
-extern char aDderr_nononloc[23]; // weak
-extern char aDderr_dcalread[23]; // weak
-extern char aDderr_nofocusw[20]; // weak
-extern char aDderr_notloade[16]; // weak
-extern char aDderr_nooptimi[19]; // weak
-extern char aDderr_invali_3[25]; // weak
-extern char aDderr_nomipmap[17]; // weak
-extern char aDderr_unsupp_2[22]; // weak
-extern char aDderr_notpalet[20]; // weak
-extern char aDderr_implicit[24]; // weak
-extern char aDderr_wrongmod[16]; // weak
-extern char aDderr_nodc[11]; // weak
-extern char aDderr_cantcrea[19]; // weak
-extern char aDderr_cantdupl[20]; // weak
-extern char aDderr_notflipp[19]; // weak
-extern char aDderr_exclusiv[30]; // weak
-extern char aDderr_notaover[25]; // weak
-extern char aDderr_invali_2[22]; // weak
-extern char aDderr_noover_0[20]; // weak
-extern char aDderr_overlayn[24]; // weak
-extern char aDderr_noddrops[17]; // weak
-extern char aDderr_noblthw[14]; // weak
-extern char aDderr_bltfastc[22]; // weak
-extern char aDderr_nopale_0[18]; // weak
-extern char aDderr_nopalett[24]; // weak
-extern char aDderr_hwndalre[21]; // weak
-extern char aDderr_hwndsubc[21]; // weak
-extern char aDderr_nohwnd[13]; // weak
-extern char aDderr_noclippe[24]; // weak
-extern char aDderr_clipperi[25]; // weak
-extern char aDderr_regionto[21]; // weak
-extern char aDderr_noemulat[18]; // weak
-extern char aDderr_primarys[34]; // weak
-extern char aDderr_nodire_0[21]; // weak
-extern char aDderr_directdr[31]; // weak
-extern char aDderr_invalidd[28]; // weak
-extern char aDderr_xalign[13]; // weak
-extern char aDderr_wasstill[22]; // weak
-extern char aDderr_vertical[30]; // weak
-extern char aDderr_invalids[20]; // weak
-extern char aDderr_unsupp_1[22]; // weak
-extern char aDderr_unsupp_0[24]; // weak
-extern char aDderr_toobigwi[18]; // weak
-extern char aDderr_toobigsi[17]; // weak
-extern char aDderr_toobighe[19]; // weak
-extern char aDderr_surfacen[25]; // weak
-extern char aDderr_colorkey[21]; // weak
-extern char aDderr_surfac_0[29]; // weak
-extern char aDderr_surfacea[30]; // weak
-extern char aDderr_cantlock[22]; // weak
-extern char aDderr_surfacei[24]; // weak
-extern char aDderr_paletteb[18]; // weak
-extern char aDderr_nozbuffe[18]; // weak
-extern char aDderr_nozoverl[19]; // weak
-extern char aDderr_outofcap[16]; // weak
-extern char aDderr_outofvid[23]; // weak
-extern char aDderr_overla_0[22]; // weak
-extern char aDderr_overlayc[35]; // weak
-extern char aDderr_novsynch[16]; // weak
-extern char aDderr_norotati[19]; // weak
-extern char aDderr_nostretc[18]; // weak
-extern char aDderr_not4bi_0[19]; // weak
-extern char aDderr_not4bitc[24]; // weak
-extern char aDderr_not8bitc[19]; // weak
-extern char aDderr_notextur[18]; // weak
-extern char aDderr_noraster[19]; // weak
-extern char aDderr_nofliphw[15]; // weak
-extern char aDderr_nogdi[12]; // weak
-extern char aDderr_nomirror[17]; // weak
-extern char aDderr_notfound[15]; // weak
-extern char aDderr_nooverla[18]; // weak
-extern char aDderr_overlapp[23]; // weak
-extern char aDderr_noexclus[22]; // weak
-extern char aDderr_noclipli[17]; // weak
-extern char aDderr_nocolorc[20]; // weak
-extern char aDderr_nocooper[28]; // weak
-extern char aDderr_nocolo_0[17]; // weak
-extern char aDderr_nocolork[19]; // weak
-extern char aDderr_nodirect[26]; // weak
-extern char aDderr_noalphah[16]; // weak
-extern char aDderr_invalidm[18]; // weak
-extern char aDderr_invalido[20]; // weak
-extern char aDderr_invali_1[25]; // weak
-extern char aDderr_lockedsu[21]; // weak
-extern char aDderr_no3d[11]; // weak
-extern char aDderr_invali_0[22]; // weak
-extern char aDderr_cannotde[26]; // weak
-extern char aDderr_currentl[24]; // weak
-extern char aDderr_exceptio[16]; // weak
-extern char aDderr_heightal[18]; // weak
-extern char aDderr_incompat[26]; // weak
-extern char aDderr_invalidc[18]; // weak
-extern char aDderr_cannotat[26]; // weak
-extern char aDderr_unsuppor[18]; // weak
-extern char aDderr_generic[14]; // weak
-extern char aDderr_notiniti[21]; // weak
-extern char aDderr_outofmem[18]; // weak
-extern char aDderr_invalidp[20]; // weak
-extern char Str[]; // idb
-extern char aDirectInputErr[]; // idb
-extern char aUnknownDirectI[]; // idb
-extern char aAtLineNumber[]; // idb
-extern char aInFile[]; // idb
-extern char aTooManyMobileL[]; // idb
-extern char aEWorkMsdevM_13[48]; // weak
-extern char aUSS[]; // idb
-extern char aUS[]; // idb
-extern char aMicon3[]; // idb
-extern char aTarget[]; // idb
-extern char CursorName[]; // idb
-extern char aWarningInvalid[]; // idb
-extern char aEWorkMsdevM_14[37]; // weak
-extern char aMicon1_0[]; // idb
-extern char aCouldNotInit_0[40]; // weak
-extern char aEWorkMsdevM_15[]; // idb
-extern char aCouldNotLoadAs[]; // idb
-extern char aDi_mousePointe[]; // idb
-extern char aDi_mousePoin_0[]; // idb
-extern char aCouldNotClipCu[]; // idb
-extern char aDoorErrorDoorI[]; // idb
 extern char *off_4EB080; // idb
 extern char *pTransitionStrings[464];
 extern char aAwards_txt[]; // idb
@@ -1675,122 +995,13 @@
 extern _UNKNOWN unk_4EE084; // weak
 extern __int16 word_4EE088_sound_ids[]; // weak
 extern short word_4EE150[];
-extern char aDD[]; // idb
-extern char off_4EE75C[]; // idb
 extern int dword_4EED78; // weak
 extern _UNKNOWN unk_4EED80; // weak
 extern int dword_4EFA80; // weak
 extern int dword_4EFA84; // weak
-extern char aDataD3dsprite_[]; // idb
-extern char aDataD3dbitmap_[]; // idb
-extern char aDetailLevel[]; // idb
-extern char aD3dDevice[]; // idb
-extern char aUseD3d[]; // idb
-extern char aEWorkMsdevM_22[]; // idb
-extern char aScreen0_2i_pcx[]; // idb
-extern char aZBuf_[]; // idb
-extern char aThereArenTAnyD[]; // idb
-extern char aDirect3dRend_1[]; // idb
-extern char aDirect3dRend_0[]; // idb
-extern char aDirect3dRender[]; // idb
-extern char aD3drendInitFai[]; // idb
-extern char aThereArenTAn_0[]; // idb
-extern char aErrorExecuting[]; // idb
-extern char aEWorkMsdevM_23[]; // idb
-extern char aHiscreen16Load[]; // idb
 extern void *off_4EFDB0; // weak
-extern char aEWorkMsdevM_24[]; // idb
-extern char aEffpar02[]; // idb
-extern char aSp18h1[7]; // weak
-extern char aSpell75[]; // idb
-extern char aSpell73[]; // idb
-extern char aSpell71[]; // idb
-extern char aSpell69[]; // idb
-extern char aSpell58[]; // idb
-extern char aSpell55[]; // idb
-extern char aSpell51[]; // idb
-extern char aSpell46[]; // idb
-extern char aSpell38[]; // idb
-extern char aSpell36[]; // idb
-extern char aSpell25[]; // idb
-extern char aSpell17[]; // idb
-extern char aSpell14[]; // idb
-extern char aSpell05[]; // idb
-extern char aSpell03[]; // idb
-extern char aSpheal3[]; // idb
-extern char aSpheal2[]; // idb
-extern char aSpheal1[]; // idb
-extern char aSpboost3[]; // idb
-extern char aSpboost2[]; // idb
-extern char aSpboost1[]; // idb
-extern char aZapp[]; // idb
-extern char aSpell84[]; // idb
-extern char aEWorkMsdevM_25[]; // idb
-extern char aSpell97c[]; // idb
-extern char aSpell97[]; // idb
-extern char aSpell93[]; // idb
-extern char aSpell92[]; // idb
-extern char aSpell90[]; // idb
-extern char aSpell76[]; // idb
-extern char aSpell70[]; // idb
-extern char aSpell66[]; // idb
-extern char aSpell65[]; // idb
-extern char aSpell62[]; // idb
-extern char aSpell57c[]; // idb
-extern char aSpell41[]; // idb
-extern char aSpell39c[]; // idb
-extern char aSpell39[]; // idb
-extern char aSpell29[]; // idb
-extern char aSpell26[]; // idb
-extern char aSpell22[]; // idb
-extern char aSpell18[]; // idb
-extern char aSpell09[]; // idb
-extern char aSpell02[]; // idb
-extern char aSpell01[]; // idb
-extern char aSp57c[]; // idb
-extern char aInvalidMovieRe[]; // idb
-extern char aEnd_seq1[9]; // weak
-extern char aLosegame[9]; // weak
-extern char aIntroPost[11]; // weak
-extern char aIntro[6]; // weak
-extern char aJvc[4]; // weak
-extern char aNewWorldLogo[15]; // weak
-extern char a3dologo[8]; // weak
-extern char aNoMovie[]; // idb
-extern char aEWorkMsdevM_26[]; // idb
-extern char aCanTLoadSoundF[]; // idb
-extern char aEWorkMsdevM_27[]; // idb
-extern char aSoundSIsSizeIB[]; // idb
-extern char aUnableToSave_2[]; // idb
-extern char aDataDsounds_bi[]; // idb
-extern char aSndDes_[]; // idb
-extern char a3d[]; // idb
-extern char aLock[]; // idb
-extern char aSwap[]; // idb
-extern char aSystem[]; // idb
-extern char aSoundlistcla_0[]; // idb
-extern char aSoundlistclass[]; // idb
-extern char aSoundFileError[]; // idb
-extern char aCanTOpenFileS[]; // idb
-extern char aSoundsAudio_sn[]; // idb
-extern char aDisable3dsound[]; // idb
-extern char aEaxEnvironment[26]; // weak
-extern char a3dsoundprovide[]; // idb
-extern char aNone[]; // idb
-extern char aEmulated[]; // idb
-extern char aDevice[]; // idb
-extern char aSplashscreen[]; // idb
-extern char aSplashaudio[]; // idb
-extern char aSoftwareAureal[]; // idb
-extern char aEaxDamping[12]; // weak
-extern char aEaxEffectVolum[18]; // weak
-extern char aMaximumSupport[26]; // weak
 extern int dword_4F031C[]; // weak
-extern char aSprites08[]; // idb
-extern char aHardsprites[]; // idb
-extern char aTooManyStation[]; // idb
-extern char aEWorkMsdevM_28[52]; // weak
-extern char *off_4F03B8; // idb
+extern const char *off_4F03B8[]; // idb
 extern __int16 word_4F03FE[]; // weak
 extern __int16 word_4F0400[]; // weak
 extern __int16 word_4F0498[]; // weak
@@ -2536,8 +1747,8 @@
 bool __fastcall sub_4075DB(int a1, int a2, int a3, struct BLVFace *a4);
 bool __fastcall sub_4077F1(int a1, int a2, int a3, struct ODMFace *a4, struct BSPVertexBuffer *a5);
 bool __fastcall sub_407A1C(int x, int z, int y, struct Vec3_int_ v); // idb
-char UpdateActors();
-void UpdateLayingItems();
+void InitializeActors();
+void InitializeLayingItems();
 int __fastcall sub_4088E9(int a1, int a2, int a3, int a4, int a5, int a6);
 unsigned int __thiscall SearchAliveActors(unsigned int *pTotalActors);
 unsigned int __fastcall SearchActorByMonsterID(unsigned int *pTotalActors, int uMonsterID);
@@ -2832,12 +2043,12 @@
 // int __cdecl crt_deconstruct_44C42C();
 struct GUIFont *LoadFont(const char *pFontFile, const char *pFontPalette, ...);
 char *__fastcall FitTextInAWindow(const char *pInString, GUIFont *pFont, GUIWindow *pWindow, unsigned int uX, int a5);
-void *__fastcall SpawnEncounter(struct MapInfo *pMapInfo, struct SpawnPointMM7 *a2, int a3, int a4, int a5);
+void SpawnEncounter(struct MapInfo *pMapInfo, struct SpawnPointMM7 *spawn, int a3, int a4, int a5);
 int __fastcall sub_44FA4C_spawn_light_elemental(int a1, int a2, int a3);
 void __cdecl sub_450218_prolly_generate_chests_loot();
 signed int __fastcall sub_450521_ProllyDropItemAt(int ecx0, signed int a2, int a3, int a4, int a5, unsigned __int16 a6);
 int __fastcall sub_45063B(struct MapInfo *a1, int a2);
-void *__cdecl RespawnGlobalDecorations();
+void RespawnGlobalDecorations();
 bool __fastcall SpawnActor(unsigned int uMonsterID);
 int __cdecl GetAlertStatus();
 unsigned int __fastcall sub_452442(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4);
--- a/stru123.h	Tue Nov 06 10:06:45 2012 +0600
+++ b/stru123.h	Tue Nov 06 10:07:35 2012 +0600
@@ -6,7 +6,7 @@
 struct stru123
 {
   char field_0[75];
-  char field_4B[125];
+  char _decor_events[125];
 };
 #pragma pack(pop)
 extern stru123 stru_5E4C90;
\ No newline at end of file
--- a/stru6.cpp	Tue Nov 06 10:06:45 2012 +0600
+++ b/stru6.cpp	Tue Nov 06 10:07:35 2012 +0600
@@ -1067,9 +1067,7 @@
           }
           if ( !pRenderer->pRenderD3D )
             goto LABEL_34;
-          *(int *)pContainer = *(int *)"sp18h1";
-          *(short *)&pContainer[4] = *(short *)"h1";
-          pContainer[6] = aSp18h1[6];
+          memcpy(pContainer, "sp18h1", 7);
           pRnd->SetRange(1, 6);
           pContainer[5] = pRnd->GetInRange() + '0';
           v35 = pBitmaps_LOD->LoadTexture(pContainer, TEXTURE_DEFAULT);