changeset 1583:75fafd8ced59

Allocator (CMemory) bye-bye
author Nomad
date Tue, 10 Sep 2013 21:07:07 +0200
parents 1b6217e07b26
children cff02d7d3460
files Actor.cpp Allocator.cpp Allocator.h AudioPlayer.cpp BSPModel.cpp Chest.cpp DecorationList.cpp Events.cpp GUIWindow.cpp IconFrameTable.cpp Indoor.cpp Items.cpp LOD.cpp Monsters.cpp NPC.cpp ObjectList.cpp Outdoor.cpp Outdoor.h OutdoorCamera.cpp OutdoorCamera.h Overlays.cpp Render.cpp Render.h SaveLoad.cpp Spells.cpp Sprites.cpp StorylineTextTable.cpp Texture.cpp Texture.h TileTable.cpp UI/Books/UIMapBook.cpp UI/Books/UINotesBooks.cpp UI/Books/UISpellBook.cpp UI/UIBooks.cpp UI/UICharacter.cpp UI/UIMainMenu.cpp UI/UIPartyCreation.cpp UI/UISaveLoad.cpp VideoPlayer.cpp Viewport.cpp _deleted.cpp mm7_1.cpp mm7_2.cpp mm7_3.cpp mm7_4.cpp mm7_data.cpp mm7_data.h texts.cpp
diffstat 48 files changed, 694 insertions(+), 913 deletions(-) [+]
line wrap: on
line diff
--- a/Actor.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Actor.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -32,7 +32,6 @@
 #include "stru298.h"
 #include "Log.h"
 #include "Texts.h"
-#include "Allocator.h"
 
 
 
@@ -5401,8 +5400,7 @@
   monster_id = a1;
   x_ = x;
   v15 = a1;
-  if (uNumActors < 500
-    && ((signed int)pAllocator->uBigBufferSizeAligned >> 10) - ((signed int)pAllocator->uNextFreeOffsetInBigBuffer >> 10) >= 2000 )
+  if (uNumActors < 500)
   {
     v16 = 0;
     if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
--- a/Allocator.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,427 +0,0 @@
-#ifdef _MSC_VER
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include <string.h>
-#include <stdio.h>
-
-#include "Allocator.h"
-#include "ErrorHandling.h"
-
-#include "mm7_data.h"
-
-
-
-Allocator *pAllocator; // idb
-
-int aborting_app = false; // weak
-
-
-
-
-void __fastcall CheckMemoryAccessibility(void *pBase, DWORD uSize);
-
-
-
-//----- (00426755) --------------------------------------------------------
-void *Allocator::AllocNamedChunk(const void *pPrevPtrValue, unsigned int uSize, const char *pName)
-{
-  Assert(!pPrevPtrValue, "PrevPtrValue != 0");
-
-  if (!uSize)
-	  return 0;
-  return malloc(uSize);
-/*
-  //Allocator *v4; // esi@1
-  unsigned int v5; // eax@7
-  void *result; // eax@8
- // unsigned int *pNumBuffersUsed; // ebx@12
-  unsigned int v8; // edi@15
-  char v9; // zf@15
-  int v10; // eax@16
-  void **v11; // ebx@19
-  void *v12; // eax@22
-  unsigned int Size; // [sp+14h] [bp+Ch]@16
-
-  int aligned_size; 
-
-
-  if ( pPrevPtrValue && !aborting_app )
-	  AbortWithError();
-  if ( !bBigBufferAllocated && !aborting_app )
-	  AbortWithError();
-
-  if (!uSize)
-	  return 0;
-
-  if (((uSize & 0x80000000u) != 0) && !aborting_app)
-	  AbortWithError();
-
-  if (uNumBuffersUsed == 6000 && !aborting_app)
-	  AbortWithError();
-
-  ++uNumBuffersUsed;
-
-  if (!bUseBigBuffer)
-	  {
-	  pMemoryBuffers[uNumBuffersUsed] = malloc(uSize);
-	  if (pMemoryBuffers[uNumBuffersUsed])
-		  uMemoryBuffersSizes[uNumBuffersUsed] = uSize;
-	  else
-		  {
-		  if ( !aborting_app )
-			  AbortWithError();
-		  }
-	  }
-  else
-	  {
-
-	  aligned_size =(uSize&0xFFFFFFFC) + 4;
-
-	  if ((uNextFreeOffsetInBigBuffer +aligned_size) > uBigBufferSizeAligned)
-		  {
-		  printf("Id: %s  Size: %i", pName, aligned_size);
-		  CreateFileDump( "Memory");
-		  if ( !aborting_app )
-			  AbortWithError();
-		  }
-
-	  pMemoryBuffers[uNumBuffersUsed] = (char *)pBigMemoryBuffer + uNextFreeOffsetInBigBuffer;//(char *)(pBigBufferAligned) + uNextFreeOffsetInBigBuffer;
-	  uMemoryBuffersSizes[uNumBuffersUsed] =aligned_size;
-
-	  if (pName)
-		  strncpy(pMemoryBuffersNames[uNumBuffersUsed], pName, 11);
-	  uNextFreeOffsetInBigBuffer += aligned_size;
-	  }
-  return pMemoryBuffers[uNumBuffersUsed];
-  */
-  /*
-  //v4 = this;
-  if ( pPrevPtrValue && !aborting_app )
-    AbortWithError();
-  if ( !bBigBufferAllocated && !aborting_app )
-    AbortWithError();
-  v5 = uSize;
-  if ( uSize )
-  {
-    if ( (uSize & 0x80000000u) != 0 && !aborting_app )
-    {
-      AbortWithError();
-      v5 = uSize;
-    }
-    pNumBuffersUsed = &uNumBuffersUsed;
-    if (uNumBuffersUsed == 6000 && !aborting_app)
-    {
-      AbortWithError();
-      v5 = uSize;
-    }
-    v8 = *pNumBuffersUsed;
-    v9 = bUseBigBuffer == 0;
-    ++*pNumBuffersUsed;
-    if ( v9 )
-    {
-      v12 = malloc(v5);
-      v11 = &pMemoryBuffers[v8];
-      *v11 = v12;
-      if ( v12 )
-      {
-        uMemoryBuffersSizes[v8] = uSize;
-      }
-      else
-      {
-        if ( !aborting_app )
-          AbortWithError();
-      }
-    }
-    else
-    {
-      LOBYTE(v5) = v5 & 0xFC;
-      v10 = v5 + 4;
-      Size = v10;
-      if ( v10 + uNextFreeOffsetInBigBuffer > uBigBufferSizeAligned )
-      {
-        printf("Id: %s  Size: %i\n", pName, v10);
-        CreateFileDump("Memory");
-        if ( !aborting_app )
-          AbortWithError();
-      }
-      v11 = &pMemoryBuffers[v8];
-      *v11 = (char *)pBigMemoryBuffer + uNextFreeOffsetInBigBuffer;
-      uMemoryBuffersSizes[v8] = Size;
-      if (pName)
-        strncpy(pMemoryBuffersNames[v8], pName, 11);
-      uNextFreeOffsetInBigBuffer += Size;
-    }
-    result = *v11;
-  }
-  else
-  {
-    result = 0;
-  }
-  return result;*/
-}
-// 720018: using guessed type int aborting_app;
-
-
-
-//----- (004266CD) --------------------------------------------------------
-bool Allocator::Initialize(unsigned int uNumKBytes)
-{
-  if (bBigBufferAllocated)
-    return false;
-
-  if (!uNumKBytes)
-    return false;
-
-  pBigMemoryBuffer = malloc(uNumKBytes * 1024);
-  if (!pBigMemoryBuffer)
-    return false;
-
-  pBigBufferAligned = (void *)((unsigned int)(pBigMemoryBuffer) & 0xFFFF0000 + 4096);
-  //(char *)pBigMemoryBuffer + -((unsigned __int16)pBigMemoryBuffer & 0xFFF) + 4096;
-  uBigBufferSizeAligned = (uNumKBytes * 1024) - 4096;
-
-  uNumBuffersUsed = 0;
-  uNextFreeOffsetInBigBuffer = 0;
-
-  bUseBigBuffer = true;
-  return bBigBufferAllocated = true;
-}
-
-
-//----- (00426474) --------------------------------------------------------
-void Allocator::FreeChunk(void *ptr)
-{
-	free(ptr);
-	return;
-/*  Allocator *v2; // esi@1
-  unsigned int v3; // eax@5
-  signed int i; // edi@5
-  unsigned int v5; // eax@13
-  signed int v6; // ecx@16
-  signed int j; // edx@16
-  char v8; // zf@20
-
- 
-  
-  unsigned int  uBuffindx; 
-  unsigned int indx;
-
-  if (ptr)
-	  {
-	  if ((!bBigBufferAllocated)&& (!aborting_app ))
-		  AbortWithError();
-	  for (indx = 0; indx <=uNumBuffersUsed; ++indx)
-		  if (pMemoryBuffers[indx] == ptr)	
-			  break;
-	  //if ((indx>uNumBuffersUsed)&& !aborting_app )
-		  //AbortWithError(); //to detect memory problems - uncomment
-	  if (!bUseBigBuffer)
-		  free(pMemoryBuffers[indx]);
-	  pMemoryBuffers[indx] = NULL;
-	  uMemoryBuffersSizes[indx] = 0;
-	  pMemoryBuffersNames[indx][0] = 0;
-	  if (indx == (uNumBuffersUsed-1))
-		  {
-		  if (indx>0)
-			  {
-			  uBuffindx = 0;
-			  for (j = 0; j < uNumBuffersUsed-1; ++j)
-				  {
-				  if (pMemoryBuffers[j])
-					  uBuffindx = j;
-				  }
-			  uNumBuffersUsed =  uBuffindx + 1;
-			  if (bUseBigBuffer)
-				  uNextFreeOffsetInBigBuffer = 
-				  ((long)((char*)pMemoryBuffers[uBuffindx] -(char*)pBigBufferAligned)+ uMemoryBuffersSizes[uBuffindx]);
-			  }
-		  else
-			  {
-			  uNumBuffersUsed = 0;
-			  uNextFreeOffsetInBigBuffer = 0;
-			  }
-		  }
-	  }
-	  */
-/*
-  v2 = this;
-  if ( ptr )
-  {
-    if ( !this->bBigBufferAllocated && !aborting_app )
-      AbortWithError();
-    v3 = v2->uNumBuffersUsed;
-    for ( i = 0; i < (signed int)v3; ++i )
-    {
-      if ( v2->pMemoryBuffers[i] == ptr )
-        break;
-    }
-    if ( i >= (signed int)v3 && !aborting_app )
-      AbortWithError();
-    if ( !v2->bUseBigBuffer )
-      free(v2->pMemoryBuffers[i]);
-    v2->pMemoryBuffers[i] = 0;
-    v2->uMemoryBuffersSizes[i] = 0;
-    LOBYTE(v2->pMemoryBuffers[3 * i + 12000]) = 0;
-    v5 = v2->uNumBuffersUsed;
-    if ( i == v5 - 1 )
-    {
-      if ( i )
-      {
-        v6 = 0;
-        for ( j = 0; j < (signed int)v5; ++j )
-        {
-          if ( v2->pMemoryBuffers[j] )
-            v6 = j;
-        }
-        v8 = v2->bUseBigBuffer == 0;
-        v2->uNumBuffersUsed = v6 + 1;
-        if ( !v8 )
-          v2->uNextFreeOffsetInBigBuffer = (char *)v2->pMemoryBuffers[v6]
-                                         + v2->uMemoryBuffersSizes[v6]
-                                         - v2->pBigMemoryBuffer;
-      }
-      else
-      {
-        v2->uNextFreeOffsetInBigBuffer = 0;
-        v2->uNumBuffersUsed = 0;
-      }
-    }
-  }*/
-}
-// 720018: using guessed type int aborting_app;
-
-
-
-//----- (00426429) --------------------------------------------------------
-Allocator::Allocator()
-{
-  Allocator *v1; // eax@1
-  signed int v2; // ecx@1
-  int v3; // edx@1
-
-  v1 = this;
-  v2 = 0;
-  v1->uBigBufferSizeAligned = 0;
-  v1->bBigBufferAllocated = 0;
-  v3 = (int)v1->pMemoryBuffersNames;
-  do
-  {
-    v1->pMemoryBuffers[v2] = 0;
-    v1->uMemoryBuffersSizes[v2] = 0;
-    *(char *)v3 = 0;
-    ++v2;
-    v3 += 12;
-  }
-  while ( v2 < 6000 );
-  v1->uDumpsCount = 0;
-}
-
-
-//----- (0042654C) --------------------------------------------------------
-bool Allocator::CreateFileDump(const char *a1)
-{
-  Allocator *v2; // esi@1
-  unsigned int v3; // ST44_4@1
-  FILE *v4; // eax@1
-  FILE *v5; // edi@1
-  bool result; // eax@2
-  unsigned int v7; // ecx@5
-  int v8; // edx@5
-  int v9; // eax@6
-  int v10; // eax@8
-  int v11; // ecx@8
-  signed int v12; // ebx@8
-  signed int v13; // ebx@10
-  struct _MEMORYSTATUS memstat; // [sp+8h] [bp-38h]@5
-  char Filename[20]; // [sp+28h] [bp-18h]@1
-  unsigned int *v16; // [sp+3Ch] [bp-4h]@11
-  int a1a; // [sp+48h] [bp+8h]@11
-
-  v2 = this;
-  v3 = this->uDumpsCount;
-  this->uDumpsCount = v3 + 1;
-  sprintf(Filename, "Mem%03i.txt", v3);
-  v4 = fopen(Filename, "w");
-  v5 = v4;
-  if ( v4 )
-  {
-    if ( a1 )
-      fprintf(v4, "%s\n\n", a1);
-    fprintf(v5, "Windows Memory Status");
-    GlobalMemoryStatus(&memstat);
-    fprintf(v5, "dwLength:         %d\n\n", memstat.dwLength);
-    fprintf(v5, "dwMemoryLoad:     %d\n", memstat.dwMemoryLoad);
-    fprintf(v5, "dwTotalPhys:      %d\n", memstat.dwTotalPhys);
-    fprintf(v5, "dwAvailPhys:      %d\n", memstat.dwAvailPhys);
-    fprintf(v5, "dwTotalPageFile:  %d\n", memstat.dwTotalPageFile);
-    fprintf(v5, "dwAvailPageFile:  %d\n", memstat.dwAvailPageFile);
-    fprintf(v5, "dwTotalVirtual:   %d\n", memstat.dwTotalVirtual);
-    fprintf(v5, "dwAvailVirtual:   %d\n\n\n", memstat.dwAvailVirtual);
-    v7 = v2->uNumBuffersUsed;
-    v8 = 0;
-    if ( (signed int)v7 > 0 )
-    {
-      v9 = (int)v2->uMemoryBuffersSizes;
-      do
-      {
-        v8 += *(int *)v9;
-        v9 += 4;
-        --v7;
-      }
-      while ( v7 );
-    }
-    v10 = 0;
-    v11 = (int)v2->uMemoryBuffersSizes;
-    v12 = 6000;
-    do
-    {
-      v10 += *(int *)v11;
-      v11 += 4;
-      --v12;
-    }
-    while ( v12 );
-    fprintf(v5, "Size: %i  %i  %i\n\n", v2->uNumBuffersUsed, v8, v10);
-    v13 = 0;
-    if ( (signed int)v2->uNumBuffersUsed > 0 )
-    {
-      v16 = v2->uMemoryBuffersSizes;
-      a1a = (int)v2->pMemoryBuffersNames;
-      do
-      {
-        fprintf(v5, "%10i %10i %s\n", v13, *v16, a1a);
-        a1a += 12;
-        ++v16;
-        ++v13;
-      }
-      while ( v13 < (signed int)v2->uNumBuffersUsed );
-    }
-    fclose(v5);
-    result = 0;
-  }
-  else
-  {
-    result = 1;
-  }
-  return result;
-}
-
-
-
-
-
-
-
-
-//----- (00426892) --------------------------------------------------------
-static void __fastcall CheckMemoryAccessibility(void *pBase, DWORD uSize)
-{
-  DWORD v2; // edi@1
-  DWORD i; // eax@1
-  struct _SYSTEM_INFO SystemInfo; // [sp+8h] [bp-24h]@1
-
-  v2 = uSize;
-  GetSystemInfo(&SystemInfo);
-  for ( i = 16 * SystemInfo.dwPageSize; i < v2; i += SystemInfo.dwPageSize )
-    ;
-}
--- a/Allocator.h	Tue Sep 10 18:43:52 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#pragma once
-
-
-#pragma pack(push, 1)
-struct Allocator
-{
-  static Allocator *Create() {static Allocator a; return &a;}
-
-  Allocator();
-  bool  Initialize(unsigned int uNumKBytes);
-  void *AllocNamedChunk(const void *pPrevPtrValue, unsigned int uSize, const char *pName);
-  void FreeChunk(void *ptr);
-  bool CreateFileDump(const char *a1);
-
-  void *pMemoryBuffers[6000];
-  unsigned int uMemoryBuffersSizes[6000];
-  char pMemoryBuffersNames[6000][12];
-  unsigned int uDumpsCount;
-  unsigned int uNumBuffersUsed;
-  void *pBigMemoryBuffer;
-  unsigned int uNextFreeOffsetInBigBuffer;
-  unsigned int uBigBufferSizeAligned;
-  unsigned int bBigBufferAllocated;
-  unsigned int bUseBigBuffer;
-  void *pBigBufferAligned;
-};
-#pragma pack(pop)
-
-
-
-extern Allocator *pAllocator; // idb
\ No newline at end of file
--- a/AudioPlayer.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/AudioPlayer.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -7,7 +7,6 @@
 #include "mm7_data.h"
 #include "VideoPlayer.h"
 #include "AudioPlayer.h"
-#include "Allocator.h"
 #include "FrameTableInc.h"
 #include "Indoor.h"
 #include "SpriteObject.h"
@@ -399,7 +398,7 @@
   assert(sNumSounds);
   assert(!num_mm8_sounds);
 
-  pSounds = (SoundDesc *)pAllocator->AllocNamedChunk(pSounds, sNumSounds * sizeof(SoundDesc), "Snd Des.");
+  pSounds = (SoundDesc *)malloc(sNumSounds * sizeof(SoundDesc));
   memcpy(pSounds, (char *)data_mm7 + 4, num_mm7_sounds * sizeof(SoundDesc));
   for (uint i = 0; i < num_mm6_sounds; ++i)
   {
@@ -436,7 +435,7 @@
   unsigned int Argsa; // [sp+304h] [bp+8h]@3
 
   v2 = this;
-  pAllocator->FreeChunk(this->pSounds);
+  free(this->pSounds);
   v3 = 0;
   v2->pSounds = 0;
   v2->sNumSounds = 0;
@@ -461,7 +460,7 @@
     v3 = 0;
   }
   v2->sNumSounds = v5;
-  v6 = pAllocator->AllocNamedChunk(v2->pSounds, 120 * v5, "Snd Des.");
+  v6 = malloc(120 * v5);
   v2->pSounds = (SoundDesc *)v6;
   if ( v6 == (void *)v3 )
     Error("SoundListClass::load - Out of Memory!");
@@ -1873,7 +1872,7 @@
 
   ReadFile(hAudioSnd, &uNumSoundHeaders, 4u, &NumberOfBytesRead, 0);
   pSoundHeaders = nullptr;
-  pSoundHeaders = (SoundHeader *)pAllocator->AllocNamedChunk(0, 52 * uNumSoundHeaders + 2, 0);
+  pSoundHeaders = (SoundHeader *)malloc(52 * uNumSoundHeaders + 2);
   ReadFile(hAudioSnd, pSoundHeaders, 52 * uNumSoundHeaders, &NumberOfBytesRead, 0);
 }
 
