DEADSOFTWARE

map: fix free random memory address
[d2df-sdl.git] / src / game / g_map.pas
index 5ce07e652b3a3d912d9dc66752e7f62fbd7b7e6b..85bffa627423e79bb74a14354eb8464edd4ac714 100644 (file)
@@ -20,7 +20,7 @@ interface
 
 uses
   SysUtils, Classes, mempool,
-  g_base, g_basic, MAPDEF, g_textures,
+  g_base, g_basic, MAPDEF,
   g_phys, utils, g_panel, g_grid, md5, binheap, xprofiler, xparser, xdynrec;
 
 type
@@ -152,6 +152,7 @@ const
   FLAG_RED  = 1;
   FLAG_BLUE = 2;
   FLAG_DOM  = 3;
+  FLAG_LAST = FLAG_DOM;
 
   FLAG_STATE_NONE     = 0;
   FLAG_STATE_NORMAL   = 1;
@@ -196,15 +197,6 @@ const
 
   GridDrawableMask = (GridTagBack or GridTagStep or GridTagWall or GridTagDoor or GridTagAcid1 or GridTagAcid2 or GridTagWater or GridTagFore);
 
-
-type
-  TBinHeapPanelDrawCmp = class
-  public
-    class function less (const a, b: TPanel): Boolean; inline;
-  end;
-
-  TBinHeapPanelDraw = specialize TBinaryHeapBase<TPanel, TBinHeapPanelDrawCmp>;
-
 var
   gWalls: TPanelArray;
   gRenderBackgrounds: TPanelArray;
@@ -225,7 +217,6 @@ var
   gdbg_map_use_accel_render: Boolean = true;
   gdbg_map_use_accel_coldet: Boolean = true;
   profMapCollision: TProfiler = nil; //WARNING: FOR DEBUGGING ONLY!
-  gDrawPanelList: TBinHeapPanelDraw = nil; // binary heap of all walls we have to render, populated by `g_Map_CollectDrawPanels()`
 
   gCurrentMap: TDynRecord = nil;
   gCurrentMapFileName: AnsiString = ''; // so we can skip texture reloading
@@ -517,14 +508,6 @@ begin
   end;
 end;
 
-
-class function TBinHeapPanelDrawCmp.less (const a, b: TPanel): Boolean; inline;
-begin
-  if (a.tag < b.tag) then begin result := true; exit; end;
-  if (a.tag > b.tag) then begin result := false; exit; end;
-  result := (a.arrIdx < b.arrIdx);
-end;
-
 var
   TextNameHash: THashStrInt = nil; // key: texture name; value: index in `Textures`
   BadTextNameHash: THashStrInt = nil; // set; so we won't spam with non-existing texture messages
@@ -976,11 +959,10 @@ end;
   function CreateTexture (RecName: AnsiString; Map: String; log: Boolean): Integer;
     var
       HName: AnsiString;
-      WAD, WADz: TWADFile;
+      WAD: TWADFile;
       WADName, ResName: String;
-      ResData, ReszData: Pointer;
-      ResLen, ReszLen: Integer;
-      cfg: TConfig;
+      ResData: Pointer;
+      ResLen: Integer;
       id: Integer;
   begin
     Result := -1;
@@ -1017,40 +999,13 @@ end;
           begin
             if WAD.GetResource(ResName, ResData, ResLen, log) then
             begin
-              if IsWadData(ResData, ResLen) then
-              begin
-                WADz := TWADFile.Create();
-                if WADz.ReadMemory(ResData, ResLen) then
-                begin
-                  if WADz.GetResource('TEXT/ANIM', ReszData, ReszLen) then
-                  begin
-                    cfg := TConfig.CreateMem(ReszData, ReszLen);
-                    if cfg <> nil then
-                    begin
-                      SetLength(Textures, Length(Textures) + 1);
-                      Textures[High(Textures)].TextureName := RecName;
-                      Textures[High(Textures)].FullName := WadName + ':' + ResName;
-                      Textures[High(Textures)].FramesCount := cfg.ReadInt('', 'framecount', 0);
-                      Textures[High(Textures)].Speed := cfg.ReadInt('', 'waitcount', 0);
-                      Result := High(Textures);
-                      TextNameHash.put(HName, result);
-                      cfg.Free;
-                    end;
-                    FreeMem(ReszData);
-                  end
-                end;
-                WADz.Free;
-              end
-              else
-              begin
-                SetLength(Textures, Length(Textures) + 1);
-                Textures[High(Textures)].FullName := WADName + ':' + ResName;
-                Textures[High(Textures)].TextureName := RecName;
-                Result := High(Textures);
-                TextNameHash.put(HName, result);
-              end;
+              SetLength(Textures, Length(Textures) + 1);
+              Textures[High(Textures)].FullName := WADName + ':' + ResName;
+              Textures[High(Textures)].TextureName := RecName;
+              Result := High(Textures);
+              TextNameHash.put(HName, result);
               FreeMem(ResData);
-            end
+            end;
           end;
           WAD.Free;
         end
@@ -2618,7 +2573,7 @@ begin
   tp := g_Map_PanelByGUID(pguid);
   if (tp = nil) then exit;
   tp.NextTexture(AnimLoop);
-  if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelTexture(pguid, AnimLoop);
+  if g_Game_IsServer and g_Game_IsNet then MH_SEND_PanelTexture(pguid);
 end;