@@ -2417,7 +2416,7 @@
   {
     if ( pSounds[i].pSoundData == _this )
     {
-      pAllocator->FreeChunk(_this);
+      free(_this);
       memset(&pSounds[i], 0, 0x80u);
     }
   }
@@ -2506,7 +2505,7 @@
   if ( uFindSound_BinSearch_ResultID == -1 )
     return 0;
   if ( pOutBuff == (SoundData *)-1 )
-    pOutBuff = (SoundData *)pAllocator->AllocNamedChunk(0, pAudioPlayer->pSoundHeaders[uFindSound_BinSearch_ResultID].uDecompressedSize + 4, pSoundName);
+    pOutBuff = (SoundData *)malloc(pAudioPlayer->pSoundHeaders[uFindSound_BinSearch_ResultID].uDecompressedSize + 4);
   SetFilePointer(pAudioPlayer->hAudioSnd, pAudioPlayer->pSoundHeaders[uFindSound_BinSearch_ResultID].uFileOffset, 0, 0);
   if ( (signed int)pAudioPlayer->pSoundHeaders[uFindSound_BinSearch_ResultID].uCompressedSize >= (signed int)pAudioPlayer->pSoundHeaders[uFindSound_BinSearch_ResultID].uDecompressedSize )
   {
--- a/BSPModel.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/BSPModel.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -1,5 +1,6 @@
+#include <stdlib.h>
+
 #include "BSPModel.h"
-#include "Allocator.h"
 
 
 
@@ -12,16 +13,16 @@
   void *v4; // ST00_4@1
 
   v1 = this;
-  pAllocator->FreeChunk(*(void **)&this->pVertices.pVertices);
+  free(*(void **)&this->pVertices.pVertices);
   v2 = v1->pFaces;
   v1->pVertices.pVertices = 0;
-  pAllocator->FreeChunk(v2);
+  free(v2);
   v3 = v1->pFacesOrdering;
   v1->pFaces = 0;
-  pAllocator->FreeChunk(v3);
+  free(v3);
   v4 = v1->pNodes;
   v1->pFacesOrdering = 0;
-  pAllocator->FreeChunk(v4);
+  free(v4);
   v1->pNodes = 0;
   v1->uNumNodes = 0;
   v1->uNumFaces = 0;
--- a/Chest.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Chest.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -8,7 +8,6 @@
 #include "Items.h"
 #include "Chest.h"
 #include "FrameTableInc.h"
-#include "Allocator.h"
 #include "LOD.h"
 #include "MapInfo.h"
 #include "Actor.h"
@@ -635,7 +634,7 @@
   assert(uNumChests);
   assert(!num_mm8_chests);
 
-  pChests = (ChestDesc *)pAllocator->AllocNamedChunk(pChests, uNumChests * sizeof(ChestDesc), "Chest Descrip");
+  pChests = (ChestDesc *)malloc(uNumChests * sizeof(ChestDesc));
   memcpy(pChests,                                   (char *)data_mm7 + 4, num_mm7_chests * sizeof(ChestDesc));
   memcpy(pChests + num_mm7_chests,                  (char *)data_mm6 + 4, num_mm6_chests * sizeof(ChestDesc));
   memcpy(pChests + num_mm6_chests + num_mm7_chests, (char *)data_mm8 + 4, num_mm8_chests * sizeof(ChestDesc));
@@ -664,7 +663,7 @@
   unsigned int Argsa; // [sp+300h] [bp+8h]@3
 
   v2 = this;
-  pAllocator->FreeChunk(this->pChests);
+  free(this->pChests);
   v3 = 0;
   v2->pChests = 0;
   v2->uNumChests = 0;
@@ -690,7 +689,7 @@
   }
   v6 = v2->pChests;
   v2->uNumChests = v5;
-  v7 = pAllocator->AllocNamedChunk(v6, 36 * v5, "Chest Descrip");
+  v7 = malloc(36 * v5);
   v2->pChests = (ChestDesc *)v7;
   if ( v7 == (void *)v3 )
     Error("ChestDescriptionList::load - Out of Memory!");
--- a/DecorationList.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/DecorationList.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -1,6 +1,5 @@
 #include "Sprites.h"
 #include "DecorationList.h"
-#include "Allocator.h"
 #include "MM7.h"
 #include "FrameTableInc.h"
 #include "mm7_data.h"
@@ -18,7 +17,7 @@
   Assert(uNumDecorations);
   Assert(!num_mm8_decs);
 
-  pDecorations = (DecorationDesc *)pAllocator->AllocNamedChunk(pDecorations, uNumDecorations * sizeof(DecorationDesc), "Dec Descrip");
+  pDecorations = (DecorationDesc *)malloc(uNumDecorations * sizeof(DecorationDesc));
   memcpy(pDecorations, (char *)data_mm7 + 4, num_mm7_decs * sizeof(DecorationDesc));
   for (uint i = 0; i < num_mm6_decs; ++i)
   {
@@ -104,7 +103,7 @@
     v4 = Argsa;
   }
   v2->uNumDecorations = v4;
-  v5 = pAllocator->AllocNamedChunk(v2->pDecorations, 84 * v4, "Dec Descrip");
+  v5 = malloc(84 * v4);
   v2->pDecorations = (DecorationDesc *)v5;
   if ( !v5 )
     Error("DecorationDescriptionList::load - Out of Memory!");
--- a/Events.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Events.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -25,7 +25,6 @@
 #include "Indoor.h"
 #include "Viewport.h"
 #include "texts.h"
-#include "Allocator.h"
 #include "stru123.h"
 #include "stru159.h"
 #include "Events.h"
@@ -84,7 +83,7 @@
     Error("File %s Size %lu - Buffer size %lu", pContainerName, uTextureSize, uBufferSize);
 
   memcpy(pBuffer, ptr, uTextureSize);
-  pAllocator->FreeChunk(ptr);
+  free(ptr);
   return uTextureSize;
   }
 
@@ -812,7 +811,7 @@
                 do
                   {
                   v49 = v48->pNext;
-                  pAllocator->FreeChunk(v48);
+                  free(v48);
                   v48 = v49;
                   }
                   while ( v49 );
--- a/GUIWindow.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/GUIWindow.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -10,7 +10,6 @@
 #include "IndoorCamera.h"
 #include "Math.h"
 #include "VideoPlayer.h"
-#include "Allocator.h"
 #include "MapInfo.h"
 #include "Time.h"
 #include "AudioPlayer.h"
@@ -353,7 +352,7 @@
     do
     {
       pNextBtn = this->pControlsHead->pNext;
-      pAllocator->FreeChunk(this->pControlsHead);
+      free(this->pControlsHead);
       this->pControlsHead = pNextBtn;
     }
     while ( pNextBtn );
@@ -1496,7 +1495,7 @@
   GUIButton *v21; // eax@7
   va_list texturs_ptr;
 
-  pButton = (GUIButton *)pAllocator->AllocNamedChunk(0, 0xBCu, "BUTTON");
+  pButton = (GUIButton *)malloc(0xBC);
   pButton->pParent = this;
   pButton->uWidth = uWidth;
   pButton->uHeight = uHeight;
--- a/IconFrameTable.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/IconFrameTable.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -1,7 +1,6 @@
 #include "IconFrameTable.h"
 #include "LOD.h"
 #include "mm7_data.h"
-#include "Allocator.h"
 #include "FrameTableInc.h"
 
 //----- (00494F3A) --------------------------------------------------------
@@ -122,7 +121,7 @@
   Assert(uNumIcons);
   Assert(!num_mm8_frames);
 
-  pIcons = (IconFrame *)pAllocator->AllocNamedChunk(pIcons, uNumIcons * sizeof(IconFrame), "I Frames");
+  pIcons = (IconFrame *)malloc(uNumIcons * sizeof(IconFrame));
   memcpy(pIcons,                                   (char *)data_mm7 + 4, num_mm7_frames * sizeof(IconFrame));
   memcpy(pIcons + num_mm7_frames,                  (char *)data_mm6 + 4, num_mm6_frames * sizeof(IconFrame));
   memcpy(pIcons + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4, num_mm8_frames * sizeof(IconFrame));
@@ -182,7 +181,7 @@
     v4 = v21;
   }
   v2->uNumIcons = v4;
-  v5 = pAllocator->AllocNamedChunk(v2->pIcons, 32 * v4, "I Frames");
+  v5 = malloc(32 * v4);//, "I Frames");
   v2->pIcons = (IconFrame *)v5;
   if ( v5 )
   {
--- a/Indoor.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Indoor.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -17,7 +17,6 @@
 #include "Time.h"
 #include "Party.h"
 #include "Math.h"
-#include "Allocator.h"
 #include "LOD.h"
 #include "DecorationList.h"
 #include "ObjectList.h"
@@ -1023,15 +1022,15 @@
 
   v1 = this;
   v2 = (char *)&this->ptr_0002B4_doors_ddata;
-  pAllocator->FreeChunk(this->ptr_0002B4_doors_ddata);
+  free(this->ptr_0002B4_doors_ddata);
   *(int *)v2 = 0;
-  pAllocator->FreeChunk(v1->ptr_0002B0_sector_rdata);
+  free(v1->ptr_0002B0_sector_rdata);
   v1->ptr_0002B0_sector_rdata = 0;
-  pAllocator->FreeChunk(v1->ptr_0002B8_sector_lrdata);
+  free(v1->ptr_0002B8_sector_lrdata);
   v1->ptr_0002B8_sector_lrdata = 0;
-  pAllocator->FreeChunk(v1->pLFaces);
+  free(v1->pLFaces);
   v1->pLFaces = 0;
-  pAllocator->FreeChunk(v1->pSpawnPoints);
+  free(v1->pSpawnPoints);
   v3 = v1->pVertices;
   v1->pSpawnPoints = 0;
   v1->uNumSectors = 0;
@@ -1040,14 +1039,14 @@
   v1->uNumNodes = 0;
   v1->uNumDoors = 0;
   v1->uNumLights = 0;
-  pAllocator->FreeChunk(v3);
-  pAllocator->FreeChunk(v1->pFaces);
-  pAllocator->FreeChunk(v1->pFaceExtras);
-  pAllocator->FreeChunk(v1->pSectors);
-  pAllocator->FreeChunk(v1->pLights);
-  pAllocator->FreeChunk(v1->pDoors);
-  pAllocator->FreeChunk(v1->pNodes);
-  pAllocator->FreeChunk(v1->pMapOutlines);
+  free(v3);
+  free(v1->pFaces);
+  free(v1->pFaceExtras);
+  free(v1->pSectors);
+  free(v1->pLights);
+  free(v1->pDoors);
+  free(v1->pNodes);
+  free(v1->pMapOutlines);
   v1->pVertices = 0;
   v1->pFaces = 0;
   v1->pFaceExtras = 0;
@@ -1062,14 +1061,14 @@
 //----- (00498C45) --------------------------------------------------------
 bool IndoorLocation::Alloc()
     {
-  pVertices   = (Vec3_short_ *)   pAllocator->AllocNamedChunk(pVertices, 15000*sizeof(Vec3_short_),  "L.V");//0x15F90u
-  pFaces      = (BLVFace *)       pAllocator->AllocNamedChunk(pFaces,    10000*sizeof(BLVFace),      "L.F");//0xEA600u
-  pFaceExtras = (BLVFaceExtra *)  pAllocator->AllocNamedChunk(pFaceExtras,5000*sizeof(BLVFaceExtra), "L.FX"); //0x2BF20u
-  pSectors =    (BLVSector *)     pAllocator->AllocNamedChunk(pSectors,    512*sizeof(BLVSector),     "L.R");//0xE800u
-  pLights =     (BLVLightMM7 *)   pAllocator->AllocNamedChunk(pLights,     400*sizeof(BLVLightMM7),   "L.L");//0x1900u
-  pDoors =      (BLVDoor *)       pAllocator->AllocNamedChunk(pDoors,      200*sizeof(BLVDoor),       "L.D");//0x3E80u
-  pNodes =      (BSPNode *)       pAllocator->AllocNamedChunk(pNodes,     5000*sizeof(BSPNode),       "L.BSP");//0x9C40u
-  pMapOutlines =(BLVMapOutlines *)pAllocator->AllocNamedChunk(pMapOutlines,   sizeof(BLVMapOutlines), "L.Map");//0x14824u
+  pVertices   = (Vec3_short_ *)   malloc(15000 * sizeof(Vec3_short_));//0x15F90u
+  pFaces      = (BLVFace *)       malloc(10000 * sizeof(BLVFace));//0xEA600u
+  pFaceExtras = (BLVFaceExtra *)  malloc(5000 * sizeof(BLVFaceExtra)); //0x2BF20u
+  pSectors =    (BLVSector *)     malloc(512 * sizeof(BLVSector));//0xE800u
+  pLights =     (BLVLightMM7 *)   malloc(400 * sizeof(BLVLightMM7));//0x1900u
+  pDoors =      (BLVDoor *)       malloc(200 * sizeof(BLVDoor));//0x3E80u
+  pNodes =      (BSPNode *)       malloc(5000 * sizeof(BSPNode));//0x9C40u
+  pMapOutlines =(BLVMapOutlines *)malloc(sizeof(BLVMapOutlines));//0x14824u
   if (pVertices && pFaces && pFaceExtras && pSectors && pLights && pDoors && pNodes && pMapOutlines )
   {
     memset(pVertices,  0, 15000*sizeof(Vec3_short_));
@@ -1345,7 +1344,7 @@
       fread(&uNumFaces, 4u, 1u, v7);
       fseek(v7, v210, 0);
       fread(pFaces, 0x60u, uNumFaces, v7);
-      v10 = pAllocator->AllocNamedChunk(ptr_2AC, blv.uFaces_fdata_Size, "L.FData");
+      v10 = malloc(ptr_2AC, blv.uFaces_fdata_Size, "L.FData");
       v202 = (int)v7;
       ptr_2AC = (unsigned __int16 *)v10;
       fread(v10, 1u, blv.uFaces_fdata_Size, (FILE *)v202);
@@ -1466,7 +1465,7 @@
       fread(&uNumSectors, 4u, 1u, v7);
       fseek(v7, v214, 0);
       fread(pSectors, 0x74u, uNumSectors, v7);
-      v32 = pAllocator->AllocNamedChunk(ptr_0002B0_sector_rdata, blv.uSector_rdata_Size, "L.RData");
+      v32 = malloc(ptr_0002B0_sector_rdata, blv.uSector_rdata_Size, "L.RData");
       v202 = (int)v7;
       ptr_0002B0_sector_rdata = (unsigned __int16 *)v32;
       fread(v32, 1u, blv.uSector_rdata_Size, (FILE *)v202);
@@ -1523,7 +1522,7 @@
         }
         while ( Argse < uNumSectors );
       }
-      v47 = pAllocator->AllocNamedChunk(
+      v47 = malloc(
               ptr_0002B8_sector_lrdata,
               blv.uSector_lrdata_Size,
               "L.RLData");
@@ -1554,7 +1553,7 @@
       fread(&uNumDoors, 4u, 1u, v7);
       fseek(v7, v216, 0);
       fread(pDoors, 0x50u, 0xC8u, v7);
-      v51 = pAllocator->AllocNamedChunk(ptr_0002B4_doors_ddata, blv.uDoors_ddata_Size, "L.DData");
+      v51 = malloc(ptr_0002B4_doors_ddata, blv.uDoors_ddata_Size, "L.DData");
       v202 = (int)v7;
       ptr_0002B4_doors_ddata = (unsigned __int16 *)v51;
       fread(v51, 1u, blv.uDoors_ddata_Size, (FILE *)v202);
@@ -1718,7 +1717,7 @@
       fread(pNodes, 8u, uNumNodes, v7);
       fseek(v7, v230, 0);
       fread(&uNumSpawnPoints, 4u, 1u, v7);
-      v79 = pAllocator->AllocNamedChunk(pSpawnPoints, 24 * uNumSpawnPoints, "Spawn");
+      v79 = malloc(pSpawnPoints, 24 * uNumSpawnPoints, "Spawn");
       v202 = 0;
       pSpawnPoints = (SpawnPointMM7 *)v79;
       fseek(v7, v231, v202);
@@ -1823,7 +1822,7 @@
   pGameLoadingUI_ProgressBar->Progress();
 
   memcpy(pFaces, pData += 4, uNumFaces * sizeof (BLVFace));
-  pLFaces = (unsigned __int16 *)pAllocator->AllocNamedChunk(pLFaces, blv.uFaces_fdata_Size, "L.FData");
+  pLFaces = (unsigned __int16 *)malloc(blv.uFaces_fdata_Size);
 
   memcpy(pLFaces, pData += uNumFaces * sizeof (BLVFace), blv.uFaces_fdata_Size);
 
@@ -1951,7 +1950,7 @@
 
   pGameLoadingUI_ProgressBar->Progress();
 
-  ptr_0002B0_sector_rdata = (unsigned short *)pAllocator->AllocNamedChunk(ptr_0002B0_sector_rdata, blv.uSector_rdata_Size, "L.RData");
+  ptr_0002B0_sector_rdata = (unsigned short *)malloc(blv.uSector_rdata_Size);//, "L.RData");
   memcpy(ptr_0002B0_sector_rdata, pData, blv.uSector_rdata_Size);
   pData += blv.uSector_rdata_Size;
 
@@ -2034,7 +2033,7 @@
     //while ( v245 < uNumSectors );
   }
 
-  ptr_0002B8_sector_lrdata = (unsigned __int16 *)pAllocator->AllocNamedChunk(ptr_0002B8_sector_lrdata, blv.uSector_lrdata_Size, "L.RLData");
+  ptr_0002B8_sector_lrdata = (unsigned __int16 *)malloc(blv.uSector_lrdata_Size);//, "L.RLData");
   memcpy(ptr_0002B8_sector_lrdata, pData, blv.uSector_lrdata_Size);
   pData += blv.uSector_lrdata_Size;
 
@@ -2082,7 +2081,7 @@
   pGameLoadingUI_ProgressBar->Progress();
 
   memcpy(&uNumSpawnPoints, pData, 4);
-  pSpawnPoints = (SpawnPointMM7 *)pAllocator->AllocNamedChunk(pSpawnPoints, uNumSpawnPoints * sizeof(SpawnPointMM7), "Spawn");
+  pSpawnPoints = (SpawnPointMM7 *)malloc(uNumSpawnPoints * sizeof(SpawnPointMM7));
   memcpy(pSpawnPoints, pData + 4, uNumSpawnPoints * sizeof(SpawnPointMM7));
   pData += 4 + uNumSpawnPoints * sizeof(SpawnPointMM7);
   
@@ -2294,9 +2293,9 @@
 
   //v201 = (const char *)blv.uDoors_ddata_Size;
   //v200 = (size_t)ptr_0002B4_doors_ddata;
-  //v170 = pAllocator->AllocNamedChunk(ptr_0002B4_doors_ddata, blv.uDoors_ddata_Size, "L.DData");
+  //v170 = malloc(ptr_0002B4_doors_ddata, blv.uDoors_ddata_Size, "L.DData");
   //v171 = blv.uDoors_ddata_Size;
-  ptr_0002B4_doors_ddata = (unsigned __int16 *)pAllocator->AllocNamedChunk(ptr_0002B4_doors_ddata, blv.uDoors_ddata_Size, "L.DData");
+  ptr_0002B4_doors_ddata = (unsigned __int16 *)malloc(blv.uDoors_ddata_Size);//, "L.DData");
   memcpy(ptr_0002B4_doors_ddata, pData, blv.uDoors_ddata_Size);
   pData += blv.uDoors_ddata_Size;
 
@@ -3690,7 +3689,7 @@
     v3 = v37;
   }
   dword_6BE13C_uCurrentlyLoadedLocationID = v39;
-  pAllocator->FreeChunk(ptr_6A0D08);
+  free(ptr_6A0D08);
   ptr_6A0D08 = 0;
   _6A0D0C_txt_lod_loading = 0;
   TryLoadLevelFromLOD();
--- a/Items.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Items.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -6,7 +6,6 @@
 
 #include "Items.h"
 #include "MapInfo.h"
-#include "Allocator.h"
 #include "GUIWindow.h"
 #include "Events2D.h"
 #include "Chest.h"
@@ -281,27 +280,27 @@
 void ItemsTable::Release()
 {
   if ( pMonstersTXT_Raw )
-    pAllocator->FreeChunk(pMonstersTXT_Raw);
+    free(pMonstersTXT_Raw);
   if ( pMonsterPlacementTXT_Raw )
-    pAllocator->FreeChunk(pMonsterPlacementTXT_Raw);
+    free(pMonsterPlacementTXT_Raw);
   if ( pSkillDescTXT_Raw )
-    pAllocator->FreeChunk(pSkillDescTXT_Raw);
+    free(pSkillDescTXT_Raw);
   if (pSpcItemsTXT_Raw )
-    pAllocator->FreeChunk(pSpcItemsTXT_Raw);
+    free(pSpcItemsTXT_Raw);
   if ( pStdItemsTXT_Raw )
-    pAllocator->FreeChunk(pStdItemsTXT_Raw);
+    free(pStdItemsTXT_Raw);
   if ( pRndItemsTXT_Raw )
-    pAllocator->FreeChunk(pRndItemsTXT_Raw);
+    free(pRndItemsTXT_Raw);
   if ( pItemsTXT_Raw )
-    pAllocator->FreeChunk(pItemsTXT_Raw);
+    free(pItemsTXT_Raw);
   if ( pHostileTXT_Raw )
-    pAllocator->FreeChunk(pHostileTXT_Raw);
+    free(pHostileTXT_Raw);
   if ( pHistoryTXT_Raw )
-    pAllocator->FreeChunk(pHistoryTXT_Raw);
+    free(pHistoryTXT_Raw);
   if ( pPotionsTXT_Raw )
-    pAllocator->FreeChunk(pPotionsTXT_Raw);
+    free(pPotionsTXT_Raw);
   if ( pPotionNotesTXT_Raw )
-    pAllocator->FreeChunk(pPotionNotesTXT_Raw);
+    free(pPotionNotesTXT_Raw);
   pSpcItemsTXT_Raw = NULL;
   pSkillDescTXT_Raw = NULL;
   pStdItemsTXT_Raw = NULL;
@@ -1050,7 +1049,7 @@
 
 	if ( pRndItemsTXT_Raw )
 		{
-		pAllocator->FreeChunk(pRndItemsTXT_Raw);
+		free(pRndItemsTXT_Raw);
 		pRndItemsTXT_Raw = NULL;
 		}
 
@@ -1285,7 +1284,7 @@
 	unsigned __int8 potion_value;
 
 	if ( pPotionsTXT_Raw )
-		pAllocator->FreeChunk(pPotionsTXT_Raw);
+		free(pPotionsTXT_Raw);
 	pPotionsTXT_Raw = NULL;
 	pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0);
 	test_string = strtok(pPotionsTXT_Raw,"\t\r\n");
@@ -1352,7 +1351,7 @@
 		}
 	if ( pPotionsTXT_Raw )
 		{
-		pAllocator->FreeChunk(pPotionsTXT_Raw);
+		free(pPotionsTXT_Raw);
 		pPotionsTXT_Raw = 0;
 		}
 	}
@@ -1368,7 +1367,7 @@
 	unsigned __int8 potion_note;
 
 	if ( pPotionNotesTXT_Raw )
-		pAllocator->FreeChunk(pPotionNotesTXT_Raw);
+		free(pPotionNotesTXT_Raw);
 	pPotionNotesTXT_Raw = NULL;
 	pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0);
 	test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n");
@@ -1599,7 +1598,7 @@
 
     v5 = this;
     if (!out_item)
-        out_item = (ItemGen *)pAllocator->AllocNamedChunk(out_item, sizeof(*out_item), "newItemGen");
+        out_item = (ItemGen *)malloc(sizeof(ItemGen));
     memset(out_item, 0, sizeof(*out_item));
 
 
--- a/LOD.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/LOD.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -4,7 +4,6 @@
 
 #include "LOD.h"
 #include "Render.h"
-#include "Allocator.h"
 #include "PaletteManager.h"
 #include "Viewport.h"
 
@@ -182,7 +181,7 @@
     fread(pSpriteHeader, 1u, 0x20u, v3);
     strcpy(pSpriteHeader->pName, pContainer);
     Sizea = pSpriteHeader->uSpriteSize;
-    v7 = (LODSprite_stru0 *)pAllocator->AllocNamedChunk(v6->pSpriteLines, 8 * v6->uHeight, v6->pName);
+    v7 = (LODSprite_stru0 *)malloc(8 * v6->uHeight);
     v8 = 8 * pSpriteHeader->uHeight;
     pSpriteHeader->pSpriteLines = v7;
     fread(v7, 1u, v8, v4);
@@ -190,19 +189,16 @@
     v10 = pSpriteHeader->uDecompressedSize;
     if ( v10 )
     {
-      pSpriteHeader->pDecompressedBytes = pAllocator->AllocNamedChunk(
-                                            pSpriteHeader->pDecompressedBytes,
-                                            v10,
-                                            pSpriteHeader->pName);
-      DstBufa = pAllocator->AllocNamedChunk(0, Sizea, pSpriteHeader->pName);
+      pSpriteHeader->pDecompressedBytes = malloc(v10);
+      DstBufa = malloc(Sizea);
       fread(DstBufa, 1u, Sizea, File);
       zlib::MemUnzip(v6->pDecompressedBytes, (unsigned int *)&v6->uDecompressedSize, DstBufa, v6->uSpriteSize);
       v6->uSpriteSize = *v9;
-      pAllocator->FreeChunk(DstBufa);
+      free(DstBufa);
     }
     else
     {
-      v11 = pAllocator->AllocNamedChunk(pSpriteHeader->pDecompressedBytes, Sizea, pSpriteHeader->pName);
+      v11 = malloc(Sizea);
       pSpriteHeader->pDecompressedBytes = v11;
       fread(v11, 1u, Sizea, File);
     }
@@ -265,7 +261,7 @@
         {
         if ( !pHardwareSprites )
             {
-            pHardwareSprites = (Sprite *)pAllocator->AllocNamedChunk(0, 1500*sizeof(Sprite) , "hardSprites");//0xEA60u
+            pHardwareSprites = (Sprite *)malloc(1500*sizeof(Sprite));//0xEA60u
             for (i=0; i<1500;++i)
                 {
                 pHardwareSprites[i].pName=NULL;
@@ -317,7 +313,7 @@
 
     if ( pRenderer->pRenderD3D )
         {
-        pHardwareSprites[uNumLoadedSprites].pName = (const char *)pAllocator->AllocNamedChunk(pHardwareSprites[uNumLoadedSprites].pName, 20, pContainerName);
+        pHardwareSprites[uNumLoadedSprites].pName = (const char *)malloc(20);
         strcpy((char *)pHardwareSprites[uNumLoadedSprites].pName, pContainerName);
         pHardwareSprites[uNumLoadedSprites].uPaletteID = uPaletteID;
         pRenderer->MoveSpriteToDevice(&pHardwareSprites[uNumLoadedSprites]);
@@ -944,8 +940,8 @@
   {
     this->pContainerName[0] = 0;
     this->uCurrentIndexDir = 0;
-    pAllocator->FreeChunk(pSubIndices);
-    pAllocator->FreeChunk(pRoot);
+    free(pSubIndices);
+    free(pRoot);
     pSubIndices = NULL;
     pRoot = NULL;
     fclose(pFile);
@@ -991,7 +987,7 @@
     uOffsetToSubIndex = 0;
     uNumSubDirs = 0;
     uLODDataSize = 0;
-    pAllocator->FreeChunk(pSubIndices);
+    free(pSubIndices);
     pSubIndices = NULL;
   }
 }
@@ -1062,8 +1058,8 @@
   v1 = this;
   if ( !(HIBYTE(this->word_1A) & 4) )
   {
-    pAllocator->FreeChunk(this->pDecompressedBytes);
-    pAllocator->FreeChunk(v1->pSpriteLines);
+    free(this->pDecompressedBytes);
+    free(v1->pSpriteLines);
   }
   v1->word_1A = 0;
   v1->pDecompressedBytes = 0;
@@ -1081,7 +1077,7 @@
 void Sprite::Release()
 {
   if (pName)
-    pAllocator->FreeChunk((void *)pName);
+    free((void *)pName);
   pName = nullptr;
 
   if (pTextureSurface)
@@ -1267,8 +1263,8 @@
   v1 = this;
   if ( !(HIBYTE(this->word_1A) & 4) )
   {
-    pAllocator->FreeChunk(pDecompressedBytes);
-    pAllocator->FreeChunk(pSpriteLines);
+    free(pDecompressedBytes);
+    free(pSpriteLines);
   }
   pDecompressedBytes = NULL;
   pSpriteLines = NULL;
@@ -1693,8 +1689,8 @@
 //----- (00461A11) --------------------------------------------------------
 void LOD::File::FreeSubIndexAndIO()
 {
-  pAllocator->FreeChunk(pSubIndices);
-  pAllocator->FreeChunk(pIOBuffer);// delete [] pIOBuffer;
+  free(pSubIndices);
+  free(pIOBuffer);// delete [] pIOBuffer;
   pIOBuffer = nullptr;
   pSubIndices = nullptr;
 }
@@ -1706,20 +1702,20 @@
   if (pSubIndices)
   {
     MessageBoxA(0, "Attempt to reset a LOD subindex!", "MM6", MB_ICONEXCLAMATION);
-    pAllocator->FreeChunk(pSubIndices);
+    free(pSubIndices);
     pSubIndices = nullptr;
   }
-  pSubIndices =(LOD::Directory *)pAllocator->AllocNamedChunk( pSubIndices, 32 * uNumSubIndices,"LODsub");
+  pSubIndices =(LOD::Directory *)malloc(32 * uNumSubIndices);
   if (pIOBuffer)
   {
     MessageBoxA(0, "Attempt to reset a LOD IObuffer!", "MM6", MB_ICONEXCLAMATION);
-    pAllocator->FreeChunk(pIOBuffer);
+    free(pIOBuffer);
     pIOBuffer = NULL;
     uIOBufferSize = 0;
   }
   if ( uBufferSize )
   {
-    pIOBuffer = (unsigned __int8 *)pAllocator->AllocNamedChunk(pIOBuffer, uBufferSize, "LODio");
+    pIOBuffer = (unsigned __int8 *)malloc(uBufferSize);
     uIOBufferSize = uBufferSize;
   }
 }
@@ -1746,7 +1742,7 @@
 	  uOffsetToSubIndex =curr_index->uOfsetFromSubindicesStart ;
 	  uNumSubDirs =curr_index->uNumSubIndices;// *(_WORD *)(v8 + 28);
 	  fseek( pFile, uOffsetToSubIndex, SEEK_SET);
-	  pSubIndices = (LOD::Directory *)pAllocator->AllocNamedChunk(pSubIndices, sizeof(LOD::Directory)*(uNumSubDirs + 5), "LOD Index");
+	  pSubIndices = (LOD::Directory *)malloc(sizeof(LOD::Directory)*(uNumSubDirs + 5));
 
 	  if ( pSubIndices)
 		  fread( pSubIndices, sizeof(LOD::Directory),  uNumSubDirs,  pFile);
@@ -1773,7 +1769,7 @@
   {
     strcpy(pLODName, pFilename);
     fread(&header, sizeof(LOD::FileHeader), 1u, pFile);
-    pRoot = (LOD::Directory *)pAllocator->AllocNamedChunk(pRoot, 160, "LOD CArray");
+    pRoot = (LOD::Directory *)malloc(160);
     if ( pRoot )
     {
       fread(pRoot, sizeof(LOD::Directory), header.uNumIndices, pFile);
@@ -1800,7 +1796,7 @@
   if ( this->isFileOpened )
   {
     fclose(this->pFile);
-    pAllocator->FreeChunk(v1->pSubIndices);
+    free(v1->pSubIndices);
   }
 }
 
@@ -2091,20 +2087,20 @@
     if ( a3 )
       v6 = malloc(DstBuf.uDecompressedSize+1);
     else
-      v6 = pAllocator->AllocNamedChunk(0, DstBuf.uDecompressedSize+1, DstBuf.pName);
+      v6 = malloc(DstBuf.uDecompressedSize+1);
     v7 = v6;
-    v8 = pAllocator->AllocNamedChunk(0, DstBuf.uTextureSize+1, DstBuf.pName);
+    v8 = malloc(DstBuf.uTextureSize+1);
     fread(v8, 1u, Argsa, File);
     zlib::MemUnzip(v7, &DstBuf.uDecompressedSize, v8, DstBuf.uTextureSize);
     DstBuf.uTextureSize = DstBuf.uDecompressedSize;
-    pAllocator->FreeChunk(v8);
+    free(v8);
   }
   else
   {
     if ( a3 )
       v9 = malloc(DstBuf.uTextureSize+1);
     else
-      v9 = pAllocator->AllocNamedChunk(0, DstBuf.uTextureSize+1, DstBuf.pName);
+      v9 = malloc(DstBuf.uTextureSize+1);
     v7 = v9;
     fread(v9, 1u, Argsa, v5);
   }
@@ -2547,7 +2543,7 @@
   void *v17; // eax@27
   unsigned int v18; // ST28_4@27
   void *v19; // ST3C_4@27
-  Allocator *v20; // ebx@29
+  //Allocator *v20; // ebx@29
   void *v21; // eax@29
   size_t v22; // ST2C_4@29
   const void *v23; // ecx@29
@@ -2632,8 +2628,7 @@
   pOutTex = (Texture *)v8->uTextureSize;
   if ( !v8->uDecompressedSize || dword_011BA4 )
   {
-    v20 = pAllocator;
-    v32 = pAllocator->AllocNamedChunk(v8->pLevelOfDetail0_prolly_alpha_mask, v15, v8->pName);
+    v32 = malloc(v15);
     v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)v32;
     fread(v32, 1u, (size_t)pOutTex, pFile);
   }
@@ -2649,11 +2644,10 @@
     free(v19);
     if ( bUseLoResSprites && v8->pBits & 2 )
     {
-      v20 = pAllocator;
       pOutTex = (Texture *)(((signed int)v8->uSizeOfMaxLevelOfDetail >> 2)
                           + ((signed int)v8->uSizeOfMaxLevelOfDetail >> 4)
                           + ((signed int)v8->uSizeOfMaxLevelOfDetail >> 6));
-      v21 = pAllocator->AllocNamedChunk(v8->pLevelOfDetail0_prolly_alpha_mask, (unsigned int)pOutTex, v8->pName);
+      v21 = malloc((unsigned int)pOutTex);
       v22 = (size_t)pOutTex;
       v23 = &pContainer[v8->uTextureWidth * v8->uTextureHeight];
       v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)v21;
@@ -2675,19 +2669,18 @@
     else
     {
       v29 = *v16;
-      v20 = pAllocator;
-      v30 = pAllocator->AllocNamedChunk(v8->pLevelOfDetail0_prolly_alpha_mask, v29, v8->pName);
+      v30 = malloc(v29);
       v31 = v8->uDecompressedSize;
       v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)v30;
       memcpy(v30, pContainer, v31);
     }
     free((void *)pContainer);
   }
-  pAllocator->FreeChunk(v8->pPalette16);
-  pAllocator->FreeChunk(v8->pPalette24);
+  free(v8->pPalette16);
+  free(v8->pPalette24);
   if ( eTextureType == TEXTURE_24BIT_PALETTE )
   {
-    v33 = pAllocator->AllocNamedChunk(v8->pPalette24, 0x300u, v8->pName);
+    v33 = malloc(0x300);
     v8->pPalette24 = (unsigned __int8 *)v33;
     fread(v33, 1u, 0x300u, pFile);
   }
@@ -2696,7 +2689,7 @@
     v8->pPalette24 = 0;
     if ( eTextureType == TEXTURE_16BIT_PALETTE )
     {
-      v8->pPalette16 = (unsigned __int16 *)pAllocator->AllocNamedChunk(v8->pPalette16, 0x200u, v8->pName);
+      v8->pPalette16 = (unsigned __int16 *)malloc(0x200);
       v38 = 0;
       do
       {
@@ -2933,7 +2926,7 @@
     fseek(v0, 0, 2);
     v2 = ftell(v1);
     rewind(v1);
-    ptr_6A0D08 = pAllocator->AllocNamedChunk(ptr_6A0D08, v2, "LevelLod");
+    ptr_6A0D08 = malloc(v2);
     fread(ptr_6A0D08, v2, 1u, v1);
     fseek(v1, v2 - 6, 0);
     DstBuf = 0;
@@ -2947,7 +2940,7 @@
 //----- (0046080D) --------------------------------------------------------
 void  sub_46080D()
 {
-  pAllocator->FreeChunk(ptr_6A0D08);
+  free(ptr_6A0D08);
   ptr_6A0D08 = 0;
   _6A0D0C_txt_lod_loading = 0;
 }
--- a/Monsters.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Monsters.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -8,7 +8,6 @@
 
 #include "Monsters.h"
 #include "FrameTableInc.h"
-#include "Allocator.h"
 #include "LOD.h"
 #include "texts.h"
 #include "mm7_data.h"
@@ -385,7 +384,7 @@
     v4 = Argsa;
   }
   v2->uNumMonsters = v4;
-  v5 = pAllocator->AllocNamedChunk(v2->pMonsters, 152 * v4, "Mon Race");
+  v5 = malloc(152 * v4);
   v2->pMonsters = (MonsterDesc *)v5;
   if ( !v5 )
     Error("MonsterRaceListStruct::load - Out of Memory!");
@@ -468,7 +467,7 @@
   Assert(uNumMonsters);
   Assert(!num_mm8_monsters);
 
-  pMonsters = (MonsterDesc *)pAllocator->AllocNamedChunk(pMonsters, sizeof(MonsterDesc) * uNumMonsters, "Mon Race");
+  pMonsters = (MonsterDesc *)malloc(sizeof(MonsterDesc) * uNumMonsters);
   memcpy(pMonsters, (char *)data_mm7 + 4, num_mm7_monsters * sizeof(MonsterDesc));
   for (uint i = 0; i < num_mm6_monsters; ++i)
   {
@@ -582,7 +581,7 @@
     FrameTableTxtLine parsed_field;
 
     if ( pMonstersTXT_Raw )
-        pAllocator->FreeChunk(pMonstersTXT_Raw);
+        free(pMonstersTXT_Raw);
     pMonstersTXT_Raw = NULL;
     pMonstersTXT_Raw = (char *)pEvents_LOD->LoadRaw("monsters.txt", 0);
     strtok(pMonstersTXT_Raw, "\r");
--- a/NPC.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/NPC.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -2,7 +2,6 @@
 #define _CRT_SECURE_NO_WARNINGS
 #endif
 
-#include "Allocator.h"
 #include "texts.h"
 #include "LOD.h"
 #include "Autonotes.h"
@@ -248,7 +247,7 @@
 	int decode_step;
 
 	if (pNPCTextTXT_Raw)
-		pAllocator->FreeChunk(pNPCTextTXT_Raw);
+		free(pNPCTextTXT_Raw);
 	pNPCTextTXT_Raw =NULL;
 	pNPCTextTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctext.txt", 0);
 	strtok(pNPCTextTXT_Raw, "\r");
@@ -286,7 +285,7 @@
 		}
 
 	if (pNPCTopicTXT_Raw)
-		pAllocator->FreeChunk(pNPCTopicTXT_Raw);
+		free(pNPCTopicTXT_Raw);
 	pNPCTopicTXT_Raw =NULL;
 	pNPCTopicTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctopic.txt", 0);
 	strtok(pNPCTopicTXT_Raw, "\r");
@@ -324,7 +323,7 @@
 		}
 
 	if (pNPCDistTXT_Raw)
-		pAllocator->FreeChunk(pNPCDistTXT_Raw);
+		free(pNPCDistTXT_Raw);
 	pNPCDistTXT_Raw = NULL;
 	pNPCDistTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcdist.txt", 0);
 	strtok(pNPCDistTXT_Raw, "\r");
@@ -381,7 +380,7 @@
 
 	if (pNPCDistTXT_Raw)
 		{
-		pAllocator->FreeChunk(pNPCDistTXT_Raw);
+		free(pNPCDistTXT_Raw);
 		pNPCDistTXT_Raw = NULL;
 		}
 	}
@@ -716,23 +715,23 @@
 //----- (00477266) --------------------------------------------------------
 void NPCStats::Release()
 	{
-	pAllocator->FreeChunk(pNPCTopicTXT_Raw);
+	free(pNPCTopicTXT_Raw);
 	pNPCTopicTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCTextTXT_Raw);
+	free(pNPCTextTXT_Raw);
 	pNPCTextTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCNewsTXT_Raw);
+	free(pNPCNewsTXT_Raw);
 	pNPCNewsTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCProfTXT_Raw);
+	free(pNPCProfTXT_Raw);
 	pNPCProfTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCNamesTXT_Raw);
+	free(pNPCNamesTXT_Raw);
 	pNPCNamesTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCDataTXT_Raw);
+	free(pNPCDataTXT_Raw);
 	pNPCDataTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCDistTXT_Raw);
+	free(pNPCDistTXT_Raw);
 	pNPCDistTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNPCGreetTXT_Raw);
+	free(pNPCGreetTXT_Raw);
 	pNPCGreetTXT_Raw = NULL;
-	pAllocator->FreeChunk(pNCPGroupTXT_Raw);
+	free(pNCPGroupTXT_Raw);
 	pNCPGroupTXT_Raw = NULL;
 	}
 
@@ -936,7 +935,7 @@
 	int decode_step;
 
 	if ( pAwardsTXT_Raw )
-		pAllocator->FreeChunk(pAwardsTXT_Raw);
+		free(pAwardsTXT_Raw);
 	pAwardsTXT_Raw = NULL;
 	pAwardsTXT_Raw = (char *)pEvents_LOD->LoadRaw("awards.txt", 0);
 	strtok(pAwardsTXT_Raw, "\r");
@@ -990,7 +989,7 @@
 	int decode_step;
 
 	if ( pScrollsTXT_Raw )
-		pAllocator->FreeChunk(pScrollsTXT_Raw);
+		free(pScrollsTXT_Raw);
 	pScrollsTXT_Raw = NULL;
 	pScrollsTXT_Raw = (char *)pEvents_LOD->LoadRaw("scroll.txt", 0);
 	strtok(pScrollsTXT_Raw, "\r");
@@ -1039,7 +1038,7 @@
 	int decode_step;
 
 	if ( pMerchantsTXT_Raw )
-		pAllocator->FreeChunk(pMerchantsTXT_Raw);
+		free(pMerchantsTXT_Raw);
 	pMerchantsTXT_Raw = NULL;
 	pMerchantsTXT_Raw = (char *)pEvents_LOD->LoadRaw("merchant.txt", 0);
 	strtok(pMerchantsTXT_Raw, "\r");
@@ -1103,7 +1102,7 @@
 	int decode_step;
 
 	if ( pTransitionsTXT_Raw )
-		pAllocator->FreeChunk(pTransitionsTXT_Raw);
+		free(pTransitionsTXT_Raw);
 	pTransitionsTXT_Raw = NULL;
 	pTransitionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("trans.txt", 0);
 	strtok(pTransitionsTXT_Raw, "\r");
@@ -1153,7 +1152,7 @@
 	int decode_step;
 
 	if ( pAutonoteTXT_Raw )
-		pAllocator->FreeChunk(pAutonoteTXT_Raw);
+		free(pAutonoteTXT_Raw);
 	pAutonoteTXT_Raw = 0;
 	pAutonoteTXT_Raw = (char *)pEvents_LOD->LoadRaw("autonote.txt", 0);
 	strtok(pAutonoteTXT_Raw, "\r");
@@ -1238,7 +1237,7 @@
 	int decode_step;
 
 	if ( pQuestsTXT_Raw )
-		pAllocator->FreeChunk(pQuestsTXT_Raw);
+		free(pQuestsTXT_Raw);
 	pQuestsTXT_Raw = NULL;
 	pQuestsTXT_Raw = (char *)pEvents_LOD->LoadRaw("quests.txt", 0);
 	strtok(pQuestsTXT_Raw, "\r");
--- a/ObjectList.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/ObjectList.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -2,7 +2,6 @@
 #include "mm7_data.h"
 #include "Sprites.h"
 #include "FrameTableInc.h"
-#include "Allocator.h"
 #include "ErrorHandling.h"
 
 //----- (0042EB42) --------------------------------------------------------
@@ -67,7 +66,7 @@
   Assert(uNumObjects);
   Assert(!num_mm8_objs);
 
-  pObjects = (ObjectDesc *)pAllocator->AllocNamedChunk(pObjects, uNumObjects * sizeof(ObjectDesc), "Obj Descrip");
+  pObjects = (ObjectDesc *)malloc(uNumObjects * sizeof(ObjectDesc));
   memcpy(pObjects, (char *)data_mm7 + 4, num_mm7_objs * sizeof(ObjectDesc));
   for (uint i = 0; i < num_mm6_objs; ++i)
   {
@@ -142,7 +141,7 @@
   int Argsb; // [sp+470h] [bp+8h]@15
 
   v2 = this;
-  pAllocator->FreeChunk(this->pObjects);
+  free(this->pObjects);
   v3 = 0;
   v2->pObjects = 0;
   v2->uNumObjects = 0;
@@ -167,7 +166,7 @@
     v3 = 0;
   }
   v2->uNumObjects = v5;
-  v6 = pAllocator->AllocNamedChunk(v2->pObjects, 56 * v5, "Obj Descrip");
+  v6 = malloc(56 * v5);
   v2->pObjects = (ObjectDesc *)v6;
   if ( v6 == (void *)v3 )
     Error("ObjectDescriptionList::load - Out of Memory!");
--- a/Outdoor.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Outdoor.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -11,7 +11,6 @@
 #include "Party.h"
 #include "SpriteObject.h"
 #include "LOD.h"
-#include "Allocator.h"
 #include "PaletteManager.h"
 #include "GUIProgressBar.h"
 #include "AudioPlayer.h"
@@ -116,10 +115,7 @@
 
   if (bRedraw)
   {
-    Software_ResetNewEdges();
     sub_487DA9();
-    ptr_80C97C_Surfs = pSurfs;
-    ptr_80C978_Edges = pEdges;
   }
   if ( pParty->uCurrentMinute != pOutdoor->uLastSunlightUpdateMinute )
     pOutdoor->UpdateSunlightVectors();
@@ -333,14 +329,6 @@
   return result;
 }
 
-//----- (0048901B) --------------------------------------------------------
-bool OutdoorLocation::Release2()
-{
-  Release();
-  pOutdoorCamera->ReleaseSoftwareDrawBuffers();
-  return true;
-}
-
 
 
 char foot_travel_destinations[15][4] =
@@ -813,22 +801,22 @@
 {
   if (pHeightmap)
   {
-    pAllocator->FreeChunk(this->pHeightmap);
+    free(this->pHeightmap);
     pHeightmap = nullptr;
   }
   if (pTilemap)
   {
-    pAllocator->FreeChunk(pTilemap);
+    free(pTilemap);
     pTilemap = nullptr;
   }
   if (pAttributemap)
   {
-    pAllocator->FreeChunk(pAttributemap);
+    free(pAttributemap);
     pAttributemap = nullptr;
   }
   if (pDmap)
   {
-    pAllocator->FreeChunk(pDmap);
+    free(pDmap);
     pDmap = nullptr;
   }
 
@@ -1134,12 +1122,11 @@
 //----- (0047CD44) --------------------------------------------------------
 bool OutdoorLocationTerrain::Initialize()
 {
-
-  pHeightmap= (unsigned __int8 *)pAllocator->AllocNamedChunk(pHeightmap, 0x4000u, "HMAP");//height map
-  pTilemap = (unsigned __int8 *)pAllocator->AllocNamedChunk(pTilemap, 0x4000u, "TMAP");//tile map
-  pAttributemap = (unsigned __int8 *)pAllocator->AllocNamedChunk(pAttributemap, 0x4000u, "AMAP");//êàðòà àòðèáóòîâ
-  pDmap=(struct DMap *)pAllocator->AllocNamedChunk(pDmap, 0x8000u, "DMAP");
-  if ( pHeightmap && pTilemap && pAttributemap && pDmap )
+  pHeightmap = (unsigned __int8 *)malloc(0x4000u);//height map
+  pTilemap = (unsigned __int8 *)malloc(0x4000u);//tile map
+  pAttributemap = (unsigned __int8 *)malloc(0x4000u);//êàðòà àòðèáóòîâ
+  pDmap = (struct DMap *)malloc(0x8000u);
+  if (pHeightmap && pTilemap && pAttributemap && pDmap )
     return true;
   else
     return false;
@@ -1168,28 +1155,28 @@
   v1->pTileTypes[3].tileset = Tileset_RoadGrassCobble;
   v1->LoadTileGroupIds();
   v1->LoadRoadTileset();
-  pAllocator->FreeChunk(v1->pBModels);
-  pAllocator->FreeChunk(v1->pSpawnPoints);
+  free(v1->pBModels);
+  free(v1->pSpawnPoints);
   v1->pBModels = 0;
   v1->pSpawnPoints = 0;
   v1->pTerrain.Initialize();
   v1->pTerrain.ZeroLandscape();
   v1->pTerrain.FillDMap(0, 0, 128, 128);
-  pAllocator->FreeChunk(v1->pCmap);
+  free(v1->pCmap);
   v1->pCmap = 0;
-  v2 = pAllocator->AllocNamedChunk(0, 0x8000u, "CMAP");
+  v2 = malloc(0x8000u);
   v3 = v1->pOMAP;
   v1->pCmap = v2;
-  pAllocator->FreeChunk(v3);
+  free(v3);
   v1->pOMAP = 0;
-  v4 = pAllocator->AllocNamedChunk(0, 0x10000u, "OMAP");
+  v4 = malloc(0x10000u);
   v1->pOMAP = (unsigned int *)v4;
   memset(v4, 0, 0x10000u);
   v5 = v1->pFaceIDLIST;
   v1->numFaceIDListElems = 0;
-  pAllocator->FreeChunk(v5);
+  free(v5);
   v1->pFaceIDLIST = 0;
-  v6 = pAllocator->AllocNamedChunk(0, 2u, "IDLIST");
+  v6 = malloc(2);
   v1->pFaceIDLIST = (unsigned __int16 *)v6;
   *(short *)v6 = 0;
   strcpy(v1->pSkyTextureName, pDefaultSkyTexture.data());
@@ -1229,14 +1216,14 @@
     for (uint i = 0; i < uNumBModels; ++i)
       pBModels[i].Release();
 
-    pAllocator->FreeChunk(pBModels);
+    free(pBModels);
     pBModels = nullptr;
     uNumBModels = 0;
   }
 
   if (pSpawnPoints)
   {
-    pAllocator->FreeChunk(pSpawnPoints);
+    free(pSpawnPoints);
     pSpawnPoints = nullptr;
   }
   uNumSpawnPoints = 0;
@@ -1245,22 +1232,22 @@
 
   if (pCmap)
   {
-    pAllocator->FreeChunk(pCmap);
+    free(pCmap);
     pCmap = nullptr;
   }
   if (pOMAP)
   {
-    pAllocator->FreeChunk(pOMAP);
+    free(pOMAP);
     pOMAP = nullptr;
   }
   if (pFaceIDLIST)
   {
-    pAllocator->FreeChunk(pFaceIDLIST);
+    free(pFaceIDLIST);
     pFaceIDLIST = nullptr;
   }
   if (pTerrainNormals)
   {
-    pAllocator->FreeChunk(pTerrainNormals);
+    free(pTerrainNormals);
     pTerrainNormals = nullptr;
   }
 }
@@ -1479,23 +1466,23 @@
     fseek((FILE *)v7, v121, 0);
     fread(pTerrain.pAttributemap, 1u, 0x4000u, (FILE *)v7);
     pTerrain._47C80A(0, 0, 128, 128);
-    pAllocator->FreeChunk(ptr_D4);
+    free(ptr_D4);
     ptr_D4 = 0;
-    v9 = pAllocator->AllocNamedChunk(0, 0x8000u, "CMAP");
+    v9 = malloc(0, 0x8000u, "CMAP");
     v108 = (int)pOMAP;
     ptr_D4 = v9;
-    pAllocator->FreeChunk((void *)v108);
+    free((void *)v108);
     pOMAP = 0;
-    v10 = pAllocator->AllocNamedChunk(0, 0x10000u, "OMAP");
+    v10 = malloc(0, 0x10000u, "OMAP");
     v108 = 0;
     pOMAP = (unsigned int *)v10;
     fseek((FILE *)v7, v136, v108);
     fread(&uNumTerrainNormals, 4u, 1u, (FILE *)v7);
     fread(pTerrainSomeOtherData, 1u, 0x20000u, (FILE *)v7);
     fread(pTerrainNormalIndices, 1u, 0x10000u, (FILE *)v7);
-    pTerrainNormals = (Vec3_float_ *)pAllocator->AllocNamedChunk(pTerrainNormals, 12 * uNumTerrainNormals, "TerNorm");
+    pTerrainNormals = (Vec3_float_ *)malloc(pTerrainNormals, 12 * uNumTerrainNormals, "TerNorm");
     fread(pTerrainNormals, 1u, 12 * uNumTerrainNormals, (FILE *)v7);
-    v11 = pAllocator->AllocNamedChunk(pBModels, 188 * uNumBModels, "BDdata");
+    v11 = malloc(pBModels, 188 * uNumBModels, "BDdata");
     v108 = 0;
     pBModels = (BSPModel *)v11;
     fseek((FILE *)v7, v122, v108);
@@ -1516,13 +1503,13 @@
         sprintfex(FileName, "%s", v108);
         v13 = pBModels;
         v138 = 0;
-        pBModels[v12].pVertices.pVertices = (Vec3_int_ *)pAllocator->AllocNamedChunk(v13[v12].pVertices.pVertices, 12 * v13[v12].pVertices.uNumVertices,
+        pBModels[v12].pVertices.pVertices = (Vec3_int_ *)malloc(v13[v12].pVertices.pVertices, 12 * v13[v12].pVertices.uNumVertices,
                                                                FileName);
-        pBModels[v12].pFaces = (ODMFace *)pAllocator->AllocNamedChunk(pBModels[v12].pFaces, 308 * pBModels[v12].uNumFaces,
+        pBModels[v12].pFaces = (ODMFace *)malloc(pBModels[v12].pFaces, 308 * pBModels[v12].uNumFaces,
                                                 FileName);
-        pBModels[v12].pFacesOrdering = (unsigned __int16 *)pAllocator->AllocNamedChunk(pBModels[v12].pFacesOrdering,
+        pBModels[v12].pFacesOrdering = (unsigned __int16 *)malloc(pBModels[v12].pFacesOrdering,
                                                                  2 * pBModels[v12].uNumFaces, FileName);
-        v14 = pAllocator->AllocNamedChunk(pBModels[v12].pNodes, 8 * pBModels[v12].uNumNodes, FileName);
+        v14 = malloc(pBModels[v12].pNodes, 8 * pBModels[v12].uNumNodes, FileName);
         v15 = pBModels;
         v108 = (int)File;
         v15[v12].pNodes = (BSPNode *)v14;
@@ -1652,10 +1639,10 @@
     fread(pChests, 0x14CCu, uNumChests, (FILE *)v22);
     fseek((FILE *)v22, v128, 0);
     fread(&field_DC, 4u, 1u, (FILE *)v22);
-    pAllocator->FreeChunk(pFaceIDLIST);
+    free(pFaceIDLIST);
     v32 = field_DC;
     pFaceIDLIST = 0;
-    v33 = pAllocator->AllocNamedChunk(0, 2 * v32, "IDLIST");
+    v33 = malloc(0, 2 * v32, "IDLIST");
     v108 = (int)v22;
     pFaceIDLIST = (unsigned __int16 *)v33;
     fread(v33, 2u, field_DC, (FILE *)v108);
@@ -1663,7 +1650,7 @@
     fread(pOMAP, 4u, 0x4000u, (FILE *)v22);
     fseek((FILE *)v22, v130, 0);
     fread(&uNumSpawnPoints, 4u, 1u, (FILE *)v22);
-    pSpawnPoints = (SpawnPointMM7 *)pAllocator->AllocNamedChunk(pSpawnPoints, 24 * uNumSpawnPoints, "Spawn");
+    pSpawnPoints = (SpawnPointMM7 *)malloc(pSpawnPoints, 24 * uNumSpawnPoints, "Spawn");
     fseek((FILE *)v22, v131, 0);
     fread(pSpawnPoints, 0x18u, uNumSpawnPoints, (FILE *)v22);
     fseek((FILE *)v22, v132, 0);
@@ -1803,10 +1790,10 @@
   //v108 = (int)ptr_D4;
   if (pCmap)
   {
-    pAllocator->FreeChunk(pCmap);
+    free(pCmap);
     pCmap = nullptr;
   }
-  pCmap = pAllocator->AllocNamedChunk(0, 0x8000u, "CMAP");
+  pCmap = malloc(0x8000);
   pTerrain.FillDMap(0, 0, 128, 128);
 
   pGameLoadingUI_ProgressBar->Progress();
@@ -1820,7 +1807,7 @@
   //v43 = (char *)v43 + 65536;
 
   //pFilename = (char *)(12 * uNumTerrainNormals);
-  pTerrainNormals = (Vec3_float_ *)pAllocator->AllocNamedChunk(pTerrainNormals, 12 * uNumTerrainNormals, "TerNorm");
+  pTerrainNormals = (Vec3_float_ *)malloc(sizeof(Vec3_float_) * uNumTerrainNormals);
   memcpy(pTerrainNormals, pSrc, 12 * uNumTerrainNormals);
   pSrc += 12 * uNumTerrainNormals;
   //v44 = (char *)v43 + (int)pFilename;
@@ -1832,10 +1819,10 @@
 
   //v107 = 188 * v45;
   //v106 = (char *)pBModels;
-  //v46 = (BSPModel *)pAllocator->AllocNamedChunk(v106, 188 * v45, "BDdata");
+  //v46 = (BSPModel *)malloc(v106, 188 * v45, "BDdata");
   //v47 = uNumBModels;
   memcpy(&uNumBModels, pSrc, 4);
-  pBModels = (BSPModel *)pAllocator->AllocNamedChunk(pBModels, 188 * uNumBModels, "BDdata");
+  pBModels = (BSPModel *)malloc(188 * uNumBModels);
   //pFilename = (char *)(188 * v47);
   memcpy(pBModels, pSrc + 4, 188 * uNumBModels);
   pSrc += 4 + 188 * uNumBModels;
@@ -1864,7 +1851,7 @@
       //v106 = (char *)v50->pVertices.pVertices;
     assert(sizeof(Vec3_int_) == 12);
     uint verticesSize = model->pVertices.uNumVertices * sizeof(Vec3_int_);
-    model->pVertices.pVertices = (Vec3_int_ *)pAllocator->AllocNamedChunk(model->pVertices.pVertices, verticesSize, "");
+    model->pVertices.pVertices = (Vec3_int_ *)malloc(verticesSize);
     memcpy(model->pVertices.pVertices, pSrc, verticesSize);
     pSrc += verticesSize;
       //v51 = &pBModels[v48];
@@ -1873,7 +1860,7 @@
       //v106 = (char *)v51->pFaces;
     assert(sizeof(ODMFace) == 308);
     uint facesSize = model->uNumFaces * sizeof(ODMFace);
-    model->pFaces = (ODMFace *)pAllocator->AllocNamedChunk(model->pFaces, facesSize, "");
+    model->pFaces = (ODMFace *)malloc(facesSize);
     memcpy(model->pFaces, pSrc, facesSize);
     pSrc += facesSize;
       //v52 = &pBModels[v48];
@@ -1881,7 +1868,7 @@
       //v107 = 2 * v52->uNumFaces;
       //v106 = (char *)v52->pFacesOrdering;
     uint facesOrderingSize = model->uNumFaces * sizeof(short);
-    model->pFacesOrdering = (unsigned __int16 *)pAllocator->AllocNamedChunk(model->pFacesOrdering, facesOrderingSize, "");
+    model->pFacesOrdering = (unsigned __int16 *)malloc(facesOrderingSize);
     memcpy(model->pFacesOrdering, pSrc, facesOrderingSize);
     pSrc += facesOrderingSize;
       //v53 = &pBModels[v48];
@@ -1890,7 +1877,7 @@
       //v106 = (char *)v53->pNodes;
     assert(sizeof(BSPNode) == 8);
     uint nodesSize = model->uNumNodes * sizeof(BSPNode);
-    model->pNodes = (BSPNode *)pAllocator->AllocNamedChunk(model->pNodes, nodesSize, "");
+    model->pNodes = (BSPNode *)malloc(nodesSize);
     memcpy(model->pNodes, pSrc, nodesSize);
     pSrc += nodesSize;
       //v54 = &pBModels[v48];
@@ -2013,14 +2000,14 @@
   //v108 = (int)pFaceIDLIST;
   if (pFaceIDLIST)
   {
-    pAllocator->FreeChunk(pFaceIDLIST);
+    free(pFaceIDLIST);
     pFaceIDLIST = nullptr;
   }
   //v66 = field_DC;
   //pFaceIDLIST = 0;
-  //v67 = pAllocator->AllocNamedChunk(0, 2 * v66, "IDLIST");
+  //v67 = malloc(0, 2 * v66, "IDLIST");
   uint faceIDListSize = 2 * numFaceIDListElems;
-  pFaceIDLIST = (unsigned short *)pAllocator->AllocNamedChunk(0, faceIDListSize, "IDLIST");
+  pFaceIDLIST = (unsigned short *)malloc(faceIDListSize);
   //v68 = field_DC;
   //pFaceIDLIST = (unsigned __int16 *)v67;
   //pFilename = (char *)(2 * v68);
@@ -2031,15 +2018,15 @@
   pGameLoadingUI_ProgressBar->Progress();
 
   //v108 = (int)pOMAP;
-  //pAllocator->FreeChunk((void *)v108);
+  //free((void *)v108);
   //pOMAP = 0;
   if (pOMAP)
   {
-    pAllocator->FreeChunk(pOMAP);
+    free(pOMAP);
     pOMAP = nullptr;
   }
-  //v69 = pAllocator->AllocNamedChunk(0, 0x10000u, "OMAP");
-  pOMAP = (unsigned int *)pAllocator->AllocNamedChunk(0, 0x10000, "OMAP");
+  //v69 = malloc(0, 0x10000u, "OMAP");
+  pOMAP = (unsigned int *)malloc(0x10000);
   //v108 = 65536;
   //pOMAP = (unsigned int *)v69;
   memcpy(pOMAP, pSrc, 65536);
@@ -2057,7 +2044,7 @@
   //v106 = (char *)pSpawnPoints;
   assert(sizeof(SpawnPointMM7) == 24);
   uint spawnPointsSize = uNumSpawnPoints * sizeof(SpawnPointMM7);
-  pSpawnPoints = (SpawnPointMM7 *)pAllocator->AllocNamedChunk(pSpawnPoints, spawnPointsSize, "Spawn");
+  pSpawnPoints = (SpawnPointMM7 *)malloc(spawnPointsSize);
   //v72 = uNumSpawnPoints;
   //pSpawnPoints = v71;
   memcpy(pSpawnPoints, pSrc + 4, spawnPointsSize);
--- a/Outdoor.h	Tue Sep 10 18:43:52 2013 +0200
+++ b/Outdoor.h	Tue Sep 10 21:07:07 2013 +0200
@@ -156,7 +156,7 @@
   unsigned int GetTileTexture(int sX, int sZ);
   int GetHeightOnTerrain(int sX, int sZ);
   bool Initialize(const char *pFilename, int File, size_t uRespawnInterval, int thisa);
-  bool Release2();
+  //bool Release2();
   bool GetTravelDestination(signed int sPartyX, signed int sPartyZ, char *pOut, signed int a5);
   void MessWithLUN();
   void UpdateSunlightVectors();
--- a/OutdoorCamera.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/OutdoorCamera.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -6,7 +6,6 @@
 #include "Viewport.h"
 #include "Math.h"
 #include "mm7_data.h"
-#include "Allocator.h"
 
 //----- (00481E55) --------------------------------------------------------
 void OutdoorCamera::Project(unsigned int uNumVertices)
@@ -71,33 +70,4 @@
   camera_rotation_y_int_cosine = stru_5C6E00->Cos(pIndoorCamera->sRotationY);
   camera_rotation_x_int_sine   = stru_5C6E00->Sin(pIndoorCamera->sRotationX);
   camera_rotation_x_int_cosine = stru_5C6E00->Cos(pIndoorCamera->sRotationX);
-}
-//----- (00486A28) --------------------------------------------------------
-void OutdoorCamera::AllocSoftwareDrawBuffers()
-{
-  if ( !this || !pSpans )
-  {
-    ReleaseSoftwareDrawBuffers();
-    pSpans = (Span *)pAllocator->AllocNamedChunk(pSpans, 0x493E0u, "SPANS");
-    pEdges = (Edge *)pAllocator->AllocNamedChunk(pEdges, 0x4C2C0u, "EDGES");
-    pSurfs = (Surf *)pAllocator->AllocNamedChunk(pSurfs, 0x11940u, "SURFS");
-    pNewEdges = (Edge *)pAllocator->AllocNamedChunk(pNewEdges, 0x6180u, "NEWEDGES");
-    memset(pSpans, 0, 0x493E0u);
-    memset(pEdges, 0, 0x4C2C0u);
-    memset(pSurfs, 0, 0x11940u);
-    memset(pNewEdges, 0, 0x6180u);
-  }
-}
-
-//----- (00486AFC) --------------------------------------------------------
-void OutdoorCamera::ReleaseSoftwareDrawBuffers()
-{
-  pAllocator->FreeChunk(pSpans);
-  pAllocator->FreeChunk(pEdges);
-  pAllocator->FreeChunk(pSurfs);
-  pAllocator->FreeChunk(pNewEdges);
-  pSpans = 0;
-  pEdges = 0;
-  pSurfs = 0;
-  pNewEdges = 0;
 }
\ No newline at end of file
--- a/OutdoorCamera.h	Tue Sep 10 18:43:52 2013 +0200
+++ b/OutdoorCamera.h	Tue Sep 10 21:07:07 2013 +0200
@@ -23,8 +23,8 @@
 
   void _485F64();
   void RotationToInts();
-  void AllocSoftwareDrawBuffers();
-  void ReleaseSoftwareDrawBuffers();
+  //void AllocSoftwareDrawBuffers();
+  //void ReleaseSoftwareDrawBuffers();
 
   static void Project(unsigned int uNumVertices);
   //static bool _487355();
--- a/Overlays.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Overlays.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -7,7 +7,6 @@
 #include "Overlays.h"
 #include "Sprites.h"
 #include "FrameTableInc.h"
-#include "Allocator.h"
 #include "IconFrameTable.h"
 #include "Time.h"
 #include "Party.h"
@@ -193,7 +192,7 @@
   Assert(uNumOverlays);
   Assert(!num_mm8_overlays);
 
-  pOverlays = (OverlayDesc *)pAllocator->AllocNamedChunk(pOverlays, uNumOverlays * sizeof(OverlayDesc), "Ovl Des.");
+  pOverlays = (OverlayDesc *)malloc(uNumOverlays * sizeof(OverlayDesc));
   memcpy(pOverlays,                                       (char *)data_mm7 + 4, num_mm7_overlays * sizeof(OverlayDesc));
   memcpy(pOverlays + num_mm7_overlays,                    (char *)data_mm6 + 4, num_mm6_overlays * sizeof(OverlayDesc));
   memcpy(pOverlays + num_mm6_overlays + num_mm7_overlays, (char *)data_mm8 + 4, num_mm8_overlays * sizeof(OverlayDesc));
@@ -223,7 +222,7 @@
   unsigned int Argsa; // [sp+308h] [bp+8h]@3
 
   v2 = this;
-  pAllocator->FreeChunk(this->pOverlays);
+  free(this->pOverlays);
   v3 = 0;
   v2->pOverlays = 0;
   v2->uNumOverlays = 0;
@@ -249,7 +248,7 @@
   }
   v6 = v2->pOverlays;
   v2->uNumOverlays = v5;
-  v7 = pAllocator->AllocNamedChunk(v6, 8 * v5, "Ovl Des.");
+  v7 = malloc(8 * v5);
   v2->pOverlays = (OverlayDesc *)v7;
   if ( v7 == (void *)v3 )
     Error("OverlayDescriptionList::load - Out of Memory!");
--- a/Render.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Render.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -26,7 +26,6 @@
 #include "ObjectList.h"
 #include "SpriteObject.h"
 #include "DecorationList.h"
-#include "Allocator.h"
 #include "OSInfo.h"
 #include "Actor.h"
 #include "Log.h"
@@ -2018,7 +2017,7 @@
   Render *v1; // esi@1
 
   v1 = this;
-  pAllocator->FreeChunk(this->pDefaultZBuffer);
+  free(this->pDefaultZBuffer);
   v1->pD3DBitmaps.Release();
   v1->pD3DSprites.Release();
   Release();
@@ -2318,7 +2317,7 @@
       fwrite(&header2.pitch, 2u, 1u, v6);
       fwrite(&header2.palette_info, 2u, 1u, v6);
       fwrite(v15, 0x3Au, 1u, v6);
-      ptr = pAllocator->AllocNamedChunk(0, 3 * var38 + 6, 0);
+      ptr = malloc(3 * var38 + 6);
       if ( v29 > 0 )
       {
         v7 = v30;
@@ -2391,7 +2390,7 @@
         pRenderer->EndScene();
       }
 
-      pAllocator->FreeChunk(ptr);
+      free(ptr);
       fclose(v6);
     }
   }
@@ -2515,7 +2514,7 @@
       fwrite(&v39, 2u, 1u, v7);
       fwrite(&v40, 2u, 1u, v7);
       fwrite(&v16, 0x3Au, 1u, v7);
-      ptr = pAllocator->AllocNamedChunk(0, 3 * v25 + 6, 0);
+      ptr = malloc(3 * v25 + 6);
       if ( (signed int)a1 > 0 )
       {
         v8 = v43;
@@ -2587,7 +2586,7 @@
       {
         pRenderer->EndScene();
       }
-      pAllocator->FreeChunk(ptr);
+      free(ptr);
       fclose(v7);
     }
   }
@@ -2682,7 +2681,7 @@
   memcpy(v8, &v18, 0x3Au);
   v9 = (char *)v8 + 58;
 
-  lineRGB = (char*)pAllocator->AllocNamedChunk(0, 3 * (wight + 2), 0);
+  lineRGB = (char*)malloc(3 * (wight + 2));
   if ( heidth > 0 )
   {
     v10 = pitch;
@@ -2743,7 +2742,7 @@
       v10 = pitch;
     }
   }
-  pAllocator->FreeChunk(lineRGB);
+  free(lineRGB);
   *(int *)packed_size = (char *)v9 - data_buff;
  
 }
@@ -2814,7 +2813,7 @@
     fwrite(&header2.pitch, 2u, 1u, v7);
     fwrite(&header2.palette_info, 2u, 1u, v7);
     fwrite(v14, 0x3Au, 1u, v7);
-    ptr = pAllocator->AllocNamedChunk(0, 3 * a4 + 6, 0);
+    ptr = malloc(3 * a4 + 6);
     if ( a5 > 0 )
     {
       v8 = v24;
@@ -2877,7 +2876,7 @@
         v8 = v24;
       }
     }
-    pAllocator->FreeChunk(ptr);
+    free(ptr);
     result = (FILE *)fclose(v7);
   }
   return result;
@@ -2982,7 +2981,7 @@
   if (!pDefaultZBuffer)
   {
     pDefaultZBuffer = pActiveZBuffer = nullptr;
-    pDefaultZBuffer = pActiveZBuffer = (int *)pAllocator->AllocNamedChunk(0, 0x12C000, "Z Buf.");
+    pDefaultZBuffer = pActiveZBuffer = (int *)malloc(0x12C000);
     memset32(pActiveZBuffer, 0xFFFF0000, 0x4B000u); //    // inlined Render::ClearActiveZBuffer  (mm8::004A085B)
   }
 }
@@ -3335,11 +3334,10 @@
   }
   bWindowMode = 0;
   pParty->uFlags |= 2u;
-  LODWORD(flt_6BE3A0) = 0x3F0CCCCDu;
+  LODWORD(flt_6BE3A0) = 0x3F0CCCCDu;  __debugbreak(); // replace with actual float
   pViewport->_4C02F8(36044);
   return v15 != 0;
 }
-// 6BE3A0: using guessed type float flt_6BE3A0;
 
 //----- (004A05F3) --------------------------------------------------------
 bool Render::SwitchToWindow(HWND hWnd)
@@ -8494,11 +8492,11 @@
 //----- (004524D8) --------------------------------------------------------
 HWLTexture *RenderHWLContainer::LoadTexture(const char *pName, int bMipMaps)
 {
-  int v11; // eax@13
-  int v12; // ecx@13
+  //int v11; // eax@13
+  //int v12; // ecx@13
   void *v13; // eax@13
-  unsigned __int8 v14; // zf@13
-  unsigned __int8 v15; // sf@13
+  //unsigned __int8 v14; // zf@13
+  //unsigned __int8 v15; // sf@13
   int v16; // esi@14
   int v17; // ecx@16
   int v18; // esi@16
@@ -8569,18 +8567,14 @@
     else
       fread(pTex->pPixels, 2, pTex->uWidth * pTex->uHeight, pFile);
 
-    if ( field_61A94_scale_hwls_to_half )     //is it even possible to ever get here? field_61A94_scale_hwls_to_half is only set to zero
-    {
-      v11 = pTex->uHeight / 2;
-      v12 = pTex->uWidth / 2;
-      pTex->uHeight = v11;
-      pTex->uWidth = v12;
-      v13 = new unsigned __int16[v12 * v11];
+    if ( scale_hwls_to_half )
+    {
+      pTex->uHeight /= 2;
+      pTex->uWidth /= 2;
+      v13 = new unsigned __int16[pTex->uWidth * pTex->uHeight];
       v28 = 0;
-      v14 = pTex->uHeight == 0;
-      v15 = (pTex->uHeight & 0x80000000u) != 0;
       v26 = (unsigned __int16 *)v13;
-      if ( !(v15 | v14) )
+      if ( pTex->uHeight > 0 )
       {
         v16 = pTex->uWidth;
         v27 = 1;
@@ -8600,7 +8594,8 @@
               LOWORD(v20) = *(unsigned short *)(v21 + 2);
               LOWORD(v21) = *(unsigned short *)v21;
               v23 = pDestb++ + v18;
-              v26[v23] = sub_452442(*(unsigned short *)v22, *(unsigned short *)(v22 + 2), v21, v20);
+              extern unsigned int __fastcall _452442_color_cvt(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4);
+              v26[v23] = _452442_color_cvt(*(unsigned short *)v22, *(unsigned short *)(v22 + 2), v21, v20);
               v16 = pTex->uWidth;
             }
             while (pDestb < pTex->uWidth);
@@ -8614,13 +8609,6 @@
       pTex->pPixels = v26;
     }
     return pTex;
-    //result = pTex;
-//  }
-//  else
-//  {
-//LABEL_8:
-//    return nullptr;
-//  }
 }
 
 //----- (0045271F) --------------------------------------------------------
@@ -8668,7 +8656,7 @@
   this->uDataOffset = 0;
   memset(&this->uNumItems, 0, 0x61A84u);
   this->uNumItems = 0;
-  this->field_61A94_scale_hwls_to_half = 0;
+  this->scale_hwls_to_half = false;
 }
 
 //----- (0045237F) --------------------------------------------------------
--- a/Render.h	Tue Sep 10 18:43:52 2013 +0200
+++ b/Render.h	Tue Sep 10 21:07:07 2013 +0200
@@ -177,7 +177,7 @@
   char *pSpriteNames[50000];
   int pSpriteOffsets[50000];
   int bDumpDebug;
-  int field_61A94_scale_hwls_to_half;
+  int scale_hwls_to_half;
 };
 #pragma pack(pop)
 
--- a/SaveLoad.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/SaveLoad.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -22,7 +22,6 @@
 #include "stru123.h"
 #include "texts.h"
 #include "Log.h"
-#include "Allocator.h"
 #include "VideoPlayer.h"
 
 #include "mm7_data.h"
@@ -617,7 +616,7 @@
 
   if ( pVideoPlayer->AnyMovieLoaded() )
     pVideoPlayer->Unload();
-  pSave = pAllocator->AllocNamedChunk(0, 1000000, 0);
+  pSave = malloc(1000000);
   pNew_LOD->CloseWriteFile();
   remove("data\\new.lod");
 
@@ -666,7 +665,7 @@
     pParty->sRotationY = 512;
     SaveGame(1, 1);
   }
-  pAllocator->FreeChunk(pSave);
+  free(pSave);
 }
 //----- (0045E03A) --------------------------------------------------------
 unsigned short * MakeScreenshot( signed int width, signed int height )
--- a/Spells.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Spells.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -6,7 +6,6 @@
 
 #include "Spells.h"
 #include "Overlays.h"
-#include "Allocator.h"
 #include "LOD.h"
 #include "texts.h"
 
@@ -301,7 +300,7 @@
 	char* tmp_pos;
 
 	if ( pSpellsTXT_Raw )
-		pAllocator->FreeChunk(pSpellsTXT_Raw);
+		free(pSpellsTXT_Raw);
 	pSpellsTXT_Raw = NULL;
 
 	pSpellsTXT_Raw = (char *)pEvents_LOD->LoadRaw("spells.txt", 0);
--- a/Sprites.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Sprites.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -5,7 +5,6 @@
 #include <string.h>
 #include <algorithm>
 
-#include "Allocator.h"
 #include "Sprites.h"
 #include "PaletteManager.h"
 #include "LOD.h"
@@ -33,7 +32,7 @@
   v1 = this;
   if ( this->pSpriteSFrames )
   {
-    pAllocator->FreeChunk(this->pSpriteSFrames);
+    free(this->pSpriteSFrames);
     v1->pSpriteSFrames = 0;
   }
   v1->uNumSpriteFrames = 0;
@@ -389,10 +388,10 @@
   uNumSpriteFrames = num_mm6_frames + num_mm7_frames + num_mm8_frames;
   uNumEFrames = num_mm6_eframes + num_mm7_eframes + num_mm8_eframes;
 
-  pSpriteSFrames = (SpriteFrame *)pAllocator->AllocNamedChunk(pSpriteSFrames, uNumSpriteFrames * sizeof(SpriteFrame), "S Frames");
-  pSpriteEFrames = (__int16 *)pAllocator->AllocNamedChunk(pSpriteEFrames,     uNumSpriteFrames * sizeof(short), "E Frames");
+  pSpriteSFrames = (SpriteFrame *)malloc(uNumSpriteFrames * sizeof(SpriteFrame));
+  pSpriteEFrames = (__int16 *)malloc(uNumSpriteFrames * sizeof(short));
 
-  pSpritePFrames = (SpriteFrame **)pAllocator->AllocNamedChunk(pSpritePFrames, 4 * uNumSpriteFrames, "P Frames");
+  pSpritePFrames = (SpriteFrame **)malloc(4 * uNumSpriteFrames);
 
   auto mm7_frames_size = num_mm7_frames * sizeof(SpriteFrame);
   memcpy(pSpriteSFrames, (char *)data_mm7 + 8, mm7_frames_size);
@@ -495,9 +494,9 @@
     v4 = Argsa;
   }
   v2->uNumSpriteFrames = v4;
-  v2->pSpriteSFrames = (SpriteFrame *)pAllocator->AllocNamedChunk(v2->pSpriteSFrames, 60 * v4, "S Frames");
-  v2->pSpriteEFrames = (__int16 *)pAllocator->AllocNamedChunk(  v2->pSpriteEFrames, 2 * v2->uNumSpriteFrames,   "E Frames");
-  v2->pSpritePFrames = (SpriteFrame **)pAllocator->AllocNamedChunk(  v2->pSpritePFrames, 4 * v2->uNumSpriteFrames, "P Frames");
+  v2->pSpriteSFrames = (SpriteFrame *)malloc(60 * v4);
+  v2->pSpriteEFrames = (__int16 *)malloc(2 * v2->uNumSpriteFrames);
+  v2->pSpritePFrames = (SpriteFrame **)malloc(4 * v2->uNumSpriteFrames);
   if ( v2->pSpriteSFrames )
   {
     v6 = File;
--- a/StorylineTextTable.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/StorylineTextTable.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -6,7 +6,6 @@
 #include <string.h>
 
 #include "LOD.h"
-#include "allocator.h"
 #include "texts.h"
 #include "StorylineTextTable.h"
 
@@ -26,7 +25,7 @@
 	int decode_step;
 
 	if ( pHistoryTXT_Raw )
-		pAllocator->FreeChunk(pHistoryTXT_Raw);
+		free(pHistoryTXT_Raw);
 	pHistoryTXT_Raw = NULL;
 	pHistoryTXT_Raw = (char *)pEvents_LOD->LoadRaw("history.txt", 0);
 	strtok(pHistoryTXT_Raw, "\r");
--- a/Texture.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Texture.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -6,7 +6,6 @@
 
 #include "Texture.h"
 #include "FrameTableInc.h"
-#include "Allocator.h"
 #include "LOD.h"
 #include "PaletteManager.h"
 #include "Render.h"
@@ -274,7 +273,7 @@
   Assert(sNumTextures);
   Assert(!num_mm8_frames);
 
-  pTextures = (TextureFrame *)pAllocator->AllocNamedChunk(pTextures, sNumTextures * sizeof(TextureFrame), "Txt Frames");
+  pTextures = (TextureFrame *)malloc(sNumTextures * sizeof(TextureFrame));
 
   memcpy(pTextures,                                   (char *)data_mm7 + 4, num_mm7_frames * sizeof(TextureFrame));
   memcpy(pTextures + num_mm7_frames,                  (char *)data_mm6 + 4, num_mm6_frames * sizeof(TextureFrame));
@@ -402,9 +401,9 @@
 		__debugbreak();
 	}
 	
-	  pAllocator->FreeChunk(pLevelOfDetail0_prolly_alpha_mask);
-      pAllocator->FreeChunk(pPalette16);
-      pAllocator->FreeChunk(pPalette24);
+	  free(pLevelOfDetail0_prolly_alpha_mask);
+      free(pPalette16);
+      free(pPalette24);
     
 
     pLevelOfDetail0_prolly_alpha_mask = nullptr;
@@ -460,11 +459,11 @@
   if ( DstBuf.uDecompressedSize )
   {
     v5 = malloc(DstBuf.uDecompressedSize);
-    uSourceLena = pAllocator->AllocNamedChunk(0, DstBuf.uTextureSize, DstBuf.pName);
+    uSourceLena = malloc(DstBuf.uTextureSize);
     fread(uSourceLena, 1u, Count, File);
     zlib::MemUnzip(v5, &DstBuf.uDecompressedSize, uSourceLena, DstBuf.uTextureSize);
     DstBuf.uTextureSize = DstBuf.uDecompressedSize;
-    pAllocator->FreeChunk(uSourceLena);
+    free(uSourceLena);
   }
   else
   {
@@ -548,11 +547,11 @@
   if ( DstBuf.uDecompressedSize )
   {
     Str1a = (char *)malloc(DstBuf.uDecompressedSize);
-    v6 = pAllocator->AllocNamedChunk(0, DstBuf.uTextureSize, DstBuf.pName);
+    v6 = malloc(DstBuf.uTextureSize);
     fread(v6, 1u, Count, File);
     zlib::MemUnzip(Str1a, &DstBuf.uDecompressedSize, v6, DstBuf.uTextureSize);
     DstBuf.uTextureSize = DstBuf.uDecompressedSize;
-    pAllocator->FreeChunk(v6);
+    free(v6);
   }
   else
   {
@@ -575,18 +574,18 @@
   {
     if ( mode )
       goto LABEL_14;
-    pAllocator->FreeChunk(v10);
+    free(v10);
   }
   if ( !mode )
   {
-    v11 = pAllocator->AllocNamedChunk(v3->pPixels, 2 * v3->uNumPixels + 4, "16bit PCX");
+    v11 = malloc(2 * v3->uNumPixels + 4);
     goto LABEL_16;
   }
 LABEL_14:
   if ( mode != 2 )
     goto LABEL_17;
   v11 = malloc(2 * v3->uNumPixels + 4);
-  *(unsigned int *)&v3->field_20 |= 1u;
+  v3->_allocation_flags |= 1u;
 LABEL_16:
   v3->pPixels = (unsigned __int16 *)v11;
 LABEL_17:
@@ -1147,20 +1146,17 @@
       {
         if ( pPixels )
         {
-          pAllocator->FreeChunk(pPixels);
+          free(pPixels);
           pPixels = 0;
         }
-        pPixels = (unsigned __int16 *)pAllocator->AllocNamedChunk(
-                                            pPixels,
-                                            2 * uNumPixels + 4,
-                                            pName);
+        pPixels = (unsigned __int16 *)malloc(2 * uNumPixels + 4);
       }
       else
       {
         if ( mode != 1 && mode == 2 )
         {
           pPixels = (unsigned __int16 *)malloc((uNumPixels + 2) * sizeof(unsigned __int16));
-          field_20 |= 1;
+          _allocation_flags |= 1;
         }
       }
 
@@ -1310,14 +1306,14 @@
   void *v3; // [sp-4h] [bp-Ch]@1
 
   v1 = this;
-  v2 = (this->field_20 & 1) == 0;
+  v2 = (this->_allocation_flags & 1) == 0;
   v3 = this->pPixels;
   this->pName[0] = 0;
   if ( v2 )
-    pAllocator->FreeChunk(v3);
+    free(v3);
   else
     free(v3);
-  *(unsigned int *)&v1->field_20 = 0;
+  v1->_allocation_flags = 0;
   v1->pPixels = 0;
   v1->uNumPixels = 0;
   v1->uHeight = 0;
@@ -1394,14 +1390,14 @@
   if ( v12 )
   {
     if ( v3->pPixels )
-      pAllocator->FreeChunk(v3->pPixels);
-    v13 = pAllocator->AllocNamedChunk(v3->pPixels, 2 * v3->uNumPixels + 4, v3->pName);
+      free(v3->pPixels);
+    v13 = malloc(2 * v3->uNumPixels + 4);
     goto LABEL_16;
   }
   if ( a3 != 1 && a3 == 2 )
   {
-    v13 = operator new(4 * v11 + 8);
-    *(unsigned int *)&v3->field_20 |= 1u;
+    v13 = malloc(4 * v11 + 8);
+    v3->_allocation_flags |= 1u;
 LABEL_16:
     v3->pPixels = (unsigned __int16 *)v13;
   }
@@ -1641,8 +1637,7 @@
   uWidth = 0;
   field_1A = 0;
   field_18 = 0;
-  field_20 = 0;
-  field_22 = 0;
+  _allocation_flags = 0;
 }
 //----- (0044E1EC) --------------------------------------------------------
 int TextureFrameTable::FromFileTxt(const char *Args)
@@ -1702,7 +1697,7 @@
   }
   v5 = v2->pTextures;
   v2->sNumTextures = v4;
-  v6 = pAllocator->AllocNamedChunk(v5, 20 * v4, "Txt Frames");
+  v6 = malloc(20 * v4);
   v2->pTextures = (TextureFrame *)v6;
   if ( !v6 )
     Error("CTextureFrameTable::load - Out of Memory!");
--- a/Texture.h	Tue Sep 10 18:43:52 2013 +0200
+++ b/Texture.h	Tue Sep 10 21:07:07 2013 +0200
@@ -24,8 +24,7 @@
   __int16 field_1A;
   __int16 field_1C;
   __int16 field_1E;
-  __int16 field_20;
-  __int16 field_22;
+  int _allocation_flags; // & 1 - malloc, else custom allocator
   unsigned __int16 *pPixels;
 };
 #pragma pack(pop)
--- a/TileTable.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/TileTable.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -8,7 +8,6 @@
 
 #include "TileFrameTable.h"
 #include "FrameTableInc.h"
-#include "Allocator.h"
 #include "PaletteManager.h"
 #include "LOD.h"
 
@@ -20,7 +19,7 @@
 {
   if ( pTiles )
   {
-    pAllocator->FreeChunk(pTiles);
+    free(pTiles);
     pTiles = nullptr;
   }
   sNumTiles = 0;
@@ -119,7 +118,7 @@
   Assert(sNumTiles);
   Assert(!num_mm8_tiles);
 
-  pTiles = (TileDesc *)pAllocator->AllocNamedChunk(pTiles, sNumTiles * sizeof(TileDesc), "Tile Descrip");
+  pTiles = (TileDesc *)malloc(sNumTiles * sizeof(TileDesc));
   memcpy(pTiles,                                 (char *)data_mm7 + 4, num_mm7_tiles * sizeof(TileDesc));
   memcpy(pTiles + num_mm7_tiles,                 (char *)data_mm6 + 4, num_mm6_tiles * sizeof(TileDesc));
   memcpy(pTiles + num_mm6_tiles + num_mm7_tiles, (char *)data_mm8 + 4, num_mm8_tiles * sizeof(TileDesc));
@@ -227,7 +226,7 @@
       ++v4;
   }
   v2->sNumTiles = v4;
-  v5 = pAllocator->AllocNamedChunk(v2->pTiles, 26 * v4, "Tile Descrip");
+  v5 = malloc(26 * v4);
   v2->pTiles = (TileDesc *)v5;
   if ( !v5 )
     Error("TileTable::Load - Out of Memory!");
--- a/UI/Books/UIMapBook.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/Books/UIMapBook.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -13,7 +13,6 @@
 #include "..\..\AudioPlayer.h"
 #include "..\..\Outdoor.h"
 #include "..\..\LOD.h"
-#include "..\..\Allocator.h"
 #include "..\..\Viewport.h"
 #include "..\..\Math.h"
 #include "..\..\texts.h"
--- a/UI/Books/UINotesBooks.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/Books/UINotesBooks.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -12,7 +12,6 @@
 #include "..\..\Party.h"
 #include "..\..\AudioPlayer.h"
 #include "..\..\LOD.h"
-#include "..\..\Allocator.h"
 #include "..\..\Viewport.h"
 #include "..\..\Awards.h"
 #include "..\..\Autonotes.h"
--- a/UI/Books/UISpellBook.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/Books/UISpellBook.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -11,7 +11,6 @@
 #include "..\..\Party.h"
 #include "..\..\AudioPlayer.h"
 #include "..\..\LOD.h"
-#include "..\..\Allocator.h"
 #include "..\..\Viewport.h"
 #include "..\..\texts.h"
 #include "..\..\mm7_data.h"
@@ -45,13 +44,13 @@
 //----- (00411597) --------------------------------------------------------
 void OnCloseBook()
 {
-  pAllocator->FreeChunk(pSpellFont);
+  free(pSpellFont);
   pSpellFont = nullptr;
-  pAllocator->FreeChunk(pBookFont);
+  free(pBookFont);
   pBookFont = nullptr;
-  pAllocator->FreeChunk(pBook2Font);
+  free(pBook2Font);
   pBook2Font = nullptr;
-  pAllocator->FreeChunk(pAutonoteFont);
+  free(pAutonoteFont);
   pAutonoteFont = nullptr;
   pTexture_mapbordr->Release();
   pAudioPlayer->PlaySound(SOUND_CloseBook, 0, 0, -1, 0, 0, 0, 0);
--- a/UI/UIBooks.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/UIBooks.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -9,7 +9,7 @@
 #include "..\GUIFont.h"
 #include "..\AudioPlayer.h"
 #include "..\LOD.h"
-#include "..\Allocator.h"
+
 #include "..\mm7_data.h"
 
 //----- (00413CC6) --------------------------------------------------------
@@ -90,7 +90,7 @@
     do
     {
       pNextButton = pGUIWindow_CurrentMenu->pControlsHead->pNext;
-      pAllocator->FreeChunk(pGUIWindow_CurrentMenu->pControlsHead);
+      free(pGUIWindow_CurrentMenu->pControlsHead);
       pGUIWindow_CurrentMenu->pControlsHead = pNextButton;
     }
     while ( pNextButton );
--- a/UI/UICharacter.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/UICharacter.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -19,10 +19,9 @@
 #include "..\Awards.h"
 #include "..\CastSpellInfo.h"
 #include "..\texts.h"
+#include "..\Mouse.h"
+
 #include "..\mm7_data.h"
-#include "..\Mouse.h"
-#include "..\Allocator.h"
-
 
 int bRingsShownInCharScreen; // 5118E0
 
@@ -2736,7 +2735,7 @@
       if ( BYTE1(i->field_1C) & 0x80 )
       {
         i->Release();
-        pAllocator->FreeChunk(i);
+        free(i);
       }
     }
     for ( j = pGUIWindow_CurrentMenu->pControlsHead; j; j = j->pNext )
--- a/UI/UIMainMenu.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/UIMainMenu.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -10,7 +10,6 @@
 #include "..\AudioPlayer.h"
 #include "..\Render.h"
 #include "..\LOD.h"
-#include "..\Allocator.h"
 #include "..\PaletteManager.h"
 #include "..\IconFrameTable.h"
 #include "..\texts.h"
@@ -290,13 +289,12 @@
         pHeight = pFont2->GetStringHeight2(pFont, v1, &a2, 0, 1);
         pTexture2.uHeight = pHeight + 2 * a2.uFrameHeight;
         pTexture2.uNumPixels = (signed __int16)pTexture2.uWidth * (signed __int16)pTexture2.uHeight;
-        v7 = pAllocator->AllocNamedChunk(pTexture2.pPixels, 2 * pTexture2.uNumPixels, "scrollermap");
+        v7 = malloc(2 * pTexture2.uNumPixels);//, "scrollermap");
         pNumPixels = pTexture2.uNumPixels;
         pTexture2.pPixels = (unsigned __int16 *)v7;
         teal = TargetColor(0, 0xFFu, 0xFFu);
         fill_pixels_fast(teal, pTexture2.pPixels, pNumPixels);
-        pTexture2.field_20 = 0;
-        pTexture2.field_22 = 0;
+        pTexture2._allocation_flags = 0;
         pColor1 = TargetColor(0x70u, 0x8Fu, 0xFEu);
         pColor2 = TargetColor(0xECu, 0xE6u, 0x9Cu);
         pString = (char *)operator new(2 * pSize);
@@ -340,9 +338,9 @@
             }
             while ( GetCurrentMenuID() == MENU_CREDITSPROC );
             pAudioPlayer->_4AA258(1);
-            pAllocator->FreeChunk(ptr);
-            pAllocator->FreeChunk(pFontQuick);
-            pAllocator->FreeChunk(pFontCChar);
+            free(ptr);
+            free(pFontQuick);
+            free(pFontCChar);
             pWindow_MainMenu->Release();
             pIcons_LOD->RemoveTexturesPackFromTextureList();
             pTexture.Release();
--- a/UI/UIPartyCreation.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/UIPartyCreation.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -12,7 +12,6 @@
 #include "..\AudioPlayer.h"
 #include "..\Render.h"
 #include "..\LOD.h"
-#include "..\Allocator.h"
 #include "..\Time.h"
 #include "..\IconFrameTable.h"
 #include "..\texts.h"
@@ -631,7 +630,7 @@
 //----- (0049750E) --------------------------------------------------------
 void DeleteCCharFont()
 {
-  pAllocator->FreeChunk(pFontCChar);
+  free(pFontCChar);
   pFontCChar = 0;
 }
 //----- (00497526) --------------------------------------------------------
--- a/UI/UISaveLoad.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/UI/UISaveLoad.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -13,7 +13,6 @@
 #include "..\Render.h"
 #include "..\IndoorCamera.h"
 #include "..\LOD.h"
-#include "..\Allocator.h"
 #include "..\SaveLoad.h"
 #include "..\texts.h"
 
--- a/VideoPlayer.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/VideoPlayer.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -16,7 +16,6 @@
 #include "Render.h"
 #include "Party.h"
 #include "GUIWindow.h"
-#include "Allocator.h"
 #include "Time.h"
 #include "Log.h"
 #include "texts.h"
@@ -516,8 +515,8 @@
   ReadFile(hMagicVid, &uNumMagicVideoHeaders, 4, &NumberOfBytesRead, 0);
   pMagicVideoHeaders = 0;
   pMightVideoHeaders = 0;
-  pMightVideoHeaders = (MovieHeader *)pAllocator->AllocNamedChunk(0, 44 * uNumMightVideoHeaders + 2, 0);
-  pMagicVideoHeaders = (MovieHeader *)pAllocator->AllocNamedChunk(pMagicVideoHeaders, 44 * uNumMagicVideoHeaders + 2, 0);
+  pMightVideoHeaders = (MovieHeader *)malloc(sizeof(MovieHeader) * uNumMightVideoHeaders + 2);
+  pMagicVideoHeaders = (MovieHeader *)malloc(sizeof(MovieHeader) * uNumMagicVideoHeaders + 2);
   ReadFile(hMightVid, pMightVideoHeaders, 44 * uNumMightVideoHeaders, &NumberOfBytesRead, 0);
   ReadFile(hMagicVid, pMagicVideoHeaders, 44 * uNumMagicVideoHeaders, &NumberOfBytesRead, 0);
 }
--- a/Viewport.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/Viewport.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -62,10 +62,10 @@
 
 //----- (004C02F8) --------------------------------------------------------
 void Viewport::_4C02F8(int a2)
-    {
+{
     this->field_30 = a2;
     SetScreen(this->uScreen_TL_X, this->uScreen_TL_Y, this->uScreen_BR_X, this->uScreen_BR_Y);
-    }
+}
 
 //----- (004C0312) --------------------------------------------------------
 void Viewport::SetViewport( signed int sTL_X, signed int sTL_Y, signed int sBR_X, signed int sBR_Y )
--- a/_deleted.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/_deleted.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -12374,6 +12374,400 @@
   LOWORD(v2) = (a1 >> 5) & 0x7E0;
   return ((unsigned __int8)a1 >> 3) | v2 | v1;
 }
+//----- (00487DBE) --------------------------------------------------------
+void Software_ResetNewEdges()
+{
+  int v0; // ecx@1
+  Edge **v1; // eax@1
+  signed int v2; // eax@3
+
+  v0 = 0;
+  v1 = ptr_80CA10.data();
+  do
+  {
+    ++v0;
+    *((int *)&pNewEdges[v0] - 9) = (int)&defaultEdge;
+    *v1 = 0;
+    ++v1;
+  }
+  while ( (signed int)v1 < (signed int)&unk_80D190 );
+  v2 = 2000;
+  do
+  {
+    pSurfs->field_22 = 0;
+    --v2;
+  }
+  while ( v2 );
+}
+//----- (00486A28) --------------------------------------------------------
+void OutdoorCamera::AllocSoftwareDrawBuffers()
+{
+  if ( !this || !pSpans )
+  {
+    ReleaseSoftwareDrawBuffers();
+    pSpans = (Span *)malloc(pSpans, 0x493E0u, "SPANS");
+    pEdges = (Edge *)malloc(pEdges, 0x4C2C0u, "EDGES");
+    pSurfs = (Surf *)malloc(pSurfs, 0x11940u, "SURFS");
+    pNewEdges = (Edge *)malloc(pNewEdges, 0x6180u, "NEWEDGES");
+    memset(pSpans, 0, 0x493E0u);
+    memset(pEdges, 0, 0x4C2C0u);
+    memset(pSurfs, 0, 0x11940u);
+    memset(pNewEdges, 0, 0x6180u);
+  }
+}
+//----- (00486AFC) --------------------------------------------------------
+void OutdoorCamera::ReleaseSoftwareDrawBuffers()
+{
+  free(pSpans);
+  free(pEdges);
+  free(pSurfs);
+  free(pNewEdges);
+  pSpans = 0;
+  pEdges = 0;
+  pSurfs = 0;
+  pNewEdges = 0;
+}
+//----- (0048901B) --------------------------------------------------------
+bool OutdoorLocation::Release2()
+{
+  Release();
+  pOutdoorCamera->ReleaseSoftwareDrawBuffers();
+  return true;
+}
+
+struct Allocator
+{
+  static Allocator *Create() {static Allocator a; return &a;}
+
+  Allocator();
+  bool  Initialize(unsigned int uNumKBytes);
+  void *AllocNamedChunk(const void *pPrevPtrValue, unsigned int uSize, const char *pName);
+  void FreeChunk(void *ptr);
+  bool CreateFileDump(const char *a1);
+
+  void *pMemoryBuffers[6000];
+  unsigned int uMemoryBuffersSizes[6000];
+  char pMemoryBuffersNames[6000][12];
+  unsigned int uDumpsCount;
+  unsigned int uNumBuffersUsed;
+  void *pBigMemoryBuffer;
+  unsigned int uNextFreeOffsetInBigBuffer;
+  unsigned int uBigBufferSizeAligned;
+  unsigned int bBigBufferAllocated;
+  unsigned int bUseBigBuffer;
+  void *pBigBufferAligned;
+};
+#ifdef _MSC_VER
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include <string.h>
+#include <stdio.h>
+
+#include "Allocator.h"
+#include "ErrorHandling.h"
+
+#include "mm7_data.h"
+
+
+
+Allocator *pAllocator; // idb
+
+int aborting_app = false; // weak
+
+
+
+
+void __fastcall CheckMemoryAccessibility(void *pBase, DWORD uSize);
+
+
+
+//----- (00426755) --------------------------------------------------------
+void *Allocator::AllocNamedChunk(const void *pPrevPtrValue, unsigned int uSize, const char *pName)
+{
+  //Allocator *v4; // esi@1
+  unsigned int v5; // eax@7
+  void *result; // eax@8
+ // unsigned int *pNumBuffersUsed; // ebx@12
+  unsigned int v8; // edi@15
+  char v9; // zf@15
+  int v10; // eax@16
+  void **v11; // ebx@19
+  void *v12; // eax@22
+  unsigned int Size; // [sp+14h] [bp+Ch]@16
+
+  int aligned_size; 
+
+
+  if ( pPrevPtrValue && !aborting_app )
+	  AbortWithError();
+  if ( !bBigBufferAllocated && !aborting_app )
+	  AbortWithError();
+
+  if (!uSize)
+	  return 0;
+
+  if (((uSize & 0x80000000u) != 0) && !aborting_app)
+	  AbortWithError();
+
+  if (uNumBuffersUsed == 6000 && !aborting_app)
+	  AbortWithError();
+
+  ++uNumBuffersUsed;
+
+  if (!bUseBigBuffer)
+	  {
+	  pMemoryBuffers[uNumBuffersUsed] = malloc(uSize);
+	  if (pMemoryBuffers[uNumBuffersUsed])
+		  uMemoryBuffersSizes[uNumBuffersUsed] = uSize;
+	  else
+		  {
+		  if ( !aborting_app )
+			  AbortWithError();
+		  }
+	  }
+  else
+	  {
+
+	  aligned_size =(uSize&0xFFFFFFFC) + 4;
+
+	  if ((uNextFreeOffsetInBigBuffer +aligned_size) > uBigBufferSizeAligned)
+		  {
+		  printf("Id: %s  Size: %i", pName, aligned_size);
+		  CreateFileDump( "Memory");
+		  if ( !aborting_app )
+			  AbortWithError();
+		  }
+
+	  pMemoryBuffers[uNumBuffersUsed] = (char *)pBigMemoryBuffer + uNextFreeOffsetInBigBuffer;//(char *)(pBigBufferAligned) + uNextFreeOffsetInBigBuffer;
+	  uMemoryBuffersSizes[uNumBuffersUsed] =aligned_size;
+
+	  if (pName)
+		  strncpy(pMemoryBuffersNames[uNumBuffersUsed], pName, 11);
+	  uNextFreeOffsetInBigBuffer += aligned_size;
+	  }
+  return pMemoryBuffers[uNumBuffersUsed];
+}
+// 720018: using guessed type int aborting_app;
+
+
+
+//----- (004266CD) --------------------------------------------------------
+bool Allocator::Initialize(unsigned int uNumKBytes)
+{
+  if (bBigBufferAllocated)
+    return false;
+
+  if (!uNumKBytes)
+    return false;
+
+  pBigMemoryBuffer = malloc(uNumKBytes * 1024);
+  if (!pBigMemoryBuffer)
+    return false;
+
+  pBigBufferAligned = (void *)((unsigned int)(pBigMemoryBuffer) & 0xFFFF0000 + 4096);
+  //(char *)pBigMemoryBuffer + -((unsigned __int16)pBigMemoryBuffer & 0xFFF) + 4096;
+  uBigBufferSizeAligned = (uNumKBytes * 1024) - 4096;
+
+  uNumBuffersUsed = 0;
+  uNextFreeOffsetInBigBuffer = 0;
+
+  bUseBigBuffer = true;
+  return bBigBufferAllocated = true;
+}
+
+
+//----- (00426474) --------------------------------------------------------
+void Allocator::FreeChunk(void *ptr)
+{
+  Allocator *v2; // esi@1
+  unsigned int v3; // eax@5
+  signed int i; // edi@5
+  unsigned int v5; // eax@13
+  signed int v6; // ecx@16
+  signed int j; // edx@16
+  char v8; // zf@20
+
+ 
+  
+  unsigned int  uBuffindx; 
+  unsigned int indx;
+
+  if (ptr)
+	  {
+	  if ((!bBigBufferAllocated)&& (!aborting_app ))
+		  AbortWithError();
+	  for (indx = 0; indx <=uNumBuffersUsed; ++indx)
+		  if (pMemoryBuffers[indx] == ptr)	
+			  break;
+	  //if ((indx>uNumBuffersUsed)&& !aborting_app )
+		  //AbortWithError(); //to detect memory problems - uncomment
+	  if (!bUseBigBuffer)
+		  free(pMemoryBuffers[indx]);
+	  pMemoryBuffers[indx] = NULL;
+	  uMemoryBuffersSizes[indx] = 0;
+	  pMemoryBuffersNames[indx][0] = 0;
+	  if (indx == (uNumBuffersUsed-1))
+		  {
+		  if (indx>0)
+			  {
+			  uBuffindx = 0;
+			  for (j = 0; j < uNumBuffersUsed-1; ++j)
+				  {
+				  if (pMemoryBuffers[j])
+					  uBuffindx = j;
+				  }
+			  uNumBuffersUsed =  uBuffindx + 1;
+			  if (bUseBigBuffer)
+				  uNextFreeOffsetInBigBuffer = 
+				  ((long)((char*)pMemoryBuffers[uBuffindx] -(char*)pBigBufferAligned)+ uMemoryBuffersSizes[uBuffindx]);
+			  }
+		  else
+			  {
+			  uNumBuffersUsed = 0;
+			  uNextFreeOffsetInBigBuffer = 0;
+			  }
+		  }
+	  }
+}
+// 720018: using guessed type int aborting_app;
+
+
+
+//----- (00426429) --------------------------------------------------------
+Allocator::Allocator()
+{
+  Allocator *v1; // eax@1
+  signed int v2; // ecx@1
+  int v3; // edx@1
+
+  v1 = this;
+  v2 = 0;
+  v1->uBigBufferSizeAligned = 0;
+  v1->bBigBufferAllocated = 0;
+  v3 = (int)v1->pMemoryBuffersNames;
+  do
+  {
+    v1->pMemoryBuffers[v2] = 0;
+    v1->uMemoryBuffersSizes[v2] = 0;
+    *(char *)v3 = 0;
+    ++v2;
+    v3 += 12;
+  }
+  while ( v2 < 6000 );
+  v1->uDumpsCount = 0;
+}
+
+
+//----- (0042654C) --------------------------------------------------------
+bool Allocator::CreateFileDump(const char *a1)
+{
+  Allocator *v2; // esi@1
+  unsigned int v3; // ST44_4@1
+  FILE *v4; // eax@1
+  FILE *v5; // edi@1
+  bool result; // eax@2
+  unsigned int v7; // ecx@5
+  int v8; // edx@5
+  int v9; // eax@6
+  int v10; // eax@8
+  int v11; // ecx@8
+  signed int v12; // ebx@8
+  signed int v13; // ebx@10
+  struct _MEMORYSTATUS memstat; // [sp+8h] [bp-38h]@5
+  char Filename[20]; // [sp+28h] [bp-18h]@1
+  unsigned int *v16; // [sp+3Ch] [bp-4h]@11
+  int a1a; // [sp+48h] [bp+8h]@11
+
+  v2 = this;
+  v3 = this->uDumpsCount;
+  this->uDumpsCount = v3 + 1;
+  sprintf(Filename, "Mem%03i.txt", v3);
+  v4 = fopen(Filename, "w");
+  v5 = v4;
+  if ( v4 )
+  {
+    if ( a1 )
+      fprintf(v4, "%s\n\n", a1);
+    fprintf(v5, "Windows Memory Status");
+    GlobalMemoryStatus(&memstat);
+    fprintf(v5, "dwLength:         %d\n\n", memstat.dwLength);
+    fprintf(v5, "dwMemoryLoad:     %d\n", memstat.dwMemoryLoad);
+    fprintf(v5, "dwTotalPhys:      %d\n", memstat.dwTotalPhys);
+    fprintf(v5, "dwAvailPhys:      %d\n", memstat.dwAvailPhys);
+    fprintf(v5, "dwTotalPageFile:  %d\n", memstat.dwTotalPageFile);
+    fprintf(v5, "dwAvailPageFile:  %d\n", memstat.dwAvailPageFile);
+    fprintf(v5, "dwTotalVirtual:   %d\n", memstat.dwTotalVirtual);
+    fprintf(v5, "dwAvailVirtual:   %d\n\n\n", memstat.dwAvailVirtual);
+    v7 = v2->uNumBuffersUsed;
+    v8 = 0;
+    if ( (signed int)v7 > 0 )
+    {
+      v9 = (int)v2->uMemoryBuffersSizes;
+      do
+      {
+        v8 += *(int *)v9;
+        v9 += 4;
+        --v7;
+      }
+      while ( v7 );
+    }
+    v10 = 0;
+    v11 = (int)v2->uMemoryBuffersSizes;
+    v12 = 6000;
+    do
+    {
+      v10 += *(int *)v11;
+      v11 += 4;
+      --v12;
+    }
+    while ( v12 );
+    fprintf(v5, "Size: %i  %i  %i\n\n", v2->uNumBuffersUsed, v8, v10);
+    v13 = 0;
+    if ( (signed int)v2->uNumBuffersUsed > 0 )
+    {
+      v16 = v2->uMemoryBuffersSizes;
+      a1a = (int)v2->pMemoryBuffersNames;
+      do
+      {
+        fprintf(v5, "%10i %10i %s\n", v13, *v16, a1a);
+        a1a += 12;
+        ++v16;
+        ++v13;
+      }
+      while ( v13 < (signed int)v2->uNumBuffersUsed );
+    }
+    fclose(v5);
+    result = 0;
+  }
+  else
+  {
+    result = 1;
+  }
+  return result;
+}
+
+
+
+
+
+
+
+
+//----- (00426892) --------------------------------------------------------
+static void __fastcall CheckMemoryAccessibility(void *pBase, DWORD uSize)
+{
+  DWORD v2; // edi@1
+  DWORD i; // eax@1
+  struct _SYSTEM_INFO SystemInfo; // [sp+8h] [bp-24h]@1
+
+  v2 = uSize;
+  GetSystemInfo(&SystemInfo);
+  for ( i = 16 * SystemInfo.dwPageSize; i < v2; i += SystemInfo.dwPageSize )
+    ;
+}
+
+
 
 const wchar_t *UIMessage2String(UIMessageType msg)
 {
--- a/mm7_1.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/mm7_1.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -26,7 +26,6 @@
 #include "Overlays.h"
 #include "LOD.h"
 #include "Actor.h"
-#include "Allocator.h"
 #include "Events.h"
 #include "Viewport.h"
 #include "SpriteObject.h"
--- a/mm7_2.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/mm7_2.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -36,7 +36,6 @@
 #include "Arcomage.h"
 #include "LOD.h"
 #include "Actor.h"
-#include "Allocator.h"
 #include "Events.h"
 #include "Viewport.h"
 #include "FrameTableInc.h"
@@ -345,7 +344,7 @@
       do
       {
         v6 = v5->pNext;
-        pAllocator->FreeChunk(v5);
+        free(v5);
         v5 = v6;
       }
       while ( v6 );
@@ -792,7 +791,7 @@
   if ( pRenderer->pRenderD3D )
     pRenderer->pBeforePresentFunction();
   pRenderer->_49F1BC("MM7_Win.Pcx");
-  pAllocator->FreeChunk(pFont);
+  free(pFont);
   window_SpeakInHouse->Release();
   window_SpeakInHouse = 0;
   if ( v15 == (void *)2 )
@@ -2076,7 +2075,7 @@
 }
 
 //----- (00452442) --------------------------------------------------------
-unsigned int __fastcall sub_452442(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4)
+unsigned int __fastcall _452442_color_cvt(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4)
 {
   int v4; // ebx@0
   __int16 v5; // ST14_2@1
@@ -2369,7 +2368,7 @@
   int item_counter;
 
   if ( pMapStatsTXT_Raw )
-    pAllocator->FreeChunk(pMapStatsTXT_Raw);
+    free(pMapStatsTXT_Raw);
   pMapStatsTXT_Raw = NULL;
   pMapStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("MapStats.txt", 0);
   strtok(pMapStatsTXT_Raw, "\r");
@@ -2706,7 +2705,7 @@
   int item_counter;
 
   if ( pHostileTXT_Raw )
-    pAllocator->FreeChunk(pHostileTXT_Raw);
+    free(pHostileTXT_Raw);
   pHostileTXT_Raw = NULL;
   pHostileTXT_Raw = (char *)pEvents_LOD->LoadRaw("hostile.txt", 0);
   strtok(pHostileTXT_Raw, "\r");
@@ -2743,7 +2742,7 @@
 	  }
   if ( pHostileTXT_Raw)
   {
-    pAllocator->FreeChunk(pHostileTXT_Raw);
+    free(pHostileTXT_Raw);
     pHostileTXT_Raw = NULL;
   }
 }
@@ -3768,7 +3767,7 @@
 }
 
 //----- (00464479) --------------------------------------------------------
-void  ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows()
+void ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows()
 {
   int v0; // esi@9
 
@@ -3788,7 +3787,7 @@
   if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
     pIndoor->Release();
   else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor)
-    pOutdoor->Release2();
+    pOutdoor->Release();
 
   pAudioPlayer->StopChannels(-1, -1);
   pSoundList->_4A9D79(0);
@@ -3816,21 +3815,16 @@
 }
 
 //----- (00464761) --------------------------------------------------------
-void  Game_DeinitializeAndTerminate(int exitCode)
+void Game_DeinitializeAndTerminate(int exitCode)
 {
-  int v1; // esi@1
-  HANDLE v2; // eax@1
-
-  v1 = exitCode;
-  v2 = GetCurrentProcess();
-  SetPriorityClass(v2, 0x20u);
+  SetPriorityClass(GetCurrentProcess(), 0x20u);
   ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows();
   pGame->Deinitialize();
   pRenderer->Release2();
   if ( !DestroyWindow(hWnd) )
     GetLastError();
   hWnd = 0;
-  exit(v1);
+  exit(exitCode);
 }
 
 //----- (004647AB) --------------------------------------------------------
@@ -3851,13 +3845,13 @@
 // 6BE3A0: using guessed type float flt_6BE3A0;
 
 //----- (00464839) --------------------------------------------------------
-char  Is_out15odm_underwater()
+char Is_out15odm_underwater()
 {
   return _stricmp(pCurrentMapName, "out15.odm") == 0;
 }
 
 //----- (00464851) --------------------------------------------------------
-void  SetUnderwaterFog()
+void SetUnderwaterFog()
 {
   day_fogrange_1 = 50;
   day_fogrange_2 = 5000;
@@ -3900,7 +3894,7 @@
   if ( !_stricmp(pCurrentMapName, "out15.odm") )
   {
     bUnderwater = true;
-    pGame->uFlags2 |= 8u;
+    pGame->uFlags2 |= GAME_FLAGS_2_ALTER_GRAVITY;
   }
   pParty->floor_face_pid = 0;
   if ( _stricmp(Str1, "blv") )
@@ -3911,7 +3905,7 @@
   _461103_load_level_sub();
   if ( !_stricmp(pCurrentMapName, "d11.blv") || !_stricmp(pCurrentMapName, "d10.blv") )
   {
-    //spawning grounds & good analogue - no loot & exp from monsters
+    //spawning grounds & walls of mist - no loot & exp from monsters
 
     for (uint i = 0; i < uNumActors; ++i)
     {
@@ -4527,15 +4521,6 @@
       return false;
     }
   }
-  
-  pAllocator = Allocator::Create();
-  if (!pAllocator->Initialize(48 * 1024))
-  {
-    MessageBoxW(nullptr,
-                L"Unable to Allocate 48Mb of RAM",
-                L"More RAM Memory Required", MB_ICONEXCLAMATION);
-    return false;
-  }
 
   game_starting_year = 1168;
 
@@ -4992,6 +4977,7 @@
 
 void IntegrityTest()
 {
+  assert(sizeof(MovieHeader) == 44);
   assert(sizeof(SoundDesc_mm6) == 112);
   assert(sizeof(SoundDesc) == 120);
   assert(sizeof(OverlayDesc) == 8);
--- a/mm7_3.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/mm7_3.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -28,7 +28,6 @@
 #include "Overlays.h"
 #include "LOD.h"
 #include "Actor.h"
-#include "Allocator.h"
 #include "Events.h"
 #include "Viewport.h"
 #include "Math.h"
@@ -5505,14 +5504,14 @@
   //int v13; // [sp+8Ch] [bp-4h]@11
 
   pFilename = pLevelFilename;
-  thisa->AllocSoftwareDrawBuffers();
+  //thisa->AllocSoftwareDrawBuffers();
   pOutdoorCamera->_485F64();
   pWeather->bRenderSnow = false;
   pRenderer->ClearZBuffer(0, 479);
   thisa = (OutdoorCamera *)1;
   GetAlertStatus();
   if ( qword_A750D8 )
-    qword_A750D8 = 0i64;
+    qword_A750D8 = 0;
   v2 = pMapStats->GetMapInfo(pCurrentMapName);
   v3 = 0;
   if ( v2 )
@@ -6322,7 +6321,7 @@
 	int decode_step;
 
 	if ( p2DEventsTXT_Raw )
-		pAllocator->FreeChunk(p2DEventsTXT_Raw);
+		free(p2DEventsTXT_Raw);
 	p2DEventsTXT_Raw = NULL;
 	p2DEventsTXT_Raw = (char *)pEvents_LOD->LoadRaw("2dEvents.txt", 0);
 	strtok(p2DEventsTXT_Raw, "\r");
--- a/mm7_4.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/mm7_4.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -24,7 +24,6 @@
 #include "IndoorCamera.h"
 #include "LOD.h"
 #include "Actor.h"
-#include "Allocator.h"
 #include "Events.h"
 #include "Viewport.h"
 #include "FrameTableInc.h"
@@ -397,38 +396,12 @@
 }
 
 //----- (00487DA9) --------------------------------------------------------
-void  sub_487DA9()
+void sub_487DA9()
 {
   for (int i = 0; i < 20000; ++i)
     array_77EC08[i].field_108 = 0;
 }
 
-//----- (00487DBE) --------------------------------------------------------
-void Software_ResetNewEdges()
-{
-  int v0; // ecx@1
-  Edge **v1; // eax@1
-  signed int v2; // eax@3
-
-  v0 = 0;
-  v1 = ptr_80CA10.data();
-  do
-  {
-    ++v0;
-    *((int *)&pNewEdges[v0] - 9) = (int)&defaultEdge;
-    *v1 = 0;
-    ++v1;
-  }
-  while ( (signed int)v1 < (signed int)&unk_80D190 );
-  v2 = 2000;
-  do
-  {
-    pSurfs->field_22 = 0;
-    --v2;
-  }
-  while ( v2 );
-}
-
 //----- (0048A959) --------------------------------------------------------
 unsigned int ReplaceHSV(unsigned int uColor, float h_replace, float s_replace, float v_replace)
 {
@@ -1571,7 +1544,7 @@
   assert(uNumFrames);
   assert(!num_mm8_frames);
 
-  pFrames = (PlayerFrame *)pAllocator->AllocNamedChunk(pFrames, uNumFrames * sizeof(PlayerFrame), "P Frames");
+  pFrames = (PlayerFrame *)malloc(uNumFrames * sizeof(PlayerFrame));
   memcpy(pFrames,                                   (char *)data_mm7 + 4, num_mm7_frames * sizeof(PlayerFrame));
   memcpy(pFrames + num_mm7_frames,                  (char *)data_mm6 + 4, num_mm6_frames * sizeof(PlayerFrame));
   memcpy(pFrames + num_mm6_frames + num_mm7_frames, (char *)data_mm8 + 4, num_mm8_frames * sizeof(PlayerFrame));
@@ -1634,7 +1607,7 @@
     v4 = v25;
   }
   v2->uNumFrames = v4;
-  v5 = pAllocator->AllocNamedChunk(v2->pFrames, 10 * v4, "P Frames");
+  v5 = malloc(10 * v4);
   v2->pFrames = (PlayerFrame *)v5;
   if ( !v5 )
     Error("PlayerFrameTable::load - Out of Memory!");
--- a/mm7_data.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/mm7_data.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -1309,13 +1309,6 @@
 int dword_80AA20; // weak
 unsigned int uNumElementsIn80AA28;
 std::array<struct Polygon *, 2000> ptr_80AA28;
-struct Edge *pNewEdges;
-struct Surf *pSurfs;
-struct Edge *pEdges;
-struct Span *pSpans;
-struct Edge *ptr_80C978_Edges;
-struct Surf *ptr_80C97C_Surfs;
-std::array<struct Edge *, 480> ptr_80CA10;
 _UNKNOWN unk_80D190; // weak
 int dword_A74C88; // weak
 unsigned int uPlayerCreationUI_SkySliderPos;
--- a/mm7_data.h	Tue Sep 10 18:43:52 2013 +0200
+++ b/mm7_data.h	Tue Sep 10 21:07:07 2013 +0200
@@ -969,13 +969,6 @@
 extern int dword_80AA20; // weak
 extern unsigned int uNumElementsIn80AA28;
 extern std::array<struct Polygon *, 2000> ptr_80AA28;
-extern struct Edge *pNewEdges;
-extern struct Surf *pSurfs;
-extern struct Edge *pEdges;
-extern struct Span *pSpans;
-extern struct Edge *ptr_80C978_Edges;
-extern struct Surf *ptr_80C97C_Surfs;
-extern std::array<struct Edge *, 480> ptr_80CA10;
 extern _UNKNOWN unk_80D190; // weak
 extern int dword_A74C88; // weak
 extern unsigned int uPlayerCreationUI_SkySliderPos;
@@ -1147,7 +1140,6 @@
 int __fastcall _43AFE3_calc_spell_damage(int a1, int a2, signed int a3, int a4);
 void __fastcall sub_43B057(unsigned int uObjID, unsigned int uActorID, struct Vec3_int_ *pVelocity);
 void sub_43B1B0(signed int a1, unsigned int a2, struct Vec3_int_ *pVelocity, signed int a4);
-void Software_ResetNewEdges();
 void CharacterUI_LoadPaperdollTextures();
 int __fastcall GetItemTextureFilename(char *pOut, signed int item_id, int index, int shoulder);
 bool _43ED6F_check_party_races(bool b);
@@ -1372,7 +1364,6 @@
 void RespawnGlobalDecorations();
 bool __fastcall SpawnActor(unsigned int uMonsterID);
 int GetAlertStatus();
-unsigned int __fastcall sub_452442(unsigned __int16 a1, unsigned __int16 a2, int a3, int a4);
 int integer_sqrt(int val);
 int __fastcall MakeColorMaskFromBitDepth(int a1);
 void __fastcall fill_pixels_fast(unsigned int a1, unsigned __int16 *pPixels, unsigned int uNumPixels);
--- a/texts.cpp	Tue Sep 10 18:43:52 2013 +0200
+++ b/texts.cpp	Tue Sep 10 21:07:07 2013 +0200
@@ -3,7 +3,6 @@
 #endif
 
 #include <string.h>
-#include "Allocator.h"
 #include "LOD.h"
 #include "mm7_data.h"
 #include "texts.h"
@@ -80,7 +79,7 @@
 	bool string_end; // [sp+14h] [bp-4h]@4
 	//v0 = 0;
 	if (pGlobalTXT_Raw)
-		pAllocator->FreeChunk(pGlobalTXT_Raw);
+		free(pGlobalTXT_Raw);
 	pGlobalTXT_Raw = (char *)pEvents_LOD->LoadRaw("global.txt", 0);
 
 /*	strtok(pGlobalTXT_Raw, "\r